Version 2.0.0-dev.30.0

Merge commit '6332160798ee4cfb8ce99683f3c315671832e61f' into dev
diff --git a/.packages b/.packages
index 1727351..f306f3b 100644
--- a/.packages
+++ b/.packages
@@ -101,7 +101,6 @@
 testing:pkg/testing/lib
 tuple:third_party/pkg/tuple/lib
 typed_data:third_party/pkg/typed_data/lib
-typed_mock:pkg/typed_mock/lib
 unittest:third_party/pkg/unittest/lib
 usage:third_party/pkg/usage/lib
 utf:third_party/pkg/utf/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index adfbe9a..d07d323 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -79,6 +79,7 @@
 
 * `dart:core`
 
+  * `BigInt` class added to support integers greater than 64-bits.
   * Deprecated the `proxy` annotation.
   * Added `Provisional` class and `provisional` field.
   * `RegExp` added static `escape` function.
@@ -123,19 +124,35 @@
     `ZERO` to `zero`.
 
 * `dart:developer`
+
+  * `Flow` class added.
   * `Timeline.startSync` and `Timeline.timeSync` now accept an optional
     parameter `flow` of type `Flow`. The `flow` parameter is used to generate
     flow timeline events that are enclosed by the slice described by
     `Timeline.{start,finish}Sync` and `Timeline.timeSync`.
 
+<!--
+Still need entries for all changes to dart:html since 1.x
+-->
+
 * `dart:io`
+
+  * `HttpStatus` added `UPGRADE_REQUIRED`.
+  * `IOOverrides` and `HttpOverrides` added to aid in writing tests that wish to
+    mock varios `dart:io` objects.
+  * `Platform.operatingSystemVersion` added  that gives a platform-specific
+    String describing the version of the operating system.
+  * `ProcessStartMode.INHERIT_STDIO` added, which allows a child process to
+    inherit the parent's stdio handles.
+  * `RawZLibFilter` added  for low-level access to compression and
+    decompression routines.
   * Unified backends for `SecureSocket`, `SecurityContext`, and
     `X509Certificate` to be consistent across all platforms. All
     `SecureSocket`, `SecurityContext`, and `X509Certificate` properties and
     methods are now supported on iOS and OSX.
-  * Deprecated `SecurityContext.alpnSupported` as ALPN is now supported on all
+  * `SecurityContext.alpnSupported` deprecated as ALPN is now supported on all
     platforms.
-  * Added `withTrustedRoots` named optional parameter to `SecurityContext`
+  * `SecurityContext`: added `withTrustedRoots` named optional parameter
     constructor, which defaults to false.
   * Added a `timeout` parameter to `Socket.connect`, `RawSocket.connect`,
     `SecureSocket.connect` and `RawSecureSocket.connect`. If a connection attempt
@@ -143,28 +160,33 @@
     will be thrown. Note: if the duration specified in `timeout` is greater than
     the OS level timeout, a timeout may occur sooner than specified in
     `timeout`.
-  * Added `Platform.operatingSystemVersion` that gives a platform-specific
-    String describing the version of the operating system.
-  * Added `RawZLibFilter` for low-level access to compression and
-    decompression routines.
-  * Added `IOOverrides` and `HttpOverrides` to aid in writing tests that wish to
-    mock varios `dart:io` objects.
-  * Added `Stdin.hasTerminal`, which is true if stdin is attached to a terminal.
-  * Added `ProcessStartMode.INHERIT_STDIO`, which allows a child process to
-    inherit the parent's stdio handles.
+  * `Stdin.hasTerminal` added, which is true if stdin is attached to a terminal.
+  * `WebSocket` added static `userAgent` property.
 
 * `dart:isolate`
-  * Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
-    `beforeNextEvent`.
+
   * Make `Isolate.spawn` take a type parameter representing the argument type
     of the provided function. This allows functions with arguments types other
     than `Object` in strong mode.
+  * Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
+    `beforeNextEvent`.
+
+<!--
+Still need entries for all changes to dart:js since 1.x
+-->
 
 * `dart.math`
+
   * Renamed `E`, `LN10`, `LN`, `LOG2E`, `LOG10E`, `PI`, `SQRT1_2` and `SQRT2`
     to `e`, `ln10`, `ln`, `log2e`, `log10e`, `pi`, `sqrt1_2` and `sqrt2`.
 
+<!--
+Still need entries for all changes to dart:svg since 1.x
+-->
+
 * `dart:typed_data`
+
+  * Added `Unmodifiable` view classes over all `List` types.
   * Renamed `BYTES_PER_ELEMENT` to `bytesPerElement` on all typed data lists.
   * Renamed constants `XXXX` through `WWWW` on `Float32x4` and `Int32x4` to
     lower-case `xxxx` through `wwww`.
@@ -172,6 +194,10 @@
     `BIG_ENDIAN`, `LITTLE_ENDIAN` and `HOST_ENDIAN` to
     `little`, `big` and `host`.
 
+<!--
+Still need entries for all changes to dart:web_audio,web_gl,web_sql since 1.x
+-->
+
 ### Dart VM
 
 * Support for MIPS has been removed.
diff --git a/DEPS b/DEPS
index 14bad64..f7bafe3 100644
--- a/DEPS
+++ b/DEPS
@@ -81,7 +81,7 @@
   #     minutes later.
   #
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
-  "dart_style_tag": "@1.0.9",  # Please see the note above before updating.
+  "dart_style_tag": "@1.0.10",  # Please see the note above before updating.
 
   "dartdoc_tag" : "@v0.16.0",
   "fixnum_tag": "@0.10.5",
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 0cdf43b..002314b 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -115,6 +115,7 @@
       ("tests/corelib/",        "tests/corelib_2/"),
       ("tests/lib/",            "tests/lib_2/"),
       ("tests/html/",           "tests/lib_2/html/"),
+      ("tests/isolate/",        "tests/lib_2/isolate/")
   ]
 
   result = []
diff --git a/docs/language/informal/generalized-void.md b/docs/language/informal/generalized-void.md
index 90bf55f..6b5718a 100644
--- a/docs/language/informal/generalized-void.md
+++ b/docs/language/informal/generalized-void.md
@@ -287,22 +287,9 @@
 open for the cases where the developer knows that the typing misrepresents
 the actual situation.*
 
-We define void equivalent types inductively as follows: A type `T` is
-_void equivalent_ if `T` is `void` or `T` is a type of the form
-`FutureOr<S>` where `S` is a void equivalent type.
-
-*The subtype rules for `FutureOr` ensure that whenever `T` is a void
-equivalent type we can show `T <: void` and `void <: T`. In that sense we
-may consider void equivalent types to be "the same type". However, we will
-not necessarily treat them identically for all purposes. For instance,
-it is useful to be able to test `if (x is Future<void>) ..` in the case
-where `x` is a variable of type `FutureOr<void>`, but that is not allowed
-when `x` has type `void`.*
-
 It is a static warning (in Dart 2: a compile-time error) if a return
 statement `return e;` occurs such that the innermost enclosing function
-has return type `void` and the static type of `e` is not a void equivalent
-type.
+has return type `void` and the static type of `e` is not the type void.
 
 It is a static warning (in Dart 2: a compile-time error) if a function
 marked `async*`, or `sync*` has return type `void`.
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index cb7f02f..6ed9709 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -11,6 +11,7 @@
 import 'package:analysis_server/src/search/type_hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/analysis/search.dart' as search;
 
 /**
  * Instances of the class [SearchDomainHandler] implement a [RequestHandler]
@@ -158,6 +159,65 @@
     server.sendResponse(response);
   }
 
+  /**
+   * Implement the `search.getDeclarations` request.
+   */
+  Future getDeclarations(protocol.Request request) async {
+    var files = <String>[];
+    var declarations = <search.Declaration>[];
+
+    protocol.ElementKind getElementKind(search.DeclarationKind kind) {
+      switch (kind) {
+        case search.DeclarationKind.CLASS:
+          return protocol.ElementKind.CLASS;
+        case search.DeclarationKind.CLASS_TYPE_ALIAS:
+          return protocol.ElementKind.CLASS_TYPE_ALIAS;
+        case search.DeclarationKind.CONSTRUCTOR:
+          return protocol.ElementKind.CONSTRUCTOR;
+        case search.DeclarationKind.ENUM:
+          return protocol.ElementKind.ENUM;
+        case search.DeclarationKind.ENUM_CONSTANT:
+          return protocol.ElementKind.ENUM_CONSTANT;
+        case search.DeclarationKind.FIELD:
+          return protocol.ElementKind.FIELD;
+        case search.DeclarationKind.FUNCTION:
+          return protocol.ElementKind.FUNCTION;
+        case search.DeclarationKind.FUNCTION_TYPE_ALIAS:
+          return protocol.ElementKind.FUNCTION_TYPE_ALIAS;
+        case search.DeclarationKind.GETTER:
+          return protocol.ElementKind.GETTER;
+        case search.DeclarationKind.METHOD:
+          return protocol.ElementKind.METHOD;
+        case search.DeclarationKind.SETTER:
+          return protocol.ElementKind.SETTER;
+        case search.DeclarationKind.VARIABLE:
+          return protocol.ElementKind.TOP_LEVEL_VARIABLE;
+        default:
+          return protocol.ElementKind.CLASS;
+      }
+    }
+
+    for (var driver in server.driverMap.values.toList()) {
+      var driverDeclarations = await driver.search.declarations(files);
+      declarations.addAll(driverDeclarations);
+    }
+
+    List<protocol.ElementDeclaration> elementDeclarations =
+        declarations.map((declaration) {
+      return new protocol.ElementDeclaration(
+          declaration.name,
+          getElementKind(declaration.kind),
+          declaration.fileIndex,
+          declaration.offset,
+          declaration.line,
+          declaration.column);
+    }).toList();
+
+    server.sendResponse(new protocol.SearchGetElementDeclarationsResult(
+            elementDeclarations, files)
+        .toResponse(request.id));
+  }
+
   @override
   protocol.Response handleRequest(protocol.Request request) {
     try {
@@ -174,6 +234,9 @@
       } else if (requestName == SEARCH_REQUEST_FIND_TOP_LEVEL_DECLARATIONS) {
         findTopLevelDeclarations(request);
         return protocol.Response.DELAYED_RESPONSE;
+      } else if (requestName == SEARCH_REQUEST_GET_ELEMENT_DECLARATIONS) {
+        getDeclarations(request);
+        return protocol.Response.DELAYED_RESPONSE;
       } else if (requestName == SEARCH_REQUEST_GET_TYPE_HIERARCHY) {
         getTypeHierarchy(request);
         return protocol.Response.DELAYED_RESPONSE;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
index 17fc0c5..1e5973c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_constructor_contributor.dart
@@ -106,7 +106,6 @@
   void _addSuggestion(
       ClassDeclaration classDecl, ConstructorDeclaration constructorDecl) {
     String completion = classDecl.name.name;
-    SimpleIdentifier elemId;
 
     ClassElement classElement =
         resolutionMap.elementDeclaredByClassDeclaration(classDecl);
@@ -116,29 +115,30 @@
       return;
     }
 
-    // Build a suggestion for explicitly declared constructor
     if (constructorDecl != null) {
-      elemId = constructorDecl.name;
-      ConstructorElement elem = constructorDecl.element;
-      if (elemId != null) {
-        String name = elemId.name;
-        if (name != null && name.length > 0) {
-          completion = '$completion.$name';
-        }
+      // Build a suggestion for explicitly declared constructor
+      ConstructorElement element = constructorDecl.element;
+      if (element == null) {
+        return;
       }
-      if (elem != null) {
-        CompletionSuggestion suggestion = createSuggestion(elem,
-            completion: completion, relevance: relevance);
-        if (suggestion != null) {
-          suggestions.add(suggestion);
-        }
+      if (classElement.isAbstract && !element.isFactory) {
+        return;
       }
-    }
 
-    // Build a suggestion for an implicit constructor
-    else {
+      String name = constructorDecl.name?.name;
+      if (name != null && name.length > 0) {
+        completion = '$completion.$name';
+      }
+
+      CompletionSuggestion suggestion = createSuggestion(element,
+          completion: completion, relevance: relevance);
+      if (suggestion != null) {
+        suggestions.add(suggestion);
+      }
+    } else if (!classElement.isAbstract) {
+      // Build a suggestion for an implicit constructor
       protocol.Element element = createLocalElement(
-          request.source, protocol.ElementKind.CONSTRUCTOR, elemId,
+          request.source, protocol.ElementKind.CONSTRUCTOR, null,
           parameters: '()');
       element.returnType = classDecl.name.name;
       CompletionSuggestion suggestion = new CompletionSuggestion(
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index e54e3fb..ddf51d0 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -147,19 +147,24 @@
   void _addConstructorSuggestions(ClassElement classElem, int relevance) {
     String className = classElem.name;
     for (ConstructorElement constructor in classElem.constructors) {
-      if (!constructor.isPrivate) {
-        CompletionSuggestion suggestion =
-            createSuggestion(constructor, relevance: relevance);
-        if (suggestion != null) {
-          String name = suggestion.completion;
-          name = name.length > 0 ? '$className.$name' : className;
-          if (prefix != null && prefix.length > 0) {
-            name = '$prefix.$name';
-          }
-          suggestion.completion = name;
-          suggestion.selectionOffset = suggestion.completion.length;
-          suggestions.add(suggestion);
+      if (constructor.isPrivate) {
+        continue;
+      }
+      if (classElem.isAbstract && !constructor.isFactory) {
+        continue;
+      }
+
+      CompletionSuggestion suggestion =
+          createSuggestion(constructor, relevance: relevance);
+      if (suggestion != null) {
+        String name = suggestion.completion;
+        name = name.length > 0 ? '$className.$name' : className;
+        if (prefix != null && prefix.length > 0) {
+          name = '$prefix.$name';
         }
+        suggestion.completion = name;
+        suggestion.selectionOffset = suggestion.completion.length;
+        suggestions.add(suggestion);
       }
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index ce93b73..b33abd7 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -145,6 +145,8 @@
       'CREATE_MISSING_OVERRIDES', 49, "Create {0} missing override(s)");
   static const CREATE_NO_SUCH_METHOD = const FixKind(
       'CREATE_NO_SUCH_METHOD', 51, "Create 'noSuchMethod' method");
+  static const CONVERT_TO_NAMED_ARGUMENTS = const FixKind(
+      'CONVERT_TO_NAMED_ARGUMENTS', 50, "Convert to named arguments");
   static const IMPORT_LIBRARY_PREFIX = const FixKind('IMPORT_LIBRARY_PREFIX',
       51, "Use imported library '{0}' with prefix '{1}'");
   static const IMPORT_LIBRARY_PROJECT1 =
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 9448811..101583e 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -330,6 +330,10 @@
       await _addFix_createClass();
       await _addFix_undefinedClass_useSimilar();
     }
+    if (errorCode ==
+        StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED) {
+      await _addFix_convertToNamedArgument();
+    }
     if (errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED) {
       await _addFix_createConstructor_forUninitializedFinalFields();
     }
@@ -842,6 +846,74 @@
     }
   }
 
+  Future<Null> _addFix_convertToNamedArgument() async {
+    var argumentList = this.node;
+    if (argumentList is ArgumentList) {
+      // Prepare ExecutableElement.
+      ExecutableElement executable;
+      var parent = argumentList.parent;
+      if (parent is InstanceCreationExpression) {
+        executable = parent.staticElement;
+      } else if (parent is MethodInvocation) {
+        executable = parent.methodName.staticElement;
+      }
+      if (executable == null) {
+        return;
+      }
+
+      // Prepare named parameters.
+      int numberOfPositionalParameters = 0;
+      var namedParameters = <ParameterElement>[];
+      for (var parameter in executable.parameters) {
+        if (parameter.parameterKind == ParameterKind.NAMED) {
+          namedParameters.add(parameter);
+        } else {
+          numberOfPositionalParameters++;
+        }
+      }
+      if (argumentList.arguments.length <= numberOfPositionalParameters) {
+        return;
+      }
+
+      // Find named parameters for extra arguments.
+      var argumentToParameter = <Expression, ParameterElement>{};
+      Iterable<Expression> extraArguments =
+          argumentList.arguments.skip(numberOfPositionalParameters);
+      for (var argument in extraArguments) {
+        if (argument is! NamedExpression) {
+          ParameterElement uniqueNamedParameter = null;
+          for (var namedParameter in namedParameters) {
+            if (typeSystem.isSubtypeOf(
+                argument.staticType, namedParameter.type)) {
+              if (uniqueNamedParameter == null) {
+                uniqueNamedParameter = namedParameter;
+              } else {
+                uniqueNamedParameter = null;
+                break;
+              }
+            }
+          }
+          if (uniqueNamedParameter != null) {
+            argumentToParameter[argument] = uniqueNamedParameter;
+            namedParameters.remove(uniqueNamedParameter);
+          }
+        }
+      }
+      if (argumentToParameter.isEmpty) {
+        return;
+      }
+
+      DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+        for (var argument in argumentToParameter.keys) {
+          var parameter = argumentToParameter[argument];
+          builder.addSimpleInsertion(argument.offset, '${parameter.name}: ');
+        }
+      });
+      _addFixFromBuilder(changeBuilder, DartFixKind.CONVERT_TO_NAMED_ARGUMENTS);
+    }
+  }
+
   Future<Null> _addFix_createClass() async {
     Element prefixElement = null;
     String name = null;
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 3ec06b6..bd0864c 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -83,9 +83,9 @@
   Source addSource(String path, String content, [Uri uri]) {
     File file = newFile(path, content: content);
     Source source = file.createSource(uri);
-    driver.addFile(path);
-    driver.changeFile(path);
-    _fileContentOverlay[path] = content;
+    driver.addFile(file.path);
+    driver.changeFile(file.path);
+    _fileContentOverlay[file.path] = content;
     return source;
   }
 
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 18a5002..1ea09b0 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -118,7 +118,7 @@
 
   Future<Null> resolveTestUnit(String code) async {
     addTestSource(code);
-    testAnalysisResult = await driver.getResult(testFile);
+    testAnalysisResult = await driver.getResult(convertPath(testFile));
     testUnit = testAnalysisResult.unit;
     if (verifyNoTestUnitErrors) {
       expect(testAnalysisResult.errors.where((AnalysisError error) {
diff --git a/pkg/analysis_server/test/benchmarks_test.dart b/pkg/analysis_server/test/benchmarks_test.dart
index 4064bbb..6b3437c 100644
--- a/pkg/analysis_server/test/benchmarks_test.dart
+++ b/pkg/analysis_server/test/benchmarks_test.dart
@@ -38,22 +38,24 @@
             reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
       });
 
-      test('$benchmarkId-use-cfe', () {
-        ProcessResult r = Process.runSync(
-          Platform.resolvedExecutable,
-          [
-            path.join('benchmark', 'benchmarks.dart'),
-            'run',
-            '--repeat=1',
-            '--quick',
-            '--use-cfe',
-            benchmarkId
-          ],
-          workingDirectory: _serverSourcePath,
-        );
-        expect(r.exitCode, 0,
-            reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
-      });
+      // TODO(scheglov): Restore similar test coverage when the front-end API
+      // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+      // test('$benchmarkId-use-cfe', () {
+      //   ProcessResult r = Process.runSync(
+      //     Platform.resolvedExecutable,
+      //     [
+      //       path.join('benchmark', 'benchmarks.dart'),
+      //       'run',
+      //       '--repeat=1',
+      //       '--quick',
+      //       '--use-cfe',
+      //       benchmarkId
+      //     ],
+      //     workingDirectory: _serverSourcePath,
+      //   );
+      //   expect(r.exitCode, 0,
+      //       reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
+      // });
     }
   });
 }
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index c56fb03..a69de4a 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorIntegrationTest);
-    defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index a4912ac..b106bf0 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
-    defineReflectiveTests(GetErrorsTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(GetErrorsTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index 655fa65..08f8e52 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -15,7 +15,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest);
-    defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 5174ef4..7054ac4 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OccurrencesTest);
-    defineReflectiveTests(OccurrencesTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(OccurrencesTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 0d5dc43..6886e9c 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OutlineTest);
-    defineReflectiveTests(OutlineTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(OutlineTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 5cca2f0..4411cc6 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -13,7 +13,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
-    defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 2238262..f703fe0 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -11,7 +11,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    defineReflectiveTests(UpdateContentTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 74aee23..3c90961 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetSuggestionsTest);
-    defineReflectiveTests(GetSuggestionsTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(GetSuggestionsTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
index 8e34a3b..842e443 100644
--- a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetPostfixCompletionTest);
-    defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
index 32f59cb..02025b9 100644
--- a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
+++ b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
@@ -11,7 +11,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsPostfixCompletionApplicableTest);
-    defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
index 3caf5f80..6bb94c5 100644
--- a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
+++ b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
@@ -11,7 +11,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ListPostfixCompletionTemplatesTest);
-    defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
index 4d519e9..3a9f686 100644
--- a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
@@ -12,7 +12,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
-    defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/search/find_element_references_test.dart b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
index bc24fb8..3b7e1a0 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -13,7 +13,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementReferencesTest);
-    defineReflectiveTests(FindElementReferencesTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(FindElementReferencesTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
index 38f0c67..28a8828 100644
--- a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
@@ -11,7 +11,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberDeclarationsTest);
-    defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index dab8eaa..de8e9b7 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -13,7 +13,9 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatusTest);
-    defineReflectiveTests(StatusTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(StatusTest_UseCFE);
   });
 }
 
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 5eccc11..dc4c218 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -118,7 +118,7 @@
       expect(element.typeParameters, isNull);
       {
         Location location = element.location;
-        expect(location.file, '/test.dart');
+        expect(location.file, convertPath('/test.dart'));
         expect(location.offset, 27);
         expect(location.length, '_A'.length);
         expect(location.startLine, 2);
@@ -157,7 +157,7 @@
     expect(element.typeParameters, isNull);
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 20);
       expect(location.length, 'myConstructor'.length);
       expect(location.startLine, 2);
@@ -248,7 +248,7 @@
       expect(element.typeParameters, isNull);
       {
         Location location = element.location;
-        expect(location.file, '/test.dart');
+        expect(location.file, convertPath('/test.dart'));
         expect(location.offset, 17);
         expect(location.length, '_E1'.length);
         expect(location.startLine, 2);
@@ -285,7 +285,7 @@
       expect(element.name, 'one');
       {
         Location location = element.location;
-        expect(location.file, '/test.dart');
+        expect(location.file, convertPath('/test.dart'));
         expect(location.offset, 23);
         expect(location.length, 'one'.length);
         expect(location.startLine, 2);
@@ -309,7 +309,7 @@
       expect(element.name, 'three');
       {
         Location location = element.location;
-        expect(location.file, '/test.dart');
+        expect(location.file, convertPath('/test.dart'));
         expect(location.offset, 44);
         expect(location.length, 'three'.length);
         expect(location.startLine, 3);
@@ -328,7 +328,7 @@
       expect(element.name, 'index');
       {
         Location location = element.location;
-        expect(location.file, '/test.dart');
+        expect(location.file, convertPath('/test.dart'));
         expect(location.offset, -1);
         expect(location.length, 'index'.length);
         expect(location.startLine, 1);
@@ -347,7 +347,7 @@
       expect(element.name, 'values');
       {
         Location location = element.location;
-        expect(location.file, '/test.dart');
+        expect(location.file, convertPath('/test.dart'));
         expect(location.offset, -1);
         expect(location.length, 'values'.length);
         expect(location.startLine, 1);
@@ -372,7 +372,7 @@
     expect(element.name, 'myField');
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 25);
       expect(location.length, 'myField'.length);
       expect(location.startLine, 2);
@@ -397,7 +397,7 @@
     expect(element.typeParameters, '<T>');
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 12);
       expect(location.length, 'F'.length);
       expect(location.startLine, 1);
@@ -422,7 +422,7 @@
     expect(element.name, 'myGetter');
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 23);
       expect(location.length, 'myGetter'.length);
       expect(location.startLine, 2);
@@ -449,7 +449,7 @@
     expect(element.name, 'myLabel');
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 9);
       expect(location.length, 'myLabel'.length);
       expect(location.startLine, 2);
@@ -475,7 +475,7 @@
     expect(element.name, 'myMethod');
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 32);
       expect(location.length, 'myGetter'.length);
       expect(location.startLine, 2);
@@ -500,7 +500,7 @@
     expect(element.name, 'mySetter');
     {
       Location location = element.location;
-      expect(location.file, '/test.dart');
+      expect(location.file, convertPath('/test.dart'));
       expect(location.offset, 16);
       expect(location.length, 'mySetter'.length);
       expect(location.startLine, 2);
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
new file mode 100644
index 0000000..253b657
--- /dev/null
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'abstract_search_domain.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(DeclarationsTest);
+  });
+}
+
+@reflectiveTest
+class DeclarationsTest extends AbstractSearchDomainTest {
+  SearchGetElementDeclarationsResult declarationsResult;
+
+  void assertHas(String name, ElementKind kind) {
+    declarationsResult.declarations.singleWhere((d) =>
+        declarationsResult.files[d.fileIndex] == testFile &&
+        d.name == name &&
+        d.kind == kind);
+  }
+
+  test_class() async {
+    addTestFile(r'''
+class C {
+  int f;
+  C();
+  C.named();
+  int get g => 0;
+  void set s(_) {}
+  void m() {}
+}
+''');
+    await _getDeclarations();
+
+    assertHas('C', ElementKind.CLASS);
+    assertHas('f', ElementKind.FIELD);
+    assertHas('named', ElementKind.CONSTRUCTOR);
+    assertHas('g', ElementKind.GETTER);
+    assertHas('s', ElementKind.SETTER);
+    assertHas('m', ElementKind.METHOD);
+  }
+
+  test_enum() async {
+    addTestFile(r'''
+enum E {
+  a, b, c
+}
+''');
+    await _getDeclarations();
+
+    assertHas('E', ElementKind.ENUM);
+    assertHas('a', ElementKind.ENUM_CONSTANT);
+    assertHas('b', ElementKind.ENUM_CONSTANT);
+    assertHas('c', ElementKind.ENUM_CONSTANT);
+  }
+
+  test_multipleFiles() async {
+    var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
+    var b = newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
+
+    Request request = new SearchGetElementDeclarationsParams().toRequest('0');
+    Response response = await waitResponse(request);
+
+    var result = new SearchGetElementDeclarationsResult.fromResponse(response);
+
+    expect(result.files, contains(a));
+    expect(result.files, contains(b));
+
+    {
+      ElementDeclaration declaration =
+          result.declarations.singleWhere((d) => d.name == 'A');
+      expect(declaration.name, 'A');
+      expect(declaration.kind, ElementKind.CLASS);
+      expect(result.files[declaration.fileIndex], a);
+      expect(declaration.offset, 6);
+      expect(declaration.line, 1);
+      expect(declaration.column, 7);
+    }
+
+    {
+      ElementDeclaration declaration =
+          result.declarations.singleWhere((d) => d.name == 'B');
+      expect(declaration.name, 'B');
+      expect(declaration.kind, ElementKind.CLASS);
+      expect(result.files[declaration.fileIndex], b);
+    }
+  }
+
+  test_top() async {
+    addTestFile(r'''
+int get g => 0;
+void set s(_) {}
+void f(int p) {}
+int v;
+typedef void tf1();
+typedef tf2<T> = int Function<S>(T tp, S sp);
+''');
+    await _getDeclarations();
+
+    assertHas('g', ElementKind.GETTER);
+    assertHas('s', ElementKind.SETTER);
+    assertHas('f', ElementKind.FUNCTION);
+    assertHas('v', ElementKind.TOP_LEVEL_VARIABLE);
+    assertHas('tf1', ElementKind.FUNCTION_TYPE_ALIAS);
+    assertHas('tf2', ElementKind.FUNCTION_TYPE_ALIAS);
+  }
+
+  Future<Null> _getDeclarations() async {
+    Request request = new SearchGetElementDeclarationsParams().toRequest('0');
+    Response response = await waitResponse(request);
+
+    declarationsResult =
+        new SearchGetElementDeclarationsResult.fromResponse(response);
+  }
+}
diff --git a/pkg/analysis_server/test/search/test_all.dart b/pkg/analysis_server/test/search/test_all.dart
index a2ccb2b..56465f1 100644
--- a/pkg/analysis_server/test/search/test_all.dart
+++ b/pkg/analysis_server/test/search/test_all.dart
@@ -4,6 +4,7 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'declarations_test.dart' as declarations_test;
 import 'element_references_test.dart' as element_references_test;
 import 'member_declarations_test.dart' as member_declarations;
 import 'member_references_test.dart' as member_references_test;
@@ -16,6 +17,7 @@
  */
 main() {
   defineReflectiveSuite(() {
+    declarations_test.main();
     element_references_test.main();
     member_declarations.main();
     member_references_test.main();
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 14f2fca..3f38e82 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -135,7 +135,7 @@
       expect(cs.element.location.startLine, isNotNull);
     }
     if (elemFile != null) {
-      expect(cs.element.location.file, elemFile);
+      expect(cs.element.location.file, convertPath(elemFile));
     }
     if (elemOffset != null) {
       expect(cs.element.location.offset, elemOffset);
@@ -456,7 +456,8 @@
   }
 
   Future computeSuggestions({int times = 200}) async {
-    AnalysisResult analysisResult = await driver.getResult(testFile);
+    AnalysisResult analysisResult =
+        await driver.getResult(convertPath(testFile));
     testSource = analysisResult.unit.element.source;
     CompletionRequestImpl baseRequest = new CompletionRequestImpl(
         analysisResult,
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index 7678669..66268e1 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -40,7 +40,7 @@
 ''');
 
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport('/testB.dart')}";
 
 void main() {f^}''');
     await computeSuggestions();
@@ -56,7 +56,7 @@
         bool hasLength(int expected) { }
         void baz() { }''');
     addTestSource('''
-        import '/libA.dart';
+        import '${convertPathForImport('/libA.dart')}';
         class B { }
         String bar() => true;
         void main() {expect(^)}''');
@@ -83,7 +83,7 @@
         expect(arg) { }
         void baz() { }''');
     addTestSource('''
-        import '/libA.dart'
+        import '${convertPathForImport('/libA.dart')}'
         class B { }
         String bar() => true;
         void main() {expect(^)}''');
@@ -111,7 +111,7 @@
         void baz() { }''');
     addTestSource('''
         import 'dart:async';
-        import '/libA.dart';
+        import '${convertPathForImport('/libA.dart')}';
         class B { }
         String bar() => true;
         void main() {new A(^)}''');
@@ -143,7 +143,7 @@
         void baz() { }''');
     addTestSource('''
         import 'dart:async';
-        import '/libA.dart';
+        import '${convertPathForImport('/libA.dart')}';
         class B { }
         String bar() => true;
         void main() {new A(^)}''');
@@ -172,7 +172,7 @@
         bool hasLength(int expected) { }
         void baz() { }''');
     addTestSource('''
-        import '/libA.dart'
+        import '${convertPathForImport('/libA.dart')}'
         expect(arg) { }
         class B { }
         String bar() => true;
@@ -199,7 +199,7 @@
         bool hasLength(int expected) { }
         void baz() { }''');
     addTestSource('''
-        import '/libA.dart'
+        import '${convertPathForImport('/libA.dart')}'
         class B {
           expect(arg) { }
           void foo() {expect(^)}}
@@ -228,7 +228,7 @@
         void baz() { }''');
     addTestSource('''
         import 'dart:async';
-        import '/libA.dart';
+        import '${convertPathForImport('/libA.dart')}';
         class B { }
         String bar(f()) => true;
         void main() {bar(^);}''');
@@ -259,7 +259,7 @@
         void baz() { }''');
     addTestSource('''
         import 'dart:async';
-        import '/libA.dart';
+        import '${convertPathForImport('/libA.dart')}';
         class B { String bar(f()) => true; }
         void main() {new B().bar(^);}''');
 
@@ -286,7 +286,7 @@
         library A;
         bool hasLength(int expected) { }''');
     addTestSource('''
-        import '/libA.dart'
+        import '${convertPathForImport('/libA.dart')}'
         String bar() => true;
         void main() {expect(foo: ^)}''');
 
@@ -325,7 +325,7 @@
           class A {} class B extends A {} class C extends B {}
           class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-          import "/testB.dart";
+          import "${convertPathForImport('/testB.dart')}";
          main(){A a; if (a as ^)}''');
 
     await computeSuggestions();
@@ -347,7 +347,7 @@
           class A {} class B implements A {} class C implements B {}
           class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-          import "/testB.dart";
+          import "${convertPathForImport('/testB.dart')}";
           main(){A a; if (a as ^)}''');
 
     await computeSuggestions();
@@ -495,7 +495,7 @@
 Future y() async {return 0;}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   int x;
   foo() async {await ^}
@@ -517,7 +517,7 @@
   Future y() async { return 0; }
 }''');
     addTestSource('''
-import "/testB.dart";
+import "${convertPathForImport('/testB.dart')}";
 class B extends A {
   foo() async {await ^}
 }
@@ -581,10 +581,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g;
+        import "${convertPathForImport('/testAB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g;
         int T5;
         var _T6;
         String get T7 => 'hello';
@@ -681,10 +681,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g;
+        import "${convertPathForImport('/testAB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g;
         int T5;
         var _T6;
         String get T7 => 'hello';
@@ -794,10 +794,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g hide G;
+        import "${convertPathForImport('/testAB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g hide G;
         int T5;
         var _T6;
         String get T7 => 'hello';
@@ -895,10 +895,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g;
+        import "${convertPathForImport('/testAB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g;
         int T5;
         var _T6;
         String get T7 => 'hello';
@@ -994,10 +994,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g;
+        import "${convertPathForImport('/testAB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g;
         int T5;
         var _T6;
         Z D2() {int x;}
@@ -1059,7 +1059,7 @@
         class I { int i1; i2() { } }
         class M { var m1; int m2() { } }''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class A extends E implements I with M {a() {^}}''');
 
     await computeSuggestions();
@@ -1125,10 +1125,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g;
+        import "${convertPathForImport('/testAB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g;
         int T5;
         var _T6;
         String get T7 => 'hello';
@@ -1177,10 +1177,10 @@
         int T3;
         var _T4;'''); // not imported
     addTestSource('''
-        import "/testAB.dart";
-        import "/testCD.dart" hide D;
-        import "/testEEF.dart" show EE;
-        import "/testG.dart" as g;
+        import "${convertPathForImport('/testB.dart')}";
+        import "${convertPathForImport('/testCD.dart')}" hide D;
+        import "${convertPathForImport('/testEEF.dart')}" show EE;
+        import "${convertPathForImport('/testG.dart')}" as g;
         int T5;
         var _T6;
         Z D2() {int x;}
@@ -1212,7 +1212,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class A {var b; X _c;}
         class X{}
         // looks like a cascade to the parser
@@ -1237,7 +1237,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class A {var b; X _c;}
         class X{}
         main() {A a; a..^z}''');
@@ -1260,7 +1260,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class A {var b; X _c;}
         class X{}
         main() {A a; a..^ return}''');
@@ -1355,7 +1355,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "testB.dart" as x;
+        import "${convertPathForImport('testB.dart')}" as x;
         @deprecated class A {^}
         class _B {}
         A T;''');
@@ -1380,7 +1380,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "testB.dart" as x;
+        import "${convertPathForImport('testB.dart')}" as x;
         class A {final ^}
         class _B {}
         A T;''');
@@ -1401,7 +1401,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "testB.dart" as x;
+        import "${convertPathForImport('testB.dart')}" as x;
         class A {final ^ A(){}}
         class _B {}
         A T;''');
@@ -1422,7 +1422,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "testB.dart" as Soo;
+        import "${convertPathForImport('testB.dart')}" as Soo;
         class A {final S^ A();}
         class _B {}
         A Sew;''');
@@ -1443,7 +1443,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "testB.dart" as x;
+        import "${convertPathForImport('testB.dart')}" as x;
         class A {final ^ final foo;}
         class _B {}
         A T;''');
@@ -1464,7 +1464,7 @@
     addSource('/testB.dart', '''
         class B { }''');
     addTestSource('''
-        import "testB.dart" as x;
+        import "${convertPathForImport('testB.dart')}" as x;
         class A {final ^ var foo;}
         class _B {}
         A T;''');
@@ -1496,8 +1496,8 @@
         class C { }
         class D { }''');
     addTestSource('''
-        import "/testAB.dart" hide ^;
-        import "/testCD.dart";
+        import "${convertPathForImport('/testB.dart')}" hide ^;
+        import "${convertPathForImport('/testCD.dart')}";
         class X {}''');
 
     await computeSuggestions();
@@ -1522,8 +1522,8 @@
         class C { }
         class D { }''');
     addTestSource('''
-        import "/testAB.dart" show ^;
-        import "/testCD.dart";
+        import "${convertPathForImport('/testB.dart')}" show ^;
+        import "${convertPathForImport('/testCD.dart')}";
         class X {}''');
 
     await computeSuggestions();
@@ -1537,7 +1537,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -1557,7 +1557,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -1583,7 +1583,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -1603,7 +1603,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -1629,7 +1629,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -1651,7 +1651,7 @@
         F1() { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         var m;
         main() {new X.^}''');
 
@@ -1676,7 +1676,7 @@
         F1() { }
         class X {factory X.c(); factory X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         var m;
         main() {new X.^}''');
 
@@ -1779,7 +1779,7 @@
 /// Longer description.
 class A {}
 ''');
-    addTestSource('import "/libA.dart"; main() {^}');
+    addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
 
     await computeSuggestions();
 
@@ -1798,7 +1798,7 @@
 /// Longer description.
 int myFunc() {}
 ''');
-    addTestSource('import "/libA.dart"; main() {^}');
+    addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
 
     await computeSuggestions();
 
@@ -1819,7 +1819,7 @@
  */
 int myFunc() {}
 ''');
-    addTestSource('import "/libA.dart"; main() {^}');
+    addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
 
     await computeSuggestions();
 
@@ -1831,7 +1831,7 @@
 
   test_enum() async {
     addSource('/libA.dart', 'library A; enum E { one, two }');
-    addTestSource('import "/libA.dart"; main() {^}');
+    addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
     await computeSuggestions();
     assertSuggestEnum('E');
     assertNotSuggested('one');
@@ -1840,7 +1840,7 @@
 
   test_enum_deprecated() async {
     addSource('/libA.dart', 'library A; @deprecated enum E { one, two }');
-    addTestSource('import "/libA.dart"; main() {^}');
+    addTestSource('import "${convertPathForImport('/libA.dart')}"; main() {^}');
     await computeSuggestions();
     // TODO(danrube) investigate why suggestion/element is not deprecated
     // when AST node has correct @deprecated annotation
@@ -1856,7 +1856,7 @@
         class A {int x;}
         class _B { }''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         typedef int F2(int blat);
         class Clz = Object with Object;
         class C {foo(){^} void bar() {}}''');
@@ -1882,7 +1882,7 @@
         B T1;
         class B{}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         class C {a() {C ^}}''');
 
     await computeSuggestions();
@@ -1894,7 +1894,7 @@
     // FieldDeclaration
     addSource('/testA.dart', 'class A { }');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         class C {A ^}''');
 
     await computeSuggestions();
@@ -1906,7 +1906,7 @@
     // FieldDeclaration
     addSource('/testA.dart', 'class A { }');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         class C {var ^}''');
 
     await computeSuggestions();
@@ -2090,7 +2090,7 @@
 int m(x, {int y}) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2111,7 +2111,7 @@
 void m(x, [int y]) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2132,7 +2132,7 @@
 void m({x, int y}) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2153,7 +2153,7 @@
 void m() {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2172,7 +2172,7 @@
 void m([x, int y]) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2193,7 +2193,7 @@
 void m(x, int y) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2217,7 +2217,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2247,7 +2247,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2277,7 +2277,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2398,7 +2398,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -2424,7 +2424,7 @@
         F1() { }
         class A {int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         class B {int x;}
@@ -2443,7 +2443,7 @@
 class B {B(this.x, [String boo]) { } int x;}
 class C {C.bar({boo: 'hoo', int z: 0}) { } }''');
     addTestSource('''
-import "/testA.dart";
+import "${convertPathForImport('/testA.dart')}";
 import "dart:math" as math;
 main() {new ^ String x = "hello";}''');
 
@@ -2486,6 +2486,44 @@
     assertNotSuggested('math');
   }
 
+  test_InstanceCreationExpression_abstractClass() async {
+    addSource('/a.dart', '''
+abstract class A {
+  A();
+  A.generative();
+  factory A.factory() => null;
+}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  new ^;
+}
+''');
+    await computeSuggestions();
+
+    assertNotSuggested('A');
+    assertNotSuggested('A.generative');
+    assertSuggestConstructor('A.factory');
+  }
+
+  test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
+    addSource('/a.dart', '''
+abstract class A {}
+''');
+    addTestSource('''
+import 'a.dart';
+
+main() {
+  new ^;
+}
+''');
+    await computeSuggestions();
+
+    assertNotSuggested('A');
+  }
+
   test_InstanceCreationExpression_imported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/testA.dart', '''
@@ -2493,7 +2531,7 @@
         F1() { }
         class A {A(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         import "dart:async";
         int T2;
         F2() { }
@@ -2555,7 +2593,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2585,7 +2623,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2658,7 +2696,7 @@
         foo() { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class Y {Y.c(); Y._d(); z() {}}
         main() {var x; if (x is ^) { }}''');
 
@@ -2728,7 +2766,7 @@
         class A {} class B extends A {} class C extends B {}
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         main(){A a; if (a is ^)}''');
 
     await computeSuggestions();
@@ -2750,7 +2788,7 @@
         class A {} class B implements A {} class C implements B {}
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         main(){A a; if (a is ^)}''');
 
     await computeSuggestions();
@@ -2773,7 +2811,7 @@
         nowIsIt() { }
         class X {factory X.c(); factory X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         String newer() {}
         var m;
         main() {new^ X.c();}''');
@@ -2833,7 +2871,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2867,7 +2905,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2894,7 +2932,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -2913,7 +2951,7 @@
 void m(x, {int y}) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2934,7 +2972,7 @@
 void m(x, [int y]) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2955,7 +2993,7 @@
 void m({x, int y}) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2976,7 +3014,7 @@
 void m() {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -2995,7 +3033,7 @@
 void m([x, int y]) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -3016,7 +3054,7 @@
 void m(x, int y) {}
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B {
   main() {^}
 }
@@ -3053,7 +3091,7 @@
           static c3() {}
           static var c4;}''');
     addTestSource('''
-        import "/testC.dart";
+        import "${convertPathForImport('/testC.dart')}";
         class B extends C {
           b1() {}
           var b2;
@@ -3135,7 +3173,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -3164,7 +3202,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -3193,7 +3231,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -3222,7 +3260,7 @@
         typedef D1();
         class C1 {C1(this.x) { } int x;}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         int T2;
         F2() { }
         typedef D2();
@@ -3289,7 +3327,7 @@
 }
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class C extends B with M1, M2 {
   void f() {
     ^
@@ -3328,8 +3366,8 @@
       class ClassInLocalContext {int x;}''');
     testFile = '/context1/completionTest.dart';
     addTestSource('''
-      import "/context1/libA.dart";
-      import "/foo.dart";
+      import "${convertPathForImport("/context1/libA.dart")}";
+      import "${convertPathForImport("/foo.dart")}";
       main() {C^}
       ''');
 
@@ -3356,7 +3394,7 @@
 int x;
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -3371,7 +3409,7 @@
 int get x => null;
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -3386,7 +3424,7 @@
 set x(int value) {};
 ''');
     addTestSource('''
-import '/libA.dart';
+import '${convertPathForImport('/libA.dart')}';
 class B extends A {
   main() {^}
 }
@@ -3412,8 +3450,8 @@
         class X {X.c(); X._d(); z() {}}''');
     addSource('/testA.dart', '''
         library libA;
-        import "/testB.dart";
-        part "$testFile";
+        import "${convertPathForImport('/testB.dart')}";
+        part "${convertPathForImport(testFile)}";
         class A { }
         var m;''');
     addTestSource('''
@@ -3451,7 +3489,7 @@
         class B { }''');
     addTestSource('''
         library libA;
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         part "/testA.dart";
         class A { A({String boo: 'hoo'}) { } }
         main() {new ^}
@@ -3491,7 +3529,7 @@
           m(X x) {} I _n(X x) {}}
         class X{}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class A extends B {
           static const String scA = 'foo';
           w() { }}
@@ -3535,7 +3573,7 @@
           m(X x) {} I _n(X x) {}}
         class X{}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         main() {A a; a.^}''');
 
     await computeSuggestions();
@@ -3609,7 +3647,7 @@
         class X { }
         class Y { }''');
     addTestSource('''
-        import "/testB.dart" as b;
+        import "${convertPathForImport('/testB.dart')}" as b;
         var T2;
         class A { }
         main() {b.^}''');
@@ -3636,7 +3674,7 @@
         class X { }
         class Y { }''');
     addTestSource('''
-        import "/testB.dart" as b;
+        import "${convertPathForImport('/testB.dart')}" as b;
         var T2;
         class A { }
         foo(b.^ f) {}''');
@@ -3663,7 +3701,7 @@
         class X { }
         class Y { }''');
     addTestSource('''
-        import "/testB.dart" as b;
+        import "${convertPathForImport('/testB.dart')}" as b;
         var T2;
         class A { }
         foo(b.^) {}''');
@@ -3690,7 +3728,7 @@
         class X extends _W {}
         class M{}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         foo(X x) {x.^}''');
 
     await computeSuggestions();
@@ -3707,7 +3745,7 @@
         class A {static int bar = 10;}
         _B() {}''');
     addTestSource('''
-        import "/testA.dart";
+        import "${convertPathForImport('/testA.dart')}";
         class X {foo(){A^.bar}}''');
 
     await computeSuggestions();
@@ -4149,7 +4187,7 @@
         F1() => 0;
         typedef String T1(int blat);''');
     addTestSource('''
-        import "/testA.dart";'
+        import "${convertPathForImport('/testA.dart')}";'
         class C2 {int x;}
         F2() => 0;
         typedef int T2(int blat);
@@ -4175,7 +4213,7 @@
         F1() => 0;
         typedef String T1(int blat);''');
     addTestSource('''
-        import "/testA.dart";'
+        import "${convertPathForImport('/testA.dart')}";'
         class C2 {int x;}
         F2() => 0;
         typedef int T2(int blat);
@@ -4199,7 +4237,7 @@
 class B {}
 ''');
     addTestSource('''
-import '/testB.dart';
+import '${convertPathForImport('/testB.dart')}';
 List<^> x;
 ''');
     await computeSuggestions();
@@ -4218,7 +4256,7 @@
         class _B { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class Y {Y.c(); Y._d(); z() {}}
         main() {var ^}''');
 
@@ -4245,7 +4283,7 @@
         class _B { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         class Y {Y.c(); Y._d(); z() {}}
         class C {bar(){var f; {var x;} var e = ^}}''');
 
@@ -4271,7 +4309,7 @@
         class _B { }
         class X {X.c(); X._d(); z() {}}''');
     addTestSource('''
-        import "/testB.dart";
+        import "${convertPathForImport('/testB.dart')}";
         foo2() { }
         void bar2() { }
         class Y {Y.c(); Y._d(); z() {}}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index 89c378d..17d3cef 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -2289,6 +2289,36 @@
     expect(suggestion.hasNamedParameters, true);
   }
 
+  test_InstanceCreationExpression_abstractClass() async {
+    addTestSource('''
+abstract class A {
+  A();
+  A.generative();
+  factory A.factory() => null;
+}
+
+main() {
+  new ^;
+}''');
+    await computeSuggestions();
+
+    assertNotSuggested('A');
+    assertNotSuggested('A.generative');
+    assertSuggestConstructor('A.factory');
+  }
+
+  test_InstanceCreationExpression_abstractClass_implicitConstructor() async {
+    addTestSource('''
+abstract class A {}
+
+main() {
+  new ^;
+}''');
+    await computeSuggestions();
+
+    assertNotSuggested('A');
+  }
+
   test_InstanceCreationExpression_assignment_expression_filter() async {
     addTestSource('''
 class A {} class B extends A {} class C implements A {} class D {}
@@ -2358,6 +2388,38 @@
     assertNotSuggested('T2');
   }
 
+  test_InstanceCreationExpression_invocationArgument() async {
+    addTestSource('''
+class A {} class B extends A {} class C {}
+void foo(A a) {}
+main() {
+  foo(new ^);
+}''');
+    await computeSuggestions();
+
+    assertSuggestConstructor('A',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+    assertSuggestConstructor('B', elemOffset: -1);
+    assertNotSuggested('C');
+  }
+
+  test_InstanceCreationExpression_invocationArgument_named() async {
+    addTestSource('''
+class A {} class B extends A {} class C {}
+void foo({A a}) {}
+main() {
+  foo(a: new ^);
+}''');
+    await computeSuggestions();
+
+    assertSuggestConstructor('A',
+        elemOffset: -1,
+        relevance: DART_RELEVANCE_DEFAULT + DART_RELEVANCE_INCREMENT);
+    assertSuggestConstructor('B', elemOffset: -1);
+    assertNotSuggested('C');
+  }
+
   test_InstanceCreationExpression_unimported() async {
     // SimpleIdentifier  TypeName  ConstructorName  InstanceCreationExpression
     addSource('/testAB.dart', 'class Foo { }');
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index be00f2c..847da32 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -86,7 +86,7 @@
 
     String fileContent = testCode;
     if (target != null) {
-      expect(target, fileEdits.first.file);
+      expect(fileEdits.first.file, convertPath(target));
       fileContent = getFile(target).readAsStringSync();
     }
 
@@ -140,7 +140,7 @@
   }
 
   Future<List<AnalysisError>> _computeErrors() async {
-    return (await driver.getResult(testFile)).errors;
+    return (await driver.getResult(convertPath(testFile))).errors;
   }
 
   /**
@@ -1175,6 +1175,95 @@
 ''');
   }
 
+  test_convertToNamedArguments_BAD_ambiguous() async {
+    await resolveTestUnit('''
+class A {
+  A({int a, int b});
+}
+
+main() {
+  new A(1, 2);
+}
+''');
+    await assertNoFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS);
+  }
+
+  test_convertToNamedArguments_BAD_noCompatibleParameter() async {
+    await resolveTestUnit('''
+class A {
+  A({String a});
+}
+
+main() {
+  new A(1);
+}
+''');
+    await assertNoFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS);
+  }
+
+  test_convertToNamedArguments_OK_instanceCreation() async {
+    await resolveTestUnit('''
+class A {
+  A({int a, double b});
+}
+
+main() {
+  new A(1.2, 3);
+}
+''');
+    await assertHasFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS, '''
+class A {
+  A({int a, double b});
+}
+
+main() {
+  new A(b: 1.2, a: 3);
+}
+''');
+  }
+
+  test_convertToNamedArguments_OK_instanceCreation_hasPositional() async {
+    await resolveTestUnit('''
+class A {
+  A(int a, {int b});
+}
+
+main() {
+  new A(1, 2);
+}
+''');
+    await assertHasFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS, '''
+class A {
+  A(int a, {int b});
+}
+
+main() {
+  new A(1, b: 2);
+}
+''');
+  }
+
+  test_convertToNamedArguments_OK_methodInvocation() async {
+    await resolveTestUnit('''
+class C {
+  void foo({int a}) {}
+}
+
+main(C c) {
+  c.foo(1);
+}
+''');
+    await assertHasFix(DartFixKind.CONVERT_TO_NAMED_ARGUMENTS, '''
+class C {
+  void foo({int a}) {}
+}
+
+main(C c) {
+  c.foo(a: 1);
+}
+''');
+  }
+
   test_createClass() async {
     await resolveTestUnit('''
 main() {
@@ -1223,7 +1312,7 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/lib.dart');
+    expect(fileEdit.file, convertPath('/lib.dart'));
     expect(SourceEdit.applySequence(libCode, fileEdit.edits), r'''
 library my.lib;
 
@@ -2093,7 +2182,7 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/my/project/bin/my_file.dart');
+    expect(fileEdit.file, convertPath('/my/project/bin/my_file.dart'));
     expect(fileEdit.fileStamp, -1);
     expect(fileEdit.edits, hasLength(1));
     expect(fileEdit.edits[0].replacement, contains('library my_file;'));
@@ -2130,7 +2219,8 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/projects/my_package/lib/a/bb/c_cc/my_lib.dart');
+    expect(fileEdit.file,
+        convertPath('/projects/my_package/lib/a/bb/c_cc/my_lib.dart'));
     expect(fileEdit.fileStamp, -1);
     expect(fileEdit.edits, hasLength(1));
     expect(fileEdit.edits[0].replacement,
@@ -2150,7 +2240,8 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/projects/my_package/test/misc/a/bb/my_lib.dart');
+    expect(fileEdit.file,
+        convertPath('/projects/my_package/test/misc/a/bb/my_lib.dart'));
     expect(fileEdit.fileStamp, -1);
     expect(fileEdit.edits, hasLength(1));
     expect(fileEdit.edits[0].replacement,
@@ -2158,7 +2249,7 @@
   }
 
   test_createFile_forPart() async {
-    testFile = '/my/project/bin/test.dart';
+    testFile = convertPath('/my/project/bin/test.dart');
     await resolveTestUnit('''
 library my.lib;
 part 'my_part.dart';
@@ -2170,7 +2261,7 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/my/project/bin/my_part.dart');
+    expect(fileEdit.file, convertPath('/my/project/bin/my_part.dart'));
     expect(fileEdit.fileStamp, -1);
     expect(fileEdit.edits, hasLength(1));
     expect(fileEdit.edits[0].replacement, contains('part of my.lib;'));
@@ -2192,7 +2283,7 @@
     SourceFactory sourceFactory = new SourceFactory(
         [new DartUriResolver(sdk), pkgResolver, resourceResolver]);
     driver.configure(sourceFactory: sourceFactory);
-    testUnit = (await driver.getResult(testFile)).unit;
+    testUnit = (await driver.getResult(convertPath(testFile))).unit;
     // prepare fix
     AnalysisError error = await _findErrorToFix();
     fix = await _assertHasFix(DartFixKind.CREATE_FILE, error);
@@ -2201,7 +2292,7 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/my/lib/my_part.dart');
+    expect(fileEdit.file, convertPath('/my/lib/my_part.dart'));
     expect(fileEdit.fileStamp, -1);
     expect(fileEdit.edits, hasLength(1));
     expect(fileEdit.edits[0].replacement, contains('part of my.lib;'));
@@ -5368,7 +5459,7 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/test2.dart');
+    expect(fileEdit.file, convertPath('/test2.dart'));
     expect(SourceEdit.applySequence(code2, fileEdit.edits), r'''
 library test2;
 import 'test3.dart' as bbb;
@@ -5401,7 +5492,7 @@
     List<SourceFileEdit> fileEdits = change.edits;
     expect(fileEdits, hasLength(1));
     SourceFileEdit fileEdit = change.edits[0];
-    expect(fileEdit.file, '/test2.dart');
+    expect(fileEdit.file, convertPath('/test2.dart'));
     expect(SourceEdit.applySequence(code2, fileEdit.edits), r'''
 library test2;
 class D {
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 03a65f2..0d528d5 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -1273,17 +1273,15 @@
 
   void _assertSingleLinkedEditGroup(
       {int length, List<int> offsets, List<String> names}) {
-    String positionsString = offsets
-        .map((offset) => '{"file": "$testFile", "offset": $offset}')
-        .join(',');
-    String suggestionsString =
-        names.map((name) => '{"value": "$name", "kind": "VARIABLE"}').join(',');
-    _assertSingleLinkedEditGroupJson('''
-{
-  "length": $length,
-  "positions": [$positionsString],
-  "suggestions": [$suggestionsString]
-}''');
+    var positions =
+        offsets.map((offset) => {"file": testFile, "offset": offset});
+    var suggestions = names.map((name) => {"value": name, "kind": "VARIABLE"});
+    var expected = <String, dynamic>{
+      "length": length,
+      "positions": positions.toList(),
+      "suggestions": suggestions.toList()
+    };
+    _assertSingleLinkedEditGroupJson(JSON.encode(expected));
   }
 
   void _assertSingleLinkedEditGroupJson(String expectedJsonString) {
diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart
index 083c3f2..96f1aa7 100644
--- a/pkg/analyzer/lib/src/command_line/arguments.dart
+++ b/pkg/analyzer/lib/src/command_line/arguments.dart
@@ -168,25 +168,30 @@
  * then remove the [ddc] named argument from this method.
  */
 void defineAnalysisArguments(ArgParser parser, {bool hide: true, ddc: false}) {
-  parser.addOption(sdkPathOption, help: 'The path to the Dart SDK.');
+  parser.addOption(sdkPathOption,
+      help: 'The path to the Dart SDK.', hide: ddc && hide);
   parser.addOption(analysisOptionsFileOption,
-      help: 'Path to an analysis options file.');
+      help: 'Path to an analysis options file.', hide: ddc && hide);
   parser.addOption(packageRootOption,
       help: 'The path to a package root directory (deprecated). '
-          'This option cannot be used with --packages.');
+          'This option cannot be used with --packages.',
+      hide: ddc && hide);
   parser.addFlag(strongModeFlag,
       help: 'Enable strong static checks (https://goo.gl/DqcBsw).',
-      defaultsTo: ddc);
+      defaultsTo: ddc,
+      hide: ddc);
   parser.addFlag(declarationCastsFlag,
       negatable: true,
-      help:
-          'Disable declaration casts in strong mode (https://goo.gl/cTLz40).');
+      help: 'Disable declaration casts in strong mode (https://goo.gl/cTLz40).',
+      hide: ddc && hide);
   parser.addFlag(implicitCastsFlag,
       negatable: true,
-      help: 'Disable implicit casts in strong mode (https://goo.gl/cTLz40).');
+      help: 'Disable implicit casts in strong mode (https://goo.gl/cTLz40).',
+      hide: ddc && hide);
   parser.addFlag(noImplicitDynamicFlag,
       negatable: false,
-      help: 'Disable implicit dynamic (https://goo.gl/m0UgXD).');
+      help: 'Disable implicit dynamic (https://goo.gl/m0UgXD).',
+      hide: ddc && hide);
 
   //
   // Hidden flags and options.
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
index fdb6d87..bd156df 100644
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
@@ -4,7 +4,6 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/kernel_metadata.dart';
-import 'package:analyzer/src/fasta/resolution_storer.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -27,7 +26,6 @@
 import 'package:front_end/src/fasta/source/stack_listener.dart';
 import 'package:front_end/src/fasta/target_implementation.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
 import 'package:front_end/src/fasta/uri_translator_impl.dart';
 import 'package:kernel/class_hierarchy.dart';
@@ -393,8 +391,7 @@
 
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope, TypeInferenceListener listener]) {
-    InstrumentedResolutionStorer storer;
+      [Scope formalParameterScope]) {
     var fileResolutions = _resolutions[builder.fileUri];
     if (fileResolutions == null) {
       fileResolutions = <CollectedResolution>[];
@@ -402,15 +399,8 @@
     }
     var resolution = new CollectedResolution();
     fileResolutions.add(resolution);
-    storer = new InstrumentedResolutionStorer(
-        resolution.kernelDeclarations,
-        resolution.kernelReferences,
-        resolution.kernelTypes,
-        resolution.declarationOffsets,
-        resolution.referenceOffsets,
-        resolution.typeOffsets);
     return super.createListener(
-        builder, memberScope, isInstanceMember, formalParameterScope, storer);
+        builder, memberScope, isInstanceMember, formalParameterScope);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index e560552..e09ed08 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -668,6 +668,12 @@
     push(ast.block(leftBracket, statements, rightBracket));
   }
 
+  void handleInvalidTopLevelBlock(Token token) {
+    // TODO(danrubel): Consider improved recovery by adding a this block
+    // as part of a synthetic top level function.
+    pop(); // block
+  }
+
   void endForStatement(Token forKeyword, Token leftParen, Token leftSeparator,
       int updateExpressionCount, Token endToken) {
     assert(optional('for', forKeyword));
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 9fd2c8f..f3042e4 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -509,13 +509,8 @@
         return;
       case "UNEXPECTED_TOKEN":
         String text = stringOrTokenLexeme();
-        if (text == ';') {
-          errorReporter?.reportErrorForOffset(
-              ParserErrorCode.EXPECTED_TOKEN, offset, length, [text]);
-        } else {
-          errorReporter?.reportErrorForOffset(
-              ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [text]);
-        }
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.UNEXPECTED_TOKEN, offset, length, [text]);
         return;
       case "UNTERMINATED_MULTI_LINE_COMMENT":
         errorReporter?.reportErrorForOffset(
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index b3774e2..454fc62 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/src/fasta/resolution_applier.dart';
 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_algebra.dart';
 
@@ -192,7 +191,7 @@
 
 /// Type inference listener that records inferred types for later use by
 /// [ResolutionApplier].
-class ResolutionStorer extends TypeInferenceListener {
+class ResolutionStorer {
   /// The offset that is used when the actual offset is not know.
   /// The consumer of information should not validate this offset.
   static const UNKNOWN_OFFSET = -2;
@@ -209,13 +208,11 @@
 
   ResolutionStorer(this._declarations, this._references, this._types);
 
-  @override
   void asExpressionExit(AsExpression expression, DartType inferredType) {
     _recordType(expression.type, expression.fileOffset);
     _recordType(inferredType, expression.fileOffset);
   }
 
-  @override
   void cascadeExpressionExit(Let expression, DartType inferredType) {
     // Overridden so that the type of the expression will not be recorded. We
     // don't need to record the type because the type is always the same as the
@@ -223,7 +220,6 @@
     // correctly apply the type even if we recorded it.
   }
 
-  @override
   void catchStatementEnter(Catch node) {
     _recordType(node.guard, node.fileOffset);
 
@@ -240,7 +236,6 @@
     }
   }
 
-  @override
   void constructorInvocationEnter(InvocationExpression expression,
       String prefixName, DartType typeContext) {
     _recordImportPrefix(prefixName);
@@ -248,7 +243,6 @@
     _deferType(expression.fileOffset);
   }
 
-  @override
   void constructorInvocationExit(
       InvocationExpression expression, DartType inferredType) {
     _replaceType(inferredType);
@@ -261,7 +255,6 @@
     }
   }
 
-  @override
   void fieldInitializerEnter(FieldInitializer initializer) {
     _recordReference(initializer.field, initializer.fileOffset);
   }
@@ -271,7 +264,6 @@
     assert(_deferredTypeSlots.isEmpty);
   }
 
-  @override
   void forInStatementEnter(ForInStatement statement,
       VariableDeclaration variable, Expression write) {
     if (variable != null) {
@@ -295,7 +287,6 @@
     }
   }
 
-  @override
   void forInStatementExit(
       ForInStatement statement, VariableDeclaration variable) {
     if (variable != null) {
@@ -305,47 +296,35 @@
 
   void functionDeclarationEnter(FunctionDeclaration statement) {
     _recordDeclaration(statement.variable, statement.fileOffset);
-    super.functionDeclarationEnter(statement);
   }
 
-  @override
   void functionExpressionEnter(
       FunctionExpression expression, DartType typeContext) {
     _recordDeclaration(expression, expression.fileOffset);
-    super.functionExpressionEnter(expression, typeContext);
   }
 
-  @override
   void functionExpressionExit(
       FunctionExpression expression, DartType inferredType) {
     // We don't need to record the inferred type.
     // It is already set in the function declaration.
   }
 
-  @override
   void genericExpressionEnter(
-      String expressionType, Expression expression, DartType typeContext) {
-    super.genericExpressionEnter(expressionType, expression, typeContext);
-  }
+      String expressionType, Expression expression, DartType typeContext) {}
 
-  @override
   void genericExpressionExit(
       String expressionType, Expression expression, DartType inferredType) {
     _recordType(inferredType, expression.fileOffset);
-    super.genericExpressionExit(expressionType, expression, inferredType);
   }
 
-  @override
   void ifNullBeforeRhs(Expression expression) {
     _deferType(expression.fileOffset);
   }
 
-  @override
   void ifNullExit(Expression expression, DartType inferredType) {
     _replaceType(inferredType);
   }
 
-  @override
   void indexAssignAfterReceiver(Expression write, DartType typeContext) {
     _deferReference(write.fileOffset);
     _recordType(const IndexAssignNullFunctionType(), write.fileOffset);
@@ -354,7 +333,6 @@
     _deferType(write.fileOffset);
   }
 
-  @override
   void indexAssignExit(Expression expression, Expression write,
       Member writeMember, Procedure combiner, DartType inferredType) {
     _replaceReference(writeMember);
@@ -364,7 +342,6 @@
     _recordType(inferredType, write.fileOffset);
   }
 
-  @override
   void isExpressionExit(IsExpression expression, DartType inferredType) {
     _recordType(expression.type, expression.fileOffset);
     _recordType(inferredType, expression.fileOffset);
@@ -376,18 +353,15 @@
     _recordType(inferredType, expression.fileOffset);
   }
 
-  @override
   void logicalExpressionBeforeRhs(LogicalExpression expression) {
     _deferType(expression.fileOffset);
   }
 
-  @override
   void logicalExpressionExit(
       LogicalExpression expression, DartType inferredType) {
     _replaceType(inferredType);
   }
 
-  @override
   void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {
     if (!isImplicitCall) {
       // When the invocation target is `VariableGet`, we record the target
@@ -399,10 +373,8 @@
     _deferType(expression.fileOffset); // invoke type
     _deferType(expression.fileOffset); // type arguments
     _deferType(expression.fileOffset); // result type
-    super.methodInvocationBeforeArgs(expression, isImplicitCall);
   }
 
-  @override
   void methodInvocationExit(
       Expression expression,
       Arguments arguments,
@@ -427,10 +399,8 @@
       _replaceReference(interfaceMember);
       _replaceType(const NullType()); // callee type
     }
-    super.genericExpressionExit("methodInvocation", expression, inferredType);
   }
 
-  @override
   void methodInvocationExitCall(
       Expression expression,
       Arguments arguments,
@@ -453,18 +423,14 @@
       _replaceReference(const NullNode('explicit-call'));
       _replaceType(const NullType()); // callee type
     }
-    super.genericExpressionExit("methodInvocation", expression, inferredType);
   }
 
-  @override
   void propertyAssignEnter(
       Expression expression, Expression write, DartType typeContext) {
     _deferReference(write.fileOffset);
     _deferType(write.fileOffset);
-    super.propertyAssignEnter(expression, write, typeContext);
   }
 
-  @override
   void propertyAssignExit(
       Expression expression,
       Expression write,
@@ -480,25 +446,20 @@
     _recordType(inferredType, write.fileOffset);
   }
 
-  @override
   void propertyGetExit(
       Expression expression, Member member, DartType inferredType) {
     _recordReference(new MemberGetterNode(member), expression.fileOffset);
-    super.propertyGetExit(expression, member, inferredType);
   }
 
-  @override
   void propertyGetExitCall(Expression expression, DartType inferredType) {
     _recordReference(const NullNode('explicit-call'), expression.fileOffset);
     _recordType(const NullType(), expression.fileOffset);
   }
 
-  @override
   void redirectingInitializerEnter(RedirectingInitializer initializer) {
     _recordReference(initializer.target, initializer.fileOffset);
   }
 
-  @override
   void staticAssignEnter(
       Expression expression,
       String prefixName,
@@ -516,11 +477,8 @@
 
     _deferReference(write.fileOffset);
     _deferType(write.fileOffset);
-    super.staticAssignEnter(
-        expression, prefixName, targetOffset, targetClass, write, typeContext);
   }
 
-  @override
   void staticAssignExit(
       Expression expression,
       Expression write,
@@ -535,7 +493,6 @@
     _recordType(inferredType, write.fileOffset);
   }
 
-  @override
   void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
       Class targetClass, DartType typeContext) {
     // if there was an import prefix, record it.
@@ -545,18 +502,13 @@
       _recordReference(targetClass, targetOffset);
       _recordType(targetClass.rawType, targetOffset);
     }
-    super.staticGetEnter(
-        expression, prefixName, targetOffset, targetClass, typeContext);
   }
 
-  @override
   void staticGetExit(StaticGet expression, DartType inferredType) {
     _recordReference(
         new MemberGetterNode(expression.target), expression.fileOffset);
-    super.staticGetExit(expression, inferredType);
   }
 
-  @override
   void staticInvocationEnter(StaticInvocation expression, String prefixName,
       int targetOffset, Class targetClass, DartType typeContext) {
     // if there was an import prefix, record it.
@@ -585,11 +537,8 @@
     _deferType(expression.arguments.fileOffset); // invoke type
     _deferType(expression.arguments.fileOffset); // type arguments
     _deferType(expression.arguments.fileOffset); // result type
-    super.staticInvocationEnter(
-        expression, prefixName, targetOffset, targetClass, typeContext);
   }
 
-  @override
   void staticInvocationExit(
       StaticInvocation expression,
       FunctionType calleeType,
@@ -603,40 +552,32 @@
         : substitution.substituteType(calleeType.withoutTypeParameters);
     _replaceType(invokeType);
     _replaceType(const NullType()); // callee type
-    super.genericExpressionExit("staticInvocation", expression, inferredType);
   }
 
-  @override
   void stringConcatenationExit(
       StringConcatenation expression, DartType inferredType) {
     // We don't need the type - we already know that it is String.
     // Moreover, the file offset for StringConcatenation is `-1`.
   }
 
-  @override
   void thisExpressionExit(ThisExpression expression, DartType inferredType) {}
 
   void typeLiteralEnter(@override TypeLiteral expression, String prefixName,
       DartType typeContext) {
     // if there was an import prefix, record it.
     _recordImportPrefix(prefixName);
-    super.typeLiteralEnter(expression, prefixName, typeContext);
   }
 
   void typeLiteralExit(TypeLiteral expression, DartType inferredType) {
     _recordReference(expression.type, expression.fileOffset);
-    super.typeLiteralExit(expression, inferredType);
   }
 
-  @override
   void variableAssignEnter(
       Expression expression, DartType typeContext, Expression write) {
     _deferReference(write.fileOffset);
     _deferType(write.fileOffset);
-    super.variableAssignEnter(expression, typeContext, write);
   }
 
-  @override
   void variableAssignExit(Expression expression, DartType writeContext,
       Expression write, Procedure combiner, DartType inferredType) {
     _replaceReference(write is VariableSet
@@ -648,21 +589,16 @@
     _recordType(inferredType, write.fileOffset);
   }
 
-  @override
   void variableDeclarationEnter(VariableDeclaration statement) {
     _recordDeclaration(statement, statement.fileOffset);
     _deferType(statement.fileOffset);
-    super.variableDeclarationEnter(statement);
   }
 
-  @override
   void variableDeclarationExit(
       VariableDeclaration statement, DartType inferredType) {
     _replaceType(statement.type);
-    super.variableDeclarationExit(statement, inferredType);
   }
 
-  @override
   void variableGetExit(VariableGet expression, DartType inferredType) {
     /// Return `true` if the given [variable] declaration occurs in a let
     /// expression that is, or is part of, a cascade expression.
diff --git a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
index 852f5ef..6f6b6e5 100644
--- a/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
+++ b/pkg/analyzer/lib/src/test_utilities/resource_provider_mixin.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:io';
+
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 
@@ -65,4 +67,20 @@
           .join(part1, part2, part3, part4, part5, part6, part7, part8);
 
   String convertPath(String path) => resourceProvider.convertPath(path);
+
+  /// Convert the given [path] to be a valid import uri for this provider's path context.
+  String convertPathForImport(String path) {
+    path = resourceProvider.convertPath(path);
+
+    // On Windows, absolute import paths are not quite the same as a normal fs path.
+    // C:\test.dart must be imported as one of:
+    //   import "file:///C:/test.dart"
+    //   import "/C:/test.dart"
+    if (Platform.isWindows && resourceProvider.pathContext.isAbsolute(path)) {
+      // The .path on a file Uri is in the form "/C:/test.dart"
+      path = new Uri.file(path).path;
+    }
+
+    return path;
+  }
 }
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
index 7ffdcb3..629ddde 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index 5795f7b..f766e7c 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
index 410dd7e..34fc3ca 100644
--- a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(ErrorSuppressionTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(ErrorSuppressionTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index 9f7c1e0..6f6314d 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(HintCodeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(HintCodeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
index 1268f80..aab1574 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(NonErrorResolverTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(NonErrorResolverTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
index 62c81bc..082ef32 100644
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
@@ -11,7 +11,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(NonHintCodeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(NonHintCodeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index bee7666..e300956 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -4705,7 +4705,7 @@
                 expectedError(ParserErrorCode.EXPECTED_STRING_LITERAL, 8, 1),
                 expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 1),
-                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 9, 1)
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 9, 1)
               ]
             : [
                 expectedError(
@@ -5261,14 +5261,8 @@
   }
 
   void test_unexpectedToken_semicolonBetweenCompilationUnitMembers() {
-    parseCompilationUnit("int x; ; int y;", errors: [
-      expectedError(
-          usingFastaParser
-              ? ParserErrorCode.EXPECTED_EXECUTABLE
-              : ParserErrorCode.UNEXPECTED_TOKEN,
-          7,
-          1)
-    ]);
+    parseCompilationUnit("int x; ; int y;",
+        errors: [expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 7, 1)]);
   }
 
   void test_unterminatedString_at_eof() {
@@ -10372,7 +10366,6 @@
             // TODO(danrubel): Consolidate and improve error message.
             ? [
                 ParserErrorCode.EXPECTED_EXECUTABLE,
-                ParserErrorCode.EXPECTED_EXECUTABLE,
                 ParserErrorCode.EXPECTED_TOKEN
               ]
             : [ParserErrorCode.EXPECTED_TOKEN]);
diff --git a/pkg/analyzer/test/generated/resolver_kernel_test.dart b/pkg/analyzer/test/generated/resolver_kernel_test.dart
index bc11b8b..a3537a4 100644
--- a/pkg/analyzer/test/generated/resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/resolver_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(StrictModeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(StrictModeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
index 3081d1d..07c4b89 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
index b829db5..f864c75 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
@@ -8,8 +8,10 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
-    defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
+    // defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index 4f7c884..da2d2e9 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -8,7 +8,9 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(StaticWarningCodeTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(StaticWarningCodeTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index f3bbd6c..433d68c 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -9,9 +9,11 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
-    defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
-    defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
+    // defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
+    // defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
index 4e92154..19c8d39 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
@@ -9,8 +9,10 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(AnalysisDriverTest_Kernel);
-    defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(AnalysisDriverTest_Kernel);
+    // defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
   });
 }
 
diff --git a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
index f7fa146..3cbbd73 100644
--- a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
@@ -55,11 +55,8 @@
 class B = Object with A {}
 ''',
         // TODO(danrubel): Consolidate and improve error message.
-        [
-          ParserErrorCode.EXPECTED_EXECUTABLE,
-          ParserErrorCode.EXPECTED_EXECUTABLE,
-          ParserErrorCode.EXPECTED_TOKEN
-        ], '''
+        [ParserErrorCode.EXPECTED_EXECUTABLE, ParserErrorCode.EXPECTED_TOKEN],
+        '''
 class B = Object with A;
 ''');
   }
@@ -255,7 +252,7 @@
   void test_extraSemicolon_afterLastTopLevelMember() {
     testRecovery('''
 foo() {};
-''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+''', [ParserErrorCode.UNEXPECTED_TOKEN], '''
 foo() {}
 ''');
   }
@@ -301,7 +298,7 @@
     testRecovery('''
 foo() {};
 bar() {}
-''', [ParserErrorCode.EXPECTED_EXECUTABLE], '''
+''', [ParserErrorCode.UNEXPECTED_TOKEN], '''
 foo() {}
 bar() {}
 ''');
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 5c1d95a..6e3b75d 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.dart
@@ -499,6 +499,9 @@
   Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) {
     return skipFunctionBody(token, isExpression, allowAbstract);
   }
+
+  @override
+  Token parseInvalidBlock(Token token) => skipBlock(token);
 }
 
 /// "Mini AST" representation of a string literal.
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 2dbafe6..6158de5 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -31,14 +31,18 @@
     defineReflectiveTests(BuildModeTest);
     defineReflectiveTests(ExitCodesTest);
     defineReflectiveTests(ExitCodesTest_PreviewDart2);
-    defineReflectiveTests(ExitCodesTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(ExitCodesTest_UseCFE);
     defineReflectiveTests(LinterTest);
     defineReflectiveTests(LinterTest_PreviewDart2);
     defineReflectiveTests(LinterTest_UseCFE);
     defineReflectiveTests(NonDartFilesTest);
     defineReflectiveTests(OptionsTest);
     defineReflectiveTests(OptionsTest_PreviewDart2);
-    defineReflectiveTests(OptionsTest_UseCFE);
+    // TODO(scheglov): Restore similar test coverage when the front-end API
+    // allows it.  See https://github.com/dart-lang/sdk/issues/32258.
+    // defineReflectiveTests(OptionsTest_UseCFE);
   }, name: 'Driver');
 }
 
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 171f216..83f9c30 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -632,16 +632,16 @@
       optype.includeConstructorSuggestions = true;
       optype.constructorSuggestionsFilter = (DartType dartType, int relevance) {
         DartType localTypeAssertion = null;
-        if (node.parent is VariableDeclaration) {
-          VariableDeclaration varDeclaration =
-              node.parent as VariableDeclaration;
-          localTypeAssertion = resolutionMap
-              .elementDeclaredByVariableDeclaration(varDeclaration)
-              ?.type;
-        } else if (node.parent is AssignmentExpression) {
-          AssignmentExpression assignmentExpression =
-              node.parent as AssignmentExpression;
-          localTypeAssertion = assignmentExpression.leftHandSide.staticType;
+        AstNode parent = node.parent;
+        if (parent is VariableDeclaration) {
+          localTypeAssertion = parent.element?.type;
+        } else if (parent is AssignmentExpression) {
+          localTypeAssertion = parent.leftHandSide.staticType;
+        } else if (node.staticParameterElement != null) {
+          localTypeAssertion = node.staticParameterElement.type;
+        } else if (parent is NamedExpression &&
+            parent.staticParameterElement != null) {
+          localTypeAssertion = parent.staticParameterElement.type;
         }
         if (localTypeAssertion == null ||
             dartType == null ||
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 4e7da14..c419478 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -13,6 +13,7 @@
   static const String analyzeOnly = '--analyze-only';
   static const String analyzeSignaturesOnly = '--analyze-signatures-only';
   static const String disableInlining = '--disable-inlining';
+  static const String disableProgramSplit = '--disable-program-split';
   static const String disableDiagnosticColors = '--disable-diagnostic-colors';
   static const String disableNativeLiveTypeAnalysis =
       '--disable-native-live-type-analysis';
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index aa51632..3b253de 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -538,8 +538,8 @@
         context,
         node,
         new ConcatenateConstantExpression([left.expression, right.expression]),
-        constantSystem.createString(
-            leftValue.primitiveValue + rightValue.primitiveValue));
+        constantSystem
+            .createString(leftValue.stringValue + rightValue.stringValue));
   }
 
   AstConstant visitStringInterpolation(StringInterpolation node) {
@@ -551,7 +551,7 @@
     subexpressions.add(initialString.expression);
     StringBuffer sb = new StringBuffer();
     StringConstantValue initialStringValue = initialString.value;
-    sb.write(initialStringValue.primitiveValue);
+    sb.write(initialStringValue.stringValue);
     for (StringInterpolationPart part in node.parts) {
       AstConstant subexpression = evaluate(part.expression);
       if (subexpression == null || subexpression.isError) {
@@ -560,8 +560,17 @@
       subexpressions.add(subexpression.expression);
       ConstantValue expression = subexpression.value;
       if (expression.isPrimitive) {
-        PrimitiveConstantValue primitive = expression;
-        sb.write(primitive.primitiveValue);
+        if (expression is IntConstantValue) {
+          sb.write(expression.intValue);
+        } else if (expression is DoubleConstantValue) {
+          sb.write(expression.doubleValue);
+        } else if (expression is StringConstantValue) {
+          sb.write(expression.stringValue);
+        } else if (expression is BoolConstantValue) {
+          sb.write(expression.boolValue);
+        } else if (expression is NullConstantValue) {
+          sb.write(null);
+        }
       } else {
         // TODO(johnniwinther): Specialize message to indicated that the problem
         // is not constness but the types of the const expressions.
@@ -571,7 +580,7 @@
       if (partString == null) return null;
       subexpressions.add(partString.expression);
       StringConstantValue partStringValue = partString.value;
-      sb.write(partStringValue.primitiveValue);
+      sb.write(partStringValue.stringValue);
     }
     return new AstConstant(
         context,
@@ -663,7 +672,7 @@
           AstConstant left = evaluate(send.receiver);
           if (left != null && left.value.isString) {
             StringConstantValue stringConstantValue = left.value;
-            String string = stringConstantValue.primitiveValue;
+            String string = stringConstantValue.stringValue;
             IntConstantValue length = constantSystem.createInt(string.length);
             result = new AstConstant(context, send,
                 new StringLengthConstantExpression(left.expression), length);
@@ -826,9 +835,7 @@
         node,
         new ConditionalConstantExpression(condition.expression,
             thenExpression.expression, elseExpression.expression),
-        boolCondition.primitiveValue
-            ? thenExpression.value
-            : elseExpression.value);
+        boolCondition.boolValue ? thenExpression.value : elseExpression.value);
   }
 
   AstConstant visitSendSet(SendSet node) {
@@ -1039,7 +1046,7 @@
           {'fromType': type, 'toType': commonElements.stringType});
     }
 
-    String name = firstArgument.primitiveValue;
+    String name = firstArgument.stringValue;
     String value = compiler.fromEnvironment(name);
 
     AstConstant createEvaluatedConstant(ConstantValue value) {
diff --git a/pkg/compiler/lib/src/constant_system_dart.dart b/pkg/compiler/lib/src/constant_system_dart.dart
index 210a120..36ec90b 100644
--- a/pkg/compiler/lib/src/constant_system_dart.dart
+++ b/pkg/compiler/lib/src/constant_system_dart.dart
@@ -17,7 +17,7 @@
   ConstantValue fold(ConstantValue constant) {
     if (constant.isInt) {
       IntConstantValue intConstant = constant;
-      return DART_CONSTANT_SYSTEM.createInt(~intConstant.primitiveValue);
+      return DART_CONSTANT_SYSTEM.createInt(~intConstant.intValue);
     }
     return null;
   }
@@ -29,11 +29,11 @@
   ConstantValue fold(ConstantValue constant) {
     if (constant.isInt) {
       IntConstantValue intConstant = constant;
-      return DART_CONSTANT_SYSTEM.createInt(-intConstant.primitiveValue);
+      return DART_CONSTANT_SYSTEM.createInt(-intConstant.intValue);
     }
     if (constant.isDouble) {
       DoubleConstantValue doubleConstant = constant;
-      return DART_CONSTANT_SYSTEM.createDouble(-doubleConstant.primitiveValue);
+      return DART_CONSTANT_SYSTEM.createDouble(-doubleConstant.doubleValue);
     }
     return null;
   }
@@ -45,7 +45,7 @@
   ConstantValue fold(ConstantValue constant) {
     if (constant.isBool) {
       BoolConstantValue boolConstant = constant;
-      return DART_CONSTANT_SYSTEM.createBool(!boolConstant.primitiveValue);
+      return DART_CONSTANT_SYSTEM.createBool(!boolConstant.boolValue);
     }
     return null;
   }
@@ -60,8 +60,7 @@
     if (left.isInt && right.isInt) {
       IntConstantValue leftInt = left;
       IntConstantValue rightInt = right;
-      int resultValue =
-          foldInts(leftInt.primitiveValue, rightInt.primitiveValue);
+      int resultValue = foldInts(leftInt.intValue, rightInt.intValue);
       if (resultValue == null) return null;
       return DART_CONSTANT_SYSTEM.createInt(resultValue);
     }
@@ -122,8 +121,7 @@
     if (left.isBool && right.isBool) {
       BoolConstantValue leftBool = left;
       BoolConstantValue rightBool = right;
-      bool resultValue =
-          foldBools(leftBool.primitiveValue, rightBool.primitiveValue);
+      bool resultValue = foldBools(leftBool.boolValue, rightBool.boolValue);
       return DART_CONSTANT_SYSTEM.createBool(resultValue);
     }
     return null;
@@ -154,9 +152,11 @@
       NumConstantValue rightNum = right;
       num foldedValue;
       if (left.isInt && right.isInt) {
-        foldedValue = foldInts(leftNum.primitiveValue, rightNum.primitiveValue);
+        IntConstantValue leftInt = leftNum;
+        IntConstantValue rightInt = rightNum;
+        foldedValue = foldInts(leftInt.intValue, rightInt.intValue);
       } else {
-        foldedValue = foldNums(leftNum.primitiveValue, rightNum.primitiveValue);
+        foldedValue = foldNums(leftNum.doubleValue, rightNum.doubleValue);
       }
       // A division by 0 means that we might not have a folded value.
       if (foldedValue == null) return null;
@@ -243,17 +243,17 @@
     if (left.isInt && right.isInt) {
       IntConstantValue leftInt = left;
       IntConstantValue rightInt = right;
-      int result = leftInt.primitiveValue + rightInt.primitiveValue;
+      int result = leftInt.intValue + rightInt.intValue;
       return DART_CONSTANT_SYSTEM.createInt(result);
     } else if (left.isNum && right.isNum) {
       NumConstantValue leftNum = left;
       NumConstantValue rightNum = right;
-      double result = leftNum.primitiveValue + rightNum.primitiveValue;
+      double result = leftNum.doubleValue + rightNum.doubleValue;
       return DART_CONSTANT_SYSTEM.createDouble(result);
     } else if (left.isString && right.isString) {
       StringConstantValue leftString = left;
       StringConstantValue rightString = right;
-      String result = leftString.primitiveValue + rightString.primitiveValue;
+      String result = leftString.stringValue + rightString.stringValue;
       return DART_CONSTANT_SYSTEM.createString(result);
     } else {
       return null;
@@ -267,20 +267,28 @@
   const RelationalNumOperation();
   ConstantValue fold(ConstantValue left, ConstantValue right) {
     if (!left.isNum || !right.isNum) return null;
-    NumConstantValue leftNum = left;
-    NumConstantValue rightNum = right;
-    bool foldedValue =
-        foldNums(leftNum.primitiveValue, rightNum.primitiveValue);
+    bool foldedValue;
+    if (left.isInt && right.isInt) {
+      IntConstantValue leftInt = left;
+      IntConstantValue rightInt = right;
+      foldedValue = foldInts(leftInt.intValue, rightInt.intValue);
+    } else {
+      NumConstantValue leftNum = left;
+      NumConstantValue rightNum = right;
+      foldedValue = foldNums(leftNum.doubleValue, rightNum.doubleValue);
+    }
     assert(foldedValue != null);
     return DART_CONSTANT_SYSTEM.createBool(foldedValue);
   }
 
+  bool foldInts(int left, int right);
   bool foldNums(num left, num right);
 }
 
 class LessOperation extends RelationalNumOperation {
   final String name = '<';
   const LessOperation();
+  bool foldInts(int left, int right) => left < right;
   bool foldNums(num left, num right) => left < right;
   apply(left, right) => left < right;
 }
@@ -288,6 +296,7 @@
 class LessEqualOperation extends RelationalNumOperation {
   final String name = '<=';
   const LessEqualOperation();
+  bool foldInts(int left, int right) => left <= right;
   bool foldNums(num left, num right) => left <= right;
   apply(left, right) => left <= right;
 }
@@ -295,6 +304,7 @@
 class GreaterOperation extends RelationalNumOperation {
   final String name = '>';
   const GreaterOperation();
+  bool foldInts(int left, int right) => left > right;
   bool foldNums(num left, num right) => left > right;
   apply(left, right) => left > right;
 }
@@ -302,6 +312,7 @@
 class GreaterEqualOperation extends RelationalNumOperation {
   final String name = '>=';
   const GreaterEqualOperation();
+  bool foldInts(int left, int right) => left >= right;
   bool foldNums(num left, num right) => left >= right;
   apply(left, right) => left >= right;
 }
@@ -310,14 +321,22 @@
   final String name = '==';
   const EqualsOperation();
   ConstantValue fold(ConstantValue left, ConstantValue right) {
-    if (left.isNum && right.isNum) {
-      // Numbers need to be treated specially because: NaN != NaN, -0.0 == 0.0,
-      // and 1 == 1.0.
-      NumConstantValue leftNum = left;
-      NumConstantValue rightNum = right;
-      bool result = leftNum.primitiveValue == rightNum.primitiveValue;
+    // Numbers need to be treated specially because: NaN != NaN, -0.0 == 0.0,
+    // and 1 == 1.0.
+    if (left.isInt && right.isInt) {
+      IntConstantValue leftInt = left;
+      IntConstantValue rightInt = right;
+      bool result = leftInt.intValue == rightInt.intValue;
       return DART_CONSTANT_SYSTEM.createBool(result);
     }
+
+    if (left.isNum && right.isNum) {
+      NumConstantValue leftNum = left;
+      NumConstantValue rightNum = right;
+      bool result = leftNum.doubleValue == rightNum.doubleValue;
+      return DART_CONSTANT_SYSTEM.createBool(result);
+    }
+
     if (left.isConstructedObject) {
       // Unless we know that the user-defined object does not implement the
       // equality operator we cannot fold here.
@@ -367,8 +386,8 @@
     if (left.isString && right.isInt) {
       StringConstantValue stringConstant = left;
       IntConstantValue indexConstant = right;
-      String string = stringConstant.primitiveValue;
-      int index = indexConstant.primitiveValue;
+      String string = stringConstant.stringValue;
+      int index = indexConstant.intValue;
       if (index < 0 || index >= string.length) return null;
       int value = string.codeUnitAt(index);
       return DART_CONSTANT_SYSTEM.createInt(value);
diff --git a/pkg/compiler/lib/src/constants/expressions.dart b/pkg/compiler/lib/src/constants/expressions.dart
index ae50ac0..a28c018 100644
--- a/pkg/compiler/lib/src/constants/expressions.dart
+++ b/pkg/compiler/lib/src/constants/expressions.dart
@@ -194,17 +194,11 @@
   bool get isImplicit => false;
 }
 
-/// A boolean, int, double, string, or null constant.
-abstract class PrimitiveConstantExpression extends ConstantExpression {
-  /// The primitive value of this constant expression.
-  get primitiveValue;
-}
-
 /// Boolean literal constant.
-class BoolConstantExpression extends PrimitiveConstantExpression {
-  final bool primitiveValue;
+class BoolConstantExpression extends ConstantExpression {
+  final bool boolValue;
 
-  BoolConstantExpression(this.primitiveValue);
+  BoolConstantExpression(this.boolValue);
 
   ConstantExpressionKind get kind => ConstantExpressionKind.BOOL;
 
@@ -214,21 +208,21 @@
 
   @override
   void _createStructuredText(StringBuffer sb) {
-    sb.write('Bool(value=${primitiveValue})');
+    sb.write('Bool(value=${boolValue})');
   }
 
   @override
   ConstantValue evaluate(
       EvaluationEnvironment environment, ConstantSystem constantSystem) {
-    return constantSystem.createBool(primitiveValue);
+    return constantSystem.createBool(boolValue);
   }
 
   @override
-  int _computeHashCode() => 13 * primitiveValue.hashCode;
+  int _computeHashCode() => 13 * boolValue.hashCode;
 
   @override
   bool _equals(BoolConstantExpression other) {
-    return primitiveValue == other.primitiveValue;
+    return boolValue == other.boolValue;
   }
 
   @override
@@ -237,10 +231,10 @@
 }
 
 /// Integer literal constant.
-class IntConstantExpression extends PrimitiveConstantExpression {
-  final int primitiveValue;
+class IntConstantExpression extends ConstantExpression {
+  final int intValue;
 
-  IntConstantExpression(this.primitiveValue);
+  IntConstantExpression(this.intValue);
 
   ConstantExpressionKind get kind => ConstantExpressionKind.INT;
 
@@ -250,21 +244,21 @@
 
   @override
   void _createStructuredText(StringBuffer sb) {
-    sb.write('Int(value=${primitiveValue})');
+    sb.write('Int(value=${intValue})');
   }
 
   @override
   ConstantValue evaluate(
       EvaluationEnvironment environment, ConstantSystem constantSystem) {
-    return constantSystem.createInt(primitiveValue);
+    return constantSystem.createInt(intValue);
   }
 
   @override
-  int _computeHashCode() => 17 * primitiveValue.hashCode;
+  int _computeHashCode() => 17 * intValue.hashCode;
 
   @override
   bool _equals(IntConstantExpression other) {
-    return primitiveValue == other.primitiveValue;
+    return intValue == other.intValue;
   }
 
   @override
@@ -273,10 +267,10 @@
 }
 
 /// Double literal constant.
-class DoubleConstantExpression extends PrimitiveConstantExpression {
-  final double primitiveValue;
+class DoubleConstantExpression extends ConstantExpression {
+  final double doubleValue;
 
-  DoubleConstantExpression(this.primitiveValue);
+  DoubleConstantExpression(this.doubleValue);
 
   ConstantExpressionKind get kind => ConstantExpressionKind.DOUBLE;
 
@@ -286,21 +280,21 @@
 
   @override
   void _createStructuredText(StringBuffer sb) {
-    sb.write('Double(value=${primitiveValue})');
+    sb.write('Double(value=${doubleValue})');
   }
 
   @override
   ConstantValue evaluate(
       EvaluationEnvironment environment, ConstantSystem constantSystem) {
-    return constantSystem.createDouble(primitiveValue);
+    return constantSystem.createDouble(doubleValue);
   }
 
   @override
-  int _computeHashCode() => 19 * primitiveValue.hashCode;
+  int _computeHashCode() => 19 * doubleValue.hashCode;
 
   @override
   bool _equals(DoubleConstantExpression other) {
-    return primitiveValue == other.primitiveValue;
+    return doubleValue == other.doubleValue;
   }
 
   @override
@@ -309,10 +303,10 @@
 }
 
 /// String literal constant.
-class StringConstantExpression extends PrimitiveConstantExpression {
-  final String primitiveValue;
+class StringConstantExpression extends ConstantExpression {
+  final String stringValue;
 
-  StringConstantExpression(this.primitiveValue);
+  StringConstantExpression(this.stringValue);
 
   ConstantExpressionKind get kind => ConstantExpressionKind.STRING;
 
@@ -322,21 +316,21 @@
 
   @override
   void _createStructuredText(StringBuffer sb) {
-    sb.write('String(value=${primitiveValue})');
+    sb.write('String(value=${stringValue})');
   }
 
   @override
   ConstantValue evaluate(
       EvaluationEnvironment environment, ConstantSystem constantSystem) {
-    return constantSystem.createString(primitiveValue);
+    return constantSystem.createString(stringValue);
   }
 
   @override
-  int _computeHashCode() => 23 * primitiveValue.hashCode;
+  int _computeHashCode() => 23 * stringValue.hashCode;
 
   @override
   bool _equals(StringConstantExpression other) {
-    return primitiveValue == other.primitiveValue;
+    return stringValue == other.stringValue;
   }
 
   @override
@@ -345,7 +339,7 @@
 }
 
 /// Null literal constant.
-class NullConstantExpression extends PrimitiveConstantExpression {
+class NullConstantExpression extends ConstantExpression {
   NullConstantExpression();
 
   ConstantExpressionKind get kind => ConstantExpressionKind.NULL;
@@ -365,8 +359,6 @@
     return constantSystem.createNull();
   }
 
-  get primitiveValue => null;
-
   @override
   int _computeHashCode() => 29;
 
@@ -696,8 +688,17 @@
         continue;
       }
       if (value.isPrimitive) {
-        PrimitiveConstantValue primitive = value;
-        sb.write(primitive.primitiveValue);
+        if (value is StringConstantValue) {
+          sb.write(value.stringValue);
+        } else if (value is IntConstantValue) {
+          sb.write(value.intValue);
+        } else if (value is DoubleConstantValue) {
+          sb.write(value.doubleValue);
+        } else if (value is BoolConstantValue) {
+          sb.write(value.boolValue);
+        } else if (value is NullConstantValue) {
+          sb.write(null);
+        }
       } else {
         environment.reportError(
             expression, MessageKind.INVALID_CONSTANT_INTERPOLATION_TYPE, {
@@ -1450,7 +1451,7 @@
       return new NonConstantValue();
     } else {
       StringConstantValue stringValue = value;
-      return constantSystem.createInt(stringValue.primitiveValue.length);
+      return constantSystem.createInt(stringValue.stringValue.length);
     }
   }
 
@@ -1743,8 +1744,8 @@
     }
     if (isValid) {
       StringConstantValue nameStringConstantValue = nameConstantValue;
-      String text = environment
-          .readFromEnvironment(nameStringConstantValue.primitiveValue);
+      String text =
+          environment.readFromEnvironment(nameStringConstantValue.stringValue);
       if (text == 'true') {
         return constantSystem.createBool(true);
       } else if (text == 'false') {
@@ -1822,8 +1823,8 @@
     }
     if (isValid) {
       StringConstantValue nameStringConstantValue = nameConstantValue;
-      String text = environment
-          .readFromEnvironment(nameStringConstantValue.primitiveValue);
+      String text =
+          environment.readFromEnvironment(nameStringConstantValue.stringValue);
       int value;
       if (text != null) {
         value = int.parse(text, onError: (_) => null);
@@ -1903,8 +1904,8 @@
     }
     if (isValid) {
       StringConstantValue nameStringConstantValue = nameConstantValue;
-      String text = environment
-          .readFromEnvironment(nameStringConstantValue.primitiveValue);
+      String text =
+          environment.readFromEnvironment(nameStringConstantValue.stringValue);
       if (text == null) {
         return defaultConstantValue;
       } else {
@@ -1965,15 +1966,15 @@
     if (environment.enableAssertions) {
       // Boolean conversion:
       validAssert =
-          conditionValue is BoolConstantValue && conditionValue.primitiveValue;
+          conditionValue is BoolConstantValue && conditionValue.boolValue;
     } else {
       validAssert = true;
     }
     if (!validAssert) {
       if (message != null) {
         ConstantValue value = message.evaluate(environment, constantSystem);
-        if (value is PrimitiveConstantValue) {
-          String text = '${value.primitiveValue}';
+        if (value is StringConstantValue) {
+          String text = '${value.stringValue}';
           environment.reportError(this,
               MessageKind.INVALID_ASSERT_VALUE_MESSAGE, {'message': text});
         } else {
@@ -2125,34 +2126,30 @@
     return constant.accept(this, null);
   }
 
-  void visitPrimitive(PrimitiveConstantExpression exp) {
-    sb.write(exp.primitiveValue);
-  }
-
   @override
   void visitBool(BoolConstantExpression exp, [_]) {
-    visitPrimitive(exp);
+    sb.write(exp.boolValue);
   }
 
   @override
   void visitDouble(DoubleConstantExpression exp, [_]) {
-    visitPrimitive(exp);
+    sb.write(exp.doubleValue);
   }
 
   @override
   void visitInt(IntConstantExpression exp, [_]) {
-    visitPrimitive(exp);
+    sb.write(exp.intValue);
   }
 
   @override
   void visitNull(NullConstantExpression exp, [_]) {
-    visitPrimitive(exp);
+    sb.write(null);
   }
 
   @override
   void visitString(StringConstantExpression exp, [_]) {
     // TODO(johnniwinther): Ensure correct escaping.
-    sb.write('"${exp.primitiveValue}"');
+    sb.write('"${exp.stringValue}"');
   }
 
   @override
@@ -2226,7 +2223,7 @@
       if (expression.kind == ConstantExpressionKind.STRING) {
         StringConstantExpression string = expression;
         // TODO(johnniwinther): Ensure correct escaping.
-        sb.write('${string.primitiveValue}');
+        sb.write('${string.stringValue}');
       } else {
         sb.write(r"${");
         visit(expression);
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 115def6..230350a 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -153,26 +153,19 @@
 }
 
 abstract class PrimitiveConstantValue extends ConstantValue {
-  get primitiveValue;
-
   const PrimitiveConstantValue();
 
   bool get isPrimitive => true;
 
   bool operator ==(var other) {
-    if (other is! PrimitiveConstantValue) return false;
-    PrimitiveConstantValue otherPrimitive = other;
-    // We use == instead of 'identical' so that DartStrings compare correctly.
-    return primitiveValue == otherPrimitive.primitiveValue;
+    // Making this method abstract does not give us an error.
+    throw new UnsupportedError('PrimitiveConstant.==');
   }
 
   int get hashCode => throw new UnsupportedError('PrimitiveConstant.hashCode');
 
   // Primitive constants don't have dependencies.
   List<ConstantValue> getDependencies() => const <ConstantValue>[];
-
-  /// This value in Dart syntax.
-  String toDartText() => primitiveValue.toString();
 }
 
 class NullConstantValue extends PrimitiveConstantValue {
@@ -185,10 +178,10 @@
 
   bool get isNull => true;
 
-  get primitiveValue => null;
-
   DartType getType(CommonElements types) => types.nullType;
 
+  bool operator ==(other) => other is NullConstantValue;
+
   // The magic constant has no meaning. It is just a random value.
   int get hashCode => 785965825;
 
@@ -197,18 +190,21 @@
   ConstantValueKind get kind => ConstantValueKind.NULL;
 
   String toStructuredText() => 'NullConstant';
+
+  String toDartText() => 'null';
 }
 
 abstract class NumConstantValue extends PrimitiveConstantValue {
-  const NumConstantValue();
-
-  num get primitiveValue;
+  double get doubleValue;
 
   bool get isNum => true;
+
+  const NumConstantValue();
 }
 
 class IntConstantValue extends NumConstantValue {
-  final int primitiveValue;
+  final int intValue;
+  double get doubleValue => intValue.toDouble();
 
   factory IntConstantValue(int value) {
     switch (value) {
@@ -243,43 +239,42 @@
     }
   }
 
-  const IntConstantValue._internal(this.primitiveValue);
+  const IntConstantValue._internal(this.intValue);
 
   bool get isInt => true;
 
-  bool isUInt31() => primitiveValue >= 0 && primitiveValue < (1 << 31);
+  bool isUInt31() => intValue >= 0 && intValue < (1 << 31);
 
-  bool isUInt32() => primitiveValue >= 0 && primitiveValue < (1 << 32);
+  bool isUInt32() => intValue >= 0 && intValue < (1 << 32);
 
-  bool isPositive() => primitiveValue >= 0;
+  bool isPositive() => intValue >= 0;
 
-  bool get isZero => primitiveValue == 0;
+  bool get isZero => intValue == 0;
 
-  bool get isOne => primitiveValue == 1;
+  bool get isOne => intValue == 1;
 
   DartType getType(CommonElements types) => types.intType;
 
-  // We have to override the equality operator so that ints and doubles are
-  // treated as separate constants.
-  // The is [:!IntConstant:] check at the beginning of the function makes sure
-  // that we compare only equal to integer constants.
   bool operator ==(var other) {
+    // Ints and doubles are treated as separate constants.
     if (other is! IntConstantValue) return false;
     IntConstantValue otherInt = other;
-    return primitiveValue == otherInt.primitiveValue;
+    return intValue == otherInt.intValue;
   }
 
-  int get hashCode => primitiveValue & Hashing.SMI_MASK;
+  int get hashCode => intValue & Hashing.SMI_MASK;
 
   accept(ConstantValueVisitor visitor, arg) => visitor.visitInt(this, arg);
 
   ConstantValueKind get kind => ConstantValueKind.INT;
 
   String toStructuredText() => 'IntConstant(${toDartText()})';
+
+  String toDartText() => intValue.toString();
 }
 
 class DoubleConstantValue extends NumConstantValue {
-  final double primitiveValue;
+  final double doubleValue;
 
   factory DoubleConstantValue(double value) {
     if (value.isNaN) {
@@ -297,45 +292,47 @@
     }
   }
 
-  const DoubleConstantValue._internal(this.primitiveValue);
+  const DoubleConstantValue._internal(this.doubleValue);
 
   bool get isDouble => true;
 
-  bool get isNaN => primitiveValue.isNaN;
+  bool get isNaN => doubleValue.isNaN;
 
   // We need to check for the negative sign since -0.0 == 0.0.
-  bool get isMinusZero => primitiveValue == 0.0 && primitiveValue.isNegative;
+  bool get isMinusZero => doubleValue == 0.0 && doubleValue.isNegative;
 
-  bool get isZero => primitiveValue == 0.0;
+  bool get isZero => doubleValue == 0.0;
 
-  bool get isOne => primitiveValue == 1.0;
+  bool get isOne => doubleValue == 1.0;
 
-  bool get isPositiveInfinity => primitiveValue == double.INFINITY;
+  bool get isPositiveInfinity => doubleValue == double.INFINITY;
 
-  bool get isNegativeInfinity => primitiveValue == -double.INFINITY;
+  bool get isNegativeInfinity => doubleValue == -double.INFINITY;
 
   DartType getType(CommonElements types) => types.doubleType;
 
   bool operator ==(var other) {
     if (other is! DoubleConstantValue) return false;
     DoubleConstantValue otherDouble = other;
-    double otherValue = otherDouble.primitiveValue;
-    if (primitiveValue == 0.0 && otherValue == 0.0) {
-      return primitiveValue.isNegative == otherValue.isNegative;
-    } else if (primitiveValue.isNaN) {
+    double otherValue = otherDouble.doubleValue;
+    if (doubleValue == 0.0 && otherValue == 0.0) {
+      return doubleValue.isNegative == otherValue.isNegative;
+    } else if (doubleValue.isNaN) {
       return otherValue.isNaN;
     } else {
-      return primitiveValue == otherValue;
+      return doubleValue == otherValue;
     }
   }
 
-  int get hashCode => primitiveValue.hashCode;
+  int get hashCode => doubleValue.hashCode;
 
   accept(ConstantValueVisitor visitor, arg) => visitor.visitDouble(this, arg);
 
   ConstantValueKind get kind => ConstantValueKind.DOUBLE;
 
   String toStructuredText() => 'DoubleConstant(${toDartText()})';
+
+  String toDartText() => doubleValue.toString();
 }
 
 abstract class BoolConstantValue extends PrimitiveConstantValue {
@@ -347,6 +344,8 @@
 
   bool get isBool => true;
 
+  bool get boolValue;
+
   DartType getType(CommonElements types) => types.boolType;
 
   BoolConstantValue negate();
@@ -365,7 +364,7 @@
 
   bool get isTrue => true;
 
-  bool get primitiveValue => true;
+  bool get boolValue => true;
 
   FalseConstantValue negate() => new FalseConstantValue();
 
@@ -374,6 +373,8 @@
   // The magic constant is just a random value. It does not have any
   // significance.
   int get hashCode => 499;
+
+  String toDartText() => boolValue.toString();
 }
 
 class FalseConstantValue extends BoolConstantValue {
@@ -383,7 +384,7 @@
 
   bool get isFalse => true;
 
-  bool get primitiveValue => false;
+  bool get boolValue => false;
 
   TrueConstantValue negate() => new TrueConstantValue();
 
@@ -392,16 +393,18 @@
   // The magic constant is just a random value. It does not have any
   // significance.
   int get hashCode => 536555975;
+
+  String toDartText() => boolValue.toString();
 }
 
 class StringConstantValue extends PrimitiveConstantValue {
-  final String primitiveValue;
+  final String stringValue;
 
   final int hashCode;
 
   // TODO(floitsch): cache StringConstants.
   StringConstantValue(String value)
-      : this.primitiveValue = value,
+      : this.stringValue = value,
         this.hashCode = value.hashCode;
 
   bool get isString => true;
@@ -413,19 +416,19 @@
     if (other is! StringConstantValue) return false;
     StringConstantValue otherString = other;
     return hashCode == otherString.hashCode &&
-        primitiveValue == otherString.primitiveValue;
+        stringValue == otherString.stringValue;
   }
 
-  String toDartString() => primitiveValue;
+  String toDartString() => stringValue;
 
-  int get length => primitiveValue.length;
+  int get length => stringValue.length;
 
   accept(ConstantValueVisitor visitor, arg) => visitor.visitString(this, arg);
 
   ConstantValueKind get kind => ConstantValueKind.STRING;
 
   // TODO(johnniwinther): Ensure correct escaping.
-  String toDartText() => '"${primitiveValue}"';
+  String toDartText() => '"${stringValue}"';
 
   String toStructuredText() => 'StringConstant(${toDartText()})';
 }
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 36ac2da..b8f6ab0 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -392,6 +392,7 @@
     new OptionHandler(Flags.disableNativeLiveTypeAnalysis, passThrough),
     new OptionHandler('--categories=.*', setCategories),
     new OptionHandler(Flags.disableInlining, implyCompilation),
+    new OptionHandler(Flags.disableProgramSplit, implyCompilation),
     new OptionHandler(Flags.disableTypeInference, implyCompilation),
     new OptionHandler(Flags.disableRtiOptimization, implyCompilation),
     new OptionHandler(Flags.terse, passThrough),
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 391f14b..0d03766 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -134,9 +134,10 @@
   final ImportSetLattice importSets = new ImportSetLattice();
 
   final Compiler compiler;
-  DeferredLoadTask(Compiler compiler)
-      : compiler = compiler,
-        super(compiler.measurer) {
+
+  bool get disableProgramSplit => compiler.options.disableProgramSplit;
+
+  DeferredLoadTask(this.compiler) : super(compiler.measurer) {
     mainOutputUnit = new OutputUnit(true, 'main', new Set<ImportEntity>());
     importSets.mainSet.unit = mainOutputUnit;
     allOutputUnits.add(mainOutputUnit);
@@ -162,6 +163,7 @@
 
   void registerConstantDeferredUse(
       DeferredConstantValue constant, ImportEntity import) {
+    if (!isProgramSplit || disableProgramSplit) return;
     var newSet = importSets.singleton(import);
     assert(
         _constantToSet[constant] == null || _constantToSet[constant] == newSet);
@@ -639,7 +641,9 @@
   /// work item (e.g. we might converge faster if we pick first the update that
   /// contains a bigger delta.)
   OutputUnitData run(FunctionEntity main, ClosedWorld closedWorld) {
-    if (!isProgramSplit || main == null) return _buildResult();
+    if (!isProgramSplit || main == null || disableProgramSplit) {
+      return _buildResult();
+    }
 
     work() {
       var queue = new WorkQueue(this.importSets);
@@ -689,9 +693,6 @@
         addDeferredMirrorElements(queue);
         emptyQueue();
       }
-
-      _createOutputUnits();
-      _setupHunksToLoad();
     }
 
     reporter.withCurrentElement(main.library, () => measure(work));
@@ -703,6 +704,8 @@
   }
 
   OutputUnitData _buildResult() {
+    _createOutputUnits();
+    _setupHunksToLoad();
     Map<Entity, OutputUnit> entityMap = <Entity, OutputUnit>{};
     Map<ConstantValue, OutputUnit> constantMap = <ConstantValue, OutputUnit>{};
     _elementToSet.forEach((entity, s) => entityMap[entity] = s.unit);
@@ -711,8 +714,8 @@
     _elementToSet = null;
     _constantToSet = null;
     cleanup();
-    return new OutputUnitData(this.isProgramSplit, this.mainOutputUnit,
-        entityMap, constantMap, importSets);
+    return new OutputUnitData(this.isProgramSplit && !disableProgramSplit,
+        this.mainOutputUnit, entityMap, constantMap, importSets);
   }
 
   /// Frees up strategy-specific temporary data.
diff --git a/pkg/compiler/lib/src/inferrer/builder.dart b/pkg/compiler/lib/src/inferrer/builder.dart
index e7aaf99..ff6f898 100644
--- a/pkg/compiler/lib/src/inferrer/builder.dart
+++ b/pkg/compiler/lib/src/inferrer/builder.dart
@@ -2297,7 +2297,7 @@
             compiler.backend.constants.getConstantValue(fieldElement.constant);
         if (value != null && value.isInt) {
           IntConstantValue intValue = value;
-          return intValue.primitiveValue;
+          return intValue.intValue;
         }
       }
     }
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index a02087a..367e64e 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -1005,7 +1005,7 @@
         ConstantValue value = _elementMap.getFieldConstantValue(member);
         if (value != null && value.isInt) {
           IntConstantValue intValue = value;
-          return intValue.primitiveValue;
+          return intValue.intValue;
         }
       }
     }
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 2a74cf9..3b2ccaa 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -1212,7 +1212,8 @@
           TypeMask arg = arguments.positional[0].type;
           if (arg is ValueTypeMask && arg.value.isString) {
             DictionaryTypeMask dictionaryTypeMask = typeMask;
-            String key = arg.value.primitiveValue;
+            StringConstantValue value = arg.value;
+            String key = value.stringValue;
             if (dictionaryTypeMask.typeMap.containsKey(key)) {
               if (debug.VERBOSE) {
                 print("Dictionary lookup for $key yields "
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 2f56a2d..12ef4a4 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -120,7 +120,7 @@
 
   @override
   jsAst.Expression visitInt(IntConstantValue constant, [_]) {
-    int primitiveValue = constant.primitiveValue;
+    int value = constant.intValue;
     // Since we are in JavaScript we can shorten long integers to their shorter
     // exponential representation, for example: "1e4" is shorter than "10000".
     //
@@ -128,12 +128,12 @@
     // (like 1234567890123456789012345 which becomes 12345678901234568e8).
     // However, since JavaScript engines represent all numbers as doubles, these
     // digits are lost anyway.
-    String representation = primitiveValue.toString();
+    String representation = value.toString();
     String alternative = null;
     int cutoff = _options.enableMinification ? 10000 : 1e10.toInt();
-    if (primitiveValue.abs() >= cutoff) {
-      alternative = _shortenExponentialRepresentation(
-          primitiveValue.toStringAsExponential());
+    if (value.abs() >= cutoff) {
+      alternative =
+          _shortenExponentialRepresentation(value.toStringAsExponential());
     }
     if (alternative != null && alternative.length < representation.length) {
       representation = alternative;
@@ -143,7 +143,7 @@
 
   @override
   jsAst.Expression visitDouble(DoubleConstantValue constant, [_]) {
-    double value = constant.primitiveValue;
+    double value = constant.doubleValue;
     if (value.isNaN) {
       return js("0/0");
     } else if (value == double.INFINITY) {
@@ -178,7 +178,7 @@
    */
   @override
   jsAst.Expression visitString(StringConstantValue constant, [_]) {
-    return js.escapedString(constant.primitiveValue, ascii: true);
+    return js.escapedString(constant.stringValue, ascii: true);
   }
 
   @override
@@ -197,7 +197,7 @@
       List<jsAst.Property> properties = <jsAst.Property>[];
       for (int i = 0; i < constant.length; i++) {
         StringConstantValue key = constant.keys[i];
-        if (key.primitiveValue == JavaScriptMapConstant.PROTO_PROPERTY) {
+        if (key.stringValue == JavaScriptMapConstant.PROTO_PROPERTY) {
           continue;
         }
 
@@ -317,7 +317,7 @@
     ClassEntity element = constant.type.element;
     if (element == _commonElements.jsConstClass) {
       StringConstantValue str = constant.fields.values.single;
-      String value = str.primitiveValue;
+      String value = str.stringValue;
       return new jsAst.LiteralExpression(stripComments(value));
     }
     jsAst.Expression constructor =
diff --git a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
index 19afd3c..fa32df8 100644
--- a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
@@ -22,8 +22,7 @@
       if (constant.isMinusZero) constant = DART_CONSTANT_SYSTEM.createInt(0);
       IntConstantValue intConstant = constant;
       // We convert the result of bit-operations to 32 bit unsigned integers.
-      return JAVA_SCRIPT_CONSTANT_SYSTEM
-          .createInt32(~intConstant.primitiveValue);
+      return JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(~intConstant.intValue);
     }
     return null;
   }
@@ -47,7 +46,7 @@
     IntConstantValue result = dartBitOperation.fold(left, right);
     if (result != null) {
       // We convert the result of bit-operations to 32 bit unsigned integers.
-      return JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(result.primitiveValue);
+      return JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(result.intValue);
     }
     return result;
   }
@@ -62,7 +61,7 @@
     // Truncate the input value to 32 bits if necessary.
     if (left.isInt) {
       IntConstantValue intConstant = left;
-      int value = intConstant.primitiveValue;
+      int value = intConstant.intValue;
       int truncatedValue = value & JAVA_SCRIPT_CONSTANT_SYSTEM.BITS32;
       if (value < 0) {
         // Sign-extend if the input was negative. The current semantics don't
@@ -96,7 +95,7 @@
   ConstantValue fold(ConstantValue constant) {
     if (constant.isInt) {
       IntConstantValue intConstant = constant;
-      if (intConstant.primitiveValue == 0) {
+      if (intConstant.intValue == 0) {
         return JAVA_SCRIPT_CONSTANT_SYSTEM.createDouble(-0.0);
       }
     }
@@ -160,14 +159,19 @@
 
   BoolConstantValue fold(ConstantValue left, ConstantValue right) {
     BoolConstantValue result = dartIdentityOperation.fold(left, right);
-    if (result == null || result.primitiveValue) return result;
+    if (result == null || result.boolValue) return result;
     // In JavaScript -0.0 === 0 and all doubles are equal to their integer
     // values. Furthermore NaN !== NaN.
+    if (left.isInt && right.isInt) {
+      IntConstantValue leftInt = left;
+      IntConstantValue rightInt = right;
+      return new BoolConstantValue(leftInt.intValue == rightInt.intValue);
+    }
     if (left.isNum && right.isNum) {
       NumConstantValue leftNum = left;
       NumConstantValue rightNum = right;
-      double leftDouble = leftNum.primitiveValue.toDouble();
-      double rightDouble = rightNum.primitiveValue.toDouble();
+      double leftDouble = leftNum.doubleValue;
+      double rightDouble = rightNum.doubleValue;
       return new BoolConstantValue(leftDouble == rightDouble);
     }
     return result;
@@ -198,14 +202,14 @@
 
     if (constant.isInt) {
       IntConstantValue intConstant = constant;
-      int value = intConstant.primitiveValue;
+      int value = intConstant.intValue;
       if (value >= -double.MAX_FINITE && value <= double.MAX_FINITE) {
         return tryToRound(value);
       }
     }
     if (constant.isDouble) {
       DoubleConstantValue doubleConstant = constant;
-      double value = doubleConstant.primitiveValue;
+      double value = doubleConstant.doubleValue;
       // NaN and infinities will throw.
       if (value.isNaN) return null;
       if (value.isInfinite) return null;
@@ -269,7 +273,7 @@
   NumConstantValue convertToJavaScriptConstant(NumConstantValue constant) {
     if (constant.isInt) {
       IntConstantValue intConstant = constant;
-      int intValue = intConstant.primitiveValue;
+      int intValue = intConstant.intValue;
       if (integerBecomesNanOrInfinity(intValue)) {
         return new DoubleConstantValue(intValue.toDouble());
       }
@@ -281,7 +285,7 @@
       }
     } else if (constant.isDouble) {
       DoubleConstantValue doubleResult = constant;
-      double doubleValue = doubleResult.primitiveValue;
+      double doubleValue = doubleResult.doubleValue;
       if (!doubleValue.isInfinite &&
           !doubleValue.isNaN &&
           !constant.isMinusZero) {
@@ -361,7 +365,7 @@
     for (int i = 0; i < keys.length; i++) {
       dynamic key = keys[i];
       if (key.isString) {
-        if (key.primitiveValue == JavaScriptMapConstant.PROTO_PROPERTY) {
+        if (key.stringValue == JavaScriptMapConstant.PROTO_PROPERTY) {
           protoValue = values[i];
         }
       } else {
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index a32d5ec..0dab60a 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -1888,10 +1888,10 @@
   @override
   void visitInt(IntConstantValue constant, [_]) {
     // No `addRoot` since IntConstants are always inlined.
-    if (constant.primitiveValue < 0) {
-      add('m${-constant.primitiveValue}');
+    if (constant.intValue < 0) {
+      add('m${-constant.intValue}');
     } else {
-      add('${constant.primitiveValue}');
+      add('${constant.intValue}');
     }
   }
 
@@ -1908,7 +1908,7 @@
   @override
   void visitString(StringConstantValue constant, [_]) {
     // No `addRoot` since string constants are always inlined.
-    addIdentifier(constant.primitiveValue);
+    addIdentifier(constant.stringValue);
   }
 
   @override
@@ -2078,17 +2078,17 @@
 
   @override
   int visitInt(IntConstantValue constant, [_]) {
-    return _hashInt(constant.primitiveValue);
+    return _hashInt(constant.intValue);
   }
 
   @override
   int visitDouble(DoubleConstantValue constant, [_]) {
-    return _hashDouble(constant.primitiveValue);
+    return _hashDouble(constant.doubleValue);
   }
 
   @override
   int visitString(StringConstantValue constant, [_]) {
-    return _hashString(2, constant.primitiveValue);
+    return _hashString(2, constant.stringValue);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
index 0b8e6a7..a1ee6ab 100644
--- a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
+++ b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
@@ -139,22 +139,22 @@
   }
 
   int visitInt(IntConstantValue a, IntConstantValue b) {
-    return a.primitiveValue.compareTo(b.primitiveValue);
+    return a.intValue.compareTo(b.intValue);
   }
 
   int visitDouble(DoubleConstantValue a, DoubleConstantValue b) {
-    return a.primitiveValue.compareTo(b.primitiveValue);
+    return a.doubleValue.compareTo(b.doubleValue);
   }
 
   int visitBool(BoolConstantValue a, BoolConstantValue b) {
-    int aInt = a.primitiveValue ? 1 : 0;
-    int bInt = b.primitiveValue ? 1 : 0;
+    int aInt = a.boolValue ? 1 : 0;
+    int bInt = b.boolValue ? 1 : 0;
     return aInt.compareTo(bInt);
   }
 
   int visitString(StringConstantValue a, StringConstantValue b) {
-    String aString = a.primitiveValue;
-    String bString = b.primitiveValue;
+    String aString = a.stringValue;
+    String bString = b.stringValue;
     return aString.compareTo(bString);
   }
 
diff --git a/pkg/compiler/lib/src/kernel/element_map_mixins.dart b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
index 59ba7e9..9138c5f 100644
--- a/pkg/compiler/lib/src/kernel/element_map_mixins.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_mixins.dart
@@ -296,7 +296,7 @@
         assert(constant.fields.length == 1 || constant.fields.length == 2);
         ConstantValue indexConstant = constant.fields.values.first;
         if (indexConstant is IntConstantValue) {
-          return indexConstant.primitiveValue;
+          return indexConstant.intValue;
         }
       }
     }
diff --git a/pkg/compiler/lib/src/mirrors_used.dart b/pkg/compiler/lib/src/mirrors_used.dart
index e867b81..c295a27 100644
--- a/pkg/compiler/lib/src/mirrors_used.dart
+++ b/pkg/compiler/lib/src/mirrors_used.dart
@@ -385,7 +385,7 @@
       for (ConstantValue entry in list.entries) {
         if (entry.isString) {
           StringConstantValue string = entry;
-          result.add(string.primitiveValue);
+          result.add(string.stringValue);
         } else if (!onlyStrings && entry.isType) {
           TypeConstantValue type = entry;
           result.add(type.representedType);
@@ -404,7 +404,7 @@
       return [type.representedType];
     } else if (constant.isString) {
       StringConstantValue string = constant;
-      var iterable = string.primitiveValue.split(',').map((e) => e.trim());
+      var iterable = string.stringValue.split(',').map((e) => e.trim());
       return onlyStrings ? new List<String>.from(iterable) : iterable.toList();
     } else {
       Spannable node = positionOf(constant);
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index 7c2a59b..a862a9d 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -897,7 +897,7 @@
             'Annotations needs one string: ${value.toStructuredText()}');
       }
       StringConstantValue specStringConstant = fields.single;
-      String specString = specStringConstant.primitiveValue;
+      String specString = specStringConstant.stringValue;
       for (final typeString in specString.split('|')) {
         var type = NativeBehavior._parseType(typeString, lookupType);
         if (types == null) types = [];
diff --git a/pkg/compiler/lib/src/native/resolver.dart b/pkg/compiler/lib/src/native/resolver.dart
index 67d52a4..5ecdf95 100644
--- a/pkg/compiler/lib/src/native/resolver.dart
+++ b/pkg/compiler/lib/src/native/resolver.dart
@@ -635,7 +635,7 @@
     return null;
   } else if (fields.single is StringConstantValue) {
     StringConstantValue specStringConstant = fields.single;
-    return specStringConstant.primitiveValue;
+    return specStringConstant.stringValue;
   } else if (defaultValue != null && fields.single is NullConstantValue) {
     return defaultValue;
   } else {
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 3602620..e194cbd 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -108,6 +108,11 @@
   // TODO(sigmund): negate, so all flags are positive
   final bool disableInlining;
 
+  /// Disable deferred loading, instead generate everything in one output unit.
+  /// Note: the resulting program still correctly checks that loadLibrary &
+  /// checkLibrary calls are correct.
+  final bool disableProgramSplit;
+
   /// Diagnostic option: If `true`, warnings cause the compilation to fail.
   final bool fatalWarnings;
 
@@ -308,6 +313,7 @@
         shownPackageWarnings:
             _extractOptionalCsvOption(options, Flags.showPackageWarnings),
         disableInlining: _hasOption(options, Flags.disableInlining),
+        disableProgramSplit: _hasOption(options, Flags.disableProgramSplit),
         disableTypeInference: _hasOption(options, Flags.disableTypeInference),
         disableRtiOptimization:
             _hasOption(options, Flags.disableRtiOptimization),
@@ -382,6 +388,7 @@
       bool suppressHints: false,
       List<String> shownPackageWarnings: null,
       bool disableInlining: false,
+      bool disableProgramSplit: false,
       bool disableTypeInference: false,
       bool disableRtiOptimization: false,
       bool dumpInfo: false,
@@ -464,6 +471,7 @@
         suppressHints: suppressHints,
         shownPackageWarnings: shownPackageWarnings,
         disableInlining: disableInlining,
+        disableProgramSplit: disableProgramSplit,
         disableTypeInference: disableTypeInference,
         disableRtiOptimization: disableRtiOptimization,
         dumpInfo: dumpInfo,
@@ -520,6 +528,7 @@
       this.suppressHints: false,
       List<String> shownPackageWarnings: null,
       this.disableInlining: false,
+      this.disableProgramSplit: false,
       this.disableTypeInference: false,
       this.disableRtiOptimization: false,
       this.dumpInfo: false,
@@ -582,6 +591,7 @@
       suppressHints,
       List<String> shownPackageWarnings,
       disableInlining,
+      disableProgramSplit,
       disableTypeInference,
       disableRtiOptimization,
       dumpInfo,
@@ -644,6 +654,7 @@
         shownPackageWarnings:
             shownPackageWarnings ?? options._shownPackageWarnings,
         disableInlining: disableInlining ?? options.disableInlining,
+        disableProgramSplit: disableProgramSplit ?? options.disableProgramSplit,
         disableTypeInference:
             disableTypeInference ?? options.disableTypeInference,
         disableRtiOptimization:
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index 7fb0704..4293c57 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -640,6 +640,10 @@
     pushNode(new Block(makeNodeList(count, beginToken, endToken, null)));
   }
 
+  void handleInvalidTopLevelBlock(Token token) {
+    popNode(); // block
+  }
+
   @override
   void handleThrowExpression(Token throwToken, Token endToken) {
     Expression expression = popNode();
diff --git a/pkg/compiler/lib/src/resolution/deferred_load.dart b/pkg/compiler/lib/src/resolution/deferred_load.dart
index 5824e16..1ed033a 100644
--- a/pkg/compiler/lib/src/resolution/deferred_load.dart
+++ b/pkg/compiler/lib/src/resolution/deferred_load.dart
@@ -366,7 +366,7 @@
       if (element == compiler.resolution.commonElements.deferredLibraryClass) {
         ConstructedConstantValue constant = value;
         StringConstantValue s = constant.fields.values.single;
-        result = s.primitiveValue;
+        result = s.stringValue;
         break;
       }
     }
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index f920e3c..e50aede 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -3975,7 +3975,7 @@
               argumentNode, MessageKind.STRING_EXPECTED, {'type': type});
         } else {
           StringConstantValue stringConstant = name;
-          String nameString = stringConstant.primitiveValue;
+          String nameString = stringConstant.stringValue;
           if (validateSymbol(argumentNode, nameString)) {
             registry.registerConstSymbol(nameString);
           }
diff --git a/pkg/compiler/lib/src/resolution/resolution_strategy.dart b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
index 8d64db4..a3d9504 100644
--- a/pkg/compiler/lib/src/resolution/resolution_strategy.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
@@ -897,7 +897,7 @@
           String name;
           if (value.isString) {
             StringConstantValue stringValue = value;
-            name = stringValue.primitiveValue;
+            name = stringValue.stringValue;
           } else {
             // TODO(jacobr): report a warning if the value is not a String.
             name = '';
diff --git a/pkg/compiler/lib/src/serialization/constant_serialization.dart b/pkg/compiler/lib/src/serialization/constant_serialization.dart
index b1eaa93..bc0a163 100644
--- a/pkg/compiler/lib/src/serialization/constant_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/constant_serialization.dart
@@ -92,22 +92,22 @@
 
   @override
   void visitBool(BoolConstantExpression exp, ObjectEncoder encoder) {
-    encoder.setBool(Key.VALUE, exp.primitiveValue);
+    encoder.setBool(Key.VALUE, exp.boolValue);
   }
 
   @override
   void visitInt(IntConstantExpression exp, ObjectEncoder encoder) {
-    encoder.setInt(Key.VALUE, exp.primitiveValue);
+    encoder.setInt(Key.VALUE, exp.intValue);
   }
 
   @override
   void visitDouble(DoubleConstantExpression exp, ObjectEncoder encoder) {
-    encoder.setDouble(Key.VALUE, exp.primitiveValue);
+    encoder.setDouble(Key.VALUE, exp.doubleValue);
   }
 
   @override
   void visitString(StringConstantExpression exp, ObjectEncoder encoder) {
-    encoder.setString(Key.VALUE, exp.primitiveValue);
+    encoder.setString(Key.VALUE, exp.stringValue);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/serialization/equivalence.dart b/pkg/compiler/lib/src/serialization/equivalence.dart
index 3deda32..06b0dc3 100644
--- a/pkg/compiler/lib/src/serialization/equivalence.dart
+++ b/pkg/compiler/lib/src/serialization/equivalence.dart
@@ -861,21 +861,20 @@
   bool visitBool(
       BoolConstantExpression exp1, covariant BoolConstantExpression exp2) {
     return strategy.test(
-        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+        exp1, exp2, 'boolValue', exp1.boolValue, exp2.boolValue);
   }
 
   @override
   bool visitDouble(
       DoubleConstantExpression exp1, covariant DoubleConstantExpression exp2) {
     return strategy.test(
-        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+        exp1, exp2, 'doubleValue', exp1.doubleValue, exp2.doubleValue);
   }
 
   @override
   bool visitInt(
       IntConstantExpression exp1, covariant IntConstantExpression exp2) {
-    return strategy.test(
-        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+    return strategy.test(exp1, exp2, 'intValue', exp1.intValue, exp2.intValue);
   }
 
   @override
@@ -888,7 +887,7 @@
   bool visitString(
       StringConstantExpression exp1, covariant StringConstantExpression exp2) {
     return strategy.test(
-        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
+        exp1, exp2, 'stringValue', exp1.stringValue, exp2.stringValue);
   }
 
   @override
@@ -1002,21 +1001,21 @@
 
   @override
   bool visitBool(BoolConstantValue value1, covariant BoolConstantValue value2) {
-    return strategy.test(value1, value2, 'primitiveValue',
-        value1.primitiveValue, value2.primitiveValue);
+    return strategy.test(
+        value1, value2, 'boolValue', value1.boolValue, value2.boolValue);
   }
 
   @override
   bool visitDouble(
       DoubleConstantValue value1, covariant DoubleConstantValue value2) {
-    return strategy.test(value1, value2, 'primitiveValue',
-        value1.primitiveValue, value2.primitiveValue);
+    return strategy.test(
+        value1, value2, 'doubleValue', value1.doubleValue, value2.doubleValue);
   }
 
   @override
   bool visitInt(IntConstantValue value1, covariant IntConstantValue value2) {
-    return strategy.test(value1, value2, 'primitiveValue',
-        value1.primitiveValue, value2.primitiveValue);
+    return strategy.test(
+        value1, value2, 'intValue', value1.intValue, value2.intValue);
   }
 
   @override
@@ -1027,8 +1026,8 @@
   @override
   bool visitString(
       StringConstantValue value1, covariant StringConstantValue value2) {
-    return strategy.test(value1, value2, 'primitiveValue',
-        value1.primitiveValue, value2.primitiveValue);
+    return strategy.test(
+        value1, value2, 'stringValue', value1.stringValue, value2.stringValue);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 524fa98..8b448f8 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -2972,7 +2972,7 @@
     }
     HConstant hConstant = globalNameHNode;
     StringConstantValue constant = hConstant.constant;
-    String globalName = constant.primitiveValue;
+    String globalName = constant.stringValue;
     js.Template expr = js.js.expressionTemplateYielding(
         emitter.generateEmbeddedGlobalAccess(globalName));
     native.NativeBehavior nativeBehavior = elements.getNativeData(node);
@@ -3586,7 +3586,8 @@
       bool canThrow = true;
       if (inputs[0].isInteger(closedWorld) && inputs[0] is HConstant) {
         dynamic constant = inputs[0];
-        int value = constant.constant.primitiveValue;
+        IntConstantValue intConstant = constant.constant;
+        int value = intConstant.intValue;
         if (0 <= value && value < 0x100000000) canThrow = false;
       }
       HForeignCode foreign = new HForeignCode(code, elementType, inputs,
@@ -4082,7 +4083,7 @@
       if (isSymbolConstructor) {
         ConstructedConstantValue symbol = getConstantForNode(node);
         StringConstantValue stringConstant = symbol.fields.values.single;
-        String nameString = stringConstant.primitiveValue;
+        String nameString = stringConstant.stringValue;
         registry?.registerConstSymbol(nameString);
       }
     } else {
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 096366f..101c9e4 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -3356,7 +3356,7 @@
 
     HConstant hConstant = instruction;
     StringConstantValue stringConstant = hConstant.constant;
-    return stringConstant.primitiveValue;
+    return stringConstant.stringValue;
   }
 
   void handleForeignJsCurrentIsolateContext(ir.StaticInvocation invocation) {
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index cbba76d..25170a9 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -260,10 +260,10 @@
   // of bits.
   int bitWidth(HInstruction instruction) {
     const int MAX = 32;
-    int constant(HInstruction insn) {
-      if (insn is HConstant && insn.isConstantInteger()) {
-        IntConstantValue constant = insn.constant;
-        return constant.primitiveValue;
+    int constant(HInstruction instruction) {
+      if (instruction is HConstant && instruction.isConstantInteger()) {
+        IntConstantValue constant = instruction.constant;
+        return constant.intValue;
       }
       return null;
     }
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index f6c368c..bb5bef1 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -563,7 +563,7 @@
     if (!instruction.isConstantInteger()) return false;
     HConstant rightConstant = instruction;
     IntConstantValue intConstant = rightConstant.constant;
-    int count = intConstant.primitiveValue;
+    int count = intConstant.intValue;
     return count != 0;
   }
 
@@ -571,7 +571,7 @@
     if (!instruction.isConstantInteger()) return false;
     HConstant rightConstant = instruction;
     IntConstantValue intConstant = rightConstant.constant;
-    int count = intConstant.primitiveValue;
+    int count = intConstant.intValue;
     return count >= 2;
   }
 
@@ -651,7 +651,7 @@
     if (instruction.isConstantInteger()) {
       HConstant rightConstant = instruction;
       IntConstantValue intConstant = rightConstant.constant;
-      int value = intConstant.primitiveValue;
+      int value = intConstant.intValue;
       return value >= low && value <= high;
     }
     // TODO(sra): Integrate with the bit-width analysis in codegen.dart.
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index b191d7b..8f78dd0 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -302,7 +302,7 @@
         return;
       }
       StringConstantValue stringValue = value;
-      impactBuilder.registerConstSymbolName(stringValue.primitiveValue);
+      impactBuilder.registerConstSymbolName(stringValue.stringValue);
     }
   }
 
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index dc37dc7..8fee4ed 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -1020,10 +1020,12 @@
 
   HInstruction visitIndex(HIndex node) {
     if (node.receiver.isConstantList() && node.index.isConstantInteger()) {
-      dynamic instruction = node.receiver;
-      List<ConstantValue> entries = instruction.constant.entries;
-      instruction = node.index;
-      int index = instruction.constant.primitiveValue;
+      HConstant instruction = node.receiver;
+      ListConstantValue list = instruction.constant;
+      List<ConstantValue> entries = list.entries;
+      HConstant indexInstruction = node.index;
+      IntConstantValue indexConstant = indexInstruction.constant;
+      int index = indexConstant.intValue;
       if (index >= 0 && index < entries.length) {
         return _graph.addConstant(entries[index], _closedWorld);
       }
@@ -1219,13 +1221,13 @@
     }
 
     StringConstantValue leftString = getString(node.left);
-    if (leftString != null && leftString.primitiveValue.length == 0) {
+    if (leftString != null && leftString.stringValue.length == 0) {
       return node.right;
     }
 
     StringConstantValue rightString = getString(node.right);
     if (rightString == null) return node;
-    if (rightString.primitiveValue.length == 0) return node.left;
+    if (rightString.stringValue.length == 0) return node.left;
 
     HInstruction prefix = null;
     if (leftString == null) {
@@ -1238,14 +1240,14 @@
       if (leftString == null) return node;
     }
 
-    if (leftString.primitiveValue.length + rightString.primitiveValue.length >
+    if (leftString.stringValue.length + rightString.stringValue.length >
         MAX_SHARED_CONSTANT_FOLDED_STRING_LENGTH) {
       if (node.usedBy.length > 1) return node;
     }
 
     HInstruction folded = _graph.addConstant(
-        constantSystem.createString(
-            leftString.primitiveValue + rightString.primitiveValue),
+        constantSystem
+            .createString(leftString.stringValue + rightString.stringValue),
         _closedWorld);
     if (prefix == null) return folded;
     return new HStringConcat(
@@ -1256,22 +1258,33 @@
     HInstruction input = node.inputs[0];
     if (input.isString(_closedWorld)) return input;
 
+    HInstruction asString(String string) =>
+        _graph.addConstant(constantSystem.createString(string), _closedWorld);
+
     HInstruction tryConstant() {
       if (!input.isConstant()) return null;
       HConstant constant = input;
       if (!constant.constant.isPrimitive) return null;
-      if (constant.constant.isInt) {
+      PrimitiveConstantValue value = constant.constant;
+      if (value is IntConstantValue) {
         // Only constant-fold int.toString() when Dart and JS results the same.
         // TODO(18103): We should be able to remove this work-around when issue
         // 18103 is resolved by providing the correct string.
-        IntConstantValue intConstant = constant.constant;
-        // Very conservative range.
-        if (!intConstant.isUInt32()) return null;
+        if (!value.isUInt32()) return null;
+        return asString('${value.intValue}');
       }
-      PrimitiveConstantValue primitive = constant.constant;
-      return _graph.addConstant(
-          constantSystem.createString('${primitive.primitiveValue}'),
-          _closedWorld);
+      if (value is BoolConstantValue) {
+        return asString(value.boolValue ? 'true' : 'false');
+      }
+      if (value is NullConstantValue) {
+        return asString('null');
+      }
+      if (value is DoubleConstantValue) {
+        // TODO(sra): It seems unlikely that all dart2js host implementations
+        // produce exactly the same characters as all JavaScript targets.
+        return asString('${value.doubleValue}');
+      }
+      return null;
     }
 
     HInstruction tryToString() {
@@ -1969,7 +1982,7 @@
           HConstant input = node.inputs[pos];
           if (!input.isConstantInteger()) continue;
           IntConstantValue constant = input.constant;
-          int label = constant.primitiveValue;
+          int label = constant.intValue;
           if (!liveLabels.contains(label) && label <= upper && label >= lower) {
             markBlockLive(node.block.successors[pos - 1]);
             liveLabels.add(label);
diff --git a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
index d796db4..1be4244f 100644
--- a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
+++ b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
@@ -139,7 +139,7 @@
     dynamic constant = constantSystem.add.fold(
         constantSystem.createInt(value), constantSystem.createInt(other.value));
     if (!constant.isInt) return const UnknownValue();
-    return info.newIntValue(constant.primitiveValue);
+    return info.newIntValue(constant.intValue);
   }
 
   Value operator -(dynamic other) {
@@ -149,7 +149,7 @@
     dynamic constant = constantSystem.subtract.fold(
         constantSystem.createInt(value), constantSystem.createInt(other.value));
     if (!constant.isInt) return const UnknownValue();
-    return info.newIntValue(constant.primitiveValue);
+    return info.newIntValue(constant.intValue);
   }
 
   Value operator -() {
@@ -158,7 +158,7 @@
     dynamic constant =
         constantSystem.negate.fold(constantSystem.createInt(value));
     if (!constant.isInt) return const UnknownValue();
-    return info.newIntValue(constant.primitiveValue);
+    return info.newIntValue(constant.intValue);
   }
 
   Value operator &(dynamic other) {
@@ -166,7 +166,7 @@
     ConstantSystem constantSystem = info.constantSystem;
     dynamic constant = constantSystem.bitAnd.fold(
         constantSystem.createInt(value), constantSystem.createInt(other.value));
-    return info.newIntValue(constant.primitiveValue);
+    return info.newIntValue(constant.intValue);
   }
 
   Value min(dynamic other) {
@@ -693,7 +693,11 @@
       return info.newUnboundRange();
     }
     if (constantNum.isMinusZero) constantNum = new IntConstantValue(0);
-    Value value = info.newIntValue(constantNum.primitiveValue);
+
+    int intValue = constantNum is IntConstantValue
+        ? constantNum.intValue
+        : constantNum.doubleValue.toInt();
+    Value value = info.newIntValue(intValue);
     return info.newNormalizedRange(value, value);
   }
 
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 5424157..80cf145 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -280,10 +280,7 @@
   List<int> _summarizeModule(List<CompilationUnit> units) {
     if (!options.summarizeApi) return null;
 
-    if (!units.any((u) => resolutionMap
-        .elementDeclaredByCompilationUnit(u)
-        .librarySource
-        .isInSystemLibrary)) {
+    if (!units.any((u) => u.element.source.isInSystemLibrary)) {
       var sdk = context.sourceFactory.dartSdk;
       summaryData.addBundle(
           null,
@@ -2822,7 +2819,7 @@
         // []= methods need to return the value. We could also address this at
         // call sites, but it's cleaner to instead transform the operator method.
         code = JS.alwaysReturnLastParameter(code, formals.last);
-      } else if (element.name == '==' && !element.library.isInSdk) {
+      } else if (element.name == '==' && !element.source.isInSystemLibrary) {
         // In Dart `operator ==` methods are not called with a null argument.
         // This is handled before calling them. For performance reasons, we push
         // this check inside the method, to simplify our `equals` helper.
@@ -3632,9 +3629,7 @@
     var result = _emitForeignJS(node, e);
     if (result != null) return result;
 
-    if (e?.name == 'extensionSymbol' &&
-        e.library.isInSdk &&
-        e.library.source.uri.toString() == 'dart:_runtime') {
+    if (e?.name == 'extensionSymbol' && isSdkInternalRuntime(e.library)) {
       var args = node.argumentList.arguments;
       var firstArg = args.length == 1 ? args[0] : null;
       if (firstArg is StringLiteral) {
@@ -4347,7 +4342,7 @@
 
     JS.Expression emitNew() {
       var args = _emitArgumentList(argumentList);
-      if (argumentList.arguments.isEmpty && element.library.isInSdk) {
+      if (argumentList.arguments.isEmpty && element.source.isInSystemLibrary) {
         // Skip the slow SDK factory constructors when possible.
         switch (classElem.name) {
           case 'Map':
@@ -6428,7 +6423,7 @@
 
 bool _reifyGeneric(Element e) =>
     e == null ||
-    !e.library.isInSdk ||
+    !e.source.isInSystemLibrary ||
     findAnnotation(
             e, (a) => isBuiltinAnnotation(a, '_js_helper', 'NoReifyGeneric')) ==
         null;
@@ -6436,7 +6431,7 @@
 bool _reifyFunctionType(Element e) {
   if (e == null) return true;
   var library = e.library;
-  if (!library.isInSdk) return true;
+  if (!library.source.isInSystemLibrary) return true;
   // SDK libraries can skip reification if they request it.
   reifyFunctionTypes(DartObjectImpl a) =>
       isBuiltinAnnotation(a, '_js_helper', 'ReifyFunctionTypes');
diff --git a/pkg/dev_compiler/lib/src/analyzer/command.dart b/pkg/dev_compiler/lib/src/analyzer/command.dart
index a1c75c4..b12e5f8 100644
--- a/pkg/dev_compiler/lib/src/analyzer/command.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/command.dart
@@ -95,23 +95,22 @@
   var argParser = new ArgParser(allowTrailingOptions: true)
     ..addFlag('help',
         abbr: 'h',
-        help: 'Display this message. Add --verbose to show hidden options.',
+        help: 'Display this message. Add -v to show hidden options.',
         negatable: false)
-    ..addFlag('verbose', abbr: 'v', help: 'Verbose output.')
+    ..addFlag('verbose',
+        abbr: 'v', negatable: false, help: 'Verbose help output.', hide: hide)
     ..addFlag('version',
-        negatable: false, help: 'Print the $_binaryName version.')
+        negatable: false, help: 'Print the $_binaryName version.', hide: hide)
     ..addFlag(ignoreUnrecognizedFlagsFlag,
         help: 'Ignore unrecognized command line flags.',
         defaultsTo: false,
-        negatable: false)
+        hide: hide)
     ..addOption('out',
         abbr: 'o', allowMultiple: true, help: 'Output file (required).')
     ..addOption('module-root',
-        help: 'Root module directory. '
-            'Generated module paths are relative to this root.')
+        help: 'Root module directory. Module paths are relative to this root.')
     ..addOption('library-root',
-        help: 'Root of source files. '
-            'Generated library names are relative to this root.');
+        help: 'Root of source files. Library names are relative to this root.');
   defineAnalysisArguments(argParser, hide: hide, ddc: true);
   addModuleFormatOptions(argParser, allowMultiple: true, hide: hide);
   AnalyzerOptions.addArguments(argParser, hide: hide);
diff --git a/pkg/dev_compiler/lib/src/analyzer/context.dart b/pkg/dev_compiler/lib/src/analyzer/context.dart
index 12fb82d..b3b855c 100644
--- a/pkg/dev_compiler/lib/src/analyzer/context.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/context.dart
@@ -105,7 +105,8 @@
           help: '--url-mapping=libraryUri,/path/to/library.dart uses\n'
               'library.dart as the source for an import of of "libraryUri".',
           allowMultiple: true,
-          splitCommas: false);
+          splitCommas: false,
+          hide: hide);
   }
 
   static Map<String, String> _parseUrlMappings(Iterable argument) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
index a97aa6d..b40e3ff 100644
--- a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
@@ -97,11 +97,13 @@
   return parent is MethodInvocation && parent.methodName == node;
 }
 
-bool isInlineJS(Element e) =>
-    e is FunctionElement &&
-    e.name == 'JS' &&
-    e.library.isInSdk &&
-    e.library.source.uri.toString() == 'dart:_foreign_helper';
+bool isInlineJS(Element e) {
+  if (e != null && e.name == 'JS' && e is FunctionElement) {
+    var uri = e.librarySource.uri;
+    return uri.scheme == 'dart' && uri.path == '_foreign_helper';
+  }
+  return false;
+}
 
 ExecutableElement getFunctionBodyElement(FunctionBody body) {
   var f = body.parent;
@@ -163,8 +165,10 @@
 /// Returns true if the library [l] is dart:_runtime.
 // TODO(jmesserly): unlike other methods in this file, this one wouldn't be
 // suitable for upstream to Analyzer, as it's DDC specific.
-bool isSdkInternalRuntime(LibraryElement l) =>
-    l.isInSdk && l.source.uri.toString() == 'dart:_runtime';
+bool isSdkInternalRuntime(LibraryElement l) {
+  var uri = l.source.uri;
+  return uri.scheme == 'dart' && uri.path == '_runtime';
+}
 
 /// Return `true` if the given [classElement] has a noSuchMethod() method
 /// distinct from the one declared in class Object, as per the Dart Language
diff --git a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
index 90cae8e..d0286ab 100644
--- a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
@@ -304,25 +304,29 @@
 
   static void addArguments(ArgParser parser, {bool hide: true}) {
     parser
-      ..addFlag('summarize', help: 'emit an API summary file', defaultsTo: true)
+      ..addFlag('summarize',
+          help: 'emit an API summary file', defaultsTo: true, hide: hide)
       ..addOption('summary-extension',
           help: 'file extension for Dart summary files',
           defaultsTo: 'sum',
           hide: hide)
-      ..addFlag('source-map', help: 'emit source mapping', defaultsTo: true)
+      ..addFlag('source-map',
+          help: 'emit source mapping', defaultsTo: true, hide: hide)
       ..addFlag('source-map-comment',
           help: 'adds a sourceMappingURL comment to the end of the JS,\n'
               'disable if using X-SourceMap header',
           defaultsTo: true,
           hide: hide)
       ..addFlag('inline-source-map',
-          help: 'emit source mapping inline', defaultsTo: false)
+          help: 'emit source mapping inline', defaultsTo: false, hide: hide)
       ..addFlag('emit-metadata',
           help: 'emit metadata annotations queriable via mirrors',
-          defaultsTo: false)
+          defaultsTo: false,
+          hide: hide)
       ..addFlag('closure-experimental',
           help: 'emit Closure Compiler-friendly code (experimental)',
-          defaultsTo: false)
+          defaultsTo: false,
+          hide: hide)
       ..addFlag('unsafe-force-compile',
           help: 'Compile code even if it has errors. ಠ_ಠ\n'
               'This has undefined behavior!',
diff --git a/pkg/dev_compiler/lib/src/analyzer/property_model.dart b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
index 1813c27..34b2330 100644
--- a/pkg/dev_compiler/lib/src/analyzer/property_model.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/property_model.dart
@@ -135,8 +135,8 @@
     if (field.isStatic) return false;
 
     var type = field.enclosingElement;
-    var library = type.library;
-    if (library.isInSdk && library.source.uri.toString().startsWith('dart:_')) {
+    var uri = type.source.uri;
+    if (uri.scheme == 'dart' && uri.path.startsWith('_')) {
       // There should be no extensible fields in private SDK libraries.
       return false;
     }
diff --git a/pkg/dev_compiler/tool/build_pkgs.dart b/pkg/dev_compiler/tool/build_pkgs.dart
index b67fbb2..7662b36 100755
--- a/pkg/dev_compiler/tool/build_pkgs.dart
+++ b/pkg/dev_compiler/tool/build_pkgs.dart
@@ -81,7 +81,6 @@
   await compileModule('meta');
   if (isTravis) {
     await compileModule('microlytics', libs: ['html_channels']);
-    await compileModule('typed_mock');
   }
 
   // Under third_party/pkg.
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
index 1b3aa2a..de39cbb 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
@@ -2534,7 +2534,15 @@
     return (this & (signMask - one)) - (this & signMask);
   }
 
-  bool get isValidInt => this == new _BigIntImpl._fromInt(toInt());
+  // Maximum number of digits that always fit in mantissa.
+  static const _simpleValidIntDigits = 53 ~/ _digitBits;
+
+  bool get isValidInt {
+    if (_used <= _simpleValidIntDigits) return true;
+    var asInt = toInt();
+    if (!asInt.toDouble().isFinite) return false;
+    return this == new _BigIntImpl._fromInt(asInt);
+  }
 
   int toInt() {
     var result = 0;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index c2c73e1..5633f5f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1310,9 +1310,8 @@
       return new ThisPropertyAccessor(this, token, n, getter, setter);
     } else if (builder.isRegularMethod) {
       assert(builder.isStatic || builder.isTopLevel);
-      StaticAccessor accessor = new StaticAccessor(
-          this, token, builder.target, null,
-          prefixName: prefix?.name);
+      StaticAccessor accessor =
+          new StaticAccessor(this, token, builder.target, null);
       return (prefix?.deferred == true)
           ? new DeferredAccessor(this, token, prefix, accessor)
           : accessor;
@@ -1339,9 +1338,8 @@
       } else if (builder.isField && !builder.isFinal) {
         setter = builder;
       }
-      StaticAccessor accessor = new StaticAccessor.fromBuilder(
-          this, builder, token, setter,
-          prefix: prefix);
+      StaticAccessor accessor =
+          new StaticAccessor.fromBuilder(this, builder, token, setter);
       if (constantExpressionRequired) {
         Member readTarget = accessor.readTarget;
         if (!(readTarget is Field && readTarget.isConst ||
@@ -1627,6 +1625,10 @@
     push(block);
   }
 
+  void handleInvalidTopLevelBlock(Token token) {
+    pop(); // block
+  }
+
   @override
   void handleAssignmentExpression(Token token) {
     debugEvent("AssignmentExpression");
@@ -2376,10 +2378,7 @@
       {bool isConst: false,
       int charOffset: -1,
       Member initialTarget,
-      List<DartType> targetTypeArguments,
-      String prefixName,
-      int targetOffset: -1,
-      Class targetClass}) {
+      List<DartType> targetTypeArguments}) {
     initialTarget ??= target;
     List<TypeParameter> typeParameters = target.function.typeParameters;
     if (target is Constructor) {
@@ -2406,7 +2405,7 @@
             "Not a const constructor.", charOffset);
       }
       return new ShadowConstructorInvocation(
-          prefixName, target, targetTypeArguments, initialTarget, arguments,
+          target, targetTypeArguments, initialTarget, arguments,
           isConst: isConst)
         ..fileOffset = charOffset;
     } else {
@@ -2416,13 +2415,11 @@
             "Not a const factory.", charOffset);
       } else if (procedure.isFactory) {
         return new ShadowFactoryConstructorInvocation(
-            prefixName, target, targetTypeArguments, initialTarget, arguments,
+            target, targetTypeArguments, initialTarget, arguments,
             isConst: isConst)
           ..fileOffset = charOffset;
       } else {
-        return new ShadowStaticInvocation(
-            prefixName, targetOffset, targetClass, target, arguments,
-            isConst: isConst)
+        return new ShadowStaticInvocation(target, arguments, isConst: isConst)
           ..fileOffset = charOffset;
       }
     }
@@ -2545,7 +2542,6 @@
     String name = pop();
     List<DartType> typeArguments = pop();
 
-    String prefixName;
     var type = pop();
     PrefixBuilder deferredPrefix;
     int checkOffset;
@@ -2559,7 +2555,6 @@
     if (type is TypeDeclarationAccessor) {
       TypeDeclarationAccessor accessor = type;
       if (accessor.prefix != null) {
-        prefixName = accessor.prefix.name;
         nameToken = nameToken.next.next;
       }
       type = accessor.declaration;
@@ -2574,8 +2569,7 @@
           name,
           typeArguments,
           token.charOffset,
-          optional("const", token) || optional("@", token),
-          prefixName: prefixName);
+          optional("const", token) || optional("@", token));
       push(deferredPrefix != null
           ? wrapInDeferredCheck(expression, deferredPrefix, checkOffset)
           : expression);
@@ -2599,8 +2593,7 @@
       String name,
       List<DartType> typeArguments,
       int charOffset,
-      bool isConst,
-      {String prefixName}) {
+      bool isConst) {
     if (arguments == null) {
       return deprecated_buildCompileTimeError(
           "No arguments.", nameToken.charOffset);
@@ -2671,7 +2664,6 @@
         return buildStaticInvocation(target, arguments,
             isConst: isConst,
             charOffset: nameToken.charOffset,
-            prefixName: prefixName,
             initialTarget: initialTarget,
             targetTypeArguments: targetTypeArguments);
       } else {
@@ -3788,11 +3780,8 @@
   }
 
   @override
-  StaticGet makeStaticGet(Member readTarget, Token token,
-      {String prefixName, int targetOffset: -1, Class targetClass}) {
-    return new ShadowStaticGet(
-        prefixName, targetOffset, targetClass, readTarget)
-      ..fileOffset = offsetForToken(token);
+  StaticGet makeStaticGet(Member readTarget, Token token) {
+    return new ShadowStaticGet(readTarget)..fileOffset = offsetForToken(token);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index 1651606..ee89d72 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -115,12 +115,7 @@
       [int charOffset = -1]);
 
   Expression buildStaticInvocation(Procedure target, Arguments arguments,
-      {bool isConst,
-      int charOffset,
-      Member initialTarget,
-      String prefixName,
-      int targetOffset: -1,
-      Class targetClass});
+      {bool isConst, int charOffset, Member initialTarget});
 
   Expression buildProblemExpression(ProblemBuilder builder, int offset);
 
@@ -137,8 +132,7 @@
       Arguments arguments, CalleeDesignation calleeKind, int offset,
       [List<TypeParameter> typeParameters]);
 
-  StaticGet makeStaticGet(Member readTarget, Token token,
-      {String prefixName, int targetOffset: -1, Class targetClass});
+  StaticGet makeStaticGet(Member readTarget, Token token);
 
   Expression wrapInDeferredCheck(
       Expression expression, PrefixBuilder prefix, int charOffset);
@@ -826,16 +820,13 @@
 
 class StaticAccessor extends kernel.StaticAccessor with FastaAccessor {
   StaticAccessor(
-      BuilderHelper helper, Token token, Member readTarget, Member writeTarget,
-      {String prefixName, int targetOffset: -1, Class targetClass})
-      : super(helper, prefixName, targetOffset, targetClass, readTarget,
-            writeTarget, token) {
+      BuilderHelper helper, Token token, Member readTarget, Member writeTarget)
+      : super(helper, readTarget, writeTarget, token) {
     assert(readTarget != null || writeTarget != null);
   }
 
-  factory StaticAccessor.fromBuilder(
-      BuilderHelper helper, Builder builder, Token token, Builder builderSetter,
-      {PrefixBuilder prefix, int targetOffset: -1, Class targetClass}) {
+  factory StaticAccessor.fromBuilder(BuilderHelper helper, Builder builder,
+      Token token, Builder builderSetter) {
     if (builder is AccessErrorBuilder) {
       AccessErrorBuilder error = builder;
       builder = error.builder;
@@ -853,10 +844,7 @@
         setter = builderSetter.target;
       }
     }
-    return new StaticAccessor(helper, token, getter, setter,
-        prefixName: prefix?.name,
-        targetOffset: targetOffset,
-        targetClass: targetClass);
+    return new StaticAccessor(helper, token, getter, setter);
   }
 
   String get plainNameForRead => (readTarget ?? writeTarget).name.name;
@@ -875,10 +863,7 @@
           isImplicitCall: true);
     } else {
       return helper.buildStaticInvocation(readTarget, arguments,
-          charOffset: offset,
-          prefixName: prefixName,
-          targetOffset: targetOffset,
-          targetClass: targetClass);
+          charOffset: offset);
     }
   }
 
@@ -886,7 +871,7 @@
 
   @override
   ShadowComplexAssignment startComplexAssignment(Expression rhs) =>
-      new ShadowStaticAssignment(prefixName, targetOffset, targetClass, rhs);
+      new ShadowStaticAssignment(rhs);
 }
 
 class LoadLibraryAccessor extends kernel.LoadLibraryAccessor
@@ -1178,7 +1163,7 @@
               ..fileOffset = offsetForToken(token))
           ..fileOffset = offset;
       } else {
-        super.expression = new ShadowTypeLiteral(prefix?.name,
+        super.expression = new ShadowTypeLiteral(
             buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true))
           ..fileOffset = offsetForToken(token);
       }
@@ -1234,11 +1219,8 @@
         } else if (builder.isField && !builder.isFinal) {
           setter = builder;
         }
-        accessor = new StaticAccessor.fromBuilder(
-            helper, builder, send.token, setter,
-            prefix: prefix,
-            targetOffset: declarationReferenceOffset,
-            targetClass: declaration.target);
+        accessor =
+            new StaticAccessor.fromBuilder(helper, builder, send.token, setter);
       }
 
       return arguments == null
diff --git a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
index e698255..bc25472 100644
--- a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
@@ -669,34 +669,18 @@
 }
 
 class StaticAccessor extends Accessor {
-  /// The name of the import prefix preceding the [targetClass], [readTarget],
-  /// or [writeTarget], or `null` if the reference is not prefixed.
-  String prefixName;
-
-  /// If [targetClass] is not `null`, the offset at which the explicit
-  /// reference to it is; otherwise `-1`.
-  int targetOffset;
-
-  /// The [Class] that was explicitly referenced to get the [readTarget] or
-  /// the [writeTarget], or `null` if the class is implicit, and targets were
-  /// get from the scope.
-  Class targetClass;
-
   Member readTarget;
   Member writeTarget;
 
-  StaticAccessor(BuilderHelper helper, this.prefixName, this.targetOffset,
-      this.targetClass, this.readTarget, this.writeTarget, Token token)
+  StaticAccessor(
+      BuilderHelper helper, this.readTarget, this.writeTarget, Token token)
       : super(helper, token);
 
   Expression _makeRead(ShadowComplexAssignment complexAssignment) {
     if (readTarget == null) {
       return makeInvalidRead();
     } else {
-      var read = helper.makeStaticGet(readTarget, token,
-          prefixName: prefixName,
-          targetOffset: targetOffset,
-          targetClass: targetClass);
+      var read = helper.makeStaticGet(readTarget, token);
       complexAssignment?.read = read;
       return read;
     }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index 744fd1a..9a1756a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -22,9 +22,6 @@
 
 import '../source/source_library_builder.dart' show SourceLibraryBuilder;
 
-import '../type_inference/type_inference_listener.dart'
-    show TypeInferenceListener;
-
 import 'body_builder.dart' show BodyBuilder;
 
 import 'kernel_builder.dart'
@@ -95,9 +92,8 @@
       var memberScope =
           currentClass == null ? library.scope : currentClass.scope;
       var typeInferenceEngine = library.loader.typeInferenceEngine;
-      var listener = new TypeInferenceListener();
       var typeInferrer = typeInferenceEngine.createTopLevelTypeInferrer(
-          listener, field.enclosingClass?.thisType, field);
+          field.enclosingClass?.thisType, field);
       if (hasInitializer) {
         var bodyBuilder = new BodyBuilder(
             library,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 7d61f46..568f3f9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -29,7 +29,6 @@
 import 'package:front_end/src/fasta/source/source_library_builder.dart';
 import 'package:front_end/src/fasta/type_inference/interface_resolver.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
 import 'package:front_end/src/fasta/type_inference/type_promotion.dart';
 import 'package:front_end/src/fasta/type_inference/type_schema.dart';
@@ -113,11 +112,8 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.asExpressionEnter(this, typeContext);
     inferrer.inferExpression(operand, null, false);
-    var inferredType = type;
-    inferrer.listener.asExpressionExit(this, inferredType);
-    return inferredType;
+    return type;
   }
 }
 
@@ -128,9 +124,7 @@
 
   @override
   void _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.listener.assertInitializerEnter(this);
     inferrer.inferStatement(statement);
-    inferrer.listener.assertInitializerExit(this);
   }
 }
 
@@ -145,7 +139,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.assertStatementEnter(this);
     var expectedType = inferrer.coreTypes.boolClass.rawType;
     var actualType =
         inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -154,7 +147,6 @@
     if (message != null) {
       inferrer.inferExpression(message, null, false);
     }
-    inferrer.listener.assertStatementExit(this);
   }
 }
 
@@ -165,14 +157,11 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.awaitExpressionEnter(this, typeContext);
     if (!inferrer.typeSchemaEnvironment.isEmptyContext(typeContext)) {
       typeContext = inferrer.wrapFutureOrType(typeContext);
     }
     var inferredType = inferrer.inferExpression(operand, typeContext, true);
-    inferredType = inferrer.typeSchemaEnvironment.unfutureType(inferredType);
-    inferrer.listener.awaitExpressionExit(this, inferredType);
-    return inferredType;
+    return inferrer.typeSchemaEnvironment.unfutureType(inferredType);
   }
 }
 
@@ -182,11 +171,9 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.blockEnter(this);
     for (var statement in statements) {
       inferrer.inferStatement(statement);
     }
-    inferrer.listener.blockExit(this);
   }
 }
 
@@ -196,10 +183,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.boolLiteralEnter(this, typeContext);
-    var inferredType = inferrer.coreTypes.boolClass.rawType;
-    inferrer.listener.boolLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.boolClass.rawType;
   }
 }
 
@@ -210,9 +194,7 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.breakStatementEnter(this);
     // No inference needs to be done.
-    inferrer.listener.breakStatementExit(this);
   }
 }
 
@@ -271,7 +253,6 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.cascadeExpressionEnter(this, typeContext);
     var lhsType =
         inferrer.inferExpression(variable.initializer, typeContext, true);
     if (inferrer.strongMode) {
@@ -283,7 +264,6 @@
       if (section.body is! Let) break;
       section = section.body;
     }
-    inferrer.listener.cascadeExpressionExit(this, lhsType);
     return lhsType;
   }
 }
@@ -537,7 +517,6 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.conditionalExpressionEnter(this, typeContext);
     var expectedType = inferrer.coreTypes.boolClass.rawType;
     var conditionType =
         inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -554,19 +533,13 @@
     if (inferrer.strongMode) {
       staticType = type;
     }
-    var inferredType = type;
-    inferrer.listener.conditionalExpressionExit(this, inferredType);
-    return inferredType;
+    return type;
   }
 }
 
 /// Shadow object for [ConstructorInvocation].
 class ShadowConstructorInvocation extends ConstructorInvocation
     implements ShadowExpression {
-  /// The name of the import prefix preceding the instantiated type; or `null`
-  /// if the type is not prefixed.
-  final String _prefixName;
-
   final Member _initialTarget;
 
   /// If the constructor invocation points to a redirected constructor, the type
@@ -585,15 +558,13 @@
   /// [targetTypeArguments] is a list containing the type `List<T>`.
   final List<DartType> targetTypeArguments;
 
-  ShadowConstructorInvocation(this._prefixName, Constructor target,
-      this.targetTypeArguments, this._initialTarget, Arguments arguments,
+  ShadowConstructorInvocation(Constructor target, this.targetTypeArguments,
+      this._initialTarget, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener
-        .constructorInvocationEnter(this, _prefixName, typeContext);
     var inferredType = inferrer.inferInvocation(
         typeContext,
         fileOffset,
@@ -610,7 +581,6 @@
               .withArguments(inferredType)
               .message);
     }
-    inferrer.listener.constructorInvocationExit(this, inferredType);
 
     if (isRedirected(this)) {
       InterfaceType returnType = inferredType;
@@ -657,9 +627,7 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.continueSwitchStatementEnter(this);
     // No inference needs to be done.
-    inferrer.listener.continueSwitchStatementExit(this);
   }
 }
 
@@ -670,12 +638,9 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.deferredCheckEnter(this, typeContext);
     // Since the variable is not used in the body we don't need to type infer
     // it.  We can just type infer the body.
-    var inferredType = inferrer.inferExpression(body, typeContext, true);
-    inferrer.listener.deferredCheckExit(this, inferredType);
-    return inferredType;
+    return inferrer.inferExpression(body, typeContext, true);
   }
 }
 
@@ -686,14 +651,12 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.doStatementEnter(this);
     inferrer.inferStatement(body);
     var boolType = inferrer.coreTypes.boolClass.rawType;
     var actualType =
         inferrer.inferExpression(condition, boolType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(
         boolType, actualType, condition, condition.fileOffset);
-    inferrer.listener.doStatementExit(this);
   }
 }
 
@@ -703,10 +666,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.doubleLiteralEnter(this, typeContext);
-    var inferredType = inferrer.coreTypes.doubleClass.rawType;
-    inferrer.listener.doubleLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.doubleClass.rawType;
   }
 }
 
@@ -725,9 +685,7 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.expressionStatementEnter(this);
     inferrer.inferExpression(expression, null, false);
-    inferrer.listener.expressionStatementExit(this);
   }
 }
 
@@ -735,10 +693,6 @@
 /// factory constructor.
 class ShadowFactoryConstructorInvocation extends StaticInvocation
     implements ShadowExpression {
-  /// The name of the import prefix preceding the instantiated type; or `null`
-  /// if the type is not prefixed.
-  final String _prefixName;
-
   final Member _initialTarget;
 
   /// If the factory invocation points to a redirected factory, the type
@@ -757,22 +711,19 @@
   /// [targetTypeArguments] is a list containing the type `List<T>`.
   final List<DartType> targetTypeArguments;
 
-  ShadowFactoryConstructorInvocation(this._prefixName, Procedure target,
-      this.targetTypeArguments, this._initialTarget, Arguments arguments,
+  ShadowFactoryConstructorInvocation(Procedure target, this.targetTypeArguments,
+      this._initialTarget, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener
-        .constructorInvocationEnter(this, _prefixName, typeContext);
     var inferredType = inferrer.inferInvocation(
         typeContext,
         fileOffset,
         _initialTarget.function.functionType,
         computeConstructorReturnType(_initialTarget),
         arguments);
-    inferrer.listener.constructorInvocationExit(this, inferredType);
 
     if (isRedirected(this)) {
       InterfaceType returnType = inferredType;
@@ -844,10 +795,8 @@
 
   @override
   void _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.listener.fieldInitializerEnter(this);
     var initializerType = inferrer.inferExpression(value, field.type, true);
     inferrer.ensureAssignable(field.type, initializerType, value, fileOffset);
-    inferrer.listener.fieldInitializerExit(this);
   }
 }
 
@@ -872,7 +821,6 @@
     bool typeChecksNeeded = !inferrer.isTopLevel;
     ShadowVariableDeclaration variable;
     var syntheticAssignment = _syntheticAssignment;
-    Expression syntheticWrite;
     DartType syntheticWriteType;
     if (_declaresVariable) {
       variable = this.variable;
@@ -883,14 +831,12 @@
         context = variable.type;
       }
     } else if (syntheticAssignment is ShadowComplexAssignment) {
-      syntheticWrite = syntheticAssignment.write;
       syntheticWriteType =
           context = syntheticAssignment._getWriteType(inferrer);
     } else {
       context = const UnknownType();
     }
     context = inferrer.wrapType(context, iterableClass);
-    inferrer.listener.forInStatementEnter(this, variable, syntheticWrite);
     var inferredExpressionType = inferrer.resolveTypeParameter(inferrer
         .inferExpression(iterable, context, typeNeeded || typeChecksNeeded));
     inferrer.ensureAssignable(
@@ -944,7 +890,6 @@
       }
       syntheticAssignment._replaceWithDesugared();
     }
-    inferrer.listener.forInStatementExit(this, variable);
   }
 }
 
@@ -956,7 +901,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.forStatementEnter(this);
     variables.forEach(inferrer.inferStatement);
     if (condition != null) {
       var expectedType = inferrer.coreTypes.boolClass.rawType;
@@ -969,7 +913,6 @@
       inferrer.inferExpression(update, null, false);
     }
     inferrer.inferStatement(body);
-    inferrer.listener.forStatementExit(this);
   }
 }
 
@@ -984,7 +927,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.functionDeclarationEnter(this);
     inferrer.inferLocalFunction(
         function,
         null,
@@ -993,7 +935,6 @@
             ? (inferrer.strongMode ? null : const DynamicType())
             : function.returnType);
     variable.type = function.functionType;
-    inferrer.listener.functionDeclarationExit(this);
   }
 
   static void setHasImplicitReturnType(
@@ -1009,11 +950,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.functionExpressionEnter(this, typeContext);
-    var inferredType =
-        inferrer.inferLocalFunction(function, typeContext, fileOffset, null);
-    inferrer.listener.functionExpressionExit(this, inferredType);
-    return inferredType;
+    return inferrer.inferLocalFunction(function, typeContext, fileOffset, null);
   }
 }
 
@@ -1038,14 +975,12 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.ifNullEnter(this, typeContext);
     // To infer `e0 ?? e1` in context K:
     // - Infer e0 in context K to get T0
     var lhsType = inferrer.inferExpression(_lhs, typeContext, true);
     if (inferrer.strongMode) {
       variable.type = lhsType;
     }
-    inferrer.listener.ifNullBeforeRhs(this);
     // - Let J = T0 if K is `_` else K.
     var rhsContext = typeContext ?? lhsType;
     // - Infer e1 in context J to get T1
@@ -1060,7 +995,6 @@
     if (inferrer.strongMode) {
       body.staticType = inferredType;
     }
-    inferrer.listener.ifNullExit(this, inferredType);
     return inferredType;
   }
 }
@@ -1072,7 +1006,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.ifStatementEnter(this);
     var expectedType = inferrer.coreTypes.boolClass.rawType;
     var conditionType =
         inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -1080,7 +1013,6 @@
         expectedType, conditionType, condition, condition.fileOffset);
     inferrer.inferStatement(then);
     if (otherwise != null) inferrer.inferStatement(otherwise);
-    inferrer.listener.ifStatementExit(this);
   }
 }
 
@@ -1135,9 +1067,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.indexAssignEnter(desugared, typeContext);
     var receiverType = _inferReceiver(inferrer);
-    inferrer.listener.indexAssignAfterReceiver(write, typeContext);
     var writeMember = inferrer.findMethodInvocationMember(receiverType, write);
     // To replicate analyzer behavior, we base type inference on the write
     // member.  TODO(paulberry): would it be better to use the read member
@@ -1191,8 +1121,6 @@
       _storeLetType(inferrer, replacedRead, readType);
     }
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
-    inferrer.listener.indexAssignExit(desugared, write, writeMember,
-        inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -1212,10 +1140,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.intLiteralEnter(this, typeContext);
-    var inferredType = inferrer.coreTypes.intClass.rawType;
-    inferrer.listener.intLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.intClass.rawType;
   }
 }
 
@@ -1226,9 +1151,7 @@
 
   @override
   void _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.listener.invalidInitializerEnter(this);
     inferrer.inferExpression(variable.initializer, null, false);
-    inferrer.listener.invalidInitializerExit(this);
   }
 }
 
@@ -1238,11 +1161,8 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.isExpressionEnter(this, typeContext);
     inferrer.inferExpression(operand, null, false);
-    var inferredType = inferrer.coreTypes.boolClass.rawType;
-    inferrer.listener.isExpressionExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.boolClass.rawType;
   }
 }
 
@@ -1254,13 +1174,8 @@
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     IsExpression isExpression = this.operand;
-
-    inferrer.listener.isNotExpressionEnter(this, typeContext);
     inferrer.inferExpression(isExpression.operand, null, false);
-    var inferredType = inferrer.coreTypes.boolClass.rawType;
-    inferrer.listener
-        .isNotExpressionExit(this, isExpression.type, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.boolClass.rawType;
   }
 }
 
@@ -1271,9 +1186,7 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.labeledStatementEnter(this);
     inferrer.inferStatement(body);
-    inferrer.listener.labeledStatementExit(this);
   }
 }
 
@@ -1290,7 +1203,6 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.listLiteralEnter(this, typeContext);
     var listClass = inferrer.coreTypes.listClass;
     var listType = listClass.thisType;
     List<DartType> inferredTypes;
@@ -1341,9 +1253,7 @@
             expressions[i].fileOffset);
       }
     }
-    var inferredType = new InterfaceType(listClass, [inferredTypeArgument]);
-    inferrer.listener.listLiteralExit(this, inferredType);
-    return inferredType;
+    return new InterfaceType(listClass, [inferredTypeArgument]);
   }
 }
 
@@ -1355,18 +1265,14 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.logicalExpressionEnter(this, typeContext);
     var boolType = inferrer.coreTypes.boolClass.rawType;
     var leftType =
         inferrer.inferExpression(left, boolType, !inferrer.isTopLevel);
-    inferrer.listener.logicalExpressionBeforeRhs(this);
     var rightType =
         inferrer.inferExpression(right, boolType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(boolType, leftType, left, left.fileOffset);
     inferrer.ensureAssignable(boolType, rightType, right, right.fileOffset);
-    var inferredType = boolType;
-    inferrer.listener.logicalExpressionExit(this, inferredType);
-    return inferredType;
+    return boolType;
   }
 }
 
@@ -1399,7 +1305,6 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.mapLiteralEnter(this, typeContext);
     var mapClass = inferrer.coreTypes.mapClass;
     var mapType = mapClass.thisType;
     List<DartType> inferredTypes;
@@ -1468,10 +1373,7 @@
             valueType, actualTypes[2 * i + 1], value, value.fileOffset);
       }
     }
-    var inferredType =
-        new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
-    inferrer.listener.mapLiteralExit(this, inferredType);
-    return inferredType;
+    return new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
   }
 }
 
@@ -1531,11 +1433,9 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.namedFunctionExpressionEnter(this, typeContext);
     var inferredType =
         inferrer.inferExpression(variable.initializer, typeContext, true);
     if (inferrer.strongMode) variable.type = inferredType;
-    inferrer.listener.namedFunctionExpressionExit(this, inferredType);
     return inferredType;
   }
 }
@@ -1546,15 +1446,12 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.notEnter(this, typeContext);
     // First infer the receiver so we can look up the method that was invoked.
     var boolType = inferrer.coreTypes.boolClass.rawType;
     var actualType =
         inferrer.inferExpression(operand, boolType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(boolType, actualType, operand, fileOffset);
-    DartType inferredType = boolType;
-    inferrer.listener.notExit(this, inferredType);
-    return inferredType;
+    return boolType;
   }
 }
 
@@ -1617,10 +1514,7 @@
 class ShadowNullLiteral extends NullLiteral implements ShadowExpression {
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.nullLiteralEnter(this, typeContext);
-    var inferredType = inferrer.coreTypes.nullClass.rawType;
-    inferrer.listener.nullLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.nullClass.rawType;
   }
 }
 
@@ -1692,7 +1586,6 @@
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     var receiverType = _inferReceiver(inferrer);
 
-    inferrer.listener.propertyAssignEnter(desugared, write, typeContext);
     DartType readType;
     if (read != null) {
       var readMember =
@@ -1712,8 +1605,6 @@
     var writeContext = inferrer.getSetterType(writeMember, receiverType);
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
     if (inferrer.strongMode) nullAwareGuard?.staticType = inferredResult.type;
-    inferrer.listener.propertyAssignExit(desugared, write, writeMember,
-        writeContext, inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -1744,11 +1635,9 @@
 
   @override
   _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.listener.redirectingInitializerEnter(this);
     inferrer.inferInvocation(null, fileOffset, target.function.functionType,
         target.enclosingClass.thisType, arguments,
         skipTypeArgumentInference: true);
-    inferrer.listener.redirectingInitializerExit(this);
   }
 }
 
@@ -1756,10 +1645,7 @@
 class ShadowRethrow extends Rethrow implements ShadowExpression {
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.rethrowEnter(this, typeContext);
-    var inferredType = const BottomType();
-    inferrer.listener.rethrowExit(this, inferredType);
-    return inferredType;
+    return const BottomType();
   }
 }
 
@@ -1769,7 +1655,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.returnStatementEnter(this);
     var closureContext = inferrer.closureContext;
     var typeContext = !closureContext.isGenerator
         ? closureContext.returnOrYieldContext
@@ -1784,7 +1669,6 @@
       closureContext.handleReturn(
           inferrer, inferredType, expression, fileOffset);
     }
-    inferrer.listener.returnStatementExit(this);
   }
 }
 
@@ -1798,21 +1682,7 @@
 
 /// Concrete shadow object representing an assignment to a static variable.
 class ShadowStaticAssignment extends ShadowComplexAssignment {
-  /// The name of the import prefix preceding the [_targetClass], or the target
-  /// [Procedure]; or `null` if the reference is not prefixed.
-  final String _prefixName;
-
-  /// If [_targetClass] is not `null`, the offset at which the explicit
-  /// reference to it is; otherwise `-1`.
-  final int _targetOffset;
-
-  /// The [Class] that was explicitly referenced to get the target [Procedure],
-  /// or `null` if the class is implicit.
-  final Class _targetClass;
-
-  ShadowStaticAssignment(
-      this._prefixName, this._targetOffset, this._targetClass, Expression rhs)
-      : super(rhs);
+  ShadowStaticAssignment(Expression rhs) : super(rhs);
 
   @override
   DartType _getWriteType(ShadowTypeInferrer inferrer) {
@@ -1822,8 +1692,6 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.staticAssignEnter(desugared, _prefixName, _targetOffset,
-        _targetClass, this.write, typeContext);
     DartType readType;
     var read = this.read;
     if (read is StaticGet) {
@@ -1842,8 +1710,6 @@
       }
     }
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
-    inferrer.listener.staticAssignExit(desugared, write, writeMember,
-        writeContext, inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -1852,26 +1718,10 @@
 /// Concrete shadow object representing a read of a static variable in kernel
 /// form.
 class ShadowStaticGet extends StaticGet implements ShadowExpression {
-  /// The name of the import prefix preceding the [_targetClass], or the target
-  /// [Procedure]; or `null` if the reference is not prefixed.
-  final String _prefixName;
-
-  /// If [_targetClass] is not `null`, the offset at which the explicit
-  /// reference to it is; otherwise `-1`.
-  final int _targetOffset;
-
-  /// The [Class] that was explicitly referenced to get the target [Procedure],
-  /// or `null` if the class is implicit.
-  final Class _targetClass;
-
-  ShadowStaticGet(
-      this._prefixName, this._targetOffset, this._targetClass, Member target)
-      : super(target);
+  ShadowStaticGet(Member target) : super(target);
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.staticGetEnter(
-        this, _prefixName, _targetOffset, _targetClass, typeContext);
     var target = this.target;
     if (target is ShadowField && target._inferenceNode != null) {
       target._inferenceNode.resolve();
@@ -1881,42 +1731,22 @@
     if (target is Procedure && target.kind == ProcedureKind.Method) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    var inferredType = type;
-    inferrer.listener.staticGetExit(this, inferredType);
-    return inferredType;
+    return type;
   }
 }
 
 /// Shadow object for [StaticInvocation].
 class ShadowStaticInvocation extends StaticInvocation
     implements ShadowExpression {
-  /// The name of the import prefix preceding the [_targetClass], or the target
-  /// [Procedure]; or `null` if the reference is not prefixed.
-  final String _prefixName;
-
-  /// If [_targetClass] is not `null`, the offset at which the explicit
-  /// reference to it is; otherwise `-1`.
-  final int _targetOffset;
-
-  /// The [Class] that was explicitly referenced to get the target [Procedure],
-  /// or `null` if the class is implicit.
-  final Class _targetClass;
-
-  ShadowStaticInvocation(this._prefixName, this._targetOffset,
-      this._targetClass, Procedure target, Arguments arguments,
+  ShadowStaticInvocation(Procedure target, Arguments arguments,
       {bool isConst: false})
       : super(target, arguments, isConst: isConst);
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.staticInvocationEnter(
-        this, _prefixName, _targetOffset, _targetClass, typeContext);
     var calleeType = target.function.functionType;
-    var inferredType = inferrer.inferInvocation(
+    return inferrer.inferInvocation(
         typeContext, fileOffset, calleeType, calleeType.returnType, arguments);
-    inferrer.listener.staticInvocationExit(this, inferrer.lastCalleeType,
-        inferrer.lastInferredSubstitution, inferredType);
-    return inferredType;
   }
 }
 
@@ -1927,15 +1757,12 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.stringConcatenationEnter(this, typeContext);
     if (!inferrer.isTopLevel) {
       for (Expression expression in expressions) {
         inferrer.inferExpression(expression, null, false);
       }
     }
-    var inferredType = inferrer.coreTypes.stringClass.rawType;
-    inferrer.listener.stringConcatenationExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.stringClass.rawType;
   }
 }
 
@@ -1945,10 +1772,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.stringLiteralEnter(this, typeContext);
-    var inferredType = inferrer.coreTypes.stringClass.rawType;
-    inferrer.listener.stringLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.stringClass.rawType;
   }
 }
 
@@ -1960,7 +1784,6 @@
 
   @override
   void _inferInitializer(ShadowTypeInferrer inferrer) {
-    inferrer.listener.superInitializerEnter(this);
     var substitution = Substitution.fromSupertype(inferrer.classHierarchy
         .getClassAsInstanceOf(
             inferrer.thisType.classNode, target.enclosingClass));
@@ -1972,7 +1795,6 @@
         inferrer.thisType,
         arguments,
         skipTypeArgumentInference: true);
-    inferrer.listener.superInitializerExit(this);
   }
 }
 
@@ -2021,7 +1843,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.switchStatementEnter(this);
     var expressionType = inferrer.inferExpression(expression, null, true);
     for (var switchCase in cases) {
       for (var caseExpression in switchCase.expressions) {
@@ -2029,7 +1850,6 @@
       }
       inferrer.inferStatement(switchCase.body);
     }
-    inferrer.listener.switchStatementExit(this);
   }
 }
 
@@ -2039,10 +1859,7 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.symbolLiteralEnter(this, typeContext);
-    var inferredType = inferrer.coreTypes.symbolClass.rawType;
-    inferrer.listener.symbolLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.symbolClass.rawType;
   }
 }
 
@@ -2112,10 +1929,7 @@
 class ShadowThisExpression extends ThisExpression implements ShadowExpression {
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.thisExpressionEnter(this, typeContext);
-    var inferredType = (inferrer.thisType ?? const DynamicType());
-    inferrer.listener.thisExpressionExit(this, inferredType);
-    return inferredType;
+    return (inferrer.thisType ?? const DynamicType());
   }
 }
 
@@ -2125,11 +1939,8 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.throwEnter(this, typeContext);
     inferrer.inferExpression(expression, null, false);
-    var inferredType = const BottomType();
-    inferrer.listener.throwExit(this, inferredType);
-    return inferredType;
+    return const BottomType();
   }
 }
 
@@ -2139,14 +1950,10 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.tryCatchEnter(this);
     inferrer.inferStatement(body);
     for (var catch_ in catches) {
-      inferrer.listener.catchStatementEnter(catch_);
       inferrer.inferStatement(catch_.body);
-      inferrer.listener.catchStatementExit(catch_);
     }
-    inferrer.listener.tryCatchExit(this);
   }
 }
 
@@ -2157,10 +1964,8 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.tryFinallyEnter(this);
     inferrer.inferStatement(body);
     inferrer.inferStatement(finalizer);
-    inferrer.listener.tryFinallyExit(this);
   }
 }
 
@@ -2176,19 +1981,15 @@
 
   @override
   ShadowTypeInferrer createLocalTypeInferrer(
-      Uri uri,
-      TypeInferenceListener listener,
-      InterfaceType thisType,
-      SourceLibraryBuilder library) {
-    return new ShadowTypeInferrer._(
-        this, uri, listener, false, thisType, library);
+      Uri uri, InterfaceType thisType, SourceLibraryBuilder library) {
+    return new ShadowTypeInferrer._(this, uri, false, thisType, library);
   }
 
   @override
-  ShadowTypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener,
+  ShadowTypeInferrer createTopLevelTypeInferrer(
       InterfaceType thisType, ShadowField field) {
-    return field._typeInferrer = new ShadowTypeInferrer._(
-        this, field.fileUri, listener, true, thisType, null);
+    return field._typeInferrer =
+        new ShadowTypeInferrer._(this, field.fileUri, true, thisType, null);
   }
 
   @override
@@ -2203,15 +2004,10 @@
   @override
   final typePromoter;
 
-  ShadowTypeInferrer._(
-      ShadowTypeInferenceEngine engine,
-      Uri uri,
-      TypeInferenceListener listener,
-      bool topLevel,
-      InterfaceType thisType,
-      SourceLibraryBuilder library)
+  ShadowTypeInferrer._(ShadowTypeInferenceEngine engine, Uri uri, bool topLevel,
+      InterfaceType thisType, SourceLibraryBuilder library)
       : typePromoter = new ShadowTypePromoter(engine.typeSchemaEnvironment),
-        super(engine, uri, listener, topLevel, thisType, library);
+        super(engine, uri, topLevel, thisType, library);
 
   @override
   Expression getFieldInitializer(ShadowField field) {
@@ -2296,18 +2092,11 @@
 
 /// Shadow object for [TypeLiteral].
 class ShadowTypeLiteral extends TypeLiteral implements ShadowExpression {
-  /// The name of the import prefix preceding the referenced type literal;
-  /// or `null` if the reference is not prefixed.
-  final String prefixName;
-
-  ShadowTypeLiteral(this.prefixName, DartType type) : super(type);
+  ShadowTypeLiteral(DartType type) : super(type);
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.typeLiteralEnter(this, prefixName, typeContext);
-    var inferredType = inferrer.coreTypes.typeClass.rawType;
-    inferrer.listener.typeLiteralExit(this, inferredType);
-    return inferredType;
+    return inferrer.coreTypes.typeClass.rawType;
   }
 }
 
@@ -2392,7 +2181,6 @@
 
   @override
   DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.variableAssignEnter(desugared, typeContext, this.write);
     DartType readType;
     var read = this.read;
     if (read is VariableGet) {
@@ -2407,8 +2195,6 @@
       }
     }
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
-    inferrer.listener.variableAssignExit(desugared, writeContext, write,
-        inferredResult.combiner, inferredResult.type);
     _replaceWithDesugared();
     return inferredResult.type;
   }
@@ -2459,7 +2245,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.variableDeclarationEnter(this);
     var declaredType = _implicitlyTyped ? null : type;
     DartType inferredType;
     DartType initializerType;
@@ -2482,7 +2267,6 @@
         initializer = replacedInitializer;
       }
     }
-    inferrer.listener.variableDeclarationExit(this, inferredType);
   }
 
   /// Determine whether the given [ShadowVariableDeclaration] had an implicit
@@ -2517,7 +2301,6 @@
     bool mutatedInClosure = variable._mutatedInClosure;
     DartType declaredOrInferredType = variable.type;
 
-    inferrer.listener.variableGetEnter(this, typeContext);
     DartType promotedType = inferrer.typePromoter
         .computePromotedType(_fact, _scope, mutatedInClosure);
     if (promotedType != null) {
@@ -2529,9 +2312,7 @@
     if (variable._isLocalFunction) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    var inferredType = type;
-    inferrer.listener.variableGetExit(this, inferredType);
-    return inferredType;
+    return type;
   }
 }
 
@@ -2542,14 +2323,12 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.whileStatementEnter(this);
     var expectedType = inferrer.coreTypes.boolClass.rawType;
     var actualType =
         inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
     inferrer.ensureAssignable(
         expectedType, actualType, condition, condition.fileOffset);
     inferrer.inferStatement(body);
-    inferrer.listener.whileStatementExit(this);
   }
 }
 
@@ -2560,7 +2339,6 @@
 
   @override
   void _inferStatement(ShadowTypeInferrer inferrer) {
-    inferrer.listener.yieldStatementEnter(this);
     var closureContext = inferrer.closureContext;
     var typeContext =
         closureContext.isGenerator ? closureContext.returnOrYieldContext : null;
@@ -2574,7 +2352,6 @@
     var inferredType = inferrer.inferExpression(expression, typeContext, true);
     closureContext.handleYield(
         inferrer, isYieldStar, inferredType, expression, fileOffset);
-    inferrer.listener.yieldStatementExit(this);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
index 381c598..fb9401b 100644
--- a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart
@@ -44,4 +44,7 @@
   Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) {
     return skipFunctionBody(token, isExpression, allowAbstract);
   }
+
+  @override
+  Token parseInvalidBlock(Token token) => skipBlock(token);
 }
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index ccdefbb..04095bd 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -8,6 +8,7 @@
 
 class ForwardingListener implements Listener {
   Listener listener;
+  bool forwardErrors = true;
 
   ForwardingListener([this.listener]);
 
@@ -1028,6 +1029,10 @@
     listener?.handleInvalidTypeReference(token);
   }
 
+  void handleInvalidTopLevelBlock(Token token) {
+    listener?.handleInvalidTopLevelBlock(token);
+  }
+
   @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     listener?.handleInvalidTopLevelDeclaration(endToken);
@@ -1203,7 +1208,9 @@
   @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
-    listener?.handleRecoverableError(message, startToken, endToken);
+    if (forwardErrors) {
+      listener?.handleRecoverableError(message, startToken, endToken);
+    }
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index ce5ca69..eefe576 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -62,6 +62,8 @@
     logEvent("Block");
   }
 
+  void handleInvalidTopLevelBlock(Token token) {}
+
   void beginCascade(Token token) {}
 
   void endCascade() {
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index cc3f267..57623b8 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -68,6 +68,8 @@
         isMandatoryFormalParameterKind,
         isOptionalPositionalFormalParameterKind;
 
+import 'forwarding_listener.dart' show ForwardingListener;
+
 import 'identifier_context.dart' show IdentifierContext;
 
 import 'listener.dart' show Listener;
@@ -465,7 +467,7 @@
       }
       return parseTopLevelKeywordDeclaration(
           token, beforeAbstractToken, directiveState);
-    } else if (next.isIdentifier || next.keyword != null) {
+    } else if (next.isKeywordOrIdentifier) {
       // TODO(danrubel): improve parseTopLevelMember
       // so that we don't parse modifiers twice.
       directiveState?.checkDeclaration();
@@ -489,7 +491,7 @@
     }
     // Ignore any preceding modifiers and just report the unexpected token
     listener.beginTopLevelMember(next);
-    return reportInvalidTopLevelDeclaration(next);
+    return parseInvalidTopLevelDeclaration(token);
   }
 
   // Report an error for the given modifier preceding a top level keyword
@@ -1026,21 +1028,8 @@
       token =
           parseFormalParametersRequiredOpt(token, MemberKind.FunctionTypeAlias);
     }
-    Token semicolon = token.next;
-    if (optional(';', semicolon)) {
-      token = semicolon;
-    } else {
-      // Recovery
-      token = semicolon = ensureSemicolon(token);
-      if (optional('{', token.next) && token.next.endGroup != null) {
-        // Looks like a typedef and function declaration collided.
-        // TODO(danrubel) Consider better error message and recovery.
-        reportRecoverableErrorWithToken(
-            token.next, fasta.templateExpectedDeclaration);
-        token = token.next.endGroup;
-      }
-    }
-    listener.endFunctionTypeAlias(typedefKeyword, equals, semicolon);
+    token = ensureSemicolon(token);
+    listener.endFunctionTypeAlias(typedefKeyword, equals, token);
     return token;
   }
 
@@ -3057,7 +3046,7 @@
           // ensureIdentifier will report the error.
         } else if (token == beforeStart) {
           // Ensure we make progress.
-          return reportInvalidTopLevelDeclaration(next);
+          return parseInvalidTopLevelDeclaration(token);
         } else {
           // Looks like a declaration missing an identifier.
           // Insert synthetic identifier and fall through.
@@ -5872,6 +5861,19 @@
     return token;
   }
 
+  Token parseInvalidBlock(Token token) {
+    Token begin = token.next;
+    assert(optional('{', begin));
+    // Parse and report the invalid block, but suppress errors
+    // because an error has already been reported by the caller.
+    Listener originalListener = listener;
+    listener = new ForwardingListener(listener)..forwardErrors = false;
+    token = parseBlock(token);
+    listener = originalListener;
+    listener.handleInvalidTopLevelBlock(begin);
+    return token;
+  }
+
   /// ```
   /// awaitExpression:
   ///   'await' unaryExpression
@@ -6452,10 +6454,18 @@
     return nextToken;
   }
 
-  Token reportInvalidTopLevelDeclaration(Token token) {
-    reportRecoverableErrorWithToken(token, fasta.templateExpectedDeclaration);
-    listener.handleInvalidTopLevelDeclaration(token);
-    return token;
+  Token parseInvalidTopLevelDeclaration(Token token) {
+    Token next = token.next;
+    reportRecoverableErrorWithToken(
+        next,
+        optional(';', next)
+            ? fasta.templateUnexpectedToken
+            : fasta.templateExpectedDeclaration);
+    if (optional('{', next)) {
+      next = parseInvalidBlock(token);
+    }
+    listener.handleInvalidTopLevelDeclaration(next);
+    return next;
   }
 
   Token reportUnmatchedToken(BeginToken token) {
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 0dda491..4d9da6f 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -31,9 +31,6 @@
 
 import '../type_inference/type_inference_engine.dart' show TypeInferenceEngine;
 
-import '../type_inference/type_inference_listener.dart'
-    show TypeInferenceListener;
-
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'stack_listener.dart' show NullValue, StackListener;
@@ -537,8 +534,7 @@
 
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope, TypeInferenceListener listener]) {
-    listener ??= new TypeInferenceListener();
+      [Scope formalParameterScope]) {
     InterfaceType thisType;
     if (builder.isClassMember) {
       // Note: we set thisType regardless of whether we are building a static
@@ -548,8 +544,7 @@
     }
     var typeInferrer = library.disableTypeInference
         ? typeInferenceEngine.createDisabledTypeInferrer()
-        : typeInferenceEngine.createLocalTypeInferrer(
-            uri, listener, thisType, library);
+        : typeInferenceEngine.createLocalTypeInferrer(uri, thisType, library);
     return new BodyBuilder(library, builder, memberScope, formalParameterScope,
         hierarchy, coreTypes, currentClass, isInstanceMember, uri, typeInferrer)
       ..constantExpressionRequired = builder.isConstructor && builder.isConst;
diff --git a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
index 07486e1..47a7d33 100644
--- a/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
+++ b/pkg/front_end/lib/src/fasta/testing/kernel_chain.dart
@@ -124,7 +124,7 @@
     StringBuffer buffer = new StringBuffer();
     new Printer(buffer).writeLibraryFile(library);
     String actual = "$buffer".replaceAll("$base", "org-dartlang-testcase:///");
-
+    actual = actual.replaceAll("\\n", "\n");
     File expectedFile = new File("${uri.toFilePath()}$suffix");
     if (await expectedFile.exists()) {
       String expected = await expectedFile.readAsString();
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index b933a4887..18e43e9 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -7,7 +7,6 @@
 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
 import 'package:front_end/src/fasta/messages.dart';
 import 'package:front_end/src/fasta/source/source_library_builder.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
 import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
 import 'package:kernel/ast.dart'
@@ -210,12 +209,12 @@
 
   /// Creates a type inferrer for use inside of a method body declared in a file
   /// with the given [uri].
-  TypeInferrer createLocalTypeInferrer(Uri uri, TypeInferenceListener listener,
-      InterfaceType thisType, SourceLibraryBuilder library);
+  TypeInferrer createLocalTypeInferrer(
+      Uri uri, InterfaceType thisType, SourceLibraryBuilder library);
 
   /// Creates a [TypeInferrer] object which is ready to perform type inference
   /// on the given [field].
-  TypeInferrer createTopLevelTypeInferrer(TypeInferenceListener listener,
+  TypeInferrer createTopLevelTypeInferrer(
       InterfaceType thisType, ShadowField field);
 
   /// Performs the second phase of top level initializer inference, which is to
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
deleted file mode 100644
index 30cf05c..0000000
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
+++ /dev/null
@@ -1,540 +0,0 @@
-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
-// 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.
-
-import 'package:kernel/ast.dart';
-import 'package:kernel/type_algebra.dart';
-
-/// Base class for [TypeInferenceListener] that defines the API for debugging.
-///
-/// By default no debug info is printed.  To enable debug printing, mix in
-/// [TypeInferenceDebugging].
-class TypeInferenceBase {
-  void genericExpressionEnter(
-      String expressionType, Expression expression, DartType typeContext) {}
-
-  void genericExpressionExit(
-      String expressionType, Expression expression, DartType inferredType) {}
-
-  void genericInitializerEnter(
-      String initializerType, Initializer initializer) {}
-
-  void genericInitializerExit(
-      String initializerType, Initializer initializer) {}
-
-  void genericStatementEnter(String statementType, Statement statement) {}
-
-  void genericStatementExit(String statementType, Statement statement) {}
-}
-
-/// Mixin which can be applied to [TypeInferenceListener] to cause debug info to
-/// be printed.
-class TypeInferenceDebugging implements TypeInferenceBase {
-  int _indentLevel = 0;
-
-  String get _indent => '| ' * _indentLevel;
-
-  void genericExpressionEnter(
-      String expressionType, Expression expression, DartType typeContext) {
-    _enter('genericExpressionEnter', '$expressionType($expression)',
-        '(offset=${expression.fileOffset}, context=$typeContext)');
-  }
-
-  void genericExpressionExit(
-      String expressionType, Expression expression, DartType inferredType) {
-    _exit('genericExpressionExit', '$expressionType($expression)',
-        '(offset=${expression.fileOffset}, type=$inferredType)');
-  }
-
-  void genericInitializerEnter(
-      String initializerType, Initializer initializer) {
-    _enter('genericInitializerEnter', '$initializerType($initializer)',
-        '(offset=${initializer.fileOffset})');
-  }
-
-  void genericInitializerExit(String initializerType, Initializer initializer) {
-    _exit('genericInitializerExit', '$initializerType($initializer)',
-        '(offset=${initializer.fileOffset})');
-  }
-
-  void genericStatementEnter(String statementType, Statement statement) {
-    _enter('genericStatementEnter', '$statementType($statement)',
-        '(offset=${statement.fileOffset})');
-  }
-
-  void genericStatementExit(String statementType, Statement statement) {
-    _exit('genericStatementExit', '$statementType($statement)',
-        '(offset=${statement.fileOffset})');
-  }
-
-  void _enter(String methodName, String description, String details) {
-    print('$_indent$methodName');
-    print('$_indent|   $description');
-    print('$_indent|   $details');
-    _indentLevel++;
-  }
-
-  void _exit(String methodName, String description, String details) {
-    _indentLevel--;
-    print('$_indent$methodName');
-    print('$_indent    $description');
-    print('$_indent    $details');
-  }
-}
-
-/// Callback interface used by [TypeInferrer] to report the results of type
-/// inference to a client.
-///
-/// The interface is structured as a set of enter/exit methods.  The enter
-/// methods are called as the inferrer recurses down through the AST, and the
-/// exit methods are called on the way back up.  The enter methods take a
-/// [DartType] argument representing the downwards inference context; the exit
-/// methods take [DartType] argument representing the final inferred type.
-///
-/// The default implementation (in this base class) does nothing, however it can
-/// be used to debug type inference by uncommenting the
-/// "with TypeInferenceDebugging" clause below.
-class TypeInferenceListener
-    extends TypeInferenceBase // with TypeInferenceDebugging
-{
-  void asExpressionEnter(AsExpression expression, DartType typeContext) =>
-      genericExpressionEnter("asExpression", expression, typeContext);
-
-  void asExpressionExit(AsExpression expression, DartType inferredType) =>
-      genericExpressionExit("asExpression", expression, inferredType);
-
-  void assertInitializerEnter(AssertInitializer initializer) =>
-      genericInitializerEnter("assertInitializer", initializer);
-
-  void assertInitializerExit(AssertInitializer initializer) =>
-      genericInitializerExit("assertInitializer", initializer);
-
-  void assertStatementEnter(AssertStatement statement) =>
-      genericStatementEnter('assertStatement', statement);
-
-  void assertStatementExit(AssertStatement statement) =>
-      genericStatementExit('assertStatement', statement);
-
-  void awaitExpressionEnter(AwaitExpression expression, DartType typeContext) =>
-      genericExpressionEnter("awaitExpression", expression, typeContext);
-
-  void awaitExpressionExit(AwaitExpression expression, DartType inferredType) =>
-      genericExpressionExit("awaitExpression", expression, inferredType);
-
-  void blockEnter(Block statement) => genericStatementEnter('block', statement);
-
-  void blockExit(Block statement) => genericStatementExit('block', statement);
-
-  void boolLiteralEnter(BoolLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("boolLiteral", expression, typeContext);
-
-  void boolLiteralExit(BoolLiteral expression, DartType inferredType) =>
-      genericExpressionExit("boolLiteral", expression, inferredType);
-
-  void breakStatementEnter(BreakStatement statement) =>
-      genericStatementEnter('breakStatement', statement);
-
-  void breakStatementExit(BreakStatement statement) =>
-      genericStatementExit('breakStatement', statement);
-
-  void cascadeExpressionEnter(Let expression, DartType typeContext) =>
-      genericExpressionEnter("cascade", expression, typeContext);
-
-  void cascadeExpressionExit(Let expression, DartType inferredType) =>
-      genericExpressionExit("cascade", expression, inferredType);
-
-  void catchStatementEnter(Catch statement) {}
-
-  void catchStatementExit(Catch statement) {}
-
-  void conditionalExpressionEnter(
-          ConditionalExpression expression, DartType typeContext) =>
-      genericExpressionEnter("conditionalExpression", expression, typeContext);
-
-  void conditionalExpressionExit(
-          ConditionalExpression expression, DartType inferredType) =>
-      genericExpressionExit("conditionalExpression", expression, inferredType);
-
-  void constructorInvocationEnter(InvocationExpression expression,
-          String prefixName, DartType typeContext) =>
-      genericExpressionEnter("constructorInvocation", expression, typeContext);
-
-  void constructorInvocationExit(
-          InvocationExpression expression, DartType inferredType) =>
-      genericExpressionExit("constructorInvocation", expression, inferredType);
-
-  void continueSwitchStatementEnter(ContinueSwitchStatement statement) =>
-      genericStatementEnter('continueSwitchStatement', statement);
-
-  void continueSwitchStatementExit(ContinueSwitchStatement statement) =>
-      genericStatementExit('continueSwitchStatement', statement);
-
-  void deferredCheckEnter(Let expression, DartType typeContext) =>
-      genericExpressionEnter("deferredCheck", expression, typeContext);
-
-  void deferredCheckExit(Let expression, DartType inferredType) =>
-      genericExpressionExit("deferredCheck", expression, inferredType);
-
-  void doStatementEnter(DoStatement statement) =>
-      genericStatementEnter("doStatement", statement);
-
-  void doStatementExit(DoStatement statement) =>
-      genericStatementExit("doStatement", statement);
-
-  void doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("doubleLiteral", expression, typeContext);
-
-  void doubleLiteralExit(DoubleLiteral expression, DartType inferredType) =>
-      genericExpressionExit("doubleLiteral", expression, inferredType);
-
-  void dryRunEnter(Expression expression) =>
-      genericExpressionEnter("dryRun", expression, null);
-
-  void dryRunExit(Expression expression) =>
-      genericExpressionExit("dryRun", expression, null);
-
-  void expressionStatementEnter(ExpressionStatement statement) =>
-      genericStatementEnter('expressionStatement', statement);
-
-  void expressionStatementExit(ExpressionStatement statement) =>
-      genericStatementExit('expressionStatement', statement);
-
-  void fieldInitializerEnter(FieldInitializer initializer) =>
-      genericInitializerEnter("fieldInitializer", initializer);
-
-  void fieldInitializerExit(FieldInitializer initializer) =>
-      genericInitializerExit("fieldInitializer", initializer);
-
-  void forInStatementEnter(ForInStatement statement,
-          VariableDeclaration variable, Expression write) =>
-      genericStatementEnter('forInStatement', statement);
-
-  void forInStatementExit(
-          ForInStatement statement, VariableDeclaration variable) =>
-      genericStatementExit('forInStatement', statement);
-
-  void forStatementEnter(ForStatement statement) =>
-      genericStatementEnter('forStatement', statement);
-
-  void forStatementExit(ForStatement statement) =>
-      genericStatementExit('forStatement', statement);
-
-  void functionDeclarationEnter(FunctionDeclaration statement) =>
-      genericStatementEnter('functionDeclaration', statement);
-
-  void functionDeclarationExit(FunctionDeclaration statement) =>
-      genericStatementExit('functionDeclaration', statement);
-
-  void functionExpressionEnter(
-          FunctionExpression expression, DartType typeContext) =>
-      genericExpressionEnter("functionExpression", expression, typeContext);
-
-  void functionExpressionExit(
-          FunctionExpression expression, DartType inferredType) =>
-      genericExpressionExit("functionExpression", expression, inferredType);
-
-  void ifNullBeforeRhs(Expression expression) {}
-
-  void ifNullEnter(Expression expression, DartType typeContext) =>
-      genericExpressionEnter('ifNull', expression, typeContext);
-
-  void ifNullExit(Expression expression, DartType inferredType) =>
-      genericExpressionExit('ifNull', expression, inferredType);
-
-  void ifStatementEnter(IfStatement statement) =>
-      genericStatementEnter('ifStatement', statement);
-
-  void ifStatementExit(IfStatement statement) =>
-      genericStatementExit('ifStatement', statement);
-
-  void indexAssignAfterReceiver(Expression expression, DartType typeContext) {}
-
-  void indexAssignEnter(Expression expression, DartType typeContext) =>
-      genericExpressionEnter("indexAssign", expression, typeContext);
-
-  void indexAssignExit(Expression expression, Expression write,
-          Member writeMember, Procedure combiner, DartType inferredType) =>
-      genericExpressionExit("indexAssign", expression, inferredType);
-
-  void intLiteralEnter(IntLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("intLiteral", expression, typeContext);
-
-  void intLiteralExit(IntLiteral expression, DartType inferredType) =>
-      genericExpressionExit("intLiteral", expression, inferredType);
-
-  void invalidInitializerEnter(LocalInitializer initializer) =>
-      genericInitializerEnter("invalidInitializer", initializer);
-
-  void invalidInitializerExit(LocalInitializer initializer) =>
-      genericInitializerExit("invalidInitializer", initializer);
-
-  void isExpressionEnter(IsExpression expression, DartType typeContext) =>
-      genericExpressionEnter("isExpression", expression, typeContext);
-
-  void isExpressionExit(IsExpression expression, DartType inferredType) =>
-      genericExpressionExit("isExpression", expression, inferredType);
-
-  void isNotExpressionEnter(Not expression, DartType typeContext) =>
-      genericExpressionEnter("isNotExpression", expression, typeContext);
-
-  void isNotExpressionExit(
-          Not expression, DartType type, DartType inferredType) =>
-      genericExpressionExit("isNotExpression", expression, inferredType);
-
-  void labeledStatementEnter(LabeledStatement statement) =>
-      genericStatementEnter('labeledStatement', statement);
-
-  void labeledStatementExit(LabeledStatement statement) =>
-      genericStatementExit('labeledStatement', statement);
-
-  void listLiteralEnter(ListLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("listLiteral", expression, typeContext);
-
-  void listLiteralExit(ListLiteral expression, DartType inferredType) =>
-      genericExpressionExit("listLiteral", expression, inferredType);
-
-  void logicalExpressionBeforeRhs(LogicalExpression expression) {}
-
-  void logicalExpressionEnter(
-          LogicalExpression expression, DartType typeContext) =>
-      genericExpressionEnter("logicalExpression", expression, typeContext);
-
-  void logicalExpressionExit(
-          LogicalExpression expression, DartType inferredType) =>
-      genericExpressionExit("logicalExpression", expression, inferredType);
-
-  void mapLiteralEnter(MapLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("mapLiteral", expression, typeContext);
-
-  void mapLiteralExit(MapLiteral expression, DartType typeContext) =>
-      genericExpressionExit("mapLiteral", expression, typeContext);
-
-  void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {}
-
-  void methodInvocationEnter(Expression expression, DartType typeContext) =>
-      genericExpressionEnter("methodInvocation", expression, typeContext);
-
-  void methodInvocationExit(
-          Expression expression,
-          Arguments arguments,
-          bool isImplicitCall,
-          Member interfaceMember,
-          FunctionType calleeType,
-          Substitution substitution,
-          DartType inferredType) =>
-      genericExpressionExit("methodInvocation", expression, inferredType);
-
-  void methodInvocationExitCall(
-          Expression expression,
-          Arguments arguments,
-          bool isImplicitCall,
-          FunctionType calleeType,
-          Substitution substitution,
-          DartType inferredType) =>
-      genericExpressionExit("methodInvocation", expression, inferredType);
-
-  void namedFunctionExpressionEnter(Let expression, DartType typeContext) =>
-      genericExpressionEnter(
-          "namedFunctionExpression", expression, typeContext);
-
-  void namedFunctionExpressionExit(Let expression, DartType inferredType) =>
-      genericExpressionExit(
-          "namedFunctionExpression", expression, inferredType);
-
-  void notEnter(Not expression, DartType typeContext) =>
-      genericExpressionEnter("not", expression, typeContext);
-
-  void notExit(Not expression, DartType inferredType) =>
-      genericExpressionExit("not", expression, inferredType);
-
-  void nullLiteralEnter(NullLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("nullLiteral", expression, typeContext);
-
-  void nullLiteralExit(NullLiteral expression, DartType inferredType) =>
-      genericExpressionExit("nullLiteral", expression, inferredType);
-
-  void propertyAssignEnter(
-          Expression expression, Expression write, DartType typeContext) =>
-      genericExpressionEnter("propertyAssign", expression, typeContext);
-
-  void propertyAssignExit(
-          Expression expression,
-          Expression write,
-          Member writeMember,
-          DartType writeContext,
-          Procedure combiner,
-          DartType inferredType) =>
-      genericExpressionExit("propertyAssign", expression, inferredType);
-
-  void propertyGetEnter(Expression expression, DartType typeContext) =>
-      genericExpressionEnter("propertyGet", expression, typeContext);
-
-  void propertyGetExit(
-          Expression expression, Member member, DartType inferredType) =>
-      genericExpressionExit("propertyGet", expression, inferredType);
-
-  void propertyGetExitCall(Expression expression, DartType inferredType) =>
-      genericExpressionExit("propertyGet", expression, inferredType);
-
-  void propertySetEnter(PropertySet expression, DartType typeContext) =>
-      genericExpressionEnter("propertySet", expression, typeContext);
-
-  void propertySetExit(PropertySet expression, DartType inferredType) =>
-      genericExpressionExit("propertySet", expression, inferredType);
-
-  void redirectingInitializerEnter(RedirectingInitializer initializer) =>
-      genericInitializerEnter("redirectingInitializer", initializer);
-
-  void redirectingInitializerExit(RedirectingInitializer initializer) =>
-      genericInitializerExit("redirectingInitializer", initializer);
-
-  void rethrowEnter(Rethrow expression, DartType typeContext) =>
-      genericExpressionEnter('rethrow', expression, typeContext);
-
-  void rethrowExit(Rethrow expression, DartType inferredType) =>
-      genericExpressionExit('rethrow', expression, inferredType);
-
-  void returnStatementEnter(ReturnStatement statement) =>
-      genericStatementEnter('returnStatement', statement);
-
-  void returnStatementExit(ReturnStatement statement) =>
-      genericStatementExit('returnStatement', statement);
-
-  void staticAssignEnter(
-          Expression expression,
-          String prefixName,
-          int targetOffset,
-          Class targetClass,
-          Expression write,
-          DartType typeContext) =>
-      genericExpressionEnter("staticAssign", expression, typeContext);
-
-  void staticAssignExit(
-          Expression expression,
-          Expression write,
-          Member writeMember,
-          DartType writeContext,
-          Procedure combiner,
-          DartType inferredType) =>
-      genericExpressionExit("staticAssign", expression, inferredType);
-
-  void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
-          Class targetClass, DartType typeContext) =>
-      genericExpressionEnter("staticGet", expression, typeContext);
-
-  void staticGetExit(StaticGet expression, DartType inferredType) =>
-      genericExpressionExit("staticGet", expression, inferredType);
-
-  void staticInvocationEnter(StaticInvocation expression, String prefixName,
-          int targetOffset, Class targetClass, DartType typeContext) =>
-      genericExpressionEnter("staticInvocation", expression, typeContext);
-
-  void staticInvocationExit(
-          StaticInvocation expression,
-          FunctionType calleeType,
-          Substitution substitution,
-          DartType inferredType) =>
-      genericExpressionExit("staticInvocation", expression, inferredType);
-
-  void stringConcatenationEnter(
-          StringConcatenation expression, DartType typeContext) =>
-      genericExpressionEnter("stringConcatenation", expression, typeContext);
-
-  void stringConcatenationExit(
-          StringConcatenation expression, DartType inferredType) =>
-      genericExpressionExit("stringConcatenation", expression, inferredType);
-
-  void stringLiteralEnter(StringLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("StringLiteral", expression, typeContext);
-
-  void stringLiteralExit(StringLiteral expression, DartType inferredType) =>
-      genericExpressionExit("StringLiteral", expression, inferredType);
-
-  void superInitializerEnter(SuperInitializer initializer) =>
-      genericInitializerEnter("superInitializer", initializer);
-
-  void superInitializerExit(SuperInitializer initializer) =>
-      genericInitializerExit("superInitializer", initializer);
-
-  void switchStatementEnter(SwitchStatement statement) =>
-      genericStatementEnter('switchStatement', statement);
-
-  void switchStatementExit(SwitchStatement statement) =>
-      genericStatementExit('switchStatement', statement);
-
-  void symbolLiteralEnter(SymbolLiteral expression, DartType typeContext) =>
-      genericExpressionEnter("symbolLiteral", expression, typeContext);
-
-  void symbolLiteralExit(SymbolLiteral expression, DartType inferredType) =>
-      genericExpressionExit("symbolLiteral", expression, inferredType);
-
-  void thisExpressionEnter(ThisExpression expression, DartType typeContext) =>
-      genericExpressionEnter("thisExpression", expression, typeContext);
-
-  void thisExpressionExit(ThisExpression expression, DartType inferredType) =>
-      genericExpressionExit("thisExpression", expression, inferredType);
-
-  void throwEnter(Throw expression, DartType typeContext) =>
-      genericExpressionEnter('throw', expression, typeContext);
-
-  void throwExit(Throw expression, DartType inferredType) =>
-      genericExpressionExit('throw', expression, inferredType);
-
-  void tryCatchEnter(TryCatch statement) =>
-      genericStatementEnter('tryCatch', statement);
-
-  void tryCatchExit(TryCatch statement) =>
-      genericStatementExit('tryCatch', statement);
-
-  void tryFinallyEnter(TryFinally statement) =>
-      genericStatementEnter('tryFinally', statement);
-
-  void tryFinallyExit(TryFinally statement) =>
-      genericStatementExit('tryFinally', statement);
-
-  void typeLiteralEnter(
-          TypeLiteral expression, String prefixName, DartType typeContext) =>
-      genericExpressionEnter("typeLiteral", expression, typeContext);
-
-  void typeLiteralExit(TypeLiteral expression, DartType inferredType) =>
-      genericExpressionExit("typeLiteral", expression, inferredType);
-
-  void variableAssignEnter(
-          Expression expression, DartType typeContext, Expression write) =>
-      genericExpressionEnter("variableAssign", expression, typeContext);
-
-  void variableAssignExit(Expression expression, DartType writeContext,
-          Expression write, Procedure combiner, DartType inferredType) =>
-      genericExpressionExit("variableAssign", expression, inferredType);
-
-  void variableDeclarationEnter(VariableDeclaration statement) =>
-      genericStatementEnter('variableDeclaration', statement);
-
-  void variableDeclarationExit(
-          VariableDeclaration statement, DartType inferredType) =>
-      genericStatementExit('variableDeclaration', statement);
-
-  void variableGetEnter(VariableGet expression, DartType typeContext) =>
-      genericExpressionEnter("variableGet", expression, typeContext);
-
-  void variableGetExit(VariableGet expression, DartType inferredType) =>
-      genericExpressionExit("variableGet", expression, inferredType);
-
-  void variableSetEnter(VariableSet expression, DartType typeContext) =>
-      genericExpressionEnter("variableSet", expression, typeContext);
-
-  void variableSetExit(VariableSet expression, DartType inferredType) =>
-      genericExpressionExit("variableSet", expression, inferredType);
-
-  void whileStatementEnter(WhileStatement statement) =>
-      genericStatementEnter("whileStatement", statement);
-
-  void whileStatementExit(WhileStatement statement) =>
-      genericStatementExit("whileStatement", statement);
-
-  void yieldStatementEnter(YieldStatement statement) =>
-      genericStatementEnter('yieldStatement', statement);
-
-  void yieldStatementExit(YieldStatement statement) =>
-      genericStatementExit('yieldStatement', statement);
-}
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 152af57..0c41b9b 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -89,8 +89,6 @@
 
 import 'type_inference_engine.dart' show TypeInferenceEngineImpl;
 
-import 'type_inference_listener.dart' show TypeInferenceListener;
-
 import 'type_promotion.dart' show TypePromoter, TypePromoterDisabled;
 
 import 'type_schema.dart' show isKnown, UnknownType;
@@ -413,8 +411,6 @@
 
   final TypeSchemaEnvironment typeSchemaEnvironment;
 
-  final TypeInferenceListener listener;
-
   final InterfaceType thisType;
 
   final SourceLibraryBuilder library;
@@ -433,8 +429,8 @@
   /// if the last invocation didn't require any inference.
   FunctionType lastCalleeType;
 
-  TypeInferrerImpl(this.engine, this.uri, this.listener, bool topLevel,
-      this.thisType, this.library)
+  TypeInferrerImpl(
+      this.engine, this.uri, bool topLevel, this.thisType, this.library)
       : coreTypes = engine.coreTypes,
         strongMode = engine.strongMode,
         classHierarchy = engine.classHierarchy,
@@ -1279,11 +1275,9 @@
       Object interfaceMember,
       Name methodName,
       Arguments arguments}) {
-    listener.methodInvocationEnter(expression, typeContext);
     // First infer the receiver so we can look up the method that was invoked.
     var receiverType =
         receiver == null ? thisType : inferExpression(receiver, null, true);
-    listener.methodInvocationBeforeArgs(expression, isImplicitCall);
     if (strongMode) {
       receiverVariable?.type = receiverType;
     }
@@ -1311,30 +1305,18 @@
     }
     handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
         expression, inferredType, calleeType, fileOffset);
-    if (identical(interfaceMember, 'call')) {
-      listener.methodInvocationExitCall(expression, arguments, isImplicitCall,
-          lastCalleeType, lastInferredSubstitution, inferredType);
-    } else {
-      if (strongMode &&
-          isImplicitCall &&
-          interfaceMember != null &&
-          !(interfaceMember is Procedure &&
-              interfaceMember.kind == ProcedureKind.Method) &&
-          receiverType is! DynamicType &&
-          receiverType != typeSchemaEnvironment.rawFunctionType) {
-        var parent = expression.parent;
-        var errorNode = helper.wrapInCompileTimeError(expression,
-            templateImplicitCallOfNonMethod.withArguments(receiverType));
-        parent?.replaceChild(expression, errorNode);
-      }
-      listener.methodInvocationExit(
-          expression,
-          arguments,
-          isImplicitCall,
-          interfaceMember,
-          lastCalleeType,
-          lastInferredSubstitution,
-          inferredType);
+    if (!identical(interfaceMember, 'call') &&
+        strongMode &&
+        isImplicitCall &&
+        interfaceMember != null &&
+        !(interfaceMember is Procedure &&
+            interfaceMember.kind == ProcedureKind.Method) &&
+        receiverType is! DynamicType &&
+        receiverType != typeSchemaEnvironment.rawFunctionType) {
+      var parent = expression.parent;
+      var errorNode = helper.wrapInCompileTimeError(expression,
+          templateImplicitCallOfNonMethod.withArguments(receiverType));
+      parent?.replaceChild(expression, errorNode);
     }
     return inferredType;
   }
@@ -1359,7 +1341,6 @@
       PropertyGet desugaredGet,
       Object interfaceMember,
       Name propertyName}) {
-    listener.propertyGetEnter(expression, typeContext);
     // First infer the receiver so we can look up the getter that was invoked.
     var receiverType =
         receiver == null ? thisType : inferExpression(receiver, null, true);
@@ -1385,11 +1366,6 @@
       inferredType =
           instantiateTearOff(inferredType, typeContext, replacedExpression);
     }
-    if (identical(interfaceMember, 'call')) {
-      listener.propertyGetExitCall(expression, inferredType);
-    } else {
-      listener.propertyGetExit(expression, interfaceMember, inferredType);
-    }
     return inferredType;
   }
 
diff --git a/pkg/front_end/lib/src/incremental/unlinked_unit.dart b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
index 12bccce..0b5753a 100644
--- a/pkg/front_end/lib/src/incremental/unlinked_unit.dart
+++ b/pkg/front_end/lib/src/incremental/unlinked_unit.dart
@@ -123,6 +123,9 @@
     return super.parseFunctionBody(token, ofFunctionExpression, allowAbstract);
   }
 
+  @override
+  Token parseInvalidBlock(Token token) => skipBlock(token);
+
   Token parseMixinApplicationRest(Token token) {
     hasMixin = true;
     return super.parseMixinApplicationRest(token);
diff --git a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
index 7e1de38..a09b51d 100644
--- a/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
+++ b/pkg/front_end/test/fasta/testing/analyzer_diet_listener.dart
@@ -4,34 +4,23 @@
 
 library fasta.analyzer_diet_listener;
 
-import 'package:analyzer/dart/ast/ast.dart' as ast show AstNode, ClassMember;
+import 'package:analyzer/dart/ast/ast.dart' as ast show ClassMember;
 
 import 'package:analyzer/dart/ast/standard_ast_factory.dart' show astFactory;
 
 import 'package:analyzer/dart/element/element.dart' as ast;
 
-import 'package:analyzer/dart/element/type.dart' as ast show DartType;
-
 import 'package:analyzer/src/dart/element/element.dart' as ast;
 
 import 'package:analyzer/src/dart/element/type.dart' as ast;
 
 import 'package:analyzer/src/fasta/ast_builder.dart' show AstBuilder;
 
-import 'package:analyzer/src/fasta/resolution_applier.dart'
-    show ValidatingResolutionApplier, TypeContext;
-
-import 'package:analyzer/src/fasta/resolution_storer.dart'
-    show InstrumentedResolutionStorer;
-
 import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder;
 
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart'
     show TypeInferenceEngine;
 
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart'
-    show TypeInferenceListener;
-
 import 'package:kernel/ast.dart' show AsyncMarker;
 
 import 'package:front_end/src/fasta/source/stack_listener.dart'
@@ -56,8 +45,6 @@
 
 import 'package:kernel/core_types.dart' show CoreTypes;
 
-import 'package:kernel/kernel.dart' as kernel;
-
 class AnalyzerDietListener extends DietListener {
   /// The body builder for the method currently being compiled, or `null` if no
   /// method is currently being compiled.
@@ -65,35 +52,6 @@
   /// Needed because it performs resolution and type inference.
   BodyBuilder _bodyBuilder;
 
-  /// The list of local declarations in the body builder for the method
-  /// currently being compiled, or `null` if no method is currently being
-  /// compiled.
-  List<kernel.TreeNode> _kernelDeclarations;
-
-  /// The list of objects referenced by the body builder for the method
-  /// currently being compiled, or `null` if no method is currently being
-  /// compiled.
-  List<kernel.Node> _kernelReferences;
-
-  /// The list of types inferred by the body builder for the method currently
-  /// being compiled, or `null` if no method is currently being compiled.
-  List<kernel.DartType> _kernelTypes;
-
-  /// File offsets corresponding to the items in [_kernelDeclarations].
-  ///
-  /// These are used strictly for validation purposes.
-  List<int> _declarationOffsets;
-
-  /// File offsets corresponding to the items in [_kernelReferences].
-  ///
-  /// These are used strictly for validation purposes.
-  List<int> _referenceOffsets;
-
-  /// File offsets corresponding to the types in [_kernelTypes].
-  ///
-  /// These are used strictly for validation purposes.
-  List<int> _typeOffsets;
-
   AnalyzerDietListener(SourceLibraryBuilder library, ClassHierarchy hierarchy,
       CoreTypes coreTypes, TypeInferenceEngine typeInferenceEngine)
       : super(library, hierarchy, coreTypes, typeInferenceEngine);
@@ -152,7 +110,7 @@
 
   StackListener createListener(
       ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope, TypeInferenceListener listener]) {
+      [Scope formalParameterScope]) {
     return new AstBuilder(null, library, builder, memberScope, false, uri);
   }
 
@@ -176,22 +134,6 @@
     }
     _bodyBuilder.finishFields();
     _bodyBuilder.checkEmpty(token.charOffset);
-
-    // Now apply the resolution data and inferred types to the analyzer AST.
-    var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
-    var translatedReferences = _translateReferences(_kernelReferences);
-    var resolutionApplier = new ValidatingResolutionApplier(
-        null,
-        new _TestTypeContext(),
-        translatedDeclarations,
-        translatedReferences,
-        _kernelTypes,
-        _declarationOffsets,
-        _referenceOffsets,
-        _typeOffsets);
-    ast.AstNode fields = listener.finishFields();
-    fields.accept(resolutionApplier);
-    resolutionApplier.checkDone();
   }
 
   @override
@@ -237,23 +179,6 @@
         bodyBuilderFormals, asyncModifier, bodyBuilderBody);
 
     // Now apply the resolution data and inferred types to the analyzer AST.
-    var translatedDeclarations = _translateDeclarations(_kernelDeclarations);
-    var translatedReferences = _translateReferences(_kernelReferences);
-    var resolutionApplier = new ValidatingResolutionApplier(
-        null,
-        new _TestTypeContext(),
-        translatedDeclarations,
-        translatedReferences,
-        _kernelTypes,
-        _declarationOffsets,
-        _referenceOffsets,
-        _typeOffsets);
-    ast.AstNode formalsAsAstNode = formals;
-    ast.AstNode bodyAsAstNode = body;
-    formalsAsAstNode?.accept(resolutionApplier);
-    bodyAsAstNode.accept(resolutionApplier);
-    resolutionApplier.checkDone();
-
     listener.finishFunction(metadataConstants, formals, asyncModifier, body);
   }
 
@@ -266,73 +191,12 @@
       void parserCallback()) {
     // Create a body builder to do type inference, and a listener to record the
     // types that are inferred.
-    _kernelDeclarations = <kernel.TreeNode>[];
-    _kernelReferences = <kernel.Node>[];
-    _kernelTypes = <kernel.DartType>[];
-    _declarationOffsets = <int>[];
-    _referenceOffsets = <int>[];
-    _typeOffsets = <int>[];
-    var resolutionStorer = new InstrumentedResolutionStorer(
-        _kernelDeclarations,
-        _kernelReferences,
-        _kernelTypes,
-        _declarationOffsets,
-        _referenceOffsets,
-        _typeOffsets);
-    _bodyBuilder = super.createListener(builder, memberScope,
-        builder.isInstanceMember, formalParameterScope, resolutionStorer);
+    _bodyBuilder = super.createListener(
+        builder, memberScope, builder.isInstanceMember, formalParameterScope);
     // Run the parser callback; this will build the analyzer AST, run
     // the body builder to do type inference, and then copy the inferred types
     // over to the analyzer AST.
     parserCallback();
-    resolutionStorer.finished();
-    // The inferred types and the body builder are no longer needed.
     _bodyBuilder = null;
-    _kernelDeclarations = null;
-    _kernelReferences = null;
-    _kernelTypes = null;
-    _declarationOffsets = null;
-    _referenceOffsets = null;
-    _typeOffsets = null;
-  }
-
-  /// Translates the given kernel declarations into analyzer elements.
-  static List<ast.Element> _translateDeclarations(
-      List<kernel.TreeNode> kernelDeclarations) {
-    // TODO(scheglov): implement proper translation of elements.
-    return new List<ast.Element>.filled(kernelDeclarations.length, null);
-  }
-
-  /// Translates the given kernel references into analyzer elements.
-  static List<ast.Element> _translateReferences(
-      List<kernel.Node> kernelDeclarations) {
-    // TODO(scheglov): implement proper translation of elements.
-    return new List<ast.Element>.filled(kernelDeclarations.length, null);
-  }
-}
-
-/// Test implementation of [TypeContext].
-class _TestTypeContext implements TypeContext {
-  @override
-  ast.ClassElement get enclosingClassElement => null;
-
-  @override
-  ast.DartType get stringType => null;
-
-  @override
-  ast.DartType get typeType => null;
-
-  @override
-  void encloseVariable(ast.ElementImpl element) {}
-
-  @override
-  void enterLocalFunction(ast.FunctionElementImpl element) {}
-
-  @override
-  void exitLocalFunction(ast.FunctionElementImpl element) {}
-
-  @override
-  ast.DartType translateType(kernel.DartType kernelType) {
-    return ast.UndefinedTypeImpl.instance;
   }
 }
diff --git a/pkg/front_end/testcases/annotation_eof.dart.direct.expect b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
index 3d63244..f78b3b6 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.direct.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.direct.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.\n\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
+^"]/* from null */;
 static method main() → dynamic {
   core::print("There is a dangling annotation at the end of this file");
 }
diff --git a/pkg/front_end/testcases/annotation_eof.dart.strong.expect b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
index 3d63244..f78b3b6 100644
--- a/pkg/front_end/testcases/annotation_eof.dart.strong.expect
+++ b/pkg/front_end/testcases/annotation_eof.dart.strong.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.\n\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/annotation_eof.dart:10:1: Error: Expected a declaration, but got ''.
+
+^"]/* from null */;
 static method main() → dynamic {
   core::print("There is a dangling annotation at the end of this file");
 }
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index 6fd0d80..dc8b1a2 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -4,93 +4,40 @@
 
 # Status file for the ast_builder_test.dart test suite. This is testing
 # generating analyzer ASTs and connecting up type inference information.
-DeltaBlue: Crash
-accessors: Crash
 annotation_top: Crash
-argument_mismatch: Crash
-bad_setter_abstract: Crash
-cascade: Crash
-check_deferred_allocation: Crash
-check_deferred_before_args2: Crash
-check_deferred_before_args: Crash
-check_deferred_before_call: Crash
-check_deferred_before_write: Crash
-check_deferred_read: Crash
-check_deferred_read_static_field: Crash
-check_deferred_read_type: Crash
-check_deferred_static_method_call: Crash
-classes: Crash
-duplicated_named_args_3: Crash
+argument_mismatch: Fail
 dynamic_and_void: Fail
-expressions: Crash
-function_type_is_check: Crash
-function_type_recovery: Crash
 illegal_named_function_expression: Crash
 illegal_named_function_expression_scope: Crash
-implicit_new: Crash
-implicit_scope_test: Crash
-inference/abstract_class_instantiation: Crash
-inference/assert_initializer: Crash
-inference/bug30251: Crash
-inference/bug30624: Crash
-inference/bug31133: Crash
-inference/bug31436: Crash
-inference/closure_param_null_to_object: Crash
-inference/constructors_infer_from_arguments_redirecting: Crash
-inference/constructors_too_many_positional_arguments: Crash
+inference/abstract_class_instantiation: Fail
+inference/constructors_too_many_positional_arguments: Fail
 inference/downwards_inference_annotations: Crash
-inference/downwards_inference_annotations_class_members: Crash
-inference/downwards_inference_annotations_for_loop_variable: Crash
-inference/downwards_inference_annotations_locals: Crash
-inference/downwards_inference_annotations_locals_referring_to_locals: Crash
+inference/downwards_inference_annotations_for_loop_variable: Fail
+inference/downwards_inference_annotations_locals: Fail
+inference/downwards_inference_annotations_locals_referring_to_locals: Fail
 inference/downwards_inference_annotations_parameter: Fail
 inference/downwards_inference_annotations_parameter_local: Fail
 inference/downwards_inference_annotations_type_variable: Fail
-inference/downwards_inference_annotations_type_variable_local: Crash
+inference/downwards_inference_annotations_type_variable_local: Fail
 inference/downwards_inference_annotations_typedef: Crash
-inference/downwards_inference_on_function_of_t_using_the_t: Crash
-inference/downwards_inference_on_generic_function_expressions: Crash
-inference/downwards_inference_on_instance_creations_infer_downwards: Crash
+inference/downwards_inference_on_function_of_t_using_the_t: Fail
 inference/downwards_inference_yield_yield_star: Fail
-inference/field_initializer_context_explicit: Crash
-inference/field_initializer_context_implicit: Crash
-inference/field_initializer_context_this: Crash
-inference/field_initializer_parameter: Crash
-inference/for_loop_initializer_expression: Crash
 inference/future_then_explicit_future: Fail
 inference/generic_functions_return_typedef: Fail
 inference/generic_methods_do_not_infer_invalid_override_of_generic_method: Fail
 inference/generic_methods_handle_override_of_non_generic_with_generic: Fail
 inference/generic_methods_infer_js_builtin: Fail
-inference/infer_correctly_on_multiple_variables_declared_together: Crash
-inference/infer_from_complex_expressions_if_outer_most_value_is_precise: Crash
-inference/infer_local_function_referenced_before_declaration: Crash
 inference/infer_method_missing_params: Fail
-inference/infer_rethrow: Crash
-inference/instantiate_tearoff: Crash
-inference/instantiate_tearoff_after_contravariance_check: Crash
-inference/instantiate_tearoff_of_call: Crash
-inference/lambda_does_not_have_propagated_type_hint: Crash
-inference/override_equals: Crash
-inference/super_initializer: Crash
-inference/super_initializer_substitution: Crash
 inference/top_level_return_and_yield: Fail
-inference/try_catch: Crash
-inference/try_catch_finally: Crash
-inference/try_catch_promotion: Crash
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Crash
+inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Crash
+inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: Fail
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
 inference_new/dependency_only_if_generic_method: Fail
-inference_new/for_each_identifier_downwards: Crash
-instantiate_to_bound/supertypes: Crash
-invalid_cast: Crash
-invocations: Crash
+invocations: VerificationError
 metadata_enum: Crash
 metadata_named_mixin_application: Crash
-micro: Crash
-native_as_name: Crash
+minimum_int: Crash
 override_check_accessor_after_inference: Fail
 override_check_accessor_basic: Fail
 override_check_accessor_with_covariant_modifier: Fail
@@ -98,71 +45,22 @@
 override_check_basic: Fail
 override_check_two_substitutions: Fail
 override_check_with_covariant_modifier: Fail
-qualified: Crash
-rasta/abstract_constructor: Crash
-rasta/bad_default_constructor: Crash
-rasta/bad_interpolation: Crash
-rasta/bad_redirection: Crash
-rasta/class_hierarchy: Crash
-rasta/deferred_load: Crash
-rasta/generic_factory: Crash
-rasta/issue_000001: Crash
-rasta/issue_000002: Crash
-rasta/issue_000004: Crash
-rasta/issue_000031: Crash
-rasta/issue_000032: Crash
-rasta/issue_000036: Crash
+rasta/bad_default_constructor: VerificationError
 rasta/issue_000039: VerificationError
 rasta/issue_000042: Crash
-rasta/issue_000044: Crash
-rasta/issue_000067: Crash
-rasta/issue_000068: Crash
-rasta/issue_000069: Crash
-rasta/issue_000070: Crash
-rasta/malformed_function: Crash
-rasta/mandatory_parameter_initializer: Crash
-rasta/parser_error: Crash
-rasta/previsit_deferred: Crash
-rasta/static: Crash
-rasta/super_initializer: Crash
-rasta/type_literals: Crash
-rasta/typedef: Crash
-rasta/unresolved: Crash
-rasta/unresolved_constructor: Crash
+rasta/mandatory_parameter_initializer: VerificationError
+rasta/parser_error: VerificationError
 rasta/unresolved_for_in: Crash
-rasta/unresolved_recovery: Crash
-redirection_chain_type_arguments: Crash
-redirection_chain_type_arguments_subst: Crash
-redirection_type_arguments: Crash
 regress/issue_29937: Crash
 regress/issue_29941: Crash
 regress/issue_29942: Crash
 regress/issue_29943: Crash
 regress/issue_29978: Crash
 regress/issue_29979: Crash
-regress/issue_29983: Crash
-regress/issue_29984: Crash
-regress/issue_29985: Crash
+regress/issue_29983: Crash # 'package:analyzer/src/fasta/ast_builder.dart': Failed assertion: line 478 pos 12: 'star == null': is not true.
 regress/issue_31155: Crash # Issue 31155.
 regress/issue_31157: Crash
 regress/issue_31180: Crash
-regress/issue_31184: Crash
 regress/issue_31186: Crash
 regress/issue_31187: Crash
-regress/issue_31198: Crash
-regress/issue_31213: Crash
-regress/issue_31299: Crash
-regress/issue_31766: Crash
-regress/issue_31846: Crash
-reorder_super: Crash
-runtime_checks/call_method_implicit_tear_off: Crash
-runtime_checks/call_method_implicit_tear_off_future_or: Crash
-runtime_checks/implicit_downcast_assert_initializer: Crash
-runtime_checks/implicit_downcast_constructor_initializer: Crash
-runtime_checks_new/for_in_call_kinds: Crash
-statements: Crash
-super_call: Crash
-type_variable_as_super: Crash
-uninitialized_fields: Crash
 warn_unresolved_sends: Fail
-minimum_int: Crash
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
index f67b6d5..fb62763 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
@@ -7,24 +7,42 @@
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → dynamic
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+  set a();
+       ^";
   set d(dynamic #synthetic) → dynamic
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+  set d(x, y);
+       ^";
 }
 abstract class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → dynamic
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+  set a();
+       ^";
   set d(dynamic #synthetic) → dynamic
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+  set d(x, y);
+       ^";
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n           ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+Try adding {}.
+set b();
+       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+Try adding {}.
+set c(x, y);
+           ^"]/* from null */;
 static set b(dynamic #synthetic) → dynamic
-  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n     ^";
+  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+set b();
+     ^";
 static set c(dynamic #synthetic) → dynamic
-  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n     ^";
+  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+set c(x, y);
+     ^";
 static method main() → dynamic {
   core::bool threw;
   try {
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
index 12509e7..a02d903 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
@@ -7,24 +7,44 @@
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:10:8: Error: A setter should have exactly one formal parameter.
+  set a();
+       ^";
   set d(dynamic #synthetic) → void
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.
+  set d(x, y);
+       ^";
 }
 abstract class B extends core::Object {
   synthetic constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.\n  set a();\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:15:8: Error: A setter should have exactly one formal parameter.
+  set a();
+       ^";
   set d(dynamic #synthetic) → void
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:16:8: Error: A setter should have exactly one formal parameter.
+  set d(x, y);
+       ^";
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.\nTry adding {}.\nset b();\n       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.\nTry adding {}.\nset c(x, y);\n           ^", "pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.\n    new B();\n        ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/bad_setter_abstract.dart:5:8: Error: Expected a function body or '=>'.
+Try adding {}.
+set b();
+       ^", "pkg/front_end/testcases/bad_setter_abstract.dart:7:12: Error: Expected a function body or '=>'.
+Try adding {}.
+set c(x, y);
+           ^", "pkg/front_end/testcases/bad_setter_abstract.dart:66:9: Error: The class 'B' is abstract and can't be instantiated.
+    new B();
+        ^"]/* from null */;
 static set b(dynamic #synthetic) → void
-  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.\nset b();\n     ^";
+  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:5:6: Error: A setter should have exactly one formal parameter.
+set b();
+     ^";
 static set c(dynamic #synthetic) → void
-  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.\nset c(x, y);\n     ^";
+  let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:7:6: Error: A setter should have exactly one formal parameter.
+set c(x, y);
+     ^";
 static method main() → dynamic {
   core::bool threw;
   try {
diff --git a/pkg/front_end/testcases/bug21938.dart.strong.expect b/pkg/front_end/testcases/bug21938.dart.strong.expect
index 55b0b3d..cc7a72b 100644
--- a/pkg/front_end/testcases/bug21938.dart.strong.expect
+++ b/pkg/front_end/testcases/bug21938.dart.strong.expect
@@ -5,10 +5,19 @@
 static method test() → dynamic {
   core::Object x;
   core::Function f;
-  let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n  x /*@error=UndefinedMethod*/ ();\n   ^";
-  let final dynamic #t2 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n  x /*@error=UndefinedMethod*/ (3);\n   ^";
+  let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:10:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  x /*@error=UndefinedMethod*/ ();
+   ^";
+  let final dynamic #t2 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:11:4: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  x /*@error=UndefinedMethod*/ (3);
+   ^";
   f.call(5, 2);
-  let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.\nTry correcting the name to the name of an existing method, or defining a method named 'call'.\n  x. /*@error=UndefinedMethod*/ call();\n                                ^";
+  let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bug21938.dart:13:33: Error: The method 'call' isn't defined for the class 'dart.core::Object'.
+Try correcting the name to the name of an existing method, or defining a method named 'call'.
+  x. /*@error=UndefinedMethod*/ call();
+                                ^";
   f.call;
   f.call(5, 2);
 }
diff --git a/pkg/front_end/testcases/bug31124.dart.direct.expect b/pkg/front_end/testcases/bug31124.dart.direct.expect
index 6b49659..e470ed2 100644
--- a/pkg/front_end/testcases/bug31124.dart.direct.expect
+++ b/pkg/front_end/testcases/bug31124.dart.direct.expect
@@ -2,5 +2,7 @@
 import self as self;
 
 static method #main() → dynamic {
-  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a\nvar a = () => 'b';a();\n^";
+  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
+var a = () => 'b';a();
+^";
 }
diff --git a/pkg/front_end/testcases/bug31124.dart.strong.expect b/pkg/front_end/testcases/bug31124.dart.strong.expect
index 6b49659..e470ed2 100644
--- a/pkg/front_end/testcases/bug31124.dart.strong.expect
+++ b/pkg/front_end/testcases/bug31124.dart.strong.expect
@@ -2,5 +2,7 @@
 import self as self;
 
 static method #main() → dynamic {
-  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a\nvar a = () => 'b';a();\n^";
+  throw "pkg/front_end/testcases/bug31124.dart:1:1: Error: Duplicated name: a
+var a = () => 'b';a();
+^";
 }
diff --git a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
index bd033e5..aaf6e75 100644
--- a/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_as_check.dart.strong.expect
@@ -1,7 +1,10 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.\nTry removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.\n  x as lib.C;\n       ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_as_check.dart:9:8: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+  x as lib.C;
+       ^"]/* from null */;
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
   x as invalid-type;
diff --git a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
index c612334..e7e9db7 100644
--- a/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_is_check.dart.strong.expect
@@ -2,7 +2,10 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.\nTry removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.\n  print(x is lib.C);\n             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_is_check.dart:9:14: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+  print(x is lib.C);
+             ^"]/* from null */;
 static method main() → dynamic {}
 static method test(dynamic x) → dynamic {
   core::print(x is invalid-type);
diff --git a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
index 944b59d..cc18211 100644
--- a/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_type_declaration.dart.strong.expect
@@ -1,7 +1,10 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.\nTry removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.\n  lib.C x = null;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/check_deferred_type_declaration.dart:9:3: Error: The type '#lib1::C' is deferred loaded via prefix 'lib' and can't be used as a type annotation.
+Try removing 'deferred' from the import of 'lib' or use a supertype of '#lib1::C' that isn't deferred.
+  lib.C x = null;
+  ^"]/* from null */;
 static method main() → dynamic
   return self::test();
 static method test() → dynamic {
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
index 6262bfd..7b807bd 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.direct.expect
@@ -2,5 +2,7 @@
 import self as self;
 
 static method #main() → dynamic {
-  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A\nclass A {\n        ^";
+  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
+class A {
+        ^";
 }
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
index 6262bfd..7b807bd 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.strong.expect
@@ -2,5 +2,7 @@
 import self as self;
 
 static method #main() → dynamic {
-  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A\nclass A {\n        ^";
+  throw "pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart:16:9: Error: Duplicated name: A
+class A {
+        ^";
 }
diff --git a/pkg/front_end/testcases/cycles.dart.direct.expect b/pkg/front_end/testcases/cycles.dart.direct.expect
index f7cd8dc..930f646 100644
--- a/pkg/front_end/testcases/cycles.dart.direct.expect
+++ b/pkg/front_end/testcases/cycles.dart.direct.expect
@@ -22,7 +22,13 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.\nclass A implements C {}\n      ^", "pkg/front_end/testcases/cycles.dart:7:7: Error: 'B' is a supertype of itself via 'A', 'C'.\nclass B extends A {}\n      ^", "pkg/front_end/testcases/cycles.dart:9:7: Error: 'C' is a supertype of itself via 'A', 'B'.\nclass C extends B implements D {}\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/cycles.dart:5:7: Error: 'A' is a supertype of itself via 'B', 'C'.
+class A implements C {}
+      ^", "pkg/front_end/testcases/cycles.dart:7:7: Error: 'B' is a supertype of itself via 'A', 'C'.
+class B extends A {}
+      ^", "pkg/front_end/testcases/cycles.dart:9:7: Error: 'C' is a supertype of itself via 'A', 'B'.
+class C extends B implements D {}
+      ^"]/* from null */;
 static method main() → dynamic {
   core::print(new self::A::•());
   core::print(new self::B::•());
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
index 4a2bfdc..e95737c 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
@@ -9,6 +9,8 @@
   static method m({core::int a = 0}) → dynamic {}
 }
 static method test() → void {
-  self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.\n  C.m(a: 1, a: 2, a: 3);\n                  ^");
+  self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+  C.m(a: 1, a: 2, a: 3);
+                  ^");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
index 29999e5..6fc51ce 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
@@ -9,6 +9,8 @@
   static method m({core::int a = 0}) → dynamic {}
 }
 static method test() → void {
-  self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.\n  C.m(a: 1, a: 2, a: 3);\n                  ^" as{TypeError} core::int);
+  self::C::m(a: invalid-expression "pkg/front_end/testcases/duplicated_named_args_3.dart:13:19: Error: Duplicated named argument 'a'.
+  C.m(a: 1, a: 2, a: 3);
+                  ^" as{TypeError} core::int);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/expressions.dart.strong.expect b/pkg/front_end/testcases/expressions.dart.strong.expect
index c0b0a88..49f6c0e 100644
--- a/pkg/front_end/testcases/expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/expressions.dart.strong.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.\n    print(int?.toString());\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.
+    print(int?.toString());
+               ^"]/* from null */;
 static method foo({dynamic fisk = null}) → dynamic {
   core::print(fisk);
 }
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
index dc947aa..96f3264 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.direct.expect
@@ -2,7 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.\n  var x = void f<T>(T t) {};\n          ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.\n  var x = void f<T>(T t) {};\n               ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.\n  print(void g<T>(T t) {});\n        ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.\n  print(void g<T>(T t) {});\n             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.
+  var x = void f<T>(T t) {};
+          ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+  var x = void f<T>(T t) {};
+               ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.
+  print(void g<T>(T t) {});
+        ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+  print(void g<T>(T t) {});
+             ^"]/* from null */;
 static method main() → dynamic {
   dynamic x = let final <T extends core::Object>(T) → void f = <T extends core::Object>(T t) → dynamic {} in f;
   core::print(x.runtimeType);
diff --git a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
index 55e933f..1bc8dba 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression.dart.strong.expect
@@ -2,7 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.\n  var x = void f<T>(T t) {};\n          ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.\n  var x = void f<T>(T t) {};\n               ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.\n  print(void g<T>(T t) {});\n        ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.\n  print(void g<T>(T t) {});\n             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression.dart:6:11: Error: A function expression can't have a return type.
+  var x = void f<T>(T t) {};
+          ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:6:16: Error: A function expression can't have a name.
+  var x = void f<T>(T t) {};
+               ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:9: Error: A function expression can't have a return type.
+  print(void g<T>(T t) {});
+        ^", "pkg/front_end/testcases/illegal_named_function_expression.dart:8:14: Error: A function expression can't have a name.
+  print(void g<T>(T t) {});
+             ^"]/* from null */;
 static method main() → dynamic {
   <T extends core::Object>(T) → core::Null x = let final <T extends core::Object>(T) → core::Null f = <T extends core::Object>(T t) → core::Null {} in f;
   core::print(x.{core::Object::runtimeType});
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
index dbf1b9f..793fc06 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.direct.expect
@@ -2,7 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.\n  print(void f() {});\n        ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.\n  print(void f() {});\n             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.
+  print(void f() {});
+        ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+  print(void f() {});
+             ^"]/* from null */;
 static method main() → dynamic {
   function f() → void {}
   core::print(let final () → void f = () → dynamic {} in f);
diff --git a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
index 80d6fbc..fd8b0bb 100644
--- a/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
+++ b/pkg/front_end/testcases/illegal_named_function_expression_scope.dart.strong.expect
@@ -2,7 +2,11 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.\n  print(void f() {});\n        ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.\n  print(void f() {});\n             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:9: Error: A function expression can't have a return type.
+  print(void f() {});
+        ^", "pkg/front_end/testcases/illegal_named_function_expression_scope.dart:7:14: Error: A function expression can't have a name.
+  print(void f() {});
+             ^"]/* from null */;
 static method main() → dynamic {
   function f() → void {}
   core::print(let final () → core::Null f = () → core::Null {} in f);
diff --git a/pkg/front_end/testcases/implicit_new.dart.strong.expect b/pkg/front_end/testcases/implicit_new.dart.strong.expect
index a8531fc..8c23c2b 100644
--- a/pkg/front_end/testcases/implicit_new.dart.strong.expect
+++ b/pkg/front_end/testcases/implicit_new.dart.strong.expect
@@ -24,7 +24,11 @@
     return null;
   operator []=(dynamic _a, dynamic _b) → void {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.\n  var y = prefix.Bar();\n                 ^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.\n  prefix.Bar();\n         ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.
+  var y = prefix.Bar();
+                 ^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.
+  prefix.Bar();
+         ^"]/* from null */;
 static method testNSM() → dynamic {
   dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
   throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
index deb6838..30dae6e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.strong.expect
@@ -7,6 +7,9 @@
     return null;
   () → core::String g = f;
   g = () → core::String {
-    return let final dynamic #t1 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    return /*error:RETURN_OF_INVALID_TYPE*/ 1;\n                                            ^";
+    return let final dynamic #t1 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart:12:45: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+    return /*error:RETURN_OF_INVALID_TYPE*/ 1;
+                                            ^";
   };
 }
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
index 2ecc9fd..e22e2f0 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
@@ -14,5 +14,9 @@
     ;
   abstract method f(dynamic x) → dynamic;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.\nabstract class A extends B {\n               ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.\nabstract class B extends A {\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+abstract class A extends B {
+               ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+abstract class B extends A {
+               ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
index 2ecc9fd..e22e2f0 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
@@ -14,5 +14,9 @@
     ;
   abstract method f(dynamic x) → dynamic;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.\nabstract class A extends B {\n               ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.\nabstract class B extends A {\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_method_inference.dart:12:16: Error: 'A' is a supertype of itself via 'B'.
+abstract class A extends B {
+               ^", "pkg/front_end/testcases/inference/circular_method_inference.dart:16:16: Error: 'B' is a supertype of itself via 'A'.
+abstract class B extends A {
+               ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
index 80af899..56ef48b 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.strong.expect
@@ -3,5 +3,11 @@
 
 static field dynamic x = () → dynamic => self::y;
 static field dynamic y = () → dynamic => self::x;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>\n                                                                  ^", "pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n                                                                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+                                                                  ^", "pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+                                                                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
index a19d846..8df972c 100644
--- a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.strong.expect
@@ -3,5 +3,11 @@
 
 static field dynamic x = () → dynamic => self::y;
 static field dynamic y = () → dynamic => self::x;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>\n                                                                  ^", "pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n                                                                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:10:67: Error: Can't infer the type of 'y': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+                                                                  ^", "pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+                                                                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index f222190..dd5268b 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -40,5 +40,11 @@
   get a() → dynamic
     return null;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:79: Error: Can't infer the type of 'a': overridden members must all have the same type.\nSpecify the type explicitly.\n  get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>\n                                                                              ^", "pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:79: Error: Can't infer the type of 'a': overridden members must all have the same type.\nSpecify the type explicitly.\n  get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>\n                                                                              ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+Specify the type explicitly.
+  get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+                                                                              ^", "pkg/front_end/testcases/inference/conflicts_can_happen.dart:31:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+Specify the type explicitly.
+  get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+                                                                              ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 5a724b7..6ae3a3d 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -47,5 +47,8 @@
   get a() → dynamic
     return null;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:79: Error: Can't infer the type of 'a': overridden members must all have the same type.\nSpecify the type explicitly.\n  get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>\n                                                                              ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:79: Error: Can't infer the type of 'a': overridden members must all have the same type.
+Specify the type explicitly.
+  get /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ a =>
+                                                                              ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
index a16af52..fa4e2f9 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.strong.expect
@@ -15,6 +15,9 @@
   self::C<core::num> c_num = new self::C::•<core::num>(123);
   self::C<core::num> c_num2 = let final self::C<core::num> #t1 = new self::C::•<core::num>(456) in let final dynamic #t2 = #t1.{self::C::t} = 1.0 in #t1;
   self::C<dynamic> c_dynamic = new self::C::•<dynamic>(42);
-  x.{self::C::t} = let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';\n                                                       ^";
+  x.{self::C::t} = let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart:26:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                       ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
index 7f05ebe..e36424d 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.strong.expect
@@ -15,6 +15,9 @@
 }
 static method test() → dynamic {
   self::C<core::int> x = self::C::•<core::int>(42);
-  x.{self::C::t} = let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';\n                                                       ^";
+  x.{self::C::t} = let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart:22:56: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x. /*@target=C::t*/ t = /*error:INVALID_ASSIGNMENT*/ 'hello';
+                                                       ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
index a88cab0..6b36422 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
@@ -19,7 +19,9 @@
   get reversed() → self::Pair<self::Pair::U, self::Pair::T>
     return new self::Pair::•<self::Pair::U, self::Pair::T>(this.{self::Pair::u}, this.{self::Pair::t});
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.\n      new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair\n                                                                                                             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.
+      new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair
+                                                                                                             ^"]/* from null */;
 static method main() → dynamic {
   final self::Pair<self::Clonable<dynamic>, self::Clonable<dynamic>> x = new self::Pair::_<self::Clonable<dynamic>, self::Clonable<dynamic>>();
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
index 7abb51e..48f74f8 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.strong.expect
@@ -4,7 +4,10 @@
 
 static method test() → void {
   core::List<core::int> l;
-  l = <core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];\n                                                                    ^"];
+  l = <core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart:10:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  l = /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"];
+                                                                    ^"];
   l = l = <core::int>[1];
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
index c6c4809..ef16127 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,23 +25,53 @@
 static method test() → void {
   new self::F0::•(<core::int>[]);
   new self::F0::•(<core::int>[3]);
-  new self::F0::•(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"]);
-  new self::F0::•(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  new self::F0::•(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^"]);
+  new self::F0::•(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   new self::F1::•(a: <core::int>[]);
   new self::F1::•(a: <core::int>[3]);
-  new self::F1::•(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                               ^"]);
-  new self::F1::•(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  new self::F1::•(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                               ^"]);
+  new self::F1::•(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   new self::F2::•(<core::int>[]);
   new self::F2::•(<core::int>[3]);
-  new self::F2::•(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"]);
-  new self::F2::•(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  new self::F2::•(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^"]);
+  new self::F2::•(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   new self::F3::•(<core::Iterable<core::int>>[]);
   new self::F3::•(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"]]);
-  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"], <core::int>[3]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^"]]);
+  new self::F3::•(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^"], <core::int>[3]]);
   new self::F4::•(a: <core::Iterable<core::int>>[]);
   new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"]]);
-  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"], <core::int>[3]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^"]]);
+  new self::F4::•(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^"], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
index cedb9f0..039b9a5 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.strong.expect
@@ -10,23 +10,53 @@
 static method test() → void {
   self::f0(<core::int>[]);
   self::f0(<core::int>[3]);
-  self::f0(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                   ^"]);
-  self::f0(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);\n                                                                   ^", 3]);
+  self::f0(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:16:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^"]);
+  self::f0(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:17:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  f0(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^", 3]);
   self::f1(a: <core::int>[]);
   self::f1(a: <core::int>[3]);
-  self::f1(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                      ^"]);
-  self::f1(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  self::f1(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:21:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  f1(a: /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                      ^"]);
+  self::f1(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:23:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   self::f2(<core::int>[]);
   self::f2(<core::int>[3]);
-  self::f2(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                   ^"]);
-  self::f2(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);\n                                                                   ^", 3]);
+  self::f2(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:29:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                   ^"]);
+  self::f2(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:30:68: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  f2(/*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\", 3]);
+                                                                   ^", 3]);
   self::f3(<core::Iterable<core::int>>[]);
   self::f3(<core::Iterable<core::int>>[<core::int>[3]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"]]);
-  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"], <core::int>[3]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:37:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^"]]);
+  self::f3(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:40:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^"], <core::int>[3]]);
   self::f4(a: <core::Iterable<core::int>>[]);
   self::f4(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"]]);
-  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"], <core::int>[3]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:49:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^"]]);
+  self::f4(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart:52:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^"], <core::int>[3]]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
index a4f41b5..e11e0c0 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.strong.expect
@@ -7,37 +7,70 @@
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = let final dynamic #t1 = (core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.\n        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>\n                                                                 ^";
-    (core::int) → core::String l3 = (core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;\n                                                                            ^";
+    (core::int) → core::String l2 = let final dynamic #t1 = (core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:15:66: Error: A value of type '(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::String'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (String x) =>
+                                                                 ^";
+    (core::int) → core::String l3 = (core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:18:77: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        l3 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=String*/ (int x) => 3;
+                                                                            ^";
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^";
+      return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:20:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^";
     };
   }
   {
     (core::int) → core::String l0 = (core::int x) → core::Null => null;
     (core::int) → core::String l1 = (core::int x) → core::String => "hello";
-    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n            3;\n            ^";
+    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:29:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+            3;
+            ^";
     (core::int) → core::String l3 = (core::int x) → core::String {
-      return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^";
+      return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:31:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^";
     };
     (core::int) → core::String l4 = (core::int x) → core::String {
-      return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ x;\n                                              ^";
+      return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:34:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ x;
+                                              ^";
     };
   }
   {
     (core::int) → core::List<core::String> l0 = (core::int x) → core::Null => null;
     (core::int) → core::List<core::String> l1 = (core::int x) → core::List<core::String> => <core::String>["hello"];
-    (core::int) → core::List<core::String> l2 = let final dynamic #t7 = (core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\n        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String\n                                                                       ^";
-    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n              /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                         ^"];
+    (core::int) → core::List<core::String> l2 = let final dynamic #t7 = (core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:42:72: Error: A value of type '(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+        l2 = /*error:INVALID_ASSIGNMENT*/ /*@returnType=List<String>*/ (String
+                                                                       ^";
+    (core::int) → core::List<core::String> l3 = (core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:46:58: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+              /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                         ^"];
     (core::int) → core::List<core::String> l4 = (core::int x) → core::List<core::String> {
-      return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                   ^"];
+      return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                   ^"];
     };
   }
   {
     (core::int) → core::int l0 = (core::int x) → core::int => x;
     (core::int) → core::int l1 = (core::int x) → core::int => x.{core::num::+}(1);
-    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n            x;\n            ^";
-    (core::int) → core::String l3 = (core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'dart.core::int'.\nTry correcting the name to the name of an existing method, or defining a method named 'substring'.\n            .substring(3);\n             ^") as{TypeError} core::String;
+    (core::int) → core::String l2 = (core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:60:13: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+            x;
+            ^";
+    (core::int) → core::String l3 = (core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart:63:14: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+            .substring(3);
+             ^") as{TypeError} core::String;
     (core::String) → core::String l4 = (core::String x) → core::String => x.{core::String::substring}(3);
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
index 1c86887..4d7dbdf 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.strong.expect
@@ -25,24 +25,54 @@
 static method test() → void {
   new self::F0::•<core::int>(<core::int>[]);
   new self::F0::•<core::int>(<core::int>[3]);
-  new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"]);
-  new self::F0::•<core::int>(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  new self::F0::•<core::int>(<core::int>[let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:32:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^"]);
+  new self::F0::•<core::int>(<core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:34:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   new self::F1::•<core::int>(a: <core::int>[]);
   new self::F1::•<core::int>(a: <core::int>[3]);
-  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                               ^"]);
-  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:41:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                               ^"]);
+  new self::F1::•<core::int>(a: <core::int>[let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:44:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   new self::F2::•<core::int>(<core::int>[]);
   new self::F2::•<core::int>(<core::int>[3]);
-  new self::F2::•<core::int>(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);\n                                                                    ^"]);
-  new self::F2::•<core::int>(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", 3]);
+  new self::F2::•<core::int>(<core::int>[let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:51:69: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]);
+                                                                    ^"]);
+  new self::F2::•<core::int>(<core::int>[let final dynamic #t6 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", 3]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[]);
   new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"]]);
-  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"], <core::int>[3]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:62:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^"]]);
+  new self::F3::•<core::int>(<core::Iterable<core::int>>[<core::int>[let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:65:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^"], <core::int>[3]]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[]);
   new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[3]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]\n                                                                  ^"]]);
-  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],\n                                                                  ^"], <core::int>[3]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:74:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"]
+                                                                  ^"]]);
+  new self::F4::•<core::int>(a: <core::Iterable<core::int>>[<core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart:77:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    /*@typeArgs=int*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"],
+                                                                  ^"], <core::int>[3]]);
   new self::F3::•<dynamic>(<core::Iterable<dynamic>>[]);
   self::F3<core::int> f31 = new self::F3::•<core::int>(<core::List<core::int>>[<core::int>[3]]);
   self::F3<core::String> f32 = new self::F3::•<core::String>(<core::List<core::String>>[<core::String>["hello"]]);
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
index 0322edf..024b075 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.strong.expect
@@ -9,10 +9,19 @@
     <S extends core::Object>(core::int) → core::String v = f;
     v = <T extends core::Object>(core::int x) → core::Null => null;
     v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = let final dynamic #t1 = <T extends core::Object>(core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.\n    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>\n                                                                ^";
-    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;\n                                                                           ^";
+    v = let final dynamic #t1 = <T extends core::Object>(core::String x) → core::String => "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:14:65: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::String' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (String x) =>
+                                                                ^";
+    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t2 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:16:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=String*/ (int x) => 3;
+                                                                           ^";
     v = <T extends core::Object>(core::int x) → core::String {
-      return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^";
+      return let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:18:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^";
     };
   }
   {
@@ -21,12 +30,21 @@
     <S extends core::Object>(core::int) → core::String v = f;
     v = <T extends core::Object>(core::int x) → core::Null => null;
     v = <T extends core::Object>(core::int x) → core::String => "hello";
-    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        3;\n        ^";
+    v = <T extends core::Object>(core::int x) → core::String => let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:28:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        3;
+        ^";
     v = <T extends core::Object>(core::int x) → core::String {
-      return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ 3;\n                                              ^";
+      return let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:30:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ 3;
+                                              ^";
     };
     v = <T extends core::Object>(core::int x) → core::String {
-      return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      return /*error:RETURN_OF_INVALID_TYPE*/ x;\n                                              ^";
+      return let final dynamic #t6 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:33:47: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      return /*error:RETURN_OF_INVALID_TYPE*/ x;
+                                              ^";
     };
   }
   {
@@ -35,10 +53,19 @@
     <S extends core::Object>(core::int) → core::List<core::String> v = f;
     v = <T extends core::Object>(core::int x) → core::Null => null;
     v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>["hello"];
-    v = let final dynamic #t7 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.\n    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String\n                                                                      ^";
-    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                     ^"];
+    v = let final dynamic #t7 = <T extends core::Object>(core::String x) → core::List<core::String> => <core::String>["hello"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:43:71: Error: A value of type '<T extends dart.core::Object>(dart.core::String) \u8594 dart.core::List<dart.core::String>' can't be assigned to a variable of type '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '<S extends dart.core::Object>(dart.core::int) \u8594 dart.core::List<dart.core::String>'.
+    v = /*error:INVALID_ASSIGNMENT*/ <T> /*@returnType=List<String>*/ (String
+                                                                      ^";
+    v = <T extends core::Object>(core::int x) → core::List<core::String> => <core::String>[let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:46:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                     ^"];
     v = <T extends core::Object>(core::int x) → core::List<core::String> {
-      return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                   ^"];
+      return <core::String>[let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:50:52: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                   ^"];
     };
   }
   {
@@ -52,8 +79,14 @@
     x = <T extends core::Object>(core::int x) → core::int => x;
     x = <T extends core::Object>(core::int x) → core::int => x.{core::num::+}(1);
     <T extends core::Object>(core::int) → core::String y = int2String;
-    y = <T extends core::Object>(core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        x;\n        ^";
-    y = <T extends core::Object>(core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.\nTry correcting the name to the name of an existing method, or defining a method named 'substring'.\n        .substring(3);\n         ^") as{TypeError} core::String;
+    y = <T extends core::Object>(core::int x) → core::String => let final dynamic #t10 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:64:9: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        x;
+        ^";
+    y = <T extends core::Object>(core::int x) → core::String => (let final dynamic #t11 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart:66:10: Error: The method 'substring' isn't defined for the class 'dart.core::int'.
+Try correcting the name to the name of an existing method, or defining a method named 'substring'.
+        .substring(3);
+         ^") as{TypeError} core::String;
     <T extends core::Object>(core::String) → core::String z = string2String;
     z = <T extends core::Object>(core::String x) → core::String => x.{core::String::substring}(3);
   }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
index 251b409..58de7fb 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.strong.expect
@@ -56,59 +56,134 @@
     self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a2 = new self::A::•<core::int, core::String>(3, "hello");
     self::A<core::int, core::String> a3 = new self::A::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = let final dynamic #t1 = new self::A::•<core::int, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.\nChange the type of the object being constructed or the context in which it is used.\n        a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");\n                                                 ^";
-    self::A<core::int, core::String> a5 = let final dynamic #t2 = new self::A::named<dynamic, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.\nChange the type of the object being constructed or the context in which it is used.\n        a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(\n                                                 ^";
+    self::A<core::int, core::String> a4 = let final dynamic #t1 = new self::A::•<core::int, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:46:50: Error: The constructor returns type 'test::A<dart.core::int, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+Change the type of the object being constructed or the context in which it is used.
+        a4 = /*error:INVALID_CAST_NEW_EXPR*/ new A<int, dynamic>(3, \"hello\");
+                                                 ^";
+    self::A<core::int, core::String> a5 = let final dynamic #t2 = new self::A::named<dynamic, dynamic>(3, "hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:48:50: Error: The constructor returns type 'test::A<dynamic, dynamic>' that isn't of expected type 'test::A<dart.core::int, dart.core::String>'.
+Change the type of the object being constructed or the context in which it is used.
+        a5 = /*error:INVALID_CAST_NEW_EXPR*/ new A<dynamic, dynamic>.named(
+                                                 ^";
   }
   {
-    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^");
-    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^");
+    self::A<core::int, core::String> a0 = new self::A::•<core::int, core::String>(let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:53:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", let final dynamic #t4 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:54:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^");
+    self::A<core::int, core::String> a1 = new self::A::named<core::int, core::String>(let final dynamic #t5 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:56:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:57:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^");
   }
   {
     self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a2 = new self::B::•<core::String, core::int>("hello", 3);
     self::A<core::int, core::String> a3 = new self::B::named<core::String, core::int>("hello", 3);
-    self::A<core::int, core::String> a4 = let final dynamic #t7 = new self::B::•<core::String, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);\n                                              ^";
-    self::A<core::int, core::String> a5 = let final dynamic #t8 = new self::B::named<dynamic, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(\n                                              ^";
+    self::A<core::int, core::String> a4 = let final dynamic #t7 = new self::B::•<core::String, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:65:47: Error: A value of type 'test::B<dart.core::String, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+        a4 = /*error:INVALID_ASSIGNMENT*/ new B<String, dynamic>(\"hello\", 3);
+                                              ^";
+    self::A<core::int, core::String> a5 = let final dynamic #t8 = new self::B::named<dynamic, dynamic>("hello", 3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:67:47: Error: A value of type 'test::B<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+        a5 = /*error:INVALID_ASSIGNMENT*/ new B<dynamic, dynamic>.named(
+                                              ^";
   }
   {
-    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,\n                                               ^", let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^");
-    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t11 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,\n                                               ^", let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^");
+    self::A<core::int, core::String> a0 = new self::B::•<core::String, core::int>(let final dynamic #t9 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:72:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+                                               ^", let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:73:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^");
+    self::A<core::int, core::String> a1 = new self::B::named<core::String, core::int>(let final dynamic #t11 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:75:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3,
+                                               ^", let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:76:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^");
   }
   {
     self::A<core::int, core::int> a0 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a1 = new self::C::named<core::int>(3);
     self::A<core::int, core::int> a2 = new self::C::•<core::int>(3);
     self::A<core::int, core::int> a3 = new self::C::named<core::int>(3);
-    self::A<core::int, core::int> a4 = let final dynamic #t13 = new self::C::•<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.\n    A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);\n                                                      ^";
-    self::A<core::int, core::int> a5 = let final dynamic #t14 = new self::C::named<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.\n    A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);\n                                                      ^";
+    self::A<core::int, core::int> a4 = let final dynamic #t13 = new self::C::•<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:83:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
+    A<int, int> a4 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>(3);
+                                                      ^";
+    self::A<core::int, core::int> a5 = let final dynamic #t14 = new self::C::named<dynamic>(3) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:84:55: Error: A value of type 'test::C<dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::int>'.
+    A<int, int> a5 = /*error:INVALID_ASSIGNMENT*/ new C<dynamic>.named(3);
+                                                      ^";
   }
   {
-    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^");
-    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t16 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^");
+    self::A<core::int, core::int> a0 = new self::C::•<core::int>(let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:88:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^");
+    self::A<core::int, core::int> a1 = new self::C::named<core::int>(let final dynamic #t16 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:90:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^");
   }
   {
     self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>("hello");
     self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>("hello");
     self::A<core::int, core::String> a2 = new self::D::•<core::int, core::String>("hello");
     self::A<core::int, core::String> a3 = new self::D::named<core::String, core::String>("hello");
-    self::A<core::int, core::String> a4 = let final dynamic #t17 = new self::D::•<core::num, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");\n                                              ^";
-    self::A<core::int, core::String> a5 = let final dynamic #t18 = new self::D::named<dynamic, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.\n        a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(\n                                              ^";
+    self::A<core::int, core::String> a4 = let final dynamic #t17 = new self::D::•<core::num, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:98:47: Error: A value of type 'test::D<dart.core::num, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+        a4 = /*error:INVALID_ASSIGNMENT*/ new D<num, dynamic>(\"hello\");
+                                              ^";
+    self::A<core::int, core::String> a5 = let final dynamic #t18 = new self::D::named<dynamic, dynamic>("hello") in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:100:47: Error: A value of type 'test::D<dynamic, dynamic>' can't be assigned to a variable of type 'test::A<dart.core::int, dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A<dart.core::int, dart.core::String>'.
+        a5 = /*error:INVALID_ASSIGNMENT*/ new D<dynamic, dynamic>.named(
+                                              ^";
   }
   {
-    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t19 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^");
-    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t20 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^");
+    self::A<core::int, core::String> a0 = new self::D::•<dynamic, core::String>(let final dynamic #t19 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:105:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^");
+    self::A<core::int, core::String> a1 = new self::D::named<dynamic, core::String>(let final dynamic #t20 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:107:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^");
   }
   {
     self::A<self::C<core::int>, core::String> a0 = new self::E::•<core::int, core::String>("hello");
   }
   {
     self::A<core::int, core::String> a0 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[3], b: <core::String>["hello"]);
-    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t21 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                     ^"], b: <core::String>[let final dynamic #t22 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3\n                                                     ^"]);
+    self::A<core::int, core::String> a1 = new self::F::•<core::int, core::String>(3, "hello", a: <core::int>[let final dynamic #t21 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:118:54: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                     ^"], b: <core::String>[let final dynamic #t22 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:121:54: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+          /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 3
+                                                     ^"]);
     self::A<core::int, core::String> a2 = new self::F::named<core::int, core::String>(3, "hello", 3, "hello");
     self::A<core::int, core::String> a3 = new self::F::named<core::int, core::String>(3, "hello");
-    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t23 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                               ^", let final dynamic #t24 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);\n                                               ^");
-    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t25 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");\n                                               ^");
+    self::A<core::int, core::String> a4 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t23 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:129:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                               ^", let final dynamic #t24 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:130:48: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 3);
+                                               ^");
+    self::A<core::int, core::String> a5 = new self::F::named<core::int, core::String>(3, "hello", let final dynamic #t25 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart:134:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+        /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\");
+                                               ^");
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
index 682efdc..741fe3a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.strong.expect
@@ -2,13 +2,22 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42\n                                                                                        ^"]]) → void {}
+static method foo([core::List<core::String> list1 = const <core::String>[], core::List<core::String> list2 = const <core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:11:89: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42
+                                                                                        ^"]]) → void {}
 static method main() → void {
   {
     core::List<core::int> l0 = <core::int>[];
     core::List<core::int> l1 = <core::int>[3];
-    core::List<core::int> l2 = <core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                 ^"];
-    core::List<core::int> l3 = <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                 ^", 3];
+    core::List<core::int> l2 = <core::int>[let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:19:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^"];
+    core::List<core::int> l3 = <core::int>[let final dynamic #t3 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:22:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^", 3];
   }
   {
     core::List<dynamic> l0 = <dynamic>[];
@@ -17,21 +26,51 @@
     core::List<dynamic> l3 = <dynamic>["hello", 3];
   }
   {
-    core::List<core::int> l0 = let final dynamic #t4 = <core::num>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];\n                                                            ^";
-    core::List<core::int> l1 = let final dynamic #t5 = <core::num>[3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];\n                                                            ^";
-    core::List<core::int> l2 = let final dynamic #t6 = <core::num>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                 ^"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[\n                                                            ^";
-    core::List<core::int> l3 = let final dynamic #t8 = <core::num>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                 ^", 3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[\n                                                            ^";
+    core::List<core::int> l0 = let final dynamic #t4 = <core::num>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:33:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l0 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[];
+                                                            ^";
+    core::List<core::int> l1 = let final dynamic #t5 = <core::num>[3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:34:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l1 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[3];
+                                                            ^";
+    core::List<core::int> l2 = let final dynamic #t6 = <core::num>[let final dynamic #t7 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:36:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^"] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:35:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l2 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^";
+    core::List<core::int> l3 = let final dynamic #t8 = <core::num>[let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:39:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^", 3] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:38:61: Error: The list literal type 'dart.core::List<dart.core::num>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+    List<int> l3 = /*error:INVALID_CAST_LITERAL_LIST*/ <num>[
+                                                            ^";
   }
   {
     core::Iterable<core::int> i0 = <core::int>[];
     core::Iterable<core::int> i1 = <core::int>[3];
-    core::Iterable<core::int> i2 = <core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                 ^"];
-    core::Iterable<core::int> i3 = <core::int>[let final dynamic #t11 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                 ^", 3];
+    core::Iterable<core::int> i2 = <core::int>[let final dynamic #t10 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:47:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                 ^"];
+    core::Iterable<core::int> i3 = <core::int>[let final dynamic #t11 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:50:50: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                 ^", 3];
   }
   {
     const core::List<core::int> c0 = const <core::int>[];
     const core::List<core::int> c1 = const <core::int>[3];
-    const core::List<core::int> c2 = const <core::int>[let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"\n                                                                                        ^"];
-    const core::List<core::int> c3 = const <core::int>[let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",\n                                                                                        ^", 3];
+    const core::List<core::int> c2 = const <core::int>[let final dynamic #t12 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:58:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\"
+                                                                                        ^"];
+    const core::List<core::int> c3 = const <core::int>[let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart:61:89: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ \"hello\",
+                                                                                        ^", 3];
   }
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
index b13ab72..d56b390 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.strong.expect
@@ -2,14 +2,29 @@
 import self as self;
 import "dart:core" as core;
 
-static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                                                              ^": "world"}]) → void {}
+static method foo([core::Map<core::int, core::String> m1 = const <core::int, core::String>{1: "hello"}, core::Map<core::int, core::String> m2 = const <core::int, core::String>{let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:12:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^": "world"}]) → void {}
 static method test() → void {
   {
     core::Map<core::int, core::String> l0 = <core::int, core::String>{};
     core::Map<core::int, core::String> l1 = <core::int, core::String>{3: "hello"};
-    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"\n                                            ^": "hello"};
-    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                 ^"};
-    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                            ^": let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                  ^"};
+    core::Map<core::int, core::String> l2 = <core::int, core::String>{let final dynamic #t2 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:20:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^": "hello"};
+    core::Map<core::int, core::String> l3 = <core::int, core::String>{3: let final dynamic #t3 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:23:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^"};
+    core::Map<core::int, core::String> l4 = <core::int, core::String>{3: "hello", let final dynamic #t4 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:27:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                            ^": let final dynamic #t5 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:28:51: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                  ^"};
   }
   {
     core::Map<dynamic, dynamic> l0 = <dynamic, dynamic>{};
@@ -22,27 +37,60 @@
     core::Map<dynamic, core::String> l0 = <dynamic, core::String>{};
     core::Map<dynamic, core::String> l1 = <dynamic, core::String>{3: "hello"};
     core::Map<dynamic, core::String> l2 = <dynamic, core::String>{"hello": "hello"};
-    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                 ^"};
-    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t7 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                       ^"};
+    core::Map<dynamic, core::String> l3 = <dynamic, core::String>{3: let final dynamic #t6 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:48:50: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                 ^"};
+    core::Map<dynamic, core::String> l4 = <dynamic, core::String>{3: "hello", "hello": let final dynamic #t7 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:52:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      \"hello\": /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                       ^"};
   }
   {
     core::Map<core::int, dynamic> l0 = <core::int, dynamic>{};
     core::Map<core::int, dynamic> l1 = <core::int, dynamic>{3: "hello"};
-    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"\n                                            ^": "hello"};
+    core::Map<core::int, dynamic> l2 = <core::int, dynamic>{let final dynamic #t8 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:59:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": \"hello\"
+                                            ^": "hello"};
     core::Map<core::int, dynamic> l3 = <core::int, dynamic>{3: 3};
-    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3\n                                            ^": 3};
+    core::Map<core::int, dynamic> l4 = <core::int, dynamic>{3: "hello", let final dynamic #t9 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:64:45: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\": 3
+                                            ^": 3};
   }
   {
-    core::Map<core::int, core::String> l0 = let final dynamic #t10 = <core::num, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};\n                                                                           ^";
-    core::Map<core::int, core::String> l1 = let final dynamic #t11 = <core::num, dynamic>{3: "hello"} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{\n                                                                           ^";
-    core::Map<core::int, core::String> l3 = let final dynamic #t12 = <core::num, dynamic>{3: 3} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{\n                                                                           ^";
+    core::Map<core::int, core::String> l0 = let final dynamic #t10 = <core::num, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:68:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+    Map<int, String> l0 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{};
+                                                                           ^";
+    core::Map<core::int, core::String> l1 = let final dynamic #t11 = <core::num, dynamic>{3: "hello"} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:69:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+    Map<int, String> l1 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^";
+    core::Map<core::int, core::String> l3 = let final dynamic #t12 = <core::num, dynamic>{3: 3} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:72:76: Error: The map literal type 'dart.core::Map<dart.core::num, dynamic>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+    Map<int, String> l3 = /*error:INVALID_CAST_LITERAL_MAP*/ <num, dynamic>{
+                                                                           ^";
   }
   {
     const core::Map<core::int, core::String> l0 = const <core::int, core::String>{};
     const core::Map<core::int, core::String> l1 = const <core::int, core::String>{3: "hello"};
-    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                                                              ^": "hello"};
-    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t14 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                                                     ^"};
-    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":\n                                                                              ^": let final dynamic #t16 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3\n                                                                                      ^"};
+    const core::Map<core::int, core::String> l2 = const <core::int, core::String>{let final dynamic #t13 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:80:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^": "hello"};
+    const core::Map<core::int, core::String> l3 = const <core::int, core::String>{3: let final dynamic #t14 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:84:86: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+      3: /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                                                     ^"};
+    const core::Map<core::int, core::String> l4 = const <core::int, core::String>{3: "hello", let final dynamic #t15 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:88:79: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:MAP_KEY_TYPE_NOT_ASSIGNABLE,error:MAP_KEY_TYPE_NOT_ASSIGNABLE*/ \"hello\":
+                                                                              ^": let final dynamic #t16 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart:89:87: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+          /*error:MAP_VALUE_TYPE_NOT_ASSIGNABLE,error:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/ 3
+                                                                                      ^"};
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
index abcd30c..1e89b94 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.strong.expect
@@ -9,14 +9,26 @@
 }
 static method foo() → asy::Stream<core::List<core::int>> async* {
   yield<core::int>[];
-  yield let final dynamic #t1 = self::MyStream::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.\n  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();\n                                                                  ^";
-  yield* let final dynamic #t2 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.\n  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];\n                                                               ^";
+  yield let final dynamic #t1 = self::MyStream::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:16:67: Error: A value of type 'test::MyStream<dynamic>' can't be assigned to a variable of type 'dart.core::List<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dart.core::int>'.
+  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ MyStream();
+                                                                  ^";
+  yield* let final dynamic #t2 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:17:64: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dart.core::List<dart.core::int>>'.
+  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic*/ [];
+                                                               ^";
   yield* self::MyStream::•<core::List<core::int>>();
 }
 static method bar() → core::Iterable<core::Map<core::int, core::int>> sync* {
   yield<core::int, core::int>{};
-  yield let final dynamic #t3 = core::List::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.\n  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();\n                                                                  ^";
-  yield* let final dynamic #t4 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.\n  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                        ^";
+  yield let final dynamic #t3 = core::List::•<dynamic>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:23:67: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'dart.core::Map<dart.core::int, dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dart.core::int, dart.core::int>'.
+  yield /*error:YIELD_OF_INVALID_TYPE*/ new /*@typeArgs=dynamic*/ List();
+                                                                  ^";
+  yield* let final dynamic #t4 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart:24:73: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dart.core::Map<dart.core::int, dart.core::int>>'.
+  yield* /*error:YIELD_OF_INVALID_TYPE*/ /*@typeArgs=dynamic, dynamic*/ {};
+                                                                        ^";
   yield* core::List::•<core::Map<core::int, core::int>>();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
index 90b2c64..bdb3e4c 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards.dart.strong.expect
@@ -14,7 +14,10 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.\n  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n                                                ^";
+  asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards.dart:21:49: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
+  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+                                                ^";
   asy::Future<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
index c13378b..ac234d7 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_2.dart.strong.expect
@@ -14,7 +14,10 @@
 }
 static method main() → void {
   self::MyFuture<core::double> f = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3);
-  self::MyFuture<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.\n  MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n                                                  ^";
+  self::MyFuture<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_2.dart:21:51: Error: A value of type 'test::MyFuture<dart.core::double>' can't be assigned to a variable of type 'test::MyFuture<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::MyFuture<dart.core::int>'.
+  MyFuture<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+                                                  ^";
   self::MyFuture<core::num> f3 = self::foo().{self::MyFuture::then}<core::double>((dynamic _) → core::double => 2.3) as self::MyFuture<core::double>;
 }
 static method foo() → self::MyFuture<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
index 7885101..8218490 100644
--- a/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_then_upwards_3.dart.strong.expect
@@ -14,7 +14,10 @@
 }
 static method test() → void {
   asy::Future<core::double> f = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3);
-  asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.\n  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;\n                                                ^";
+  asy::Future<core::int> f2 = let final dynamic #t1 = f in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_then_upwards_3.dart:21:49: Error: A value of type 'dart.async::Future<dart.core::double>' can't be assigned to a variable of type 'dart.async::Future<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Future<dart.core::int>'.
+  Future<int> f2 = /*error:INVALID_ASSIGNMENT*/ f;
+                                                ^";
   asy::Future<core::num> f3 = self::foo().{asy::Future::then}<core::double>((dynamic _) → core::double => 2.3) as asy::Future<core::double>;
 }
 static method foo() → asy::Future<dynamic>
diff --git a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
index c7158f8f..8cdf437 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards.dart.strong.expect
@@ -13,7 +13,10 @@
     return null;
 }
 static field self::MyFuture<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.\n        new /*@typeArgs=int*/ Future.value('hi'));\n                                           ^"));
+static field asy::Future<core::int> t1 = self::f.{self::MyFuture::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^"));
 static field asy::Future<core::List<core::int>> t2 = self::f.{self::MyFuture::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> async {
   return <core::int>[3];
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
index c135f5a..9ab33f7 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_3.dart.strong.expect
@@ -13,7 +13,10 @@
     return null;
 }
 static field asy::Future<dynamic> f;
-static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.\n        new /*@typeArgs=int*/ Future.value('hi'));\n                                           ^"));
+static field asy::Future<core::int> t1 = self::f.{asy::Future::then}<core::int>((dynamic _) → asy::Future<core::int> => asy::Future::value<core::int>(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/future_union_downwards_3.dart:21:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::FutureOr<dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<dart.core::int>'.
+        new /*@typeArgs=int*/ Future.value('hi'));
+                                           ^"));
 static field asy::Future<core::List<core::int>> t2 = self::f.{asy::Future::then}<core::List<core::int>>((dynamic _) → core::List<core::int> => <core::int>[3]);
 static method g2() → asy::Future<core::List<core::int>> async {
   return <core::int>[3];
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
index 9f39d90..0b1e57b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.strong.expect
@@ -16,10 +16,28 @@
   self::printDouble(math::min<core::double>(1.0, 2.0));
   self::printInt(self::myMax(1, 2) as{TypeError} core::int);
   self::printInt(self::myMax(1, 2) as core::int);
-  self::printInt(math::max<core::int>(1, let final dynamic #t1 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));\n                                                                      ^"));
-  self::printInt(math::min<core::int>(1, let final dynamic #t2 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));\n                                                                      ^"));
-  self::printDouble(math::max<core::double>(let final dynamic #t3 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n      /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));\n                                                                      ^", 2.0));
-  self::printDouble(math::min<core::double>(let final dynamic #t4 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n      /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));\n                                                                      ^", 2.0));
-  self::printInt(math::min<core::int>(let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",\n                                             ^", let final dynamic #t6 = "there" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));\n                                             ^"));
+  self::printInt(math::max<core::int>(1, let final dynamic #t1 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:29:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*@typeArgs=int*/ max(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
+                                                                      ^"));
+  self::printInt(math::min<core::int>(1, let final dynamic #t2 = 2.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:31:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*@typeArgs=int*/ min(1, /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 2.0));
+                                                                      ^"));
+  self::printDouble(math::max<core::double>(let final dynamic #t3 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:33:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+      /*@typeArgs=double*/ max(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
+                                                                      ^", 2.0));
+  self::printDouble(math::min<core::double>(let final dynamic #t4 = 1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:35:71: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+      /*@typeArgs=double*/ min(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 1, 2.0));
+                                                                      ^", 2.0));
+  self::printInt(math::min<core::int>(let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:39:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"hi\",
+                                             ^", let final dynamic #t6 = "there" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart:40:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ \"there\"));
+                                             ^"));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 32898c1..8514bf6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -16,7 +16,12 @@
   method m(dynamic x) → dynamic
     return x;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n                                                               ^", "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).\nChange to a subtype of test::C::m::T.\n/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(\n                                                               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
+                                                               ^", "pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:14:64: Error: The return type of the method 'D::m' is dynamic, which does not match the return type of the overridden method (test::C::m::T).
+Change to a subtype of test::C::m::T.
+/*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
+                                                               ^"]/* from null */;
 static method main() → dynamic {
   core::int y = new self::D::•().{self::D::m}<core::int>(42) as{TypeError} core::int;
   core::print(y);
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
index 159630d..71d37ab 100644
--- a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.strong.expect
@@ -6,6 +6,9 @@
   return null;
 static method test() → dynamic {
   core::String x = self::f<core::String>(<core::String>["hi"]);
-  core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);\n                                                                           ^"]);
+  core::String y = self::f<core::String>(<core::String>[let final dynamic #t1 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart:13:76: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+          /*@typeArgs=String*/ [/*error:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/ 42]);
+                                                                           ^"]);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index ddc01f1..db0f902 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -20,7 +20,17 @@
   method g<T extends core::Object>(self::D::g::T x) → self::D::g::T
     return x;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.\n  T /*@error=OverrideTypeVariablesMismatch*/ m<T>(\n                                             ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:54: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).\nChange to a supertype of dynamic (or, for a covariant parameter, a subtype).\n          T /*@error=OverrideTypeMismatchParameter*/ x) =>\n                                                     ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Error: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.\n  T /*@error=OverrideTypeVariablesMismatch*/ g<T>(\n                                             ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:18:54: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).\nChange to a supertype of dart.core::int (or, for a covariant parameter, a subtype).\n          T /*@error=OverrideTypeMismatchParameter*/ x) =>\n                                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:46: Error: Declared type variables of 'D::m' doesn't match those on overridden method 'C::m'.
+  T /*@error=OverrideTypeVariablesMismatch*/ m<T>(
+                                             ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:54: Error: The parameter 'x' of the method 'D::m' has type test::D::m::T, which does not match the corresponding type in the overridden method (dynamic).
+Change to a supertype of dynamic (or, for a covariant parameter, a subtype).
+          T /*@error=OverrideTypeMismatchParameter*/ x) =>
+                                                     ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:17:46: Error: Declared type variables of 'D::g' doesn't match those on overridden method 'C::g'.
+  T /*@error=OverrideTypeVariablesMismatch*/ g<T>(
+                                             ^", "pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:18:54: Error: The parameter 'x' of the method 'D::g' has type test::D::g::T, which does not match the corresponding type in the overridden method (dart.core::int).
+Change to a supertype of dart.core::int (or, for a covariant parameter, a subtype).
+          T /*@error=OverrideTypeMismatchParameter*/ x) =>
+                                                     ^"]/* from null */;
 static method main() → dynamic {
   core::int y = (new self::D::•() as self::C).{self::C::m}(42) as{TypeError} core::int;
   core::print(y);
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 59579ba..138df56 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -21,8 +21,14 @@
   self::takeIIO(math::max<core::int>);
   self::takeDDO(math::max<core::double>);
   self::takeOOI((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t1 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);\n                                                                        ^");
-  self::takeDID(let final dynamic #t2 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);\n                                                                        ^");
+  self::takeIDI(let final dynamic #t1 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^");
+  self::takeDID(let final dynamic #t2 = math::max<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+      /*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
+                                                                        ^");
   self::takeOON((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((math::max<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeIII(math::min<core::int>);
@@ -35,8 +41,14 @@
   self::takeIIO(math::min<core::int>);
   self::takeDDO(math::min<core::double>);
   self::takeOOI((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t3 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);\n                                                                       ^");
-  self::takeDID(let final dynamic #t4 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);\n                                                                       ^");
+  self::takeIDI(let final dynamic #t3 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+  takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^");
+  self::takeDID(let final dynamic #t4 = math::min<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+  takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
+                                                                       ^");
   self::takeOON((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((math::min<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeIII(new self::C::•().{self::C::m}<core::int>);
@@ -51,8 +63,14 @@
   self::takeOON((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOO((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::num);
   self::takeOOI((new self::C::•().{self::C::m}<core::Object>) as{TypeError} (core::Object, core::Object) → core::int);
-  self::takeIDI(let final dynamic #t5 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.\n          . /*@target=C::m*/ m);\n                             ^");
-  self::takeDID(let final dynamic #t6 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.\n          . /*@target=C::m*/ m);\n                             ^");
+  self::takeIDI(let final dynamic #t5 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:86:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::double, dart.core::int) \u8594 dart.core::int'.
+          . /*@target=C::m*/ m);
+                             ^");
+  self::takeDID(let final dynamic #t6 = new self::C::•().{self::C::m}<core::num> in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:89:30: Error: A value of type '(dart.core::num, dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int, dart.core::double) \u8594 dart.core::double'.
+          . /*@target=C::m*/ m);
+                             ^");
 }
 static method takeIII((core::int, core::int) → core::int fn) → void {}
 static method takeDDD((core::double, core::double) → core::double fn) → void {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
index 07fd5ca..a11e34a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.strong.expect
@@ -4,6 +4,9 @@
 
 static method f() → void {
   core::List<core::String> y;
-  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final dynamic #t1 = 1.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n          1.0);\n          ^");
+  core::Iterable<core::String> x = y.{core::Iterable::map}<core::String>((core::String z) → core::String => let final dynamic #t1 = 1.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_inference_error.dart:13:11: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+          1.0);
+          ^");
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 38c148a..478b5a6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -8,8 +8,14 @@
 static method test() → dynamic {
   core::Iterable<asy::Future<core::int>> list = <core::int>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int>>(self::make);
   asy::Future<core::List<core::int>> results = asy::Future::wait<core::int>(list);
-  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n                          /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +\n                                                                                                                       ^") as{TypeError} asy::FutureOr<core::String>));
-  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t2 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.\n                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String\n                                                                                                           ^"));
+  asy::Future<core::String> results2 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", (asy::FutureOr<core::String> x, core::int y) → asy::FutureOr<core::String> => (let final dynamic #t1 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:120: Error: The method '+' isn't defined for the class 'dart.async::FutureOr<dart.core::String>'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+                          /*@type=int*/ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
+                                                                                                                       ^") as{TypeError} asy::FutureOr<core::String>));
+  asy::Future<core::String> results3 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → asy::FutureOr<core::String> => list.{core::Iterable::fold}<asy::FutureOr<core::String>>("", let final dynamic #t2 = (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:108: Error: A value of type '(dart.core::String, dart.core::int) \u8594 dart.core::String' can't be assigned to a variable of type '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.async::FutureOr<dart.core::String>, dart.core::int) \u8594 dart.async::FutureOr<dart.core::String>'.
+                  /*info:INFERRED_TYPE_CLOSURE,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ /*@returnType=String*/ (String
+                                                                                                           ^"));
   asy::Future<core::String> results4 = results.{asy::Future::then}<core::String>((core::List<core::int> list) → core::String => list.{core::Iterable::fold}<core::String>("", (core::String x, core::int y) → core::String => x.{core::String::+}(y.{core::int::toString}())));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index 729c29c..c82ec9e 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -23,12 +23,21 @@
   core::String s;
   core::int i;
   s = new self::B::•().{self::B::x} as{TypeError} core::String;
-  s = let final dynamic #t1 = new self::B::•().{self::B::y} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;\n                                                             ^";
+  s = let final dynamic #t1 = new self::B::•().{self::B::y} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:26:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::y*/ y;
+                                                             ^";
   s = new self::B::•().{self::B::z};
-  s = let final dynamic #t2 = new self::B::•().{self::B::w} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;\n                                                             ^";
+  s = let final dynamic #t2 = new self::B::•().{self::B::w} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:28:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  s = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::w*/ w;
+                                                             ^";
   i = new self::B::•().{self::B::x} as{TypeError} core::int;
   i = new self::B::•().{self::B::y};
-  i = let final dynamic #t3 = new self::B::•().{self::B::z} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;\n                                                             ^";
+  i = let final dynamic #t3 = new self::B::•().{self::B::z} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart:32:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  i = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::z*/ z;
+                                                             ^";
   i = new self::B::•().{self::B::w};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index 10d7729..d7a5129 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -50,5 +50,14 @@
     : super self::C::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:79: Error: Can't infer the type of 'x': overridden members must all have the same type.\nSpecify the type explicitly.\n  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;\n                                                                              ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:79: Error: Can't infer the type of 'x': overridden members must all have the same type.\nSpecify the type explicitly.\n  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;\n                                                                              ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:79: Error: Can't infer the type of 'x': overridden members must all have the same type.\nSpecify the type explicitly.\n  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;\n                                                                              ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_field_override_multiple.dart:32:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+Specify the type explicitly.
+  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+                                                                              ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+Specify the type explicitly.
+  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+                                                                              ^", "pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:79: Error: Can't infer the type of 'x': overridden members must all have the same type.
+Specify the type explicitly.
+  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ x;
+                                                                              ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 0ee04be..f10837a 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -24,31 +24,71 @@
 static field core::int f = 2.{core::num::+}(3);
 static field core::int g = 3.{core::int::unary-}();
 static field self::B h = new self::A::•().{self::A::+}(3);
-static field dynamic i = let final dynamic #t3 = new self::A::•() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.\nTry correcting the name to the name of an existing method, or defining a method named 'unary-'.\nvar /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();\n                                                                              ^";
+static field dynamic i = let final dynamic #t3 = new self::A::•() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:34:79: Error: The method 'unary-' isn't defined for the class 'test::A'.
+Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+var /*@topType=dynamic*/ i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
+                                                                              ^";
 static field self::B j = null as self::B;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.\nvar /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations\n                                                            ^", "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.\n  /*error:UNDEFINED_IDENTIFIER*/ x\n                                 ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Error: Getter not found: 'x'.
+var /*@topType=B*/ 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
+                                 ^"]/* from null */;
 static method test1() → dynamic {
-  self::a = let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  self::a = let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:38:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
   self::a = new self::B::•(3);
-  self::b = let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  self::b = let final dynamic #t5 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:40:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
   self::b = new self::B::•(3);
   self::c1 = <dynamic>[];
-  self::c1 = let final dynamic #t6 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.\n  c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                   ^";
+  self::c1 = let final dynamic #t6 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:43:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
+  c1 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+                                                                   ^";
   self::c2 = <dynamic>[];
-  self::c2 = let final dynamic #t7 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.\n  c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                   ^";
+  self::c2 = let final dynamic #t7 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:45:68: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'dart.core::List<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::List<dynamic>'.
+  c2 = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+                                                                   ^";
   self::d = <dynamic, dynamic>{};
-  self::d = let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.\n  d = /*error:INVALID_ASSIGNMENT*/ 3;\n                                   ^";
+  self::d = let final dynamic #t8 = 3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:47:36: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Map<dynamic, dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Map<dynamic, dynamic>'.
+  d = /*error:INVALID_ASSIGNMENT*/ 3;
+                                   ^";
   self::e = new self::A::•();
-  self::e = let final dynamic #t9 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\n  e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};\n                                                                  ^";
+  self::e = let final dynamic #t9 = <dynamic, dynamic>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:49:67: Error: A value of type 'dart.core::Map<dynamic, dynamic>' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+  e = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic, dynamic*/ {};
+                                                                  ^";
   self::f = 3;
-  self::f = let final dynamic #t10 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  f = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^";
+  self::f = let final dynamic #t10 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:51:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  f = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^";
   self::g = 1;
-  self::g = let final dynamic #t11 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  g = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^";
-  self::h = let final dynamic #t12 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  h = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^";
+  self::g = let final dynamic #t11 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:53:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  g = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^";
+  self::h = let final dynamic #t12 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:54:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+  h = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^";
   self::h = new self::B::•("b");
   self::i = false;
   self::j = new self::B::•("b");
-  self::j = let final dynamic #t13 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  j = /*error:INVALID_ASSIGNMENT*/ false;\n                                   ^";
-  self::j = let final dynamic #t14 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B'.\n  j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];\n                                                         ^";
+  self::j = let final dynamic #t13 = false in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:58:36: Error: A value of type 'dart.core::bool' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+  j = /*error:INVALID_ASSIGNMENT*/ false;
+                                   ^";
+  self::j = let final dynamic #t14 = <dynamic>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:59:58: Error: A value of type 'dart.core::List<dynamic>' can't be assigned to a variable of type 'test::B'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B'.
+  j = /*error:INVALID_ASSIGNMENT*/ /*@typeArgs=dynamic*/ [];
+                                                         ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
index 8240108..9a2fd7b 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.strong.expect
@@ -5,7 +5,13 @@
 
 static field core::int y = inf::x;
 static method test1() → dynamic {
-  inf::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
-  self::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  y = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  inf::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
+  self::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart:14:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index b7577f1..ec6bb1e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -10,7 +10,13 @@
     ;
 }
 static method test1() → dynamic {
-  inf::A::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^";
-  self::B::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^";
+  inf::A::x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  A.x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^";
+  self::B::y = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  B.y = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
index 3d75d52..b71b402 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.direct.expect
@@ -2,11 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.
+  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+                                                                         ^"]/* from null */;
 static method test() → dynamic {
   function f() → dynamic
     return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n  g() => 0;\n  ^";
+  invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+  g() => 0;
+  ^";
   dynamic v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
index 292334d..6343ea9 100644
--- a/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart.strong.expect
@@ -2,11 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^", "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.\n  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();\n                                                                         ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Method not found: 'g'.
+  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+                                                                         ^", "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:9:74: Error: Previous use of 'g'.
+  /*@returnType=dynamic*/ f() => /*error:REFERENCED_BEFORE_DECLARATION*/ g();
+                                                                         ^"]/* from null */;
 static method test() → dynamic {
   function f() → dynamic
     return throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#g, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
-  invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.\n  g() => 0;\n  ^";
+  invalid-expression "pkg/front_end/testcases/inference/infer_local_function_referenced_before_declaration.dart:14:3: Error: Can't declare 'g' because it was already used in this scope.
+  g() => 0;
+  ^";
   () → dynamic v = f;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
index 97b8ef2..b1c4e7f 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
@@ -26,5 +26,16 @@
   abstract method g(core::int x, [dynamic y = null]) → core::int;
   abstract method h(core::int x, {dynamic y = null}) → core::int;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);\n                                                                              ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});\n                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.\nSpecify the type explicitly.\n      [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);\n                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.\n  /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(\n                                                            ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/infer_method_missing_params.dart:25:79: Error: Can't infer the type of 'y': overridden members must all have the same type.
+Specify the type explicitly.
+      /*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y);
+                                                                              ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:29:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
+Specify the type explicitly.
+      {/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y});
+                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:27:80: Error: Can't infer the type of 'y': overridden members must all have the same type.
+Specify the type explicitly.
+      [/*@topType=dynamic*/ /*@error=CantInferTypeDueToInconsistentOverrides*/ y]);
+                                                                               ^", "pkg/front_end/testcases/inference/infer_method_missing_params.dart:23:61: Error: The method 'C::f' has more required arguments than those of overridden method 'B::f'.
+  /*@topType=int*/ /*@error=OverrideMoreRequiredArguments*/ f(
+                                                            ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index 834f9ea..fa17ad2 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -16,7 +16,10 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n                                                                    ^";
+  core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+                                                                    ^";
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index e4288a1..45ce781 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -16,7 +16,10 @@
     return 3;
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n                                                                    ^";
+  core::String y = let final dynamic #t1 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart:17:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+                                                                    ^";
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
index 5808152..66fe036 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.strong.expect
@@ -4,6 +4,9 @@
 
 static method test1() → dynamic {
   core::int x = 3;
-  x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
index 366198e..147a582 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.strong.expect
@@ -4,6 +4,9 @@
 
 static method test2() → dynamic {
   core::int x = 3;
-  x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  x = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var2.dart:10:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index a9a4a29..1ed7c28 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -11,13 +11,22 @@
     ;
   method test1() → dynamic {
     core::int a = this.{self::A::x};
-    a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^";
+    a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:13:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^";
     a = 3;
     core::int b = this.{self::A::y};
-    b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^";
+    b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:16:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^";
     b = 4;
     core::int c = this.{self::A::z};
-    c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    c = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                     ^";
+    c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart:19:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                     ^";
     c = 4;
   }
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
index 76876ca..637a3da 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.strong.expect
@@ -7,13 +7,22 @@
 static final field core::int z = 42;
 static method test1() → dynamic {
   core::int a = self::x;
-  a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  a = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:12:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  a = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
   a = 3;
   core::int b = self::y;
-  b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  b = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:15:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  b = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
   b = 4;
   core::int c = self::z;
-  c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  c = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                   ^";
+  c = let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart:18:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  c = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                   ^";
   c = 4;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index 7775a27..a1338de 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -19,7 +19,10 @@
 }
 static method foo() → dynamic {
   core::int y = new self::C::•().{self::C::x};
-  core::String z = let final dynamic #t1 = new self::C::•().{self::C::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;\n                                                                    ^";
+  core::String z = let final dynamic #t1 = new self::C::•().{self::C::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
+                                                                    ^";
 }
 static method main() → dynamic {
   self::foo();
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index 27998b1..0fce35c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -16,10 +16,16 @@
   get x() → core::int
     return 3;
   get w() → core::int
-    return let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";\n                                                             ^";
+    return let final dynamic #t1 = "hello" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:15:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  get /*@topType=int*/ w => /*error:RETURN_OF_INVALID_TYPE*/ \"hello\";
+                                                             ^";
 }
 static method foo() → dynamic {
-  core::String y = let final dynamic #t2 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;\n                                                                    ^";
+  core::String y = let final dynamic #t2 = new self::B::•().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart:19:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  String y = /*error:INVALID_ASSIGNMENT*/ new B(). /*@target=B::x*/ x;
+                                                                    ^";
   core::int z = new self::B::•().{self::B::x};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index f7b87c6..81eb021 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -17,7 +17,10 @@
     return this.{self::B::y};
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;\n                                                                         ^";
+  core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::x} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart:18:74: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  int y = /*error:INVALID_ASSIGNMENT*/ new B<String>(). /*@target=B::x*/ x;
+                                                                         ^";
   core::String z = new self::B::•<core::String>().{self::B::x};
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index b8b15d5..e9d2281 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -29,7 +29,10 @@
   method m(dynamic a, (dynamic, self::B::E) → dynamic f) → core::String {}
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = new self::B::•<dynamic>().{self::B::m}(null, null) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      . /*@target=B::m*/ m(null, null);\n                         ^";
+  core::int y = let final dynamic #t1 = new self::B::•<dynamic>().{self::B::m}(null, null) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      . /*@target=B::m*/ m(null, null);
+                         ^";
   core::String z = new self::B::•<dynamic>().{self::B::m}(null, null);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index 74b6bdc..6cc6701 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -24,7 +24,10 @@
   method m(dynamic a, (dynamic, core::int) → dynamic f) → self::A<self::B::E> {}
 }
 static method foo() → dynamic {
-  core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      . /*@target=A::value*/ value;\n                             ^";
+  core::int y = let final dynamic #t1 = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart:30:30: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      . /*@target=A::value*/ value;
+                             ^";
   core::String z = new self::B::•<core::String>().{self::B::m}(null, null).{self::A::value};
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index 7e2bbc8..32d9436 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -14,7 +14,10 @@
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → void {
     for (core::String i in t) {
-      core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^";
+      core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:15:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^";
     }
   }
 }
@@ -24,7 +27,10 @@
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → void {
     for (self::Baz::T i in t) {
-      core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^";
+      core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:23:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^";
       self::Baz::T y = i;
     }
   }
@@ -32,13 +38,19 @@
 static method test() → dynamic {
   core::List<self::Foo> list = <self::Foo>[];
   for (self::Foo x in list) {
-    core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    String y = /*error:INVALID_ASSIGNMENT*/ x;\n                                            ^";
+    core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:32:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+    String y = /*error:INVALID_ASSIGNMENT*/ x;
+                                            ^";
   }
   for (dynamic x in list) {
     core::String y = x as{TypeError} core::String;
   }
   for (final self::Foo #t4 in list) {
-    core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {\n              ^";
+    core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:39:15: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ list) {
+              ^";
     core::String y = x;
   }
   dynamic z;
@@ -57,7 +69,10 @@
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n  for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {\n                                                                   ^") {
+  for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart:60:68: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
+  for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+                                                                   ^") {
     core::String y = x as{TypeError} core::String;
   }
   for (core::String x in map.{core::Map::keys}) {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index 242f2f4..50cce8f 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -15,7 +15,10 @@
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → dynamic async {
     await for (core::String i in t) {
-      core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^";
+      core::int x = let final dynamic #t1 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:17:44: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^";
     }
   }
 }
@@ -25,7 +28,10 @@
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → dynamic async {
     await for (self::Baz::T i in t) {
-      core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      int x = /*error:INVALID_ASSIGNMENT*/ i;\n                                           ^";
+      core::int x = let final dynamic #t2 = i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:25:44: Error: A value of type 'test::Baz::T' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      int x = /*error:INVALID_ASSIGNMENT*/ i;
+                                           ^";
       self::Baz::T y = i;
     }
   }
@@ -37,13 +43,19 @@
 static method test() → dynamic async {
   self::MyStream<self::Foo> myStream = self::MyStream::•<self::Foo>();
   await for (self::Foo x in myStream) {
-    core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n    String y = /*error:INVALID_ASSIGNMENT*/ x;\n                                            ^";
+    core::String y = let final dynamic #t3 = x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:38:45: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+    String y = /*error:INVALID_ASSIGNMENT*/ x;
+                                            ^";
   }
   await for (dynamic x in myStream) {
     core::String y = x as{TypeError} core::String;
   }
   await for (final self::Foo #t4 in myStream) {
-    core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {\n                    ^";
+    core::String x = let final dynamic #t5 = #t4 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:45:21: Error: A value of type 'test::Foo' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  await for (String x in /*error:FOR_IN_OF_INVALID_ELEMENT_TYPE*/ myStream) {
+                    ^";
     core::String y = x;
   }
   dynamic z;
@@ -62,7 +74,10 @@
     self::Foo y = x;
   }
   core::Map<core::String, self::Foo> map = <core::String, self::Foo>{};
-  await for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n  await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {\n                                                                         ^") {
+  await for (dynamic x in let final dynamic #t9 = map in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart:66:74: Error: A value of type 'dart.core::Map<dart.core::String, test::Foo>' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
+  await for (var /*@type=dynamic*/ x in /*error:FOR_IN_OF_INVALID_TYPE*/ map) {
+                                                                         ^") {
     core::String y = x as{TypeError} core::String;
   }
 }
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
index eb2a83e..77bf377 100644
--- a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.strong.expect
@@ -4,7 +4,10 @@
 
 class Foo extends core::Object {
   field core::int x = 1;
-  constructor •([core::int x = let final dynamic #t1 = "1" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);\n                                             ^"]) → void
+  constructor •([core::int x = let final dynamic #t1 = "1" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  Foo([this.x = /*error:INVALID_ASSIGNMENT*/ \"1\"]);
+                                             ^"]) → void
     : self::Foo::x = x, super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
index 58cfa0a..d2cd058 100644
--- a/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals.dart.strong.expect
@@ -4,14 +4,23 @@
 
 static method test1() → dynamic {
   core::List<core::int> x = <core::int>[1, 2, 3];
-  x.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                      ^");
-  x.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);\n                                                                      ^");
+  x.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:10:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                      ^");
+  x.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:11:71: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+                                                                      ^");
   x.{core::List::add}(4);
   core::List<core::num> y = x;
 }
 static method test2() → dynamic {
   core::List<core::num> x = <core::num>[1, 2.0, 3];
-  x.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                      ^");
+  x.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals.dart:18:71: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+  x. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                      ^");
   x.{core::List::add}(4.0);
   core::List<core::int> y = x as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
index 821836d..a66913c 100644
--- a/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.strong.expect
@@ -5,13 +5,22 @@
 static field core::List<core::int> x1 = <core::int>[1, 2, 3];
 static field core::List<core::num> x2 = <core::num>[1, 2.0, 3];
 static method test1() → dynamic {
-  self::x1.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                       ^");
-  self::x1.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);\n                                                                       ^");
+  self::x1.{core::List::add}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:10:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                       ^");
+  self::x1.{core::List::add}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:11:72: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x1. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0);
+                                                                       ^");
   self::x1.{core::List::add}(4);
   core::List<core::num> y = self::x1;
 }
 static method test2() → dynamic {
-  self::x2.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n  x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');\n                                                                       ^");
+  self::x2.{core::List::add}(let final dynamic #t3 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/list_literals_top_level.dart:18:72: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+  x2. /*@target=List::add*/ add(/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi');
+                                                                       ^");
   self::x2.{core::List::add}(4.0);
   core::List<core::int> y = self::x2 as{TypeError} core::List<core::int>;
 }
diff --git a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
index 08b1d5d..1627953 100644
--- a/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/local_return_and_yield.dart.strong.expect
@@ -9,7 +9,10 @@
     return (core::int x) → core::int => x;
   }
   function b() → asy::Future<(core::int) → core::int> async {
-    return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\n    return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;\n                                   ^";
+    return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+    return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
+                                   ^";
   }
   function c() → core::Iterable<(core::int) → core::int> sync* {
     yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
index b8f2535..cd3c271 100644
--- a/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals.dart.strong.expect
@@ -5,17 +5,32 @@
 static method test1() → dynamic {
   core::Map<core::int, core::String> x = <core::int, core::String>{1: "x", 2: "y"};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                             ^", "w");
-  x.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';\n                                             ^", "u");
-  x.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                            ^");
+  x.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:12:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                             ^", "w");
+  x.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:14:46: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                             ^", "u");
+  x.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:15:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                            ^");
   core::Map<core::num, core::String> y = x;
 }
 static method test2() → dynamic {
   core::Map<core::num, core::Pattern> x = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
   x.{core::Map::[]=}(3, "z");
-  x.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                             ^", "w");
+  x.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:27:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+      /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                             ^", "w");
   x.{core::Map::[]=}(4.0, "u");
-  x.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.\n  x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                            ^");
+  x.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals.dart:29:61: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
+  x /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                            ^");
   core::Pattern p = null;
   x.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = x as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
index 8798304..8e54198 100644
--- a/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.strong.expect
@@ -6,16 +6,31 @@
 static field core::Map<core::num, core::Pattern> x2 = <core::num, core::Pattern>{1: "x", 2: "y", 3.0: core::RegExp::•(".")};
 static method test1() → dynamic {
   self::x1.{core::Map::[]=}(3, "z");
-  self::x1.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                                                  ^", "w");
-  self::x1.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';\n                                                                  ^", "u");
-  self::x1.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                             ^");
+  self::x1.{core::Map::[]=}(let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:14:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                  ^", "w");
+  self::x1.{core::Map::[]=}(let final dynamic #t2 = 4.0 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:15:67: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  x1 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 4.0] = 'u';
+                                                                  ^", "u");
+  self::x1.{core::Map::[]=}(3, let final dynamic #t3 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:16:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  x1 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                             ^");
   core::Map<core::num, core::String> y = self::x1;
 }
 static method test2() → dynamic {
   self::x2.{core::Map::[]=}(3, "z");
-  self::x2.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.\n  x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';\n                                                                  ^", "w");
+  self::x2.{core::Map::[]=}(let final dynamic #t4 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:27:67: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::num'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::num'.
+  x2 /*@target=Map::[]=*/ [/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ 'hi'] = 'w';
+                                                                  ^", "w");
   self::x2.{core::Map::[]=}(4.0, "u");
-  self::x2.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.\n  x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;\n                                                             ^");
+  self::x2.{core::Map::[]=}(3, let final dynamic #t5 = 42 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/map_literals_top_level.dart:29:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Pattern'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Pattern'.
+  x2 /*@target=Map::[]=*/ [3] = /*error:INVALID_ASSIGNMENT*/ 42;
+                                                             ^");
   core::Pattern p = null;
   self::x2.{core::Map::[]=}(2, p);
   core::Map<core::int, core::String> y = self::x2 as{TypeError} core::Map<core::int, core::String>;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
index e7f862e..2613be2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.direct.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
index e7f862e..2613be2 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1<int> {}
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
index f0f0486..7928f75 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.direct.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
index f0f0486..7928f75 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart.strong.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_outwards_4.dart:16:38: Error: 'A' can't implement both '#lib1::I<dynamic>' and '#lib1::I<dart.core::int>'
+class /*@error=AmbiguousSupertypes*/ A extends Object
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
index eb6188f..f3fb9a5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.direct.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
index eb6188f..f3fb9a5 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:15:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::int>' and '#lib1::I<dart.core::String, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
index fa0b39f..ba12e18 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.direct.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
index fa0b39f..ba12e18 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
@@ -26,5 +26,7 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'\nclass /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}\n                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:38: Error: 'A' can't implement both '#lib1::I<dynamic, dart.core::List<dynamic>>' and '#lib1::I<dart.core::List<dynamic>, dynamic>'
+class /*@error=AmbiguousSupertypes*/ A extends Object with M0, M1 {}
+                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index 1fd007a..89082f3 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -10,8 +10,14 @@
 }
 static method test5() → dynamic {
   self::A a1 = new self::A::•();
-  a1.{self::A::x} = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                                        ^";
+  a1.{self::A::x} = let final dynamic #t1 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:14:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  a1. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                                        ^";
   self::A a2 = new self::A::•();
-  a2.{self::A::x} = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";\n                                                        ^";
+  a2.{self::A::x} = let final dynamic #t2 = "hi" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/propagate_inference_transitively.dart:17:57: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  a2. /*@target=A::x*/ x = /*error:INVALID_ASSIGNMENT*/ \"hi\";
+                                                        ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
index e226c84..48cc6c8 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
@@ -7,7 +7,9 @@
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.\n  void set x() {}\n               ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.
+  void set x() {}
+               ^";
 }
 static method f(self::A a) → void {
   dynamic x = a.x = 0;
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
index 9441461..d34e8a8 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
@@ -7,7 +7,9 @@
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void
-    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.\n  void set x() {}\n               ^";
+    let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/property_set_bad_setter.dart:9:16: Error: A setter should have exactly one formal parameter.
+  void set x() {}
+               ^";
 }
 static method f(self::A a) → void {
   core::int x = a.{self::A::x} = 0;
diff --git a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
index 9deb7db..6b890da 100644
--- a/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/top_level_return_and_yield.dart.strong.expect
@@ -8,7 +8,10 @@
   return (core::int x) → core::int => x;
 }
 static method b() → asy::Future<(core::int) → core::int> async {
-  return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.\n  return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;\n                                 ^";
+  return let final dynamic #t1 = (dynamic x) → dynamic => x in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type '(dynamic) \u8594 dynamic' can't be assigned to a variable of type 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::FutureOr<(dart.core::int) \u8594 dart.core::int>'.
+  return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
+                                 ^";
 }
 static method c() → core::Iterable<(core::int) → core::int> sync* {
   yield(core::int x) → core::int => x;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index 1634538..75a5d90 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -14,7 +14,17 @@
     dynamic v5 = let final core::int #t1 = 0 in let final dynamic #t2 = self::f<dynamic>() in let final void #t3 = super.[]=(#t1, #t2) in #t2;
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.\n    var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());\n                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.\n    var /*@type=dynamic*/ v2 = super.bar;\n                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.\n    var /*@type=dynamic*/ v3 = super[0];\n                                    ^", "pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.\n    var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();\n                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.\n    var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();\n                                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/unresolved_super.dart:12:38: Error: Superclass has no method named 'foo'.
+    var /*@type=dynamic*/ v1 = super.foo(/*@typeArgs=dynamic*/ f());
+                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:13:38: Error: Superclass has no getter named 'bar'.
+    var /*@type=dynamic*/ v2 = super.bar;
+                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:14:37: Error: Superclass has no method named '[]'.
+    var /*@type=dynamic*/ v3 = super[0];
+                                    ^", "pkg/front_end/testcases/inference/unresolved_super.dart:15:38: Error: Superclass has no setter named 'bar'.
+    var /*@type=dynamic*/ v4 = super.bar = /*@typeArgs=dynamic*/ f();
+                                     ^", "pkg/front_end/testcases/inference/unresolved_super.dart:16:37: Error: Superclass has no method named '[]='.
+    var /*@type=dynamic*/ v5 = super[0] = /*@typeArgs=dynamic*/ f();
+                                    ^"]/* from null */;
 static method f<T extends core::Object>() → self::f::T
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
index 8e902ec..b23bd77 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
@@ -16,5 +16,11 @@
 static field dynamic c = () → dynamic => self::a.{self::A::f}<dynamic>(self::b);
 static field () → () → core::int d = () → () → core::int => self::a.{self::A::f}<() → core::int>(self::e);
 static field () → core::int e = () → core::int => self::a.{self::A::g}(self::d);
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ c = /*@returnType=dynamic*/ () =>\n                                                                  ^", "pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:67: Error: Can't infer the type of 'b': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>\n                                                                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:20:67: Error: Can't infer the type of 'c': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ c = /*@returnType=dynamic*/ () =>
+                                                                  ^", "pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:67: Error: Can't infer the type of 'b': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
+                                                                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
index e86a790..8c0e3f3 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.expect
@@ -11,5 +11,11 @@
 static field core::num d = self::c.call();
 static field () → core::double e = () → core::double => self::doubleValue.{core::double::+}(self::f);
 static field core::double f = self::e.call();
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a();\n                                                                  ^", "pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:67: Error: Can't infer the type of 'a': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>\n                                                                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a();
+                                                                  ^", "pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:67: Error: Can't infer the type of 'a': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>
+                                                                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
index 30acbb6..b5ea678 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
@@ -16,5 +16,11 @@
     : super self::A::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\n  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n                                                                    ^", "pkg/front_end/testcases/inference_new/field_inference_circularity.dart:19:69: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\n  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x;\n                                                                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:69: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+                                                                    ^", "pkg/front_end/testcases/inference_new/field_inference_circularity.dart:19:69: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x;
+                                                                    ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
index 6e772f2..8a74bfc 100644
--- a/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart.strong.expect
@@ -4,17 +4,29 @@
 
 static method test() → dynamic async {
   core::String s;
-  for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n  for (int x in /*@error=InvalidAssignment*/ s) {}\n                                             ^") {
+  for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
+  for (int x in /*@error=InvalidAssignment*/ s) {}
+                                             ^") {
     core::int x = #t1 as{TypeError} core::int;
   }
-  await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n  await for (int x in /*@error=InvalidAssignment*/ s) {}\n                                                   ^") {
+  await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
+  await for (int x in /*@error=InvalidAssignment*/ s) {}
+                                                   ^") {
     core::int x = #t3 as{TypeError} core::int;
   }
   core::int y;
-  for (final dynamic #t5 in let final dynamic #t6 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.\n  for (y in /*@error=InvalidAssignment*/ s) {}\n                                         ^") {
+  for (final dynamic #t5 in let final dynamic #t6 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
+  for (y in /*@error=InvalidAssignment*/ s) {}
+                                         ^") {
     y = #t5 as{TypeError} core::int;
   }
-  await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.\n  await for (y in /*@error=InvalidAssignment*/ s) {}\n                                               ^") {
+  await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
+  await for (y in /*@error=InvalidAssignment*/ s) {}
+                                               ^") {
     y = #t7 as{TypeError} core::int;
   }
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index 8d16152..665b8a5 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -34,10 +34,16 @@
     b = #t4 as{TypeError} self::B;
   }
   for (final self::A #t5 in iterable) {
-    i = let final dynamic #t6 = #t5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  for (i /*@error=InvalidAssignment*/ in iterable) {}\n                                      ^";
+    i = let final dynamic #t6 = #t5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  for (i /*@error=InvalidAssignment*/ in iterable) {}
+                                      ^";
   }
   await for (final self::A #t7 in stream) {
-    i = let final dynamic #t8 = #t7 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  await for (i /*@error=InvalidAssignment*/ in stream) {}\n                                            ^";
+    i = let final dynamic #t8 = #t7 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  await for (i /*@error=InvalidAssignment*/ in stream) {}
+                                            ^";
   }
   for (final self::A #t9 in self::f<core::Iterable<self::A>>()) {
     a = #t9;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index a5de1b6..d51204e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -59,11 +59,20 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();\n                                                             ^" in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = super.{self::Base::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:55:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+    var /*@type=int*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
+                                                             ^" in let final void #t80 = super.{self::Base::[]=}(#t77, #t78) in #t78;
     core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = super.{self::Base::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = super.{self::Base::[]=}(#t81, #t82) in #t82;
     core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = super.{self::Base::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = super.{self::Base::[]=}(#t84, #t85) in #t85;
-    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = super.{self::Base::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];\n                            ^" in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
-    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;\n                                                             ^") in #t92;
+    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = super.{self::Base::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:58:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+    var /*@type=int*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
+                            ^" in let final void #t90 = super.{self::Base::[]=}(#t87, #t88) in #t88;
+    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = super.{self::Base::[]}(#t91) in let final void #t93 = super.{self::Base::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:59:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+    var /*@type=int*/ v11 = super /*@target=Base::[]=*/ ['x']++;
+                                                             ^") in #t92;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::double v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
@@ -132,10 +141,22 @@
     core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = super.{self::Base::[]=}(#t189, #t190) in #t190;
     core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = super.{self::Base::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = super.{self::Base::[]=}(#t192, #t194) in #t194 : #t193;
     core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = super.{self::Base::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = super.{self::Base::[]=}(#t196, #t198) in #t198 : #t197;
-    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();\n                                                                ^" in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
-    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();\n                                                                ^" in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
-    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = super.{self::Base::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];\n                               ^" in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
-    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;\n                                                                ^") in #t213;
+    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = super.{self::Base::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:112:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v7 = super /*@target=Base::[]=*/ ['x'] += getInt();
+                                                                ^" in let final void #t203 = super.{self::Base::[]=}(#t200, #t201) in #t201;
+    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = super.{self::Base::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:113:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v8 = super /*@target=Base::[]=*/ ['x'] += getNum();
+                                                                ^" in let final void #t207 = super.{self::Base::[]=}(#t204, #t205) in #t205;
+    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = super.{self::Base::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:114:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v10 = ++super /*@target=Base::[]=*/ ['x'];
+                               ^" in let final void #t211 = super.{self::Base::[]=}(#t208, #t209) in #t209;
+    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = super.{self::Base::[]}(#t212) in let final void #t214 = super.{self::Base::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart:115:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v11 = super /*@target=Base::[]=*/ ['x']++;
+                                                                ^") in #t213;
   }
   abstract forwarding-stub operator []=(core::String s, generic-covariant-impl core::int v) → void;
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index 055146e..1905286 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -50,11 +50,20 @@
     core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = this.{self::Test3::[]=}(#t66, #t67) in #t67;
     core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = this.{self::Test3::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() as{TypeError} core::double in let final void #t72 = this.{self::Test3::[]=}(#t69, #t71) in #t71 : #t70;
     core::num v6 = let final core::String #t73 = "x" in let final core::int #t74 = this.{self::Test3::[]}(#t73) in #t74.{core::num::==}(null) ?{core::num} let final core::double #t75 = self::getDouble() in let final void #t76 = this.{self::Test3::[]=}(#t73, #t75) in #t75 : #t74;
-    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();\n                                                             ^" in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
+    core::int v7 = let final core::String #t77 = "x" in let final core::int #t78 = let final dynamic #t79 = this.{self::Test3::[]}(#t77).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:56:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+    var /*@type=int*/ v7 = this /*@target=Test3::[]=*/ ['x'] += getInt();
+                                                             ^" in let final void #t80 = this.{self::Test3::[]=}(#t77, #t78) in #t78;
     core::num v8 = let final core::String #t81 = "x" in let final core::num #t82 = this.{self::Test3::[]}(#t81).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t83 = this.{self::Test3::[]=}(#t81, #t82) in #t82;
     core::double v9 = let final core::String #t84 = "x" in let final core::double #t85 = this.{self::Test3::[]}(#t84).{core::num::+}(self::getDouble()) in let final void #t86 = this.{self::Test3::[]=}(#t84, #t85) in #t85;
-    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = this.{self::Test3::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];\n                            ^" in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
-    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n    var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;\n                                                             ^") in #t92;
+    core::int v10 = let final core::String #t87 = "x" in let final core::int #t88 = let final dynamic #t89 = this.{self::Test3::[]}(#t87).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:59:29: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+    var /*@type=int*/ v10 = ++this /*@target=Test3::[]=*/ ['x'];
+                            ^" in let final void #t90 = this.{self::Test3::[]=}(#t87, #t88) in #t88;
+    core::int v11 = let final core::String #t91 = "x" in let final core::int #t92 = this.{self::Test3::[]}(#t91) in let final void #t93 = this.{self::Test3::[]=}(#t91, let final dynamic #t94 = #t92.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:60:62: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+    var /*@type=int*/ v11 = this /*@target=Test3::[]=*/ ['x']++;
+                                                             ^") in #t92;
   }
 }
 abstract class Test4 extends core::Object {
@@ -123,10 +132,22 @@
     core::num v2 = let final core::String #t189 = "x" in let final core::num #t190 = self::getNum() as{TypeError} core::int in let final void #t191 = this.{self::Test7::[]=}(#t189, #t190) in #t190;
     core::num v4 = let final core::String #t192 = "x" in let final core::double #t193 = this.{self::Test7::[]}(#t192) in #t193.{core::num::==}(null) ?{core::num} let final core::int #t194 = self::getInt() in let final void #t195 = this.{self::Test7::[]=}(#t192, #t194) in #t194 : #t193;
     core::num v5 = let final core::String #t196 = "x" in let final core::double #t197 = this.{self::Test7::[]}(#t196) in #t197.{core::num::==}(null) ?{core::num} let final core::num #t198 = self::getNum() as{TypeError} core::int in let final void #t199 = this.{self::Test7::[]=}(#t196, #t198) in #t198 : #t197;
-    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();\n                                                                ^" in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
-    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();\n                                                                ^" in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
-    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = this.{self::Test7::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];\n                               ^" in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
-    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n    var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;\n                                                                ^") in #t213;
+    core::double v7 = let final core::String #t200 = "x" in let final core::double #t201 = let final dynamic #t202 = this.{self::Test7::[]}(#t200).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:125:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v7 = this /*@target=Test7::[]=*/ ['x'] += getInt();
+                                                                ^" in let final void #t203 = this.{self::Test7::[]=}(#t200, #t201) in #t201;
+    core::double v8 = let final core::String #t204 = "x" in let final core::double #t205 = let final dynamic #t206 = this.{self::Test7::[]}(#t204).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:126:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v8 = this /*@target=Test7::[]=*/ ['x'] += getNum();
+                                                                ^" in let final void #t207 = this.{self::Test7::[]=}(#t204, #t205) in #t205;
+    core::double v10 = let final core::String #t208 = "x" in let final core::double #t209 = let final dynamic #t210 = this.{self::Test7::[]}(#t208).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:127:32: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v10 = ++this /*@target=Test7::[]=*/ ['x'];
+                               ^" in let final void #t211 = this.{self::Test7::[]=}(#t208, #t209) in #t209;
+    core::double v11 = let final core::String #t212 = "x" in let final core::double #t213 = this.{self::Test7::[]}(#t212) in let final void #t214 = this.{self::Test7::[]=}(#t212, let final dynamic #t215 = #t213.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart:128:65: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+    var /*@type=double*/ v11 = this /*@target=Test7::[]=*/ ['x']++;
+                                                                ^") in #t213;
   }
 }
 abstract class Test8 extends core::Object {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index b758276..7be767f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -43,11 +43,20 @@
   core::double v3 = let final self::Test<core::int, core::double> #t86 = t in let final core::String #t87 = "x" in let final core::double #t88 = self::getDouble() in let final void #t89 = #t86.{self::Test::[]=}(#t87, #t88) in #t88;
   core::num v5 = let final self::Test<core::int, core::double> #t90 = t in let final core::String #t91 = "x" in let final core::int #t92 = #t90.{self::Test::[]}(#t91) in #t92.{core::num::==}(null) ?{core::num} let final core::num #t93 = self::getNum() as{TypeError} core::double in let final void #t94 = #t90.{self::Test::[]=}(#t91, #t93) in #t93 : #t92;
   core::num v6 = let final self::Test<core::int, core::double> #t95 = t in let final core::String #t96 = "x" in let final core::int #t97 = #t95.{self::Test::[]}(#t96) in #t97.{core::num::==}(null) ?{core::num} let final core::double #t98 = self::getDouble() in let final void #t99 = #t95.{self::Test::[]=}(#t96, #t98) in #t98 : #t97;
-  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final dynamic #t103 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n  var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();\n                                                       ^" in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
+  core::int v7 = let final self::Test<core::int, core::double> #t100 = t in let final core::String #t101 = "x" in let final core::int #t102 = let final dynamic #t103 = #t100.{self::Test::[]}(#t101).{core::num::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:47:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+  var /*@type=int*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
+                                                       ^" in let final void #t104 = #t100.{self::Test::[]=}(#t101, #t102) in #t102;
   core::num v8 = let final self::Test<core::int, core::double> #t105 = t in let final core::String #t106 = "x" in let final core::num #t107 = #t105.{self::Test::[]}(#t106).{core::num::+}(self::getNum()) as{TypeError} core::double in let final void #t108 = #t105.{self::Test::[]=}(#t106, #t107) in #t107;
   core::double v9 = let final self::Test<core::int, core::double> #t109 = t in let final core::String #t110 = "x" in let final core::double #t111 = #t109.{self::Test::[]}(#t110).{core::num::+}(self::getDouble()) in let final void #t112 = #t109.{self::Test::[]=}(#t110, #t111) in #t111;
-  core::int v10 = let final self::Test<core::int, core::double> #t113 = t in let final core::String #t114 = "x" in let final core::int #t115 = let final dynamic #t116 = #t113.{self::Test::[]}(#t114).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n  var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];\n                          ^" in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
-  core::int v11 = let final self::Test<core::int, core::double> #t118 = t in let final core::String #t119 = "x" in let final core::int #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final dynamic #t122 = #t120.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.\n  var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;\n                                                       ^") in #t120;
+  core::int v10 = let final self::Test<core::int, core::double> #t113 = t in let final core::String #t114 = "x" in let final core::int #t115 = let final dynamic #t116 = #t113.{self::Test::[]}(#t114).{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:50:27: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+  var /*@type=int*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
+                          ^" in let final void #t117 = #t113.{self::Test::[]=}(#t114, #t115) in #t115;
+  core::int v11 = let final self::Test<core::int, core::double> #t118 = t in let final core::String #t119 = "x" in let final core::int #t120 = #t118.{self::Test::[]}(#t119) in let final void #t121 = #t118.{self::Test::[]=}(#t119, let final dynamic #t122 = #t120.{core::num::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:51:56: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::double'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::double'.
+  var /*@type=int*/ v11 = t /*@target=Test::[]=*/ ['x']++;
+                                                       ^") in #t120;
 }
 static method test4(self::Test<core::num, core::int> t) → void {
   core::int v1 = let final self::Test<core::num, core::int> #t123 = t in let final core::String #t124 = "x" in let final core::int #t125 = self::getInt() in let final void #t126 = #t123.{self::Test::[]=}(#t124, #t125) in #t125;
@@ -88,10 +97,22 @@
   core::num v2 = let final self::Test<core::double, core::int> #t246 = t in let final core::String #t247 = "x" in let final core::num #t248 = self::getNum() as{TypeError} core::int in let final void #t249 = #t246.{self::Test::[]=}(#t247, #t248) in #t248;
   core::num v4 = let final self::Test<core::double, core::int> #t250 = t in let final core::String #t251 = "x" in let final core::double #t252 = #t250.{self::Test::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::int #t253 = self::getInt() in let final void #t254 = #t250.{self::Test::[]=}(#t251, #t253) in #t253 : #t252;
   core::num v5 = let final self::Test<core::double, core::int> #t255 = t in let final core::String #t256 = "x" in let final core::double #t257 = #t255.{self::Test::[]}(#t256) in #t257.{core::num::==}(null) ?{core::num} let final core::num #t258 = self::getNum() as{TypeError} core::int in let final void #t259 = #t255.{self::Test::[]=}(#t256, #t258) in #t258 : #t257;
-  core::double v7 = let final self::Test<core::double, core::int> #t260 = t in let final core::String #t261 = "x" in let final core::double #t262 = let final dynamic #t263 = #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();\n                                                          ^" in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
-  core::double v8 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = let final dynamic #t268 = #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();\n                                                          ^" in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
-  core::double v10 = let final self::Test<core::double, core::int> #t270 = t in let final core::String #t271 = "x" in let final core::double #t272 = let final dynamic #t273 = #t270.{self::Test::[]}(#t271).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];\n                             ^" in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
-  core::double v11 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final dynamic #t279 = #t277.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;\n                                                          ^") in #t277;
+  core::double v7 = let final self::Test<core::double, core::int> #t260 = t in let final core::String #t261 = "x" in let final core::double #t262 = let final dynamic #t263 = #t260.{self::Test::[]}(#t261).{core::double::+}(self::getInt()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:96:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  var /*@type=double*/ v7 = t /*@target=Test::[]=*/ ['x'] += getInt();
+                                                          ^" in let final void #t264 = #t260.{self::Test::[]=}(#t261, #t262) in #t262;
+  core::double v8 = let final self::Test<core::double, core::int> #t265 = t in let final core::String #t266 = "x" in let final core::double #t267 = let final dynamic #t268 = #t265.{self::Test::[]}(#t266).{core::double::+}(self::getNum()) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:97:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  var /*@type=double*/ v8 = t /*@target=Test::[]=*/ ['x'] += getNum();
+                                                          ^" in let final void #t269 = #t265.{self::Test::[]=}(#t266, #t267) in #t267;
+  core::double v10 = let final self::Test<core::double, core::int> #t270 = t in let final core::String #t271 = "x" in let final core::double #t272 = let final dynamic #t273 = #t270.{self::Test::[]}(#t271).{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:98:30: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  var /*@type=double*/ v10 = ++t /*@target=Test::[]=*/ ['x'];
+                             ^" in let final void #t274 = #t270.{self::Test::[]=}(#t271, #t272) in #t272;
+  core::double v11 = let final self::Test<core::double, core::int> #t275 = t in let final core::String #t276 = "x" in let final core::double #t277 = #t275.{self::Test::[]}(#t276) in let final void #t278 = #t275.{self::Test::[]=}(#t276, let final dynamic #t279 = #t277.{core::double::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart:99:59: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  var /*@type=double*/ v11 = t /*@target=Test::[]=*/ ['x']++;
+                                                          ^") in #t277;
 }
 static method test8(self::Test<core::double, core::num> t) → void {
   core::int v1 = let final self::Test<core::double, core::num> #t280 = t in let final core::String #t281 = "x" in let final core::int #t282 = self::getInt() in let final void #t283 = #t280.{self::Test::[]=}(#t281, #t282) in #t282;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index c5411ae..c9f0f9a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -17,8 +17,20 @@
     : super core::Object::•()
     ;
 }
-static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = #t1.{self::B::a}.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);\n                                    ^";
-static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final dynamic #t4 = #t3.{self::B::a}.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);\n                                       ^";
-static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final dynamic #t8 = #t6.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);\n                                                              ^" in #t6;
-static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final dynamic #t12 = #t10.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::A'.\nvar /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);\n                                                              ^" in #t10;
+static field core::int v_prefix_pp = let final self::B #t1 = new self::B::•() in #t1.{self::B::a} = let final dynamic #t2 = #t1.{self::B::a}.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:17:37: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=int*/ v_prefix_pp = (++new B(). /*@target=B::a*/ a);
+                                    ^";
+static field core::double v_prefix_mm = let final self::B #t3 = new self::B::•() in #t3.{self::B::a} = let final dynamic #t4 = #t3.{self::B::a}.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:18:40: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=double*/ v_prefix_mm = (--new B(). /*@target=B::a*/ a);
+                                       ^";
+static field self::A v_postfix_pp = let final self::B #t5 = new self::B::•() in let final self::A #t6 = #t5.{self::B::a} in let final core::int #t7 = #t5.{self::B::a} = let final dynamic #t8 = #t6.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:19:63: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=A*/ v_postfix_pp = (new B(). /*@target=B::a*/ a++);
+                                                              ^" in #t6;
+static field self::A v_postfix_mm = let final self::B #t9 = new self::B::•() in let final self::A #t10 = #t9.{self::B::a} in let final core::double #t11 = #t9.{self::B::a} = let final dynamic #t12 = #t10.{self::A::-}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart:20:63: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::A'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::A'.
+var /*@topType=A*/ v_postfix_mm = (new B(). /*@target=B::a*/ a--);
+                                                              ^" in #t10;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
index 1425513..192bdbe 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
@@ -12,5 +12,11 @@
 static field self::A a = new self::A::•();
 static field dynamic x = () → dynamic => self::a.{self::A::b};
 static field () → () → dynamic y = () → () → dynamic => self::a.{self::A::c};
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.\nSpecify the type explicitly.\n  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>\n                                                                    ^", "pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n                                                                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:69: Error: Can't infer the type of 'b': circularity found during type inference.
+Specify the type explicitly.
+  var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = /*@returnType=dynamic*/ () =>
+                                                                    ^", "pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+                                                                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
index 6a1582a..517380a 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.strong.expect
@@ -4,5 +4,8 @@
 
 static field core::int i;
 static field core::String s;
-static field core::String x = self::i = let final dynamic #t1 = self::s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\nvar /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;\n                                                             ^";
+static field core::String x = self::i = let final dynamic #t1 = self::s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart:9:62: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+var /*@topType=String*/ x = i = /*@error=InvalidAssignment*/ s;
+                                                             ^";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
index a51da21..7f9a899 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.strong.expect
@@ -5,7 +5,13 @@
 static field dynamic x = () → dynamic => self::f() ?{dynamic} self::y : self::z;
 static field dynamic y = () → dynamic => self::x;
 static field () → dynamic z = () → dynamic => self::x;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>\n                                                                  ^", "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.\nSpecify the type explicitly.\nvar /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>\n                                                                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference_new/strongly_connected_component.dart:19:67: Error: Can't infer the type of 'y': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ y = /*@returnType=dynamic*/ () =>
+                                                                  ^", "pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:67: Error: Can't infer the type of 'x': circularity found during type inference.
+Specify the type explicitly.
+var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ x = /*@returnType=dynamic*/ () =>
+                                                                  ^"]/* from null */;
 static method f() → core::bool
   return null;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
index 6a927d8..c3b6891 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
@@ -8,5 +8,7 @@
     ;
 }
 static field self::B<core::Comparable<dynamic>> y = new self::B::•<core::Comparable<dynamic>>();
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.\nvar y = new B();\n            ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.
+var y = new B();
+            ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index 964488f..3d764da 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -11,10 +11,19 @@
 }
 static method test(core::int i, core::String s, self::A a) → dynamic {
   i = 1;
-  i = let final dynamic #t1 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  i = /*@error=InvalidAssignment*/ s;\n                                   ^";
+  i = let final dynamic #t1 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:13:36: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  i = /*@error=InvalidAssignment*/ s;
+                                   ^";
   i.{core::num::==}(null) ?{core::int} i = 1 : null;
-  i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.\n  i ??= /*@error=InvalidAssignment*/ s;\n                                     ^" : null;
+  i.{core::num::==}(null) ?{core::Object} i = let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:15:38: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
+  i ??= /*@error=InvalidAssignment*/ s;
+                                     ^" : null;
   a = new self::A::•();
-  a = let final dynamic #t3 = a.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.\nTry changing the type of the left hand side, or casting the right hand side to '#lib1::A'.\n  a /*@error=InvalidAssignment*/ += 1;\n                                 ^";
+  a = let final dynamic #t3 = a.{self::A::+}(1) in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_assignment.dart:17:34: Error: A value of type 'dart.core::String' can't be assigned to a variable of type '#lib1::A'.
+Try changing the type of the left hand side, or casting the right hand side to '#lib1::A'.
+  a /*@error=InvalidAssignment*/ += 1;
+                                 ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
index b1bc2fc..502c68ac 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -27,17 +27,44 @@
 static method topLevelFunction(core::int i) → void {}
 static method bad() → dynamic {
   function localFunction(core::int i) → void {}
-  core::List<core::int> a = let final dynamic #t1 = <core::Object>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.\nChange the type of the list literal or the context in which it is used.\n  List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];\n                                                           ^";
-  core::Map<core::int, core::String> b = let final dynamic #t2 = <core::Object, core::String>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n  Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};\n                                                                         ^";
-  core::Map<core::int, core::String> c = let final dynamic #t3 = <core::int, core::Object>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.\nChange the type of the map literal or the context in which it is used.\n  Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};\n                                                                      ^";
-  (core::Object) → core::int d = let final dynamic #t4 = (core::int i) → core::int => i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.\nChange the type of the function expression or the context in which it is used.\n  int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;\n                                                              ^";
+  core::List<core::int> a = let final dynamic #t1 = <core::Object>[] in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:22:60: Error: The list literal type 'dart.core::List<dart.core::Object>' isn't of expected type 'dart.core::List<dart.core::int>'.
+Change the type of the list literal or the context in which it is used.
+  List<int> a = <Object> /*@error=InvalidCastLiteralList*/ [];
+                                                           ^";
+  core::Map<core::int, core::String> b = let final dynamic #t2 = <core::Object, core::String>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:23:74: Error: The map literal type 'dart.core::Map<dart.core::Object, dart.core::String>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+  Map<int, String> b = <Object, String> /*@error=InvalidCastLiteralMap*/ {};
+                                                                         ^";
+  core::Map<core::int, core::String> c = let final dynamic #t3 = <core::int, core::Object>{} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:24:71: Error: The map literal type 'dart.core::Map<dart.core::int, dart.core::Object>' isn't of expected type 'dart.core::Map<dart.core::int, dart.core::String>'.
+Change the type of the map literal or the context in which it is used.
+  Map<int, String> c = <int, Object> /*@error=InvalidCastLiteralMap*/ {};
+                                                                      ^";
+  (core::Object) → core::int d = let final dynamic #t4 = (core::int i) → core::int => i in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:25:63: Error: The function expression type '(dart.core::int) \u8594 dart.core::int' isn't of expected type '(dart.core::Object) \u8594 dart.core::int'.
+Change the type of the function expression or the context in which it is used.
+  int Function(Object) d = /*@error=InvalidCastFunctionExpr*/ (int i) => i;
+                                                              ^";
   self::D e = self::C::fact() as{TypeError} self::D;
   self::D f = new self::D::•() as{TypeError} self::D;
-  self::D g = let final dynamic #t5 = new self::C::nonFact() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.\nChange the type of the object being constructed or the context in which it is used.\n  D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();\n                                          ^";
-  self::D h = let final dynamic #t6 = new self::C::nonFact2() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.\nChange the type of the object being constructed or the context in which it is used.\n  D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();\n                                          ^";
-  (core::Object) → void i = let final dynamic #t7 = self::C::staticFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.\nChange the type of the method or the context in which it is used.\n      C. /*@error=InvalidCastStaticMethod*/ staticFunction;\n                                            ^";
-  (core::Object) → void j = let final dynamic #t8 = self::topLevelFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.\nChange the type of the function or the context in which it is used.\n      j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;\n                                                 ^";
-  (core::Object) → void k = let final dynamic #t9 = localFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.\nChange the type of the function or the context in which it is used.\n  void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;\n                                                                ^";
+  self::D g = let final dynamic #t5 = new self::C::nonFact() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:28:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+Change the type of the object being constructed or the context in which it is used.
+  D g = new /*@error=InvalidCastNewExpr*/ C.nonFact();
+                                          ^";
+  self::D h = let final dynamic #t6 = new self::C::nonFact2() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:29:43: Error: The constructor returns type '#lib1::C' that isn't of expected type '#lib1::D'.
+Change the type of the object being constructed or the context in which it is used.
+  D h = new /*@error=InvalidCastNewExpr*/ C.nonFact2();
+                                          ^";
+  (core::Object) → void i = let final dynamic #t7 = self::C::staticFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:31:45: Error: The static method has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+Change the type of the method or the context in which it is used.
+      C. /*@error=InvalidCastStaticMethod*/ staticFunction;
+                                            ^";
+  (core::Object) → void j = let final dynamic #t8 = self::topLevelFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:33:50: Error: The top level function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+Change the type of the function or the context in which it is used.
+      j = /*@error=InvalidCastTopLevelFunction*/ topLevelFunction;
+                                                 ^";
+  (core::Object) → void k = let final dynamic #t9 = localFunction in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/invalid_cast.dart:34:65: Error: The local function has type '(dart.core::int) \u8594 void' that isn't of expected type '(dart.core::Object) \u8594 void'.
+Change the type of the function or the context in which it is used.
+  void Function(Object) k = /*@error=InvalidCastLocalFunction*/ localFunction;
+                                                                ^";
 }
 static method ok() → dynamic {
   function localFunction(core::int i) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
index 680ce86..7cab6c0 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
@@ -44,5 +44,11 @@
   get y() → self::A
     return null;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).\nChange to a subtype of #lib1::B.\n  A get /*@error=OverrideTypeMismatchReturnType*/ y => null;\n                                                  ^", "pkg/front_end/testcases/override_check_accessor_after_inference.dart:27:57: Error: The parameter 'value' of the method 'F::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}\n                                                        ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_after_inference.dart:28:51: Error: The return type of the method 'F::y' is #lib1::A, which does not match the return type of the overridden method (#lib1::B).
+Change to a subtype of #lib1::B.
+  A get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+                                                  ^", "pkg/front_end/testcases/override_check_accessor_after_inference.dart:27:57: Error: The parameter 'value' of the method 'F::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+                                                        ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
index 39e3d95..944f780 100644
--- a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
@@ -36,5 +36,11 @@
   get y() → core::Object
     return null;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).\nChange to a subtype of #lib1::A.\n  Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;\n                                                       ^", "pkg/front_end/testcases/override_check_accessor_basic.dart:22:57: Error: The parameter 'value' of the method 'E::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}\n                                                        ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_basic.dart:23:56: Error: The return type of the method 'E::y' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
+Change to a subtype of #lib1::A.
+  Object get /*@error=OverrideTypeMismatchReturnType*/ y => null;
+                                                       ^", "pkg/front_end/testcases/override_check_accessor_basic.dart:22:57: Error: The parameter 'value' of the method 'E::x' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void set x(B /*@error=OverrideTypeMismatchParameter*/ value) {}
+                                                        ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
index 9502e43..2790cab 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
@@ -34,5 +34,11 @@
   set x5(covariant core::String value) → void {}
   set x6(covariant self::A value) → void {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n      B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant\n                                                 ^", "pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:27:65: Error: The parameter 'value' of the method 'D::x5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n      covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}\n                                                                ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:25:50: Error: The parameter 'value' of the method 'D::x4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+      B /*@error=OverrideTypeMismatchParameter*/ value) {} // Not covariant
+                                                 ^", "pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart:27:65: Error: The parameter 'value' of the method 'D::x5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+      covariant String /*@error=OverrideTypeMismatchParameter*/ value) {}
+                                                                ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
index f95d0be..507e18b 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
@@ -36,5 +36,8 @@
     ;
   method f(self::B x) → void {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_after_inference.dart:24:53: Error: The parameter 'x' of the method 'F::f' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void f(B /*@error=OverrideTypeMismatchParameter*/ x) {}\n                                                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_after_inference.dart:24:53: Error: The parameter 'x' of the method 'F::f' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void f(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+                                                    ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
index 7ca80f6..31a1120 100644
--- a/pkg/front_end/testcases/override_check_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
@@ -39,5 +39,17 @@
   method f3({self::B x = null}) → void {}
   method f4() → core::Object {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).\nChange to a subtype of #lib1::A.\n  Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}\n                                                   ^", "pkg/front_end/testcases/override_check_basic.dart:28:55: Error: The parameter 'x' of the method 'E::f3' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}\n                                                      ^", "pkg/front_end/testcases/override_check_basic.dart:26:54: Error: The parameter 'x' of the method 'E::f1' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}\n                                                     ^", "pkg/front_end/testcases/override_check_basic.dart:27:55: Error: The parameter 'x' of the method 'E::f2' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}\n                                                      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_basic.dart:29:52: Error: The return type of the method 'E::f4' is dart.core::Object, which does not match the return type of the overridden method (#lib1::A).
+Change to a subtype of #lib1::A.
+  Object /*@error=OverrideTypeMismatchReturnType*/ f4() {}
+                                                   ^", "pkg/front_end/testcases/override_check_basic.dart:28:55: Error: The parameter 'x' of the method 'E::f3' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void f3({B /*@error=OverrideTypeMismatchParameter*/ x}) {}
+                                                      ^", "pkg/front_end/testcases/override_check_basic.dart:26:54: Error: The parameter 'x' of the method 'E::f1' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void f1(B /*@error=OverrideTypeMismatchParameter*/ x) {}
+                                                     ^", "pkg/front_end/testcases/override_check_basic.dart:27:55: Error: The parameter 'x' of the method 'E::f2' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void f2([B /*@error=OverrideTypeMismatchParameter*/ x]) {}
+                                                      ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
index a4ef49c..100a773 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
@@ -34,5 +34,11 @@
   method f5(covariant core::String x) → void {}
   method f6(covariant self::A x) → void {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_with_covariant_modifier.dart:25:69: Error: The parameter 'x' of the method 'D::f5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void f5(covariant String /*@error=OverrideTypeMismatchParameter*/ x) {}\n                                                                    ^", "pkg/front_end/testcases/override_check_with_covariant_modifier.dart:24:54: Error: The parameter 'x' of the method 'D::f4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).\nChange to a supertype of #lib1::A (or, for a covariant parameter, a subtype).\n  void f4(B /*@error=OverrideTypeMismatchParameter*/ x) {} // Not covariant\n                                                     ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/override_check_with_covariant_modifier.dart:25:69: Error: The parameter 'x' of the method 'D::f5' has type dart.core::String, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void f5(covariant String /*@error=OverrideTypeMismatchParameter*/ x) {}
+                                                                    ^", "pkg/front_end/testcases/override_check_with_covariant_modifier.dart:24:54: Error: The parameter 'x' of the method 'D::f4' has type #lib1::B, which does not match the corresponding type in the overridden method (#lib1::A).
+Change to a supertype of #lib1::A (or, for a covariant parameter, a subtype).
+  void f4(B /*@error=OverrideTypeMismatchParameter*/ x) {} // Not covariant
+                                                     ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index 79c595d..07abef7 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -25,7 +25,9 @@
   static factory b<T extends core::Object>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.\nclass Bad extends lib.Missing {\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.
+class Bad extends lib.Missing {
+      ^"]/* from null */;
 static method main() → dynamic {
   new self::C::•<core::String>();
   new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index 6f5c8a1..79b0cfb 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -25,7 +25,11 @@
   static factory b<T extends core::Object>() → self::C<self::C::b::T>
     let dynamic #redirecting_factory = lib::C::b in let self::C::b::T #typeArg0 = null in invalid-expression;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.\n  lib.Missing method() {}\n  ^", "pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.\nclass Bad extends lib.Missing {\n      ^", "pkg/front_end/testcases/qualified.dart: Error: Couldn't find constructor 'WrongName'."]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
+  lib.Missing method() {}
+  ^", "pkg/front_end/testcases/qualified.dart:11:7: Error: The type 'lib.Missing' can't be used as supertype.
+class Bad extends lib.Missing {
+      ^", "pkg/front_end/testcases/qualified.dart: Error: Couldn't find constructor 'WrongName'."]/* from null */;
 static method main() → dynamic {
   new self::C::•<core::String>();
   new self::C::a<core::String>();
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
index a3bb321..0f7997f 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.direct.expect
@@ -1,5 +1,7 @@
 library;
 import self as self;
 
-@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.\n@JS()\n ^"
+@invalid-expression "pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
+@JS()
+ ^"
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
index 67cc740..c20357f 100644
--- a/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/malformed_function_type.dart.direct.expect
@@ -3,7 +3,9 @@
 import "dart:core" as core;
 
 typedef Handle = (core::String) → dynamic;
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.\ntypedef Handle Handle(String command);\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/malformed_function_type.dart:5:16: Error: The typedef 'Handle' has a reference to itself.
+typedef Handle Handle(String command);
+               ^"]/* from null */;
 static method main() → dynamic {
   (core::String) → dynamic h;
 }
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 514b8d0..655bd55 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -23,7 +23,9 @@
   method publicMethod() → dynamic
     return this.{self::Mixin::_privateMethod}();
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n  foo() => super.foo() + f();\n                 ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+  foo() => super.foo() + f();
+                 ^"]/* from null */;
 static method f() → dynamic
   return 2;
 static method V() → dynamic
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 45abd32..ad45ff5 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -51,8 +51,20 @@
     self::use(super.{self::A::~}());
     super.{self::A::unary-}();
     self::use(super.{self::A::unary-}());
-    (let final dynamic #t1 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: The getter '' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named ''.\n    +super;\n    ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n    +super;\n     ^");
-    self::use((let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: The getter '' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named ''.\n    use(+super);\n        ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n    use(+super);\n         ^"));
+    (let final dynamic #t1 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:5: Error: The getter '' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
+    +super;
+    ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:43:6: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    +super;
+     ^");
+    self::use((let final dynamic #t2 = this in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:9: Error: The getter '' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named ''.
+    use(+super);
+        ^").+(invalid-expression "pkg/front_end/testcases/rasta/super.dart:44:10: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    use(+super);
+         ^"));
     super.{self::A::==}(87);
     self::use(super.{self::A::==}(87));
     !super.{self::A::==}(87);
@@ -101,10 +113,22 @@
     self::use(let final dynamic #t19 = super.{self::A::i} in let final dynamic #t20 = super.{self::B::i} = #t19.+(1) in #t19);
     let final core::int #t21 = 87 in super.{self::A::[]=}(#t21, super.{self::A::[]}(#t21).+(1));
     self::use(let final core::int #t22 = 87 in let final dynamic #t23 = super.{self::A::[]}(#t22) in let final void #t24 = super.{self::A::[]=}(#t22, #t23.+(1)) in #t23);
-    super.m = let final dynamic #t25 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    super.m++;\n           ^";
-    self::use(let final () → void #t26 = super.{self::A::m} in let final dynamic #t27 = super.m = let final dynamic #t28 = #t26 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(super.m++);\n               ^" in #t26);
-    super.{self::A::n} = let final dynamic #t29 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    super.n++;\n           ^";
-    self::use(let final () → void #t30 = super.{self::A::n} in let final dynamic #t31 = super.{self::A::n} = let final dynamic #t32 = #t30 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(super.n++);\n               ^" in #t30);
+    super.m = let final dynamic #t25 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m++;
+           ^";
+    self::use(let final () → void #t26 = super.{self::A::m} in let final dynamic #t27 = super.m = let final dynamic #t28 = #t26 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(super.m++);
+               ^" in #t26);
+    super.{self::A::n} = let final dynamic #t29 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.n++;
+           ^";
+    self::use(let final () → void #t30 = super.{self::A::n} in let final dynamic #t31 = super.{self::A::n} = let final dynamic #t32 = #t30 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(super.n++);
+               ^" in #t30);
     super.{self::A::a} = super.{self::A::a}.+(1);
     self::use(super.{self::A::a} = super.{self::A::a}.+(1));
     super.{self::A::b} = super.{self::B::b}.+(1);
@@ -125,10 +149,22 @@
     self::use(super.{self::B::i} = super.{self::A::i}.+(1));
     let final core::int #t33 = 87 in let final dynamic #t34 = super.{self::A::[]}(#t33).+(1) in let final void #t35 = super.{self::A::[]=}(#t33, #t34) in #t34;
     self::use(let final core::int #t36 = 87 in let final dynamic #t37 = super.{self::A::[]}(#t36).+(1) in let final void #t38 = super.{self::A::[]=}(#t36, #t37) in #t37);
-    super.m = let final dynamic #t39 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    ++super.m;\n    ^";
-    self::use(super.m = let final dynamic #t40 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(++super.m);\n        ^");
-    super.{self::A::n} = let final dynamic #t41 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    ++super.n;\n    ^";
-    self::use(super.{self::A::n} = let final dynamic #t42 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(++super.n);\n        ^");
+    super.m = let final dynamic #t39 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    ++super.m;
+    ^";
+    self::use(super.m = let final dynamic #t40 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(++super.m);
+        ^");
+    super.{self::A::n} = let final dynamic #t41 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    ++super.n;
+    ^";
+    self::use(super.{self::A::n} = let final dynamic #t42 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(++super.n);
+        ^");
     super.{self::A::a}.call();
     self::use(super.{self::A::a}.call());
     super.{self::B::b}.call();
@@ -223,10 +259,22 @@
     self::use(super.{self::B::i} = super.{self::A::i}.+(42));
     let final core::int #t64 = 87 in super.{self::A::[]=}(#t64, super.{self::A::[]}(#t64).+(42));
     self::use(let final core::int #t65 = 87 in let final dynamic #t66 = super.{self::A::[]}(#t65).+(42) in let final void #t67 = super.{self::A::[]=}(#t65, #t66) in #t66);
-    super.m = let final dynamic #t68 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    super.m += 42;\n            ^";
-    self::use(super.m = let final dynamic #t69 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(super.m += 42);\n                ^");
-    super.{self::A::n} = let final dynamic #t70 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    super.n += 42;\n            ^";
-    self::use(super.{self::A::n} = let final dynamic #t71 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(super.n += 42);\n                ^");
+    super.m = let final dynamic #t68 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m += 42;
+            ^";
+    self::use(super.m = let final dynamic #t69 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(super.m += 42);
+                ^");
+    super.{self::A::n} = let final dynamic #t70 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.n += 42;
+            ^";
+    self::use(super.{self::A::n} = let final dynamic #t71 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(super.n += 42);
+                ^");
     super.{self::A::a} = super.{self::A::a}.-(42);
     self::use(super.{self::A::a} = super.{self::A::a}.-(42));
     super.{self::A::b} = super.{self::B::b}.-(42);
@@ -247,13 +295,143 @@
     self::use(super.{self::B::i} = super.{self::A::i}.-(42));
     let final core::int #t72 = 87 in super.{self::A::[]=}(#t72, super.{self::A::[]}(#t72).-(42));
     self::use(let final core::int #t73 = 87 in let final dynamic #t74 = super.{self::A::[]}(#t73).-(42) in let final void #t75 = super.{self::A::[]=}(#t73, #t74) in #t74);
-    super.m = let final dynamic #t76 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    super.m -= 42;\n            ^";
-    self::use(super.m = let final dynamic #t77 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    use(super.m -= 42);\n                ^");
-    super.{self::A::n} = let final dynamic #t78 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    super.n -= 42;\n            ^";
-    self::use(super.{self::A::n} = let final dynamic #t79 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    use(super.n -= 42);\n                ^");
+    super.m = let final dynamic #t76 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+    super.m -= 42;
+            ^";
+    self::use(super.m = let final dynamic #t77 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+    use(super.m -= 42);
+                ^");
+    super.{self::A::n} = let final dynamic #t78 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+    super.n -= 42;
+            ^";
+    self::use(super.{self::A::n} = let final dynamic #t79 = super.{self::A::n} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+    use(super.n -= 42);
+                ^");
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.\nTry removing '+'.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:43:5: Error: Getter not found: ''.\n    +super;\n    ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.\nTry removing '+'.\n    use(+super);\n        ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: Getter not found: ''.\n    use(+super);\n        ^", "pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.\n    super.g;\n          ^", "pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.\n    use(super.g);\n              ^", "pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.\n    super.e++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.\n    use(super.e++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.\n    super.f++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.\n    use(super.f++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.\n    super.g++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.\n    use(super.g++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.\n    super.m++;\n          ^", "pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.\n    use(super.m++);\n              ^", "pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.\n    ++super.e;\n            ^", "pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.\n    use(++super.e);\n                ^", "pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.\n    ++super.f;\n            ^", "pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.\n    use(++super.f);\n                ^", "pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.\n    ++super.g;\n            ^", "pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.\n    use(++super.g);\n                ^", "pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.\n    ++super.m;\n            ^", "pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.\n    use(++super.m);\n                ^", "pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.\n    super.g();\n          ^", "pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.\n    use(super.g());\n              ^", "pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.\n    super.e = 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.\n    use(super.e = 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.\n    super.f = 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.\n    use(super.f = 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.\n    super.m = 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.\n    use(super.m = 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.\n    super.e ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.\n    use(super.e ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.\n    super.f ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.\n    use(super.f ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.\n    super.g ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.\n    use(super.g ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.\n    super.m ??= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.\n    use(super.m ??= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.\n    super.e += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.\n    use(super.e += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.\n    super.f += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.\n    use(super.f += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.\n    super.g += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.\n    use(super.g += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.\n    super.m += 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.\n    use(super.m += 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.\n    super.e -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.\n    use(super.e -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.\n    super.f -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.\n    use(super.f -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.\n    super.g -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.\n    use(super.g -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.\n    super.m -= 42;\n          ^", "pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.\n    use(super.m -= 42);\n              ^", "pkg/front_end/testcases/rasta/super.dart:147:11: Error: Too many positional arguments to method: 0 allowed, 1 given.\n    super.m(87);\n          ^", "pkg/front_end/testcases/rasta/super.dart:148:15: Error: Too many positional arguments to method: 0 allowed, 1 given.\n    use(super.m(87));\n              ^", "pkg/front_end/testcases/rasta/super.dart:149:11: Error: Too many positional arguments to method: 0 allowed, 1 given.\n    super.n(87);\n          ^", "pkg/front_end/testcases/rasta/super.dart:150:15: Error: Too many positional arguments to method: 0 allowed, 1 given.\n    use(super.n(87));\n              ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/super.dart:43:5: Error: '+' is not a prefix operator.
+Try removing '+'.
+    +super;
+    ^", "pkg/front_end/testcases/rasta/super.dart:43:5: Error: Getter not found: ''.
+    +super;
+    ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: '+' is not a prefix operator.
+Try removing '+'.
+    use(+super);
+        ^", "pkg/front_end/testcases/rasta/super.dart:44:9: Error: Getter not found: ''.
+    use(+super);
+        ^", "pkg/front_end/testcases/rasta/super.dart:62:11: Error: Superclass has no getter named 'g'.
+    super.g;
+          ^", "pkg/front_end/testcases/rasta/super.dart:63:15: Error: Superclass has no getter named 'g'.
+    use(super.g);
+              ^", "pkg/front_end/testcases/rasta/super.dart:83:11: Error: Superclass has no setter named 'e'.
+    super.e++;
+          ^", "pkg/front_end/testcases/rasta/super.dart:84:15: Error: Superclass has no setter named 'e'.
+    use(super.e++);
+              ^", "pkg/front_end/testcases/rasta/super.dart:85:11: Error: Superclass has no setter named 'f'.
+    super.f++;
+          ^", "pkg/front_end/testcases/rasta/super.dart:86:15: Error: Superclass has no setter named 'f'.
+    use(super.f++);
+              ^", "pkg/front_end/testcases/rasta/super.dart:87:11: Error: Superclass has no getter named 'g'.
+    super.g++;
+          ^", "pkg/front_end/testcases/rasta/super.dart:88:15: Error: Superclass has no getter named 'g'.
+    use(super.g++);
+              ^", "pkg/front_end/testcases/rasta/super.dart:95:11: Error: Superclass has no setter named 'm'.
+    super.m++;
+          ^", "pkg/front_end/testcases/rasta/super.dart:96:15: Error: Superclass has no setter named 'm'.
+    use(super.m++);
+              ^", "pkg/front_end/testcases/rasta/super.dart:108:13: Error: Superclass has no setter named 'e'.
+    ++super.e;
+            ^", "pkg/front_end/testcases/rasta/super.dart:109:17: Error: Superclass has no setter named 'e'.
+    use(++super.e);
+                ^", "pkg/front_end/testcases/rasta/super.dart:110:13: Error: Superclass has no setter named 'f'.
+    ++super.f;
+            ^", "pkg/front_end/testcases/rasta/super.dart:111:17: Error: Superclass has no setter named 'f'.
+    use(++super.f);
+                ^", "pkg/front_end/testcases/rasta/super.dart:112:13: Error: Superclass has no getter named 'g'.
+    ++super.g;
+            ^", "pkg/front_end/testcases/rasta/super.dart:113:17: Error: Superclass has no getter named 'g'.
+    use(++super.g);
+                ^", "pkg/front_end/testcases/rasta/super.dart:120:13: Error: Superclass has no setter named 'm'.
+    ++super.m;
+            ^", "pkg/front_end/testcases/rasta/super.dart:121:17: Error: Superclass has no setter named 'm'.
+    use(++super.m);
+                ^", "pkg/front_end/testcases/rasta/super.dart:137:11: Error: Superclass has no method named 'g'.
+    super.g();
+          ^", "pkg/front_end/testcases/rasta/super.dart:138:15: Error: Superclass has no method named 'g'.
+    use(super.g());
+              ^", "pkg/front_end/testcases/rasta/super.dart:160:11: Error: Superclass has no setter named 'e'.
+    super.e = 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:161:15: Error: Superclass has no setter named 'e'.
+    use(super.e = 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:162:11: Error: Superclass has no setter named 'f'.
+    super.f = 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:163:15: Error: Superclass has no setter named 'f'.
+    use(super.f = 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:172:11: Error: Superclass has no setter named 'm'.
+    super.m = 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:173:15: Error: Superclass has no setter named 'm'.
+    use(super.m = 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:185:11: Error: Superclass has no setter named 'e'.
+    super.e ??= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:186:15: Error: Superclass has no setter named 'e'.
+    use(super.e ??= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:187:11: Error: Superclass has no setter named 'f'.
+    super.f ??= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:188:15: Error: Superclass has no setter named 'f'.
+    use(super.f ??= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:189:11: Error: Superclass has no getter named 'g'.
+    super.g ??= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:190:15: Error: Superclass has no getter named 'g'.
+    use(super.g ??= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:197:11: Error: Superclass has no setter named 'm'.
+    super.m ??= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:198:15: Error: Superclass has no setter named 'm'.
+    use(super.m ??= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:210:11: Error: Superclass has no setter named 'e'.
+    super.e += 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:211:15: Error: Superclass has no setter named 'e'.
+    use(super.e += 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:212:11: Error: Superclass has no setter named 'f'.
+    super.f += 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:213:15: Error: Superclass has no setter named 'f'.
+    use(super.f += 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:214:11: Error: Superclass has no getter named 'g'.
+    super.g += 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:215:15: Error: Superclass has no getter named 'g'.
+    use(super.g += 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:222:11: Error: Superclass has no setter named 'm'.
+    super.m += 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:223:15: Error: Superclass has no setter named 'm'.
+    use(super.m += 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:235:11: Error: Superclass has no setter named 'e'.
+    super.e -= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:236:15: Error: Superclass has no setter named 'e'.
+    use(super.e -= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:237:11: Error: Superclass has no setter named 'f'.
+    super.f -= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:238:15: Error: Superclass has no setter named 'f'.
+    use(super.f -= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:239:11: Error: Superclass has no getter named 'g'.
+    super.g -= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:240:15: Error: Superclass has no getter named 'g'.
+    use(super.g -= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:247:11: Error: Superclass has no setter named 'm'.
+    super.m -= 42;
+          ^", "pkg/front_end/testcases/rasta/super.dart:248:15: Error: Superclass has no setter named 'm'.
+    use(super.m -= 42);
+              ^", "pkg/front_end/testcases/rasta/super.dart:147:11: Error: Too many positional arguments to method: 0 allowed, 1 given.
+    super.m(87);
+          ^", "pkg/front_end/testcases/rasta/super.dart:148:15: Error: Too many positional arguments to method: 0 allowed, 1 given.
+    use(super.m(87));
+              ^", "pkg/front_end/testcases/rasta/super.dart:149:11: Error: Too many positional arguments to method: 0 allowed, 1 given.
+    super.n(87);
+          ^", "pkg/front_end/testcases/rasta/super.dart:150:15: Error: Too many positional arguments to method: 0 allowed, 1 given.
+    use(super.n(87));
+              ^"]/* from null */;
 static method use(dynamic x) → dynamic {
   if(x.==(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
     throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index 1f90789..d54f59b 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -41,7 +41,9 @@
   abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
   abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.\n  foo() => super.foo() + f();\n                 ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
+  foo() => super.foo() + f();
+                 ^"]/* from null */;
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>().{mix::Mixin::foo}());
   core::print(new self::C2::•<dynamic>().{mix::Mixin::foo}());
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
index 53f41ea..e48fa10 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
@@ -16,14 +16,18 @@
       let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], <dynamic>[#t2].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(self::Fisk);
     }
-    for (final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: Expected lvalue, but got Instance of 'PrefixBuilder'\n    for (collection in x) {\n         ^" in x) {
+    for (final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:17:10: Error: Expected lvalue, but got Instance of 'PrefixBuilder'
+    for (collection in x) {
+         ^" in x) {
       core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.");
     }
     for (final dynamic #t4 in x) {
       let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], <dynamic>[#t4].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
       core::print(() → void);
     }
-    for (final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected lvalue, but got 1\n    for (1 in x) {\n         ^" in x) {
+    for (final dynamic #t5 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:23:10: Error: Expected lvalue, but got 1
+    for (1 in x) {
+         ^" in x) {
       core::print(this.key);
     }
   }
@@ -38,14 +42,18 @@
     let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Fisk, 34, const <core::Type>[], <dynamic>[#t7].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(self::Fisk);
   }
-  for (final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: Expected lvalue, but got Instance of 'PrefixBuilder'\n  for (collection in arguments) {\n       ^" in arguments) {
+  for (final dynamic #t8 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:37:8: Error: Expected lvalue, but got Instance of 'PrefixBuilder'
+  for (collection in arguments) {
+       ^" in arguments) {
     core::print(invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart: Error: A library can't be used as an expression.");
   }
   for (final dynamic #t9 in arguments) {
     let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#VoidFunction, 34, const <core::Type>[], <dynamic>[#t9].toList(growable: false), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
     core::print(() → void);
   }
-  for (final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected lvalue, but got 1\n  for (1 in arguments) {\n       ^" in arguments) {
+  for (final dynamic #t10 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/rasta/unresolved_for_in.dart:43:8: Error: Expected lvalue, but got 1
+  for (1 in arguments) {
+       ^" in arguments) {
     core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#key, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
   }
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
index ff6b4799..d6d0df8 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.direct.expect
@@ -1,7 +1,9 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.\n  [f() {}];\n   ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+  [f() {}];
+   ^"]/* from null */;
 static method main() → dynamic {
   <dynamic>[let final () → dynamic f = () → dynamic {} in f];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
index 15a37b7..8a2672b 100644
--- a/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29937.dart.strong.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.\n  [f() {}];\n   ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29937.dart:6:4: Error: A function expression can't have a name.
+  [f() {}];
+   ^"]/* from null */;
 static method main() → dynamic {
   <() → core::Null>[let final () → core::Null f = () → core::Null {} in f];
 }
diff --git a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
index 0e11a3b..7c3b9a7 100644
--- a/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29940.dart.strong.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' isn't a type.\n  a.b c = null;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29940.dart:7:3: Error: 'a.b' isn't a type.
+  a.b c = null;
+  ^"]/* from null */;
 static method main() → dynamic {
   core::String a = "";
   invalid-type c = null;
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
index 5cfc393..0e9a426 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.direct.expect
@@ -3,6 +3,8 @@
 
 static method bad() → dynamic {
   dynamic a = "";
-  invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.\n  a.\"\";\n    ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
+  a.\"\";
+    ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
index 0be6765..b09dbe3 100644
--- a/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29941.dart.strong.expect
@@ -4,6 +4,8 @@
 
 static method bad() → dynamic {
   core::String a = "";
-  invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.\n  a.\"\";\n    ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29941.dart:7:5: Error: Expected an identifier, but got '\"\"'.
+  a.\"\";
+    ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
index 9f64d07..16847ca 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.direct.expect
@@ -1,7 +1,12 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+Try adding {}.
+f() =
+    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^"]/* from null */;
 static method main() → dynamic {}
 static method f() → dynamic
   return let final () → dynamic h = () → dynamic => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
index 2e3e6cd..4087b61 100644
--- a/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29942.dart.strong.expect
@@ -2,7 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.\nTry adding {}.\nf() =\n    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.\nh() => null;\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29942.dart:8:5: Error: Expected a function body or '=>'.
+Try adding {}.
+f() =
+    ^", "pkg/front_end/testcases/regress/issue_29942.dart:10:1: Error: A function expression can't have a name.
+h() => null;
+^"]/* from null */;
 static method main() → dynamic {}
 static method f() → dynamic
   return let final () → core::Null h = () → core::Null => null in h;
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
index 974f689..69b4062 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.direct.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.\n  x.(null);\n    ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+  x.(null);
+    ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
index 974f689..69b4062 100644
--- a/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29943.dart.strong.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.\n  x.(null);\n    ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29943.dart:6:5: Error: Expected an identifier, but got '('.
+  x.(null);
+    ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
index 6f9c63c..8c99e27 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.direct.expect
@@ -8,7 +8,9 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.\n  var C;\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+  var C;
+      ^"]/* from null */;
 static method main() → dynamic {
   new self::C::•();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
index 6f9c63c..8c99e27 100644
--- a/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29944.dart.strong.expect
@@ -8,7 +8,9 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.\n  var C;\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29944.dart:7:7: Error: A class member can't have the same name as the enclosing class.
+  var C;
+      ^"]/* from null */;
 static method main() → dynamic {
   new self::C::•();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
index 538d3be..f428fd7 100644
--- a/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29945.dart.strong.expect
@@ -1,7 +1,9 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.\n  s.bool x = null;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29945.dart:6:3: Error: 's.bool' can't be used as a type because 's' isn't defined.
+  s.bool x = null;
+  ^"]/* from null */;
 static method main() → dynamic {
   invalid-type x = null;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
index f9931fb..d2f376d 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.direct.expect
@@ -2,5 +2,7 @@
 import self as self;
 
 static method #main() → dynamic {
-  throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.\n  )\n  ^";
+  throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+  )
+  ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
index f9931fb..d2f376d 100644
--- a/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29976.dart.strong.expect
@@ -2,5 +2,7 @@
 import self as self;
 
 static method #main() → dynamic {
-  throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.\n  )\n  ^";
+  throw "pkg/front_end/testcases/regress/issue_29976.dart:8:3: Error: Expected a String, but got ')'.
+  )
+  ^";
 }
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
index e1d9ee4..3acc695 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.direct.expect
@@ -1,5 +1,8 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':\n  Invalid MIME type.\nimport 'data:async';\n                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+  Invalid MIME type.
+import 'data:async';
+                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
index e1d9ee4..3acc695 100644
--- a/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29977.dart.strong.expect
@@ -1,5 +1,8 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':\n  Invalid MIME type.\nimport 'data:async';\n                  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29977.dart:5:19: Error: Couldn't parse URI 'data:async':
+  Invalid MIME type.
+import 'data:async';
+                  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
index 4ae0531..cb1a576 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.direct.expect
@@ -1,7 +1,9 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.\n  foo(null, f() {});\n            ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+  foo(null, f() {});
+            ^"]/* from null */;
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
index b06de22..88d3285 100644
--- a/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29978.dart.strong.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.\n  foo(null, f() {});\n            ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29978.dart:8:13: Error: A function expression can't have a name.
+  foo(null, f() {});
+            ^"]/* from null */;
 static method foo(dynamic a, dynamic b) → dynamic
   return null;
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
index 6bf0b15..4a66e4c 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.direct.expect
@@ -1,7 +1,9 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.\n  (f() {})();\n   ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+  (f() {})();
+   ^"]/* from null */;
 static method main() → dynamic {
   (let final () → dynamic f = () → dynamic {} in f).call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
index 217f591..b782e0e 100644
--- a/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29979.dart.strong.expect
@@ -2,7 +2,9 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.\n  (f() {})();\n   ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29979.dart:6:4: Error: A function expression can't have a name.
+  (f() {})();
+   ^"]/* from null */;
 static method main() → dynamic {
   (let final () → core::Null f = () → core::Null {} in f).call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
index 80d956e..57e6d91 100644
--- a/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29980.dart.strong.expect
@@ -1,7 +1,9 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.\n  x.y z;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29980.dart:6:3: Error: 'x.y' can't be used as a type because 'x' isn't defined.
+  x.y z;
+  ^"]/* from null */;
 static method main() → dynamic {
   invalid-type z;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
index 3e3c7a4..1aa328a 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -8,7 +8,9 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.\n  C<String, String> field;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.
+  C<String, String> field;
+  ^"]/* from null */;
 static method main() → dynamic {
   core::print(new self::C::•<dynamic>());
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
index 340ebcf..9c66143 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.direct.expect
@@ -2,10 +2,14 @@
 import self as self;
 
 static method f() → dynamic sync* {
-  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n  return missing;\n  ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+  return missing;
+  ^";
 }
 static method g() → dynamic sync* 
-  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.\ng() sync* => dummy;\n             ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+g() sync* => dummy;
+             ^";
 static method h() → dynamic sync* {
   (() → dynamic => "return").call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
index 61cfc01..fce02e6 100644
--- a/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29983.dart.strong.expect
@@ -2,12 +2,20 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.\n  return missing;\n         ^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.\ng() sync* => dummy;\n             ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29983.dart:7:10: Error: Getter not found: 'missing'.
+  return missing;
+         ^", "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: Getter not found: 'dummy'.
+g() sync* => dummy;
+             ^"]/* from null */;
 static method f() → dynamic sync* {
-  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.\n  return missing;\n  ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:7:3: Error: 'sync*' and 'async*' can't return a value.
+  return missing;
+  ^";
 }
 static method g() → dynamic sync* 
-  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.\ng() sync* => dummy;\n             ^";
+  invalid-expression "pkg/front_end/testcases/regress/issue_29983.dart:11:14: Error: 'sync*' and 'async*' can't return a value.
+g() sync* => dummy;
+             ^";
 static method h() → dynamic sync* {
   (() → core::String => "return").call();
 }
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
index 6dd3ecf..f52c009 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -1,9 +1,13 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n  for (int i = i;; false) {}\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.
+  for (int i = i;; false) {}
+               ^"]/* from null */;
 static method bad() → dynamic {
-  for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n  for (int i = i;; false) {}\n           ^"; ; false) {
+  for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (int i = i;; false) {}
+           ^"; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index ba78c35..95a6e96 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -1,9 +1,15 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.\n  for (int i = i;; false) {}\n               ^", "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.\n  for (int i = i;; false) {}\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Getter not found: 'i'.
+  for (int i = i;; false) {}
+               ^", "pkg/front_end/testcases/regress/issue_29984.dart:6:16: Error: Previous use of 'i'.
+  for (int i = i;; false) {}
+               ^"]/* from null */;
 static method bad() → dynamic {
-  for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.\n  for (int i = i;; false) {}\n           ^"; ; false) {
+  for (final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
+  for (int i = i;; false) {}
+           ^"; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
index 822d218..f758e0f 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.direct.expect
@@ -2,7 +2,12 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n  \u55357\u56603\n  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.
+Try using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).
+  \u55357\u56603
+  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.
+}
+^"]/* from null */;
 static method bad() → dynamic {
   throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
index 02c3c1e4..3dab4b4 100644
--- a/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29985.dart.strong.expect
@@ -2,7 +2,14 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.\nTry using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).\n  \u55357\u56603\n  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.\n}\n^", "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.\n  \u55357\u56603\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: The non-ASCII character '\u55357\u56603' (U+1F51B) can't be used in identifiers, only in strings and comments.
+Try using an US-ASCII letter, a digit, '_' (an underscore), or '\$' (a dollar sign).
+  \u55357\u56603
+  ^", "pkg/front_end/testcases/regress/issue_29985.dart:7:1: Error: Expected ';' before this.
+}
+^", "pkg/front_end/testcases/regress/issue_29985.dart:6:3: Error: Getter not found: '\u55357\u56603'.
+  \u55357\u56603
+  ^"]/* from null */;
 static method bad() → dynamic {
   throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#🔛, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
index 91f276a..fc0df85 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.direct.expect
@@ -1,6 +1,11 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.\nTry adding {}.\nC(this.name);\n            ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.\nC(this.name);\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+Try adding {}.
+C(this.name);
+            ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.
+C(this.name);
+  ^"]/* from null */;
 static method main() → dynamic {}
 static abstract method C(dynamic name) → dynamic;
diff --git a/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
index 91f276a..fc0df85 100644
--- a/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29986.dart.strong.expect
@@ -1,6 +1,11 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.\nTry adding {}.\nC(this.name);\n            ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.\nC(this.name);\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29986.dart:8:13: Error: Expected a function body or '=>'.
+Try adding {}.
+C(this.name);
+            ^", "pkg/front_end/testcases/regress/issue_29986.dart:8:3: Error: 'this' parameters can only be used on constructors.
+C(this.name);
+  ^"]/* from null */;
 static method main() → dynamic {}
 static abstract method C(dynamic name) → dynamic;
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
index be28dc6..51e6889 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.direct.expect
@@ -1,5 +1,8 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':\n  Illegal scheme character.\nimport \"dart_:core\";\n            ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+  Illegal scheme character.
+import \"dart_:core\";
+            ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
index be28dc6..51e6889 100644
--- a/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29987.dart.strong.expect
@@ -1,5 +1,8 @@
 library;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':\n  Illegal scheme character.\nimport \"dart_:core\";\n            ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_29987.dart:5:13: Error: Couldn't parse URI 'dart_:core':
+  Illegal scheme character.
+import \"dart_:core\";
+            ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
index 5fec1e0..e946ea8 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.direct.expect
@@ -10,7 +10,9 @@
     core::print("Actually, I'm a getter, not a constructor.");
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.\n  get A {\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+  get A {
+      ^"]/* from null */;
 static method main() → dynamic {
   new self::A::•();
 }
diff --git a/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
index 5fec1e0..e946ea8 100644
--- a/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30981.dart.strong.expect
@@ -10,7 +10,9 @@
     core::print("Actually, I'm a getter, not a constructor.");
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.\n  get A {\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30981.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+  get A {
+      ^"]/* from null */;
 static method main() → dynamic {
   new self::A::•();
 }
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
index 2d3588e..a45c042 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.direct.expect
@@ -1,5 +1,19 @@
 library lib;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.\npart '\$foo';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.\npart '\$foo/bar';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.\npart '\$for/bar';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.\npart '\${true}';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.\npart 'the\${1}thing';\n         ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.\npart 'part_\$foo\${'a'}.dart';\n           ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.\npart 'part_\${'a'}_\$foo.dart';\n           ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+part '\$foo';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+part '\$foo/bar';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+part '\$for/bar';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+part '\${true}';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+part 'the\${1}thing';
+         ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+part 'part_\$foo\${'a'}.dart';
+           ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+part 'part_\${'a'}_\$foo.dart';
+           ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
index 2d3588e..a45c042 100644
--- a/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30994.dart.strong.expect
@@ -1,5 +1,19 @@
 library lib;
 import self as self;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.\npart '\$foo';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.\npart '\$foo/bar';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.\npart '\$for/bar';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.\npart '\${true}';\n      ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.\npart 'the\${1}thing';\n         ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.\npart 'part_\$foo\${'a'}.dart';\n           ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.\npart 'part_\${'a'}_\$foo.dart';\n           ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_30994.dart:6:7: Error: Can't use string interpolation in a URI.
+part '\$foo';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:7:7: Error: Can't use string interpolation in a URI.
+part '\$foo/bar';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:8:7: Error: Can't use string interpolation in a URI.
+part '\$for/bar';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:9:7: Error: Can't use string interpolation in a URI.
+part '\${true}';
+      ^", "pkg/front_end/testcases/regress/issue_30994.dart:10:10: Error: Can't use string interpolation in a URI.
+part 'the\${1}thing';
+         ^", "pkg/front_end/testcases/regress/issue_30994.dart:11:12: Error: Can't use string interpolation in a URI.
+part 'part_\$foo\${'a'}.dart';
+           ^", "pkg/front_end/testcases/regress/issue_30994.dart:12:12: Error: Can't use string interpolation in a URI.
+part 'part_\${'a'}_\$foo.dart';
+           ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
index 6e85a5c..895f75f 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.direct.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.\n  return null?.(1);\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+  return null?.(1);
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
index 6e85a5c..895f75f 100644
--- a/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31157.dart.strong.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.\n  return null?.(1);\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31157.dart:6:16: Error: Expected an identifier, but got '('.
+  return null?.(1);
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
index 2d0fca7..624821f2 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.direct.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.\n  return null?.[1];\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.
+  return null?.[1];
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
index 2d0fca7..624821f2 100644
--- a/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31180.dart.strong.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.\n  return null?.[1];\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31180.dart:6:16: Error: Expected an identifier, but got '['.
+  return null?.[1];
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
index 29c088f..36747ec 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
@@ -10,7 +10,18 @@
   operator unary-() → dynamic
     return 0;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.\nTry adding the name of the type of the variable or the keyword 'var'.\n  operator unary- => 0;\n  ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.\n  operator unary- => 0;\n           ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.\nTry adding the keyword 'operator'.\n  operator unary- => 0;\n                ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.\nTry adding a parameter list to the method declaration.\n  operator unary- => 0;\n                ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6: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'.
+  operator unary- => 0;
+  ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
+  operator unary- => 0;
+           ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
+Try adding the keyword 'operator'.
+  operator unary- => 0;
+                ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+Try adding a parameter list to the method declaration.
+  operator unary- => 0;
+                ^"]/* from null */;
 static method main() → dynamic {
   new self::C::•();
 }
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
index 29c088f..36747ec 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
@@ -10,7 +10,18 @@
   operator unary-() → dynamic
     return 0;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.\nTry adding the name of the type of the variable or the keyword 'var'.\n  operator unary- => 0;\n  ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.\n  operator unary- => 0;\n           ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.\nTry adding the keyword 'operator'.\n  operator unary- => 0;\n                ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.\nTry adding a parameter list to the method declaration.\n  operator unary- => 0;\n                ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31183.dart:6: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'.
+  operator unary- => 0;
+  ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:12: Error: Expected ';' before this.
+  operator unary- => 0;
+           ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: Operator declarations must be preceeded by the keyword 'operator'.
+Try adding the keyword 'operator'.
+  operator unary- => 0;
+                ^", "pkg/front_end/testcases/regress/issue_31183.dart:6:17: Error: A method declaration needs an explicit list of parameters.
+Try adding a parameter list to the method declaration.
+  operator unary- => 0;
+                ^"]/* from null */;
 static method main() → dynamic {
   new self::C::•();
 }
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
index 8ee7c79..f7b5642 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.direct.expect
@@ -2,9 +2,15 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n  for (int i = 0, i > 10; i++) {}\n                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.
+  for (int i = 0, i > 10; i++) {}
+                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+  for (int i = 0, i > 10; i++) {}
+                    ^"]/* from null */;
 static method bad() → dynamic {
-  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10); i = i.+(1)) {
+  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.
+  for (int i = 0, i > 10; i++) {}
+                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10); i = i.+(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
index f51f3b2..6f23240 100644
--- a/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31184.dart.strong.expect
@@ -2,9 +2,17 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.\n  for (int i = 0, i > 10; i++) {}\n                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Getter not found: ''.\n  for (int i = 0, i > 10; i++) {}\n                    ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected ';' before this.
+  for (int i = 0, i > 10; i++) {}
+                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Expected an identifier, but got '>'.
+  for (int i = 0, i > 10; i++) {}
+                    ^", "pkg/front_end/testcases/regress/issue_31184.dart:6:21: Error: Getter not found: ''.
+  for (int i = 0, i > 10; i++) {}
+                    ^"]/* from null */;
 static method bad() → dynamic {
-  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.\n  for (int i = 0, i > 10; i++) {}\n                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
+  for (core::int i = 0, final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31184.dart:6:19: Error: 'i' already declared in this scope.
+  for (int i = 0, i > 10; i++) {}
+                  ^"; (throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))).>(10) as{TypeError} core::bool; i = i.{core::num::+}(1)) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
index dc53dd7..d5b19d5 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.direct.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.\n  return null?.true;\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+  return null?.true;
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
index dc53dd7..d5b19d5 100644
--- a/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31186.dart.strong.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.\n  return null?.true;\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31186.dart:6:16: Error: Expected an identifier, but got 'true'.
+  return null?.true;
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
index 288ffbf..df2ebb4 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.direct.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.\n  return null?.1;\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+  return null?.1;
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
index 288ffbf..df2ebb4 100644
--- a/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31187.dart.strong.expect
@@ -2,6 +2,8 @@
 import self as self;
 
 static method bad() → dynamic {
-  return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.\n  return null?.1;\n               ^";
+  return invalid-expression "pkg/front_end/testcases/regress/issue_31187.dart:6:16: Error: Expected an identifier, but got '1'.
+  return null?.1;
+               ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index bf30fe7..aa56e27 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -8,5 +8,9 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.\n  T<U> v;\n    ^", "pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.\n  T<U> v;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31190.dart: Error: Can't use type arguments with type variable 'T'.", "pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: 'U' isn't a type.
+  T<U> v;
+    ^", "pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.
+  T<U> v;
+  ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
index e92df86..29c3f87 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
@@ -5,7 +5,12 @@
 class Increment extends core::Object {
   field core::int x = null;
   constructor •() → void
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.\n  Increment() : x++ {}\n                ^" {}
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.
+  Increment() : x++ {}
+                ^" {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.\nTo initialize a field, use the syntax 'name = value'.\n  Increment() : x++ {}\n                ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+To initialize a field, use the syntax 'name = value'.
+  Increment() : x++ {}
+                ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
index e92df86..29c3f87 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -5,7 +5,12 @@
 class Increment extends core::Object {
   field core::int x = null;
   constructor •() → void
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.\n  Increment() : x++ {}\n                ^" {}
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: '' isn't an instance field of this class.
+  Increment() : x++ {}
+                ^" {}
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.\nTo initialize a field, use the syntax 'name = value'.\n  Increment() : x++ {}\n                ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31192.dart:7:17: Error: Expected an assignment after the field name.
+To initialize a field, use the syntax 'name = value'.
+  Increment() : x++ {}
+                ^"]/* from null */;
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
index fb6d550..6421b2c 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
@@ -9,7 +9,10 @@
 }
 class B extends self::A {
   constructor •() → void
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n  B(): super().foo() {}\n       ^".foo() {}
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+  B(): super().foo() {}
+       ^".foo() {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
index fb6d550..6421b2c 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
@@ -9,7 +9,10 @@
 }
 class B extends self::A {
   constructor •() → void
-    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n  B(): super().foo() {}\n       ^".foo() {}
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/regress/issue_31198.dart:8:8: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+  B(): super().foo() {}
+       ^".foo() {}
 }
 static method bad() → dynamic {
   new self::B::•();
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
index 88fec62..0161677 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.direct.expect
@@ -13,7 +13,11 @@
   method foo(core::int a, core::int b) → core::int
     return a.+(b.*(this.{self::A::m}));
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.\n  A.foo() : m = 2;\n  ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.\n  int foo(int a, int b) => a + b * m;\n      ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.
+  A.foo() : m = 2;
+  ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.
+  int foo(int a, int b) => a + b * m;
+      ^"]/* from null */;
 static method test() → dynamic {
   new self::A::•().foo();
   new self::A::•().foo(1, 2);
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
index 8f2b5ef..680a6d3 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
@@ -13,7 +13,15 @@
   method foo(core::int a, core::int b) → core::int
     return a.{core::num::+}(b.{core::num::*}(this.{self::A::m}));
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.\n  A.foo() : m = 2;\n  ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.\n  int foo(int a, int b) => a + b * m;\n      ^", "pkg/front_end/testcases/regress/issue_31299.dart:18:7: Error: Too many positional arguments to constructor: 0 allowed, 2 given.\n  new A.foo(1, 2);\n      ^", "pkg/front_end/testcases/regress/issue_31299.dart:15:11: Error: Too few positional arguments to method: 2 required, 0 given.\n  new A().foo();\n          ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/regress/issue_31299.dart:10:3: Error: Conflicts with member 'foo'.
+  A.foo() : m = 2;
+  ^", "pkg/front_end/testcases/regress/issue_31299.dart:11:7: Error: Conflicts with constructor 'A.foo'.
+  int foo(int a, int b) => a + b * m;
+      ^", "pkg/front_end/testcases/regress/issue_31299.dart:18:7: Error: Too many positional arguments to constructor: 0 allowed, 2 given.
+  new A.foo(1, 2);
+      ^", "pkg/front_end/testcases/regress/issue_31299.dart:15:11: Error: Too few positional arguments to method: 2 required, 0 given.
+  new A().foo();
+          ^"]/* from null */;
 static method test() → dynamic {
   new self::A::•().{self::A::foo}();
   new self::A::•().{self::A::foo}(1, 2);
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
index efdc0dc..cae1a3e 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.strong.expect
@@ -8,7 +8,9 @@
     : super core::Object::•()
     ;
 }
-static const field dynamic #errors = const <dynamic>["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.\n  self.Foo self;\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["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;
+  ^"]/* from null */;
 static method main() → dynamic {
   self::Foo instance = new self::Foo::•();
   instance.{self::Foo::self} = instance;
diff --git a/pkg/front_end/testcases/reorder_super.dart.direct.expect b/pkg/front_end/testcases/reorder_super.dart.direct.expect
index 66b21ed..4a2f96e 100644
--- a/pkg/front_end/testcases/reorder_super.dart.direct.expect
+++ b/pkg/front_end/testcases/reorder_super.dart.direct.expect
@@ -7,7 +7,8 @@
   field core::String y;
   constructor •(core::num x, core::String y) → void
     : self::B::x = x, self::B::y = y, super core::Object::•() {
-    self::events = self::events.+("super(${this.{self::B::x}}, ${this.{self::B::y}})\n");
+    self::events = self::events.+("super(${this.{self::B::x}}, ${this.{self::B::y}})
+");
   }
 }
 class C extends self::B {
@@ -18,16 +19,22 @@
 }
 static field core::String events = "";
 static method f(dynamic x) → core::int {
-  self::events = self::events.+("f(${x})\n");
+  self::events = self::events.+("f(${x})
+");
   return 0;
 }
 static method g(dynamic x) → core::String {
-  self::events = self::events.+("g(${x})\n");
+  self::events = self::events.+("g(${x})
+");
   return "foo";
 }
 static method main() → dynamic {
   new self::C::•();
-  if(!self::events.==("f(1)\ng(2)\nf(3)\nsuper(0, foo)\n")) {
+  if(!self::events.==("f(1)
+g(2)
+f(3)
+super(0, foo)
+")) {
     throw "Unexpected sequence of events: ${self::events}";
   }
 }
diff --git a/pkg/front_end/testcases/reorder_super.dart.strong.expect b/pkg/front_end/testcases/reorder_super.dart.strong.expect
index dbd7457..cdd2ae0 100644
--- a/pkg/front_end/testcases/reorder_super.dart.strong.expect
+++ b/pkg/front_end/testcases/reorder_super.dart.strong.expect
@@ -7,7 +7,8 @@
   field core::String y;
   constructor •(core::num x, core::String y) → void
     : self::B::x = x, self::B::y = y, super core::Object::•() {
-    self::events = self::events.{core::String::+}("super(${this.{self::B::x}}, ${this.{self::B::y}})\n");
+    self::events = self::events.{core::String::+}("super(${this.{self::B::x}}, ${this.{self::B::y}})
+");
   }
 }
 class C extends self::B {
@@ -18,16 +19,22 @@
 }
 static field core::String events = "";
 static method f(dynamic x) → core::int {
-  self::events = self::events.{core::String::+}("f(${x})\n");
+  self::events = self::events.{core::String::+}("f(${x})
+");
   return 0;
 }
 static method g(dynamic x) → core::String {
-  self::events = self::events.{core::String::+}("g(${x})\n");
+  self::events = self::events.{core::String::+}("g(${x})
+");
   return "foo";
 }
 static method main() → dynamic {
   new self::C::•();
-  if(!self::events.{core::String::==}("f(1)\ng(2)\nf(3)\nsuper(0, foo)\n")) {
+  if(!self::events.{core::String::==}("f(1)
+g(2)
+f(3)
+super(0, foo)
+")) {
     throw "Unexpected sequence of events: ${self::events}";
   }
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index e88f16f..2c32b19 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -8,7 +8,10 @@
     ;
   method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
   method g1<generic-covariant-impl generic-covariant-interface U extends self::C::T>() → void {
-    this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = 1.5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:35: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.\n    this.f<U> /*@callKind=this*/ (1.5);\n                                  ^");
+    this.{self::C::f}<self::C::g1::U>(let final dynamic #t1 = 1.5 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart:11:35: Error: A value of type 'dart.core::double' can't be assigned to a variable of type 'test::C::g1::U'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::C::g1::U'.
+    this.f<U> /*@callKind=this*/ (1.5);
+                                  ^");
   }
 }
 static method g2(self::C<core::Object> c) → void {
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
index ef697c2..366750a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart.strong.expect
@@ -41,11 +41,17 @@
   return 2;
 static method main() → void {
   self::D d = new self::D::•(new self::C::•<core::num>(self::numToInt));
-  let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.\n  d.value /*@checkReturn=(num) -> num*/ += 1;\n                                        ^";
+  let final self::D #t1 = d in #t1.{self::D::value} = let final dynamic #t2 = #t1.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:50:41: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
+  d.value /*@checkReturn=(num) -> num*/ += 1;
+                                        ^";
   self::expect(d.{self::D::setValue}(0), 1);
   d = new self::D::•(new self::C::•<core::num>(self::numToNum));
   self::expectTypeError(() → core::Null {
-    let final self::D #t3 = d in #t3.{self::D::value} = let final dynamic #t4 = #t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:54:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.\nTry changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.\n    d.value /*@checkReturn=(num) -> num*/ += 1;\n                                          ^";
+    let final self::D #t3 = d in #t3.{self::D::value} = let final dynamic #t4 = #t3.{self::D::value}.{self::C::+}(1) as{TypeError} (core::num) → core::num in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast.dart:54:43: Error: A value of type '(dart.core::num) \u8594 dart.core::num' can't be assigned to a variable of type '(dart.core::int) \u8594 dart.core::int'.
+Try changing the type of the left hand side, or casting the right hand side to '(dart.core::int) \u8594 dart.core::int'.
+    d.value /*@checkReturn=(num) -> num*/ += 1;
+                                          ^";
   });
   self::expect(d.{self::D::setValue}, null);
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 93a83ea..df54981 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -19,9 +19,21 @@
   set x(self::B<(self::C::T) → void> value) → void {}
 }
 static method test(self::C<core::num> c) → void {
-  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();\n                                                ^");
-  self::B<(core::num) → void> y = let final self::C<core::num> #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t4 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();\n                                                        ^");
-  let final self::C<core::num> #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t5.{self::C::x} = let final dynamic #t6 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();\n                                                 ^" : null;
-  self::B<core::Object> z = let final self::C<core::num> #t7 = c in let final dynamic #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t8.{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t9 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.\nTry changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.\n  var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();\n                                                         ^" : #t8;
+  let final self::C<core::num> #t1 = c in #t1.{self::C::x} = (#t1.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t2 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:21:49: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+  c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                ^");
+  self::B<(core::num) → void> y = let final self::C<core::num> #t3 = c in #t3.{self::C::x} = (#t3.{self::C::x} as{TypeError} self::B<(core::num) → void>).{self::B::+}(let final dynamic #t4 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:22:57: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+  var y = c. /*@checkReturn=B<(num) -> void>*/ x += new B<num>();
+                                                        ^");
+  let final self::C<core::num> #t5 = c in (#t5.{self::C::x} as{TypeError} self::B<(core::num) → void>).{core::Object::==}(null) ?{self::B<core::Object>} #t5.{self::C::x} = let final dynamic #t6 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:23:50: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+  c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
+                                                 ^" : null;
+  self::B<core::Object> z = let final self::C<core::num> #t7 = c in let final dynamic #t8 = #t7.{self::C::x} as{TypeError} self::B<(core::num) → void> in #t8.{core::Object::==}(null) ?{self::B<core::Object>} #t7.{self::C::x} = let final dynamic #t9 = new self::B::•<core::num>() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart:24:58: Error: A value of type 'test::B<dart.core::num>' can't be assigned to a variable of type 'test::B<(dart.core::num) \u8594 void>'.
+Try changing the type of the left hand side, or casting the right hand side to 'test::B<(dart.core::num) \u8594 void>'.
+  var z = c. /*@checkReturn=B<(num) -> void>*/ x ??= new B<num>();
+                                                         ^" : #t8;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/stringliteral.dart.direct.expect b/pkg/front_end/testcases/stringliteral.dart.direct.expect
index 5fce998..ca4c0cb 100644
--- a/pkg/front_end/testcases/stringliteral.dart.direct.expect
+++ b/pkg/front_end/testcases/stringliteral.dart.direct.expect
@@ -3,8 +3,14 @@
 
 static field dynamic color = "brown";
 static field dynamic thing = "lazy dog";
-static field dynamic phrase = "The quick ${self::color} fox\njumped over the ${self::thing}.\n";
+static field dynamic phrase = "The quick ${self::color} fox
+jumped over the ${self::thing}.
+";
 static field dynamic adjacent = "${self::color}${self::color}${self::color}";
-static field dynamic linebreaks = "${self::color}\n${self::color}\n${self::color}";
-static field dynamic other = "${self::color}\n is \n${self::color}";
+static field dynamic linebreaks = "${self::color}
+${self::color}
+${self::color}";
+static field dynamic other = "${self::color}
+ is 
+${self::color}";
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_call.dart.direct.expect b/pkg/front_end/testcases/super_call.dart.direct.expect
index 3a1635a..d97a5e2 100644
--- a/pkg/front_end/testcases/super_call.dart.direct.expect
+++ b/pkg/front_end/testcases/super_call.dart.direct.expect
@@ -16,7 +16,10 @@
   method call(core::int x) → core::int
     return x.*(3);
   method call_super() → core::int {
-    return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n    return super(5);\n           ^";
+    return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    return super(5);
+           ^";
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/super_call.dart.strong.expect b/pkg/front_end/testcases/super_call.dart.strong.expect
index bb6aa08..be03ad0 100644
--- a/pkg/front_end/testcases/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/super_call.dart.strong.expect
@@ -16,7 +16,10 @@
   method call(core::int x) → core::int
     return x.{core::num::*}(3);
   method call_super() → core::int {
-    return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.\nTo delegate a constructor to a super constructor, put the super call as an initializer.\n    return super(5);\n           ^" as{TypeError} core::int;
+    return invalid-expression "pkg/front_end/testcases/super_call.dart:14:12: Error: Can't use 'super' as an expression.
+To delegate a constructor to a super constructor, put the super call as an initializer.
+    return super(5);
+           ^" as{TypeError} core::int;
   }
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
index 94b1e5d..1f6b644 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -95,8 +95,14 @@
     self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17.+(1) in #t17);
     let final core::int #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19).+(1));
     self::use(let final core::int #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21.+(1)) in #t21);
-    super.m = let final dynamic #t23 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:91:12: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    super.m++;\n           ^";
-    self::use(let final () → void #t24 = super.{self::A::m} in let final dynamic #t25 = super.m = let final dynamic #t26 = #t24 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:92:16: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(super.m++);\n               ^" in #t24);
+    super.m = let final dynamic #t23 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:91:12: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m++;
+           ^";
+    self::use(let final () → void #t24 = super.{self::A::m} in let final dynamic #t25 = super.m = let final dynamic #t26 = #t24 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:92:16: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(super.m++);
+               ^" in #t24);
     super.{self::A::a} = super.{self::A::a}.+(1);
     self::use(super.{self::A::a} = super.{self::A::a}.+(1));
     super.{self::A::b} = super.{self::B::b}.+(1);
@@ -117,8 +123,14 @@
     self::use(super.{self::B::i} = super.{self::A::i}.+(1));
     let final core::int #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27).+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
     self::use(let final core::int #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30).+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
-    super.m = let final dynamic #t33 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:114:5: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    ++super.m;\n    ^";
-    self::use(super.m = let final dynamic #t34 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:115:9: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(++super.m);\n        ^");
+    super.m = let final dynamic #t33 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:114:5: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    ++super.m;
+    ^";
+    self::use(super.m = let final dynamic #t34 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:115:9: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(++super.m);
+        ^");
     super.{self::A::a}.call();
     self::use(super.{self::A::a}.call());
     super.{self::B::b}.call();
@@ -207,8 +219,14 @@
     self::use(super.{self::B::i} = super.{self::A::i}.+(42));
     let final core::int #t55 = 87 in super.{self::A::[]=}(#t55, super.{self::A::[]}(#t55).+(42));
     self::use(let final core::int #t56 = 87 in let final dynamic #t57 = super.{self::A::[]}(#t56).+(42) in let final void #t58 = super.{self::A::[]=}(#t56, #t57) in #t57);
-    super.m = let final dynamic #t59 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:208:13: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    super.m += 42;\n            ^";
-    self::use(super.m = let final dynamic #t60 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:209:17: Error: The method '+' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '+'.\n    use(super.m += 42);\n                ^");
+    super.m = let final dynamic #t59 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:208:13: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m += 42;
+            ^";
+    self::use(super.m = let final dynamic #t60 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:209:17: Error: The method '+' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '+'.
+    use(super.m += 42);
+                ^");
     super.{self::A::a} = super.{self::A::a}.-(42);
     self::use(super.{self::A::a} = super.{self::A::a}.-(42));
     super.{self::A::b} = super.{self::B::b}.-(42);
@@ -229,11 +247,121 @@
     self::use(super.{self::B::i} = super.{self::A::i}.-(42));
     let final core::int #t61 = 87 in super.{self::A::[]=}(#t61, super.{self::A::[]}(#t61).-(42));
     self::use(let final core::int #t62 = 87 in let final dynamic #t63 = super.{self::A::[]}(#t62).-(42) in let final void #t64 = super.{self::A::[]=}(#t62, #t63) in #t63);
-    super.m = let final dynamic #t65 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:231:13: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    super.m -= 42;\n            ^";
-    self::use(super.m = let final dynamic #t66 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:232:17: Error: The method '-' isn't defined for the class '() \u8594 void'.\nTry correcting the name to the name of an existing method, or defining a method named '-'.\n    use(super.m -= 42);\n                ^");
+    super.m = let final dynamic #t65 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:231:13: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+    super.m -= 42;
+            ^";
+    self::use(super.m = let final dynamic #t66 = super.{self::A::m} in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/super_rasta_copy.dart:232:17: Error: The method '-' isn't defined for the class '() \u8594 void'.
+Try correcting the name to the name of an existing method, or defining a method named '-'.
+    use(super.m -= 42);
+                ^");
   }
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/super_rasta_copy.dart:60:11: Error: Superclass has no getter named 'g'.\n    super.g;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:61:15: Error: Superclass has no getter named 'g'.\n    use(super.g);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:79:11: Error: Superclass has no setter named 'e'.\n    super.e++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:80:15: Error: Superclass has no setter named 'e'.\n    use(super.e++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:81:11: Error: Superclass has no setter named 'f'.\n    super.f++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:82:15: Error: Superclass has no setter named 'f'.\n    use(super.f++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:83:11: Error: Superclass has no getter named 'g'.\n    super.g++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:84:15: Error: Superclass has no getter named 'g'.\n    use(super.g++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:91:11: Error: Superclass has no setter named 'm'.\n    super.m++;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:92:15: Error: Superclass has no setter named 'm'.\n    use(super.m++);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:102:13: Error: Superclass has no setter named 'e'.\n    ++super.e;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:103:17: Error: Superclass has no setter named 'e'.\n    use(++super.e);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:104:13: Error: Superclass has no setter named 'f'.\n    ++super.f;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:105:17: Error: Superclass has no setter named 'f'.\n    use(++super.f);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:106:13: Error: Superclass has no getter named 'g'.\n    ++super.g;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:107:17: Error: Superclass has no getter named 'g'.\n    use(++super.g);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:114:13: Error: Superclass has no setter named 'm'.\n    ++super.m;\n            ^", "pkg/front_end/testcases/super_rasta_copy.dart:115:17: Error: Superclass has no setter named 'm'.\n    use(++super.m);\n                ^", "pkg/front_end/testcases/super_rasta_copy.dart:129:11: Error: Superclass has no method named 'g'.\n    super.g();\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:130:15: Error: Superclass has no method named 'g'.\n    use(super.g());\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:150:11: Error: Superclass has no setter named 'e'.\n    super.e = 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:151:15: Error: Superclass has no setter named 'e'.\n    use(super.e = 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:152:11: Error: Superclass has no setter named 'f'.\n    super.f = 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:153:15: Error: Superclass has no setter named 'f'.\n    use(super.f = 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:162:11: Error: Superclass has no setter named 'm'.\n    super.m = 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:163:15: Error: Superclass has no setter named 'm'.\n    use(super.m = 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:173:11: Error: Superclass has no setter named 'e'.\n    super.e ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:174:15: Error: Superclass has no setter named 'e'.\n    use(super.e ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:175:11: Error: Superclass has no setter named 'f'.\n    super.f ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:176:15: Error: Superclass has no setter named 'f'.\n    use(super.f ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:177:11: Error: Superclass has no getter named 'g'.\n    super.g ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:178:15: Error: Superclass has no getter named 'g'.\n    use(super.g ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:185:11: Error: Superclass has no setter named 'm'.\n    super.m ??= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:186:15: Error: Superclass has no setter named 'm'.\n    use(super.m ??= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:196:11: Error: Superclass has no setter named 'e'.\n    super.e += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:197:15: Error: Superclass has no setter named 'e'.\n    use(super.e += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:198:11: Error: Superclass has no setter named 'f'.\n    super.f += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:199:15: Error: Superclass has no setter named 'f'.\n    use(super.f += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:200:11: Error: Superclass has no getter named 'g'.\n    super.g += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:201:15: Error: Superclass has no getter named 'g'.\n    use(super.g += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:208:11: Error: Superclass has no setter named 'm'.\n    super.m += 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:209:15: Error: Superclass has no setter named 'm'.\n    use(super.m += 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:219:11: Error: Superclass has no setter named 'e'.\n    super.e -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:220:15: Error: Superclass has no setter named 'e'.\n    use(super.e -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:221:11: Error: Superclass has no setter named 'f'.\n    super.f -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:222:15: Error: Superclass has no setter named 'f'.\n    use(super.f -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:223:11: Error: Superclass has no getter named 'g'.\n    super.g -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:224:15: Error: Superclass has no getter named 'g'.\n    use(super.g -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:231:11: Error: Superclass has no setter named 'm'.\n    super.m -= 42;\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:232:15: Error: Superclass has no setter named 'm'.\n    use(super.m -= 42);\n              ^", "pkg/front_end/testcases/super_rasta_copy.dart:139:11: Error: Too many positional arguments to method: 0 allowed, 1 given.\n    super.m(87);\n          ^", "pkg/front_end/testcases/super_rasta_copy.dart:140:15: Error: Too many positional arguments to method: 0 allowed, 1 given.\n    use(super.m(87));\n              ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/super_rasta_copy.dart:60:11: Error: Superclass has no getter named 'g'.
+    super.g;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:61:15: Error: Superclass has no getter named 'g'.
+    use(super.g);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:79:11: Error: Superclass has no setter named 'e'.
+    super.e++;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:80:15: Error: Superclass has no setter named 'e'.
+    use(super.e++);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:81:11: Error: Superclass has no setter named 'f'.
+    super.f++;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:82:15: Error: Superclass has no setter named 'f'.
+    use(super.f++);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:83:11: Error: Superclass has no getter named 'g'.
+    super.g++;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:84:15: Error: Superclass has no getter named 'g'.
+    use(super.g++);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:91:11: Error: Superclass has no setter named 'm'.
+    super.m++;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:92:15: Error: Superclass has no setter named 'm'.
+    use(super.m++);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:102:13: Error: Superclass has no setter named 'e'.
+    ++super.e;
+            ^", "pkg/front_end/testcases/super_rasta_copy.dart:103:17: Error: Superclass has no setter named 'e'.
+    use(++super.e);
+                ^", "pkg/front_end/testcases/super_rasta_copy.dart:104:13: Error: Superclass has no setter named 'f'.
+    ++super.f;
+            ^", "pkg/front_end/testcases/super_rasta_copy.dart:105:17: Error: Superclass has no setter named 'f'.
+    use(++super.f);
+                ^", "pkg/front_end/testcases/super_rasta_copy.dart:106:13: Error: Superclass has no getter named 'g'.
+    ++super.g;
+            ^", "pkg/front_end/testcases/super_rasta_copy.dart:107:17: Error: Superclass has no getter named 'g'.
+    use(++super.g);
+                ^", "pkg/front_end/testcases/super_rasta_copy.dart:114:13: Error: Superclass has no setter named 'm'.
+    ++super.m;
+            ^", "pkg/front_end/testcases/super_rasta_copy.dart:115:17: Error: Superclass has no setter named 'm'.
+    use(++super.m);
+                ^", "pkg/front_end/testcases/super_rasta_copy.dart:129:11: Error: Superclass has no method named 'g'.
+    super.g();
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:130:15: Error: Superclass has no method named 'g'.
+    use(super.g());
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:150:11: Error: Superclass has no setter named 'e'.
+    super.e = 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:151:15: Error: Superclass has no setter named 'e'.
+    use(super.e = 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:152:11: Error: Superclass has no setter named 'f'.
+    super.f = 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:153:15: Error: Superclass has no setter named 'f'.
+    use(super.f = 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:162:11: Error: Superclass has no setter named 'm'.
+    super.m = 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:163:15: Error: Superclass has no setter named 'm'.
+    use(super.m = 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:173:11: Error: Superclass has no setter named 'e'.
+    super.e ??= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:174:15: Error: Superclass has no setter named 'e'.
+    use(super.e ??= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:175:11: Error: Superclass has no setter named 'f'.
+    super.f ??= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:176:15: Error: Superclass has no setter named 'f'.
+    use(super.f ??= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:177:11: Error: Superclass has no getter named 'g'.
+    super.g ??= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:178:15: Error: Superclass has no getter named 'g'.
+    use(super.g ??= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:185:11: Error: Superclass has no setter named 'm'.
+    super.m ??= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:186:15: Error: Superclass has no setter named 'm'.
+    use(super.m ??= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:196:11: Error: Superclass has no setter named 'e'.
+    super.e += 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:197:15: Error: Superclass has no setter named 'e'.
+    use(super.e += 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:198:11: Error: Superclass has no setter named 'f'.
+    super.f += 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:199:15: Error: Superclass has no setter named 'f'.
+    use(super.f += 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:200:11: Error: Superclass has no getter named 'g'.
+    super.g += 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:201:15: Error: Superclass has no getter named 'g'.
+    use(super.g += 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:208:11: Error: Superclass has no setter named 'm'.
+    super.m += 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:209:15: Error: Superclass has no setter named 'm'.
+    use(super.m += 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:219:11: Error: Superclass has no setter named 'e'.
+    super.e -= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:220:15: Error: Superclass has no setter named 'e'.
+    use(super.e -= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:221:11: Error: Superclass has no setter named 'f'.
+    super.f -= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:222:15: Error: Superclass has no setter named 'f'.
+    use(super.f -= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:223:11: Error: Superclass has no getter named 'g'.
+    super.g -= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:224:15: Error: Superclass has no getter named 'g'.
+    use(super.g -= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:231:11: Error: Superclass has no setter named 'm'.
+    super.m -= 42;
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:232:15: Error: Superclass has no setter named 'm'.
+    use(super.m -= 42);
+              ^", "pkg/front_end/testcases/super_rasta_copy.dart:139:11: Error: Too many positional arguments to method: 0 allowed, 1 given.
+    super.m(87);
+          ^", "pkg/front_end/testcases/super_rasta_copy.dart:140:15: Error: Too many positional arguments to method: 0 allowed, 1 given.
+    use(super.m(87));
+              ^"]/* from null */;
 static method use(dynamic x) → dynamic {
   if(x.==(new core::DateTime::now().{core::DateTime::millisecondsSinceEpoch}))
     throw "Shouldn't happen";
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index 1550e3d..455a17a 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -7,10 +7,18 @@
     : super core::Object::•()
     ;
   method method() → invalid-type
-    return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.\nTry changing the type of the left hand side, or casting the right hand side to 'invalid-type'.\n  T.String method() => \"Hello, World!\";\n                       ^";
+    return let final dynamic #t1 = "Hello, World!" in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:8:24: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'invalid-type'.
+Try changing the type of the left hand side, or casting the right hand side to 'invalid-type'.
+  T.String method() => \"Hello, World!\";
+                       ^";
 }
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.\n  T.String method() => \"Hello, World!\";\n  ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.
+  T.String method() => \"Hello, World!\";
+  ^"]/* from null */;
 static method main() → dynamic {
-  core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.\nTry changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.\n  T.String s = new C().method();\n                       ^";
+  core::String s = let final dynamic #t2 = new self::C::•<dynamic>().{self::C::method}() in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/type_variable_prefix.dart:12:24: Error: A value of type 'invalid-type' can't be assigned to a variable of type 'dart.core::String'.
+Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
+  T.String s = new C().method();
+                       ^";
   core::print(s);
 }
diff --git a/pkg/front_end/testcases/undefined.dart.strong.expect b/pkg/front_end/testcases/undefined.dart.strong.expect
index 28270f8..9ccfc9e 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.expect
@@ -11,10 +11,19 @@
 }
 static method test(self::C c) → void {
   c.{self::C::x};
-  let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'y'.\n  c. /*@error=UndefinedGetter*/ y;\n                                ^";
+  let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:14:33: Error: The getter 'y' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'y'.
+  c. /*@error=UndefinedGetter*/ y;
+                                ^";
   c.{self::C::f}();
-  let final dynamic #t2 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing method, or defining a method named 'g'.\n  c. /*@error=UndefinedMethod*/ g();\n                                ^";
+  let final dynamic #t2 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:16:33: Error: The method 'g' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing method, or defining a method named 'g'.
+  c. /*@error=UndefinedMethod*/ g();
+                                ^";
   c.{self::C::x} = null;
-  let final dynamic #t3 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing setter, or defining a setter or field named 'y'.\n  c. /*@error=UndefinedSetter*/ y = null;\n                                ^";
+  let final dynamic #t3 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined.dart:18:33: Error: The setter 'y' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'y'.
+  c. /*@error=UndefinedSetter*/ y = null;
+                                ^";
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
index f4b981c..639d3c2 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
@@ -10,7 +10,13 @@
 }
 static method test(self::C c) → void {
   c.{self::C::x} = 1;
-  let final self::C #t1 = c in #t1.{self::C::x} = (let final dynamic #t2 = #t1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'x'.\n  c. /*@error=UndefinedGetter*/ x += 1;\n                                ^").+(1);
-  let final self::C #t3 = c in (let final dynamic #t4 = #t3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.\nTry correcting the name to the name of an existing getter, or defining a getter or field named 'x'.\n  c. /*@error=UndefinedGetter*/ x ??= 1;\n                                ^").==(null) ?{dynamic} #t3.{self::C::x} = 1 : null;
+  let final self::C #t1 = c in #t1.{self::C::x} = (let final dynamic #t2 = #t1 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:13:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+  c. /*@error=UndefinedGetter*/ x += 1;
+                                ^").+(1);
+  let final self::C #t3 = c in (let final dynamic #t4 = #t3 in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart:14:33: Error: The getter 'x' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing getter, or defining a getter or field named 'x'.
+  c. /*@error=UndefinedGetter*/ x ??= 1;
+                                ^").==(null) ?{dynamic} #t3.{self::C::x} = 1 : null;
 }
 static method main() → dynamic {}
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 78d03b8..2fa7f84 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -52,7 +52,6 @@
 
 [ $compiler == dart2analyzer ]
 dev_compiler/test/options/*: SkipByDesign
-typed_mock/test/typed_mock_test: StaticWarning
 
 [ $compiler != dart2analyzer ]
 analyzer/test/src/summary/summarize_fasta_test: RuntimeError, Slow
diff --git a/pkg/typed_mock/LICENSE b/pkg/typed_mock/LICENSE
deleted file mode 100644
index 5c60afe..0000000
--- a/pkg/typed_mock/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2014, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/typed_mock/README.md b/pkg/typed_mock/README.md
deleted file mode 100644
index 2b24907..0000000
--- a/pkg/typed_mock/README.md
+++ /dev/null
@@ -1,214 +0,0 @@
-A library for mocking classes and verifying expected interaction with mocks.
-
-It is inspired by [Mockito](https://code.google.com/p/mockito/).
-
-Features of this package:
-- Code-completion, static validation, search and refactoring all work properly with mocks.
-- Much better error messages for unit testing.
-- Works with concrete and abstract classes.
-- Does not use mirrors.
-- No dependent packages.
-
-Other Mock libraries for Dart:
-- https://pub.dartlang.org/packages/mockito
-- https://pub.dartlang.org/packages/mock (deprecated)
-
-## Tutorial
-
-Let's take the simple case of making sure that a method is called. The first step is to create a mock of the object, as shown below. One nice feature of Dart is that all classes automatically define interfaces, so you don't need to separately define the interface.
-
-```dart
-import 'package:typed_mock/typed_mock.dart';
-
-class Dog {
-  String speak() => "Woof!";
-}
-
-class MockDog extends TypedMock implements Dog {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-```
-
-All of the magic happens because of the noSuchMethod() function. None of the functions for Animal are actually defined because we used `implements` instead of `extends`. Therefore, all calls to this object will end up in `noSuchMethod()`.
-
-#### Verify a function is called
-
-Here's the code to verify that the function is called:
-
-```dart
-
-void main() {
-  final dog = new MockDog();
-  verifyZeroInteractions(dog);
-  dog.speak();
-  verify(dog.speak()).once();
-  verifyNoMoreInteractions(dog);
-}
-```
-
-One of the interesting features of typed_mock is that it internally tracks all calls to each mock object, then tracks which calls have been matched with a verify() call and which not. Therefore, typed_mock is able to detect unexpected calls, even if those calls are made to methods that didn't exist when the test was written. This can be a good incentive to update your tests whenever you change a class.
-
-After creating the `MockAnimal` object, we call `verifyZeroInteractions()` to make sure that the object starts in a clean state. Next we call the `speak()` method, then prove that the speak function was actually called with `verify().once()`.
-
-There are several other functions for verifying calls that can be used instead of `once()`:
-- `atLeastOnce()` Ensure the function was called one or more times.
-- `times(n)` Ensure the function was called exactly `n` times.
-- `atLeast(n)` Ensure the function was called `n` or more times.
-- `atMost(n)` Ensure the function was called no more than `n` times.
-- `any()` Mark the function call as verified if it was called, but don't fail if it wasn't called.
-- `never()` Ensure the function was never called. It's often better to use `verifyNoMoreInteractions()` instead.
-
-#### Configure the mock to return a value
-
-Here's how to return a value from `speak()`:
-
-```dart
-void main() {
-  final dog = new MockDog();
-  when(dog.speak()).thenReturn("woof");
-  final s = dog.speak();
-  print("$s");
-  verify(dog.speak()).once();
-  verifyNoMoreInteractions(dog);
-}
-```
-
-What if `speak()` took the name of an animal as a parameter? When typed_mock tracks a function call, the call tracking is based on the function name and the parameters. For example:
-
-
-```dart
-import 'package:typed_mock/typed_mock.dart';
-
-abstract class Animal {
-  String speak();
-}
-
-class MockAnimal extends TypedMock implements Animal {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-void main() {
-  final animal = new MockAnimal();
-  when(animal.speak("dog")).thenReturn("woof");
-  final s = animal.speak();
-  print("$s");
-  verify(animal.speak("dog")).once();
-}
-```
-
-Note that you can reset the call and verify tracking using `resetInteractions()`. However, there is no way to reset the `when()` calls. Create a new mock instead.
-
-You can define different results based on the value of the parameter. Notice that the calls to `verify()` explicitly states the parameter value:
-
-```dart
-void main() {
-  final animal = new MockAnimal();
-  when(animal.speak("cat")).thenReturn("meow");
-  when(animal.speak("dog")).thenReturn("woof");
-  final s = animal.speak("cat"); // Prints: meow
-  verify(animal.speak("cat")).once();
-  verify(animal.speak("dog")).never();
-}
-```
-
-#### Match any value for a parameter
-
-Sometimes you don't care about the exact value of the parameter. That's when `anyString` is used, along with its siblings `anyInt`, `anyBool` and `anyObject`.
-
-The value `anyString` is a matcher that matches any String value. For example, here's how to use `anyString` in a call to `when()`:
-
-```dart
-void main() {
-  final animal = new MockAnimal();
-  when(animal.speak(anyString)).thenReturn("meow");
-  final s1 = animal.speak("cat");
-  final s2 = animal.speak("dog");
-  print("$s1 $s2"); // Prints: meow meow
-  verify(animal.speak(anyString)).times(2);
-}
-```
-
-You can also use `anyString` in `verify()` calls, even if the `when()` calls use exact values. For example:
-
-```dart
-void main() {
-  final animal = new MockAnimal();
-  when(animal.speak("cat")).thenReturn("meow");
-  when(animal.speak("dog")).thenReturn("woof");
-  var s
-  s = animal.speak("cat");
-  s = animal.speak("cat");
-  s = animal.speak("dog");
-  verify(animal.speak(anyString)).times(3);
-}
-```
-
-You can use `anyString` as the parameter for calculated values:
-```dart
-  when(animal.speak(anyString)).thenInvoke((String s) => 'The $s speaks!');
-```
-
-In addition to `thenReturn()` and `thenInvoke()`, typed_mock supports `thenReturnList()` and `thenThrow()`. See the link at the end of this document for examples.
-
-#### Mocking operator[] and operator[]=
-
-The typed_mock package is able to track set and get access with operators `[]=` and `[]`, respectively. There's nothing special about these operators - they are just functions with non-alphanumeric names that takes two or one parameters. As with other functions, typed_mock tracks both the index and the value as needed. Note the syntax to verify that a particular array element was assigned a particular value. The act of assigning true is tracked separately from the act of assigning false. The syntax is straightforward.
-
-```dart
-import 'package:typed_mock/typed_mock.dart';
-
-abstract class Tracker {
-  operator [](int index);
-  operator []=(int index, bool b);
-}
-
-class MockTracker extends TypedMock implements Tracker {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-void main() {
-  final tracker = new MockTracker();
-  tracker[2] = true;
-  when(tracker[3]).thenReturn(false);
-  when(tracker[4]).thenReturn(true);
-  bool x = tracker[3];
-  bool y = tracker[4];
-  print("$x $y");
-  verify(tracker[1] = true).never();
-  verify(tracker[2] = false).never();
-  verify(tracker[2] = true).once();
-  verify(tracker[3]).once();
-  verify(tracker[4]).once();
-  verify(tracker[5]).never();
-}
-```
-
-#### Passing mocks as closures
-
-Passing a mock as a function parameter may not behave as you expect because a hidden function is called in the mock to get the closure. The solution is to wrap the call in a separate closure. For example, the call to `verifyNoMoreInteractions()` fails because the reference to `dog.speak` caused a hidden function to be called in `MockDog`.
-
-```dart
-void doSomething(String myfunc()) {}
-
-void main() {
-  final dog = new MockDog();
-  doSomething(dog.speak);
-  verifyNoMoreInteractions(dog);
-}
-```
-
-The solution is as follows:
-
-```dart
-void doSomething(String myfunc()) {}
-
-void main() {
-  final dog = new MockDog();
-  doSomething(() => dog.speak());
-  verifyNoMoreInteractions(dog);
-}
-```
-
-## More Information
-
-For additional examples, see the [unit tests](https://github.com/dart-lang/sdk/blob/master/pkg/typed_mock/test/typed_mock_test.dart).
diff --git a/pkg/typed_mock/lib/typed_mock.dart b/pkg/typed_mock/lib/typed_mock.dart
deleted file mode 100644
index b16420e..0000000
--- a/pkg/typed_mock/lib/typed_mock.dart
+++ /dev/null
@@ -1,426 +0,0 @@
-library typed_mock;
-
-_InvocationMatcher _lastMatcher;
-
-/// Enables stubbing methods.
-///
-/// Use it when you want the mock to return a particular value when a particular
-/// method, getter or setter is called.
-///
-///     when(obj.testProperty).thenReturn(10);
-///     expect(obj.testProperty, 10); // pass
-///
-/// You can specify multiple matchers, which are checked one after another.
-///
-///     when(obj.testMethod(anyInt)).thenReturn('was int');
-///     when(obj.testMethod(anyString)).thenReturn('was String');
-///     expect(obj.testMethod(42), 'was int'); // pass
-///     expect(obj.testMethod('foo'), 'was String'); // pass
-///
-/// You can even provide a function to calculate results.
-/// Function can be also used to capture invocation arguments (if you test some
-/// consumer).
-///
-///     when(obj.testMethod(anyInt)).thenInvoke((int p) => 10 + p);
-///     expect(obj.testMethod(1), 11); // pass
-///     expect(obj.testMethod(5), 15); // pass
-Behavior when(_ignored) {
-  try {
-    var mock = _lastMatcher._mock;
-    mock._removeLastInvocation();
-    // set behavior
-    var behavior = new Behavior._(_lastMatcher);
-    _lastMatcher._behavior = behavior;
-    return behavior;
-  } finally {
-    // clear to prevent memory leak
-    _lastMatcher = null;
-  }
-}
-
-/// Clears all interactions remembered so far.
-resetInteractions(TypedMock mock) {
-  mock._invocations.clear();
-  mock._verifiedInvocations.clear();
-}
-
-/// Verifies certain behavior happened a specified number of times.
-Verifier verify(_ignored) {
-  try {
-    var mock = _lastMatcher._mock;
-    mock._removeLastInvocation();
-    // set verifier
-    return new Verifier._(mock, _lastMatcher);
-  } finally {
-    // clear to prevent memory leak
-    _lastMatcher = null;
-  }
-}
-
-/// Verifies that the given mock doesn't have any unverified interaction.
-void verifyNoMoreInteractions(TypedMock mock) {
-  var notVerified = mock._computeNotVerifiedInvocations();
-  // OK
-  if (notVerified.isEmpty) {
-    return;
-  }
-  // fail
-  var invocationsString = _getInvocationsString(notVerified);
-  throw new VerifyError('Unexpected interactions:\n$invocationsString');
-}
-
-/// Verifies that no interactions happened on the given mock.
-void verifyZeroInteractions(TypedMock mock) {
-  var invocations = mock._invocations;
-  // OK
-  if (invocations.isEmpty) {
-    return;
-  }
-  // fail
-  var invocationsString = _getInvocationsString(invocations);
-  throw new VerifyError('Unexpected interactions:\n$invocationsString');
-}
-
-/// [VerifyError] is thrown when one of the [verify] checks fails.
-class VerifyError {
-  final String message;
-  VerifyError(this.message);
-  String toString() => 'VerifyError: $message';
-}
-
-String _getInvocationsString(Iterable<Invocation> invocations) {
-  var buffer = new StringBuffer();
-  invocations.forEach((invocation) {
-    var member = invocation.memberName;
-    buffer.write(member);
-    buffer.write(' ');
-    buffer.write(invocation.positionalArguments);
-    buffer.write(' ');
-    buffer.write(invocation.namedArguments);
-    buffer.writeln();
-  });
-  return buffer.toString();
-}
-
-class _InvocationMatcher {
-  final Symbol _member;
-  final TypedMock _mock;
-  final List<ArgumentMatcher> _matchers = [];
-
-  Behavior _behavior;
-
-  _InvocationMatcher(this._mock, this._member, Invocation invocation) {
-    invocation.positionalArguments.forEach((argument) {
-      ArgumentMatcher matcher;
-      if (argument is ArgumentMatcher) {
-        matcher = argument;
-      } else {
-        matcher = new _ArgumentMatcher_equals(argument);
-      }
-      _matchers.add(matcher);
-    });
-  }
-
-  bool match(Invocation invocation) {
-    var arguments = invocation.positionalArguments;
-    if (arguments.length != _matchers.length) {
-      return false;
-    }
-    for (int i = 0; i < _matchers.length; i++) {
-      var matcher = _matchers[i];
-      var argument = arguments[i];
-      if (!matcher.matches(argument)) {
-        return false;
-      }
-    }
-    return true;
-  }
-}
-
-class Behavior {
-  final _InvocationMatcher _matcher;
-
-  Behavior._(this._matcher);
-
-  bool _thenFunctionEnabled = false;
-  Function _thenFunction;
-
-  bool _returnAlwaysEnabled = false;
-  var _returnAlways;
-
-  bool _returnListEnabled = false;
-  List _returnList;
-  int _returnListIndex;
-
-  bool _throwExceptionEnabled = false;
-  var _throwException;
-
-  /// Invokes the given [function] with actual arguments and returns its result.
-  Behavior thenInvoke(Function function) {
-    _reset();
-    _thenFunctionEnabled = true;
-    _thenFunction = function;
-    return this;
-  }
-
-  /// Returns the specific value.
-  Behavior thenReturn(value) {
-    _reset();
-    _returnAlwaysEnabled = true;
-    _returnAlways = value;
-    return this;
-  }
-
-  /// Returns values from the [list] starting from first to the last.
-  /// If the end of list is reached a [StateError] is thrown.
-  Behavior thenReturnList(List list) {
-    _reset();
-    _returnListEnabled = true;
-    _returnList = list;
-    _returnListIndex = 0;
-    return this;
-  }
-
-  /// Throws the specified [exception] object.
-  Behavior thenThrow(exception) {
-    _reset();
-    _throwExceptionEnabled = true;
-    _throwException = exception;
-    return this;
-  }
-
-  _reset() {
-    _thenFunctionEnabled = false;
-    _returnAlwaysEnabled = false;
-    _returnListEnabled = false;
-    _throwExceptionEnabled = false;
-  }
-
-  dynamic _getReturnValue(Invocation invocation) {
-    // function
-    if (_thenFunctionEnabled) {
-      return Function.apply(_thenFunction, invocation.positionalArguments,
-          invocation.namedArguments);
-    }
-    // always
-    if (_returnAlwaysEnabled) {
-      return _returnAlways;
-    }
-    // list
-    if (_returnListEnabled) {
-      if (_returnListIndex >= _returnList.length) {
-        throw new StateError('All ${_returnList.length} elements for '
-            '${_matcher._member} from $_returnList have been exhausted.');
-      }
-      return _returnList[_returnListIndex++];
-    }
-    // exception
-    if (_throwExceptionEnabled) {
-      throw _throwException;
-    }
-    // no value
-    return null;
-  }
-}
-
-class Verifier {
-  final TypedMock _mock;
-  final _InvocationMatcher _matcher;
-
-  Verifier._(this._mock, this._matcher);
-
-  /// Marks matching interactions as verified and never fails.
-  void any() {
-    // mark as verified, but don't check the actual count
-    _count();
-  }
-
-  /// Verifies that there was no matching interactions.
-  void never() {
-    times(0);
-  }
-
-  /// Verifies that there was exactly one matching interaction.
-  void once() {
-    times(1);
-  }
-
-  /// Verifies that there was the specified number of matching interactions.
-  void times(int expected) {
-    var times = _count();
-    if (times != expected) {
-      var member = _matcher._member;
-      throw new VerifyError('$expected expected, but $times'
-          ' invocations of $member recorded.');
-    }
-  }
-
-  /// Verifies that there was at least the specified number of matching
-  /// interactions.
-  void atLeast(int expected) {
-    var times = _count();
-    if (times < expected) {
-      var member = _matcher._member;
-      throw new VerifyError('At least $expected expected, but only $times'
-          ' invocations of $member recorded.');
-    }
-  }
-
-  /// Verifies that there was at least one matching interaction.
-  void atLeastOnce() {
-    var times = _count();
-    if (times == 0) {
-      var member = _matcher._member;
-      throw new VerifyError('At least one expected, but only zero'
-          ' invocations of $member recorded.');
-    }
-  }
-
-  /// Verifies that there was at most the specified number of matching
-  /// interactions.
-  void atMost(int expected) {
-    var times = _count();
-    if (times > expected) {
-      var member = _matcher._member;
-      throw new VerifyError('At most $expected expected, but $times'
-          ' invocations of $member recorded.');
-    }
-  }
-
-  int _count() {
-    var times = 0;
-    _mock._invocations.forEach((invocation) {
-      if (invocation.memberName != _matcher._member) {
-        return;
-      }
-      if (!_matcher.match(invocation)) {
-        return;
-      }
-      _mock._verifiedInvocations.add(invocation);
-      times++;
-    });
-    return times;
-  }
-}
-
-/// A class to extend mocks from.
-/// It supports specifying behavior using [when] and validation of interactions
-/// using [verify].
-///
-///     abstract class Name {
-///       String get firstName;
-///       String get lastName;
-///     }
-///     class NameMock extends TypedMock implements Name {
-///       noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-///     }
-class TypedMock {
-  final Map<Symbol, List<_InvocationMatcher>> _matchersMap = {};
-
-  final List<Invocation> _invocations = [];
-  final Set<Invocation> _verifiedInvocations = new Set<Invocation>();
-
-  noSuchMethod(Invocation invocation) {
-    _invocations.add(invocation);
-    var member = invocation.memberName;
-    // prepare invocation matchers
-    var matchers = _matchersMap[member];
-    if (matchers == null) {
-      matchers = [];
-      _matchersMap[member] = matchers;
-    }
-    // check if there is a matcher
-    for (var matcher in matchers) {
-      if (matcher.match(invocation)) {
-        _lastMatcher = matcher;
-        // generate value if there is a behavior
-        if (matcher._behavior != null) {
-          return matcher._behavior._getReturnValue(invocation);
-        }
-        // probably verification
-        return null;
-      }
-    }
-    // add a new matcher
-    var matcher = new _InvocationMatcher(this, member, invocation);
-    matchers.add(matcher);
-    _lastMatcher = matcher;
-  }
-
-  Iterable<Invocation> _computeNotVerifiedInvocations() {
-    notVerified(e) => !_verifiedInvocations.contains(e);
-    return _invocations.where(notVerified);
-  }
-
-  void _removeLastInvocation() {
-    _invocations.removeLast();
-  }
-}
-
-/// [ArgumentMatcher] checks whether the given argument satisfies some
-/// condition.
-abstract class ArgumentMatcher {
-  const ArgumentMatcher();
-
-  /// Checks whether this matcher accepts the given argument.
-  bool matches(val);
-}
-
-class _ArgumentMatcher_equals extends ArgumentMatcher {
-  final expected;
-
-  const _ArgumentMatcher_equals(this.expected);
-
-  @override
-  bool matches(val) {
-    return val == expected;
-  }
-}
-
-class _ArgumentMatcher_anyBool extends ArgumentMatcher {
-  const _ArgumentMatcher_anyBool();
-
-  @override
-  bool matches(val) {
-    return val is bool;
-  }
-}
-
-/// Matches any [bool] value.
-final anyBool = const _ArgumentMatcher_anyBool() as dynamic;
-
-class _ArgumentMatcher_anyInt extends ArgumentMatcher {
-  const _ArgumentMatcher_anyInt();
-
-  @override
-  bool matches(val) {
-    return val is int;
-  }
-}
-
-/// Matches any [int] value.
-final anyInt = const _ArgumentMatcher_anyInt() as dynamic;
-
-class _ArgumentMatcher_anyObject extends ArgumentMatcher {
-  const _ArgumentMatcher_anyObject();
-
-  @override
-  bool matches(val) {
-    return true;
-  }
-}
-
-/// Matches any [Object] (or subclass) value.
-final anyObject = const _ArgumentMatcher_anyObject() as dynamic;
-
-class _ArgumentMatcher_anyString extends ArgumentMatcher {
-  const _ArgumentMatcher_anyString();
-
-  @override
-  bool matches(val) {
-    return val is String;
-  }
-}
-
-/// Matches any [String] value.
-final anyString = const _ArgumentMatcher_anyString() as dynamic;
diff --git a/pkg/typed_mock/pubspec.yaml b/pkg/typed_mock/pubspec.yaml
deleted file mode 100644
index 937b128..0000000
--- a/pkg/typed_mock/pubspec.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: typed_mock
-version: 0.0.4
-author: Dart Team <misc@dartlang.org>
-description: A library for mocking classes using Mockito-like syntax
-homepage: http://www.dartlang.org
-environment:
-  sdk: '>=1.0.0 <2.0.0'
-dev_dependencies:
-  unittest: '>=0.10.0 <0.12.0'
diff --git a/pkg/typed_mock/test/typed_mock_test.dart b/pkg/typed_mock/test/typed_mock_test.dart
deleted file mode 100644
index 22bddd9..0000000
--- a/pkg/typed_mock/test/typed_mock_test.dart
+++ /dev/null
@@ -1,391 +0,0 @@
-library test.typed_mock;
-
-import 'package:unittest/unittest.dart';
-
-import 'package:typed_mock/typed_mock.dart';
-
-abstract class TestInterface {
-  int get testProperty;
-  set testProperty(x);
-  int get testPropertyB;
-  String testMethod0();
-  String testMethod1(a);
-  String testMethod2(String a, int b);
-  void testMethodVoid(a);
-  int operator [](index);
-}
-
-class TestInterfaceMock extends TypedMock implements TestInterface {
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-}
-
-main() {
-  // lets make it redable
-  groupSep = ' | ';
-
-  group('VerifyError', () {
-    test('VerifyError', () {
-      var error = new VerifyError('msg');
-      expect(error.message, 'msg');
-      expect(error.toString(), 'VerifyError: msg');
-    });
-  });
-
-  group('Matchers', () {
-    test('anyBool', () {
-      expect(anyBool.matches(true), true);
-      expect(anyBool.matches(false), true);
-      expect(anyBool.matches(0), false);
-      expect(anyBool.matches('0'), false);
-    });
-
-    test('anyInt', () {
-      expect(anyInt.matches(true), false);
-      expect(anyInt.matches(-99), true);
-      expect(anyInt.matches(0), true);
-      expect(anyInt.matches(42), true);
-      expect(anyInt.matches('0'), false);
-    });
-
-    test('anyObject', () {
-      expect(anyObject.matches(true), true);
-      expect(anyObject.matches(0), true);
-      expect(anyObject.matches('0'), true);
-    });
-
-    test('anyString', () {
-      expect(anyString.matches(true), false);
-      expect(anyString.matches(0), false);
-      expect(anyString.matches(''), true);
-      expect(anyString.matches('0'), true);
-      expect(anyString.matches('abc'), true);
-    });
-  });
-
-  group('when', () {
-    TestInterface obj;
-    setUp(() {
-      obj = new TestInterfaceMock();
-    });
-
-    test('thenInvoke for getter', () {
-      when(obj.testProperty).thenInvoke(() => 123);
-      expect(obj.testProperty, 123);
-    });
-
-    test('thenInvoke for method with 1 argument', () {
-      when(obj.testMethod1(anyInt)).thenInvoke((int p) => p + 10);
-      expect(obj.testMethod1(1), 1 + 10);
-      expect(obj.testMethod1(2), 2 + 10);
-      expect(obj.testMethod1(10), 10 + 10);
-    });
-
-    test('thenReturn can replace behavior, getter', () {
-      // set a behavior
-      when(obj.testProperty).thenReturn(10);
-      expect(obj.testProperty, 10);
-      // set another behavior
-      when(obj.testProperty).thenReturn(20);
-      expect(obj.testProperty, 20);
-    });
-
-    test('thenReturn for getter', () {
-      when(obj.testProperty).thenReturn(42);
-      expect(obj.testProperty, 42);
-      expect(obj.testProperty, 42);
-    });
-
-    test('thenReturn for []', () {
-      when(obj[1]).thenReturn(10);
-      when(obj[2]).thenReturn(20);
-      when(obj[anyInt]).thenReturn(99);
-      expect(obj[1], 10);
-      expect(obj[2], 20);
-      expect(obj[5], 99);
-    });
-
-    test('thenReturn for method with 0 arguments', () {
-      when(obj.testMethod0()).thenReturn('abc');
-      expect(obj.testMethod0(), 'abc');
-      expect(obj.testMethod0(), 'abc');
-    });
-
-    test('thenReturn for method with 1 argument, anyBool', () {
-      when(obj.testMethod1(anyBool)).thenReturn('qwerty');
-      expect(obj.testMethod1(true), 'qwerty');
-      expect(obj.testMethod1(false), 'qwerty');
-    });
-
-    test('thenReturn for method with 1 argument, anyInt', () {
-      when(obj.testMethod1(anyInt)).thenReturn('qwerty');
-      expect(obj.testMethod1(2), 'qwerty');
-      expect(obj.testMethod1(3), 'qwerty');
-    });
-
-    test('thenReturn for method with 1 argument, anyObject', () {
-      when(obj.testMethod1(anyObject)).thenReturn('qwerty');
-      expect(obj.testMethod1([]), 'qwerty');
-      expect(obj.testMethod1([1, 2, 3]), 'qwerty');
-    });
-
-    test('thenReturn for method with 1 argument, argument value', () {
-      when(obj.testMethod1(10)).thenReturn('ten');
-      when(obj.testMethod1(20)).thenReturn('twenty');
-      expect(obj.testMethod1(10), 'ten');
-      expect(obj.testMethod1(10), 'ten');
-      expect(obj.testMethod1(20), 'twenty');
-      expect(obj.testMethod1(20), 'twenty');
-    });
-
-    test('thenReturn for method with 2 arguments', () {
-      when(obj.testMethod2(anyString, 10)).thenReturn('any+10');
-      when(obj.testMethod2(anyString, 20)).thenReturn('any+20');
-      when(obj.testMethod2(anyString, anyInt)).thenReturn('everything else');
-      expect(obj.testMethod2('aaa', 10), 'any+10');
-      expect(obj.testMethod2('bbb', 10), 'any+10');
-      expect(obj.testMethod2('ccc', 20), 'any+20');
-      expect(obj.testMethod2('ddd', 20), 'any+20');
-      expect(obj.testMethod2('eee', 99), 'everything else');
-    });
-
-    test('thenReturnList for getter', () {
-      when(obj.testProperty).thenReturnList(['a', 'b', 'c']);
-      expect(obj.testProperty, 'a');
-      expect(obj.testProperty, 'b');
-      expect(obj.testProperty, 'c');
-      expect(() => obj.testProperty, throwsA(new isInstanceOf<StateError>()));
-    });
-
-    test('thenThrow for getter', () {
-      Exception e = new Exception();
-      when(obj.testProperty).thenThrow(e);
-      expect(() => obj.testProperty, throwsA(e));
-    });
-
-    test('thenThrow for setter, anyInt', () {
-      Exception e = new Exception();
-      when(obj.testProperty = anyInt).thenThrow(e);
-      expect(() => (obj.testProperty = 2), throwsA(e));
-    });
-
-    test('thenThrow for setter, argument value', () {
-      Exception e1 = new Exception('one');
-      Exception e2 = new Exception('two');
-      when(obj.testProperty = 1).thenThrow(e1);
-      when(obj.testProperty = 2).thenThrow(e2);
-      expect(() => (obj.testProperty = 1), throwsA(e1));
-      expect(() => (obj.testProperty = 1), throwsA(e1));
-      expect(() => (obj.testProperty = 2), throwsA(e2));
-      expect(() => (obj.testProperty = 2), throwsA(e2));
-    });
-  });
-
-  test('resetInteractions', () {
-    TestInterfaceMock obj = new TestInterfaceMock();
-    obj.testProperty;
-    obj.testMethod0();
-    resetInteractions(obj);
-    verifyZeroInteractions(obj);
-  });
-
-  group('verify', () {
-    TestInterfaceMock obj;
-    setUp(() {
-      obj = new TestInterfaceMock();
-    });
-
-    group('times', () {
-      test('OK, getter', () {
-        obj.testProperty;
-        obj.testProperty;
-        verify(obj.testProperty).times(2);
-      });
-
-      test('OK, 2 getters', () {
-        obj.testProperty;
-        obj.testPropertyB;
-        obj.testProperty;
-        verify(obj.testProperty).times(2);
-        verify(obj.testPropertyB).times(1);
-      });
-
-      test('OK, method with 1 argument', () {
-        obj.testMethod1(10);
-        obj.testMethod1('abc');
-        obj.testMethod1(20);
-        verify(obj.testMethod1(10)).times(1);
-        verify(obj.testMethod1(20)).times(1);
-        verify(obj.testMethod1(30)).times(0);
-        verify(obj.testMethod1(anyInt)).times(2);
-        verify(obj.testMethod1(anyString)).times(1);
-        verify(obj.testMethod1(anyBool)).times(0);
-      });
-
-      test('OK, getter, with thenReturn', () {
-        when(obj.testProperty).thenReturn('abc');
-        obj.testProperty;
-        obj.testProperty;
-        verify(obj.testProperty).times(2);
-      });
-
-      test('OK, void method', () {
-        obj.testMethodVoid(10);
-        obj.testMethodVoid(20);
-        verify(obj.testMethodVoid(anyInt)).times(2);
-      });
-
-      test('mismatch, getter', () {
-        obj.testProperty;
-        obj.testProperty;
-        obj.testProperty;
-        expect(() {
-          verify(obj.testProperty).times(2);
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('never', () {
-      test('OK', () {
-        verify(obj.testProperty).never();
-      });
-      test('mismatch', () {
-        obj.testProperty;
-        expect(() {
-          verify(obj.testProperty).never();
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('any', () {
-      test('OK, 0', () {
-        verify(obj.testProperty).any();
-      });
-      test('OK, 1', () {
-        obj.testProperty;
-        verify(obj.testProperty).any();
-      });
-    });
-
-    group('once', () {
-      test('OK', () {
-        obj.testProperty;
-        verify(obj.testProperty).once();
-      });
-      test('mismatch, actually 0', () {
-        expect(() {
-          verify(obj.testProperty).once();
-        }, throwsA(_isVerifyError));
-      });
-      test('mismatch, actually 2', () {
-        obj.testProperty;
-        obj.testProperty;
-        expect(() {
-          verify(obj.testProperty).once();
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('atLeast', () {
-      test('OK, 1', () {
-        obj.testProperty;
-        verify(obj.testProperty).atLeast(1);
-      });
-      test('OK, 2', () {
-        obj.testProperty;
-        obj.testProperty;
-        verify(obj.testProperty).atLeast(1);
-        verify(obj.testProperty).atLeast(2);
-      });
-      test('mismatch', () {
-        obj.testProperty;
-        obj.testProperty;
-        expect(() {
-          verify(obj.testProperty).atLeast(10);
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('atLeastOnce', () {
-      test('OK, 1', () {
-        obj.testProperty;
-        verify(obj.testProperty).atLeastOnce();
-      });
-      test('OK, 2', () {
-        obj.testProperty;
-        obj.testProperty;
-        verify(obj.testProperty).atLeastOnce();
-      });
-      test('fail', () {
-        expect(() {
-          verify(obj.testProperty).atLeastOnce();
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('atMost', () {
-      test('OK, 0', () {
-        verify(obj.testProperty).atMost(5);
-        verify(obj.testProperty).atMost(0);
-      });
-      test('OK, 2', () {
-        obj.testProperty;
-        obj.testProperty;
-        verify(obj.testProperty).atMost(5);
-        verify(obj.testProperty).atMost(3);
-        verify(obj.testProperty).atMost(2);
-      });
-      test('mismatch', () {
-        obj.testProperty;
-        obj.testProperty;
-        obj.testProperty;
-        expect(() {
-          verify(obj.testProperty).atMost(2);
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('verifyNoMoreInteractions', () {
-      test('OK, 0', () {
-        verifyNoMoreInteractions(obj);
-      });
-      test('OK, single method, 1', () {
-        obj.testMethod1(10);
-        verify(obj.testMethod1(anyInt)).any();
-        verifyNoMoreInteractions(obj);
-      });
-      test('fail, 3', () {
-        obj.testMethod1(10);
-        obj.testMethod2('foo', 20);
-        obj.testMethod1(30);
-        expect(() {
-          verifyNoMoreInteractions(obj);
-        }, throwsA(_isVerifyError));
-      });
-    });
-
-    group('verifyZeroInteractions', () {
-      test('OK, 0', () {
-        verifyZeroInteractions(obj);
-      });
-      test('OK, 0, local var', () {
-        var obj = new TestInterfaceMock();
-        verifyZeroInteractions(obj);
-      });
-      test('fail, 1, no verify()', () {
-        obj.testMethod1(10);
-        expect(() {
-          verifyZeroInteractions(obj);
-        }, throwsA(_isVerifyError));
-      });
-      test('fail, 1, with verify()', () {
-        obj.testMethod1(10);
-        verify(obj.testMethod1(anyInt)).any();
-        expect(() {
-          verifyZeroInteractions(obj);
-        }, throwsA(_isVerifyError));
-      });
-    });
-  });
-}
-
-const _isVerifyError = const isInstanceOf<VerifyError>();
diff --git a/runtime/platform/growable_array.h b/runtime/platform/growable_array.h
index 28e04f6..32ffcc4 100644
--- a/runtime/platform/growable_array.h
+++ b/runtime/platform/growable_array.h
@@ -130,6 +130,14 @@
   // Sort the array in place.
   inline void Sort(int compare(const T*, const T*));
 
+  void StealBuffer(T** buffer, intptr_t* length) {
+    *buffer = data_;
+    *length = length_;
+    data_ = NULL;
+    length_ = 0;
+    capacity_ = 0;
+  }
+
  private:
   intptr_t length_;
   intptr_t capacity_;
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 0789457..ad2aa9f 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -157,6 +157,7 @@
 cc/StackTraceMallocHookLengthTest: Fail # Please triage.
 
 [ $compiler == dartk && $mode == release && $runtime == vm ]
+cc/CorelibIsolateStartup: Timeout, Pass
 cc/InjectNativeFields1: Fail
 cc/Service_TokenStream: Fail
 
@@ -311,12 +312,12 @@
 cc/IsolateReload_TypeIdentity: Crash
 cc/IsolateReload_TypeIdentityGeneric: Crash
 cc/IsolateReload_TypeIdentityParameter: Crash
-cc/Profiler_BasicSourcePosition: Fail
-cc/Profiler_CodeTicks: Fail
+cc/Profiler_BasicSourcePosition: Fail, Pass
+cc/Profiler_CodeTicks: Fail, Pass
 cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
-cc/Profiler_FunctionTicks: Fail
-cc/Profiler_ToggleRecordAllocation: Fail
-cc/Profiler_TrivialRecordAllocation: Fail
+cc/Profiler_FunctionTicks: Fail, Pass
+cc/Profiler_ToggleRecordAllocation: Fail, Pass
+cc/Profiler_TrivialRecordAllocation: Fail, Pass
 cc/Service_Address: Fail
 cc/Service_Code: Fail
 
@@ -332,7 +333,7 @@
 cc/IsolateReload_LibraryImportAdded: Crash # Issue 32190
 cc/IsolateReload_LibraryImportRemoved: Fail # Issue 32190
 cc/IsolateReload_LibraryLookup: Crash # Issue 32190
-cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Fail # Issue 32190
+cc/Mixin_PrivateSuperResolutionCrossLibraryShouldFail: Fail, Crash # Issue 32190
 cc/StackMapGC: Crash # Issue 32190
 dart/optimized_stacktrace_line_and_column_test: CompileTimeError # Issue 31586
 dart/optimized_stacktrace_line_test: CompileTimeError # Issue 31586
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 41175e8..449e737 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -7880,9 +7880,10 @@
     TokenPosition* position) {
   if (position != NULL) *position = TokenPosition::kNoSource;
 
-  intptr_t offset = ReaderOffset() - 1;  // EvaluateExpression needs the tag.
-  SkipStringReference();                 // read index into string table.
-  return Constant(constant_evaluator_.EvaluateExpression(offset));
+  Double& constant =
+      Double::ZoneHandle(Z, Double::New(H.DartString(ReadStringReference()),
+                                        Heap::kOld));  // read string reference.
+  return Constant(constant);
 }
 
 Fragment StreamingFlowGraphBuilder::BuildBoolLiteral(bool value,
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 0951659..f28e915 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -14,12 +14,15 @@
 
 ApiMessageReader::ApiMessageReader(Message* msg)
     : BaseReader(msg->IsRaw() ? reinterpret_cast<uint8_t*>(msg->raw_obj())
-                              : msg->data(),
-                 msg->len()),
+                              : msg->snapshot(),
+                 msg->snapshot_length()),
       zone_(NULL),
       backward_references_(kNumInitialReferences),
       vm_isolate_references_(kNumInitialReferences),
-      vm_symbol_references_(NULL) {}
+      vm_symbol_references_(NULL),
+      finalizable_data_(msg->finalizable_data()) {}
+
+ApiMessageReader::~ApiMessageReader() {}
 
 void ApiMessageReader::Init() {
   // We need to have an enclosing ApiNativeScope.
@@ -672,72 +675,77 @@
 #define READ_TYPED_DATA(type, ctype)                                           \
   {                                                                            \
     READ_TYPED_DATA_HEADER(type);                                              \
-    if (len > 0) {                                                             \
-      ctype* p = reinterpret_cast<ctype*>(object->value.as_typed_data.values); \
-      for (intptr_t i = 0; i < len; i++) {                                     \
-        p[i] = Read<ctype>();                                                  \
-      }                                                                        \
-    }                                                                          \
+    uint8_t* p =                                                               \
+        reinterpret_cast<uint8_t*>(object->value.as_typed_data.values);        \
+    ReadBytes(p, len * sizeof(ctype));                                         \
+    return object;                                                             \
+  }
+
+#define READ_EXTERNAL_TYPED_DATA(type, ctype)                                  \
+  {                                                                            \
+    READ_TYPED_DATA_HEADER(type);                                              \
+    uint8_t* p =                                                               \
+        reinterpret_cast<uint8_t*>(object->value.as_typed_data.values);        \
+    FinalizableData finalizable_data = finalizable_data_->Take();              \
+    memmove(p, finalizable_data.data, len * sizeof(ctype));                    \
+    finalizable_data.callback(NULL, NULL, finalizable_data.peer);              \
     return object;                                                             \
   }
 
     case kTypedDataInt8ArrayCid:
-    case kExternalTypedDataInt8ArrayCid: {
-      READ_TYPED_DATA_HEADER(Int8);
-      if (len > 0) {
-        uint8_t* p =
-            reinterpret_cast<uint8_t*>(object->value.as_typed_data.values);
-        ReadBytes(p, len);
-      }
-      return object;
-    }
+      READ_TYPED_DATA(Int8, int8_t);
+    case kExternalTypedDataInt8ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Int8, int8_t);
 
     case kTypedDataUint8ArrayCid:
-    case kExternalTypedDataUint8ArrayCid: {
-      READ_TYPED_DATA_HEADER(Uint8);
-      if (len > 0) {
-        uint8_t* p =
-            reinterpret_cast<uint8_t*>(object->value.as_typed_data.values);
-        ReadBytes(p, len);
-      }
-      return object;
-    }
+      READ_TYPED_DATA(Uint8, uint8_t);
+    case kExternalTypedDataUint8ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Uint8, uint8_t);
 
     case kTypedDataUint8ClampedArrayCid:
-    case kExternalTypedDataUint8ClampedArrayCid:
       READ_TYPED_DATA(Uint8Clamped, uint8_t);
+    case kExternalTypedDataUint8ClampedArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Uint8Clamped, uint8_t);
 
     case kTypedDataInt16ArrayCid:
-    case kExternalTypedDataInt16ArrayCid:
       READ_TYPED_DATA(Int16, int16_t);
+    case kExternalTypedDataInt16ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Int16, int16_t);
 
     case kTypedDataUint16ArrayCid:
-    case kExternalTypedDataUint16ArrayCid:
       READ_TYPED_DATA(Uint16, uint16_t);
+    case kExternalTypedDataUint16ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Uint16, uint16_t);
 
     case kTypedDataInt32ArrayCid:
-    case kExternalTypedDataInt32ArrayCid:
       READ_TYPED_DATA(Int32, int32_t);
+    case kExternalTypedDataInt32ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Int32, int32_t);
 
     case kTypedDataUint32ArrayCid:
-    case kExternalTypedDataUint32ArrayCid:
       READ_TYPED_DATA(Uint32, uint32_t);
+    case kExternalTypedDataUint32ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Uint32, uint32_t);
 
     case kTypedDataInt64ArrayCid:
-    case kExternalTypedDataInt64ArrayCid:
       READ_TYPED_DATA(Int64, int64_t);
+    case kExternalTypedDataInt64ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Int64, int64_t);
 
     case kTypedDataUint64ArrayCid:
-    case kExternalTypedDataUint64ArrayCid:
       READ_TYPED_DATA(Uint64, uint64_t);
+    case kExternalTypedDataUint64ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Uint64, uint64_t);
 
     case kTypedDataFloat32ArrayCid:
-    case kExternalTypedDataFloat32ArrayCid:
       READ_TYPED_DATA(Float32, float);
+    case kExternalTypedDataFloat32ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Float32, float);
 
     case kTypedDataFloat64ArrayCid:
-    case kExternalTypedDataFloat64ArrayCid:
       READ_TYPED_DATA(Float64, double);
+    case kExternalTypedDataFloat64ArrayCid:
+      READ_EXTERNAL_TYPED_DATA(Float64, double);
 
     case kGrowableObjectArrayCid: {
       // A GrowableObjectArray is serialized as its type arguments and
@@ -862,12 +870,14 @@
       object_id_(0),
       forward_list_(NULL),
       forward_list_length_(0),
-      forward_id_(0) {
+      forward_id_(0),
+      finalizable_data_(new MessageFinalizableData()) {
   ASSERT(kDartCObjectTypeMask >= Dart_CObject_kNumberOfTypes - 1);
 }
 
 ApiMessageWriter::~ApiMessageWriter() {
   ::free(forward_list_);
+  delete finalizable_data_;
 }
 
 void ApiMessageWriter::MarkCObject(Dart_CObject* object, intptr_t object_id) {
@@ -1180,17 +1190,12 @@
         case kTypedDataInt8ArrayCid:
         case kTypedDataUint8ArrayCid: {
           uint8_t* bytes = object->value.as_typed_data.values;
-          for (intptr_t i = 0; i < len; i++) {
-            Write<uint8_t>(bytes[i]);
-          }
+          WriteBytes(bytes, len);
           break;
         }
         case kTypedDataUint32ArrayCid: {
-          uint32_t* words =
-              reinterpret_cast<uint32_t*>(object->value.as_typed_data.values);
-          for (intptr_t i = 0; i < len; i++) {
-            Write<uint32_t>(words[i]);
-          }
+          uint8_t* bytes = object->value.as_typed_data.values;
+          WriteBytes(bytes, len * sizeof(uint32_t));
           break;
         }
         default:
@@ -1219,9 +1224,8 @@
       Dart_WeakPersistentHandleFinalizer callback =
           object->value.as_external_typed_data.callback;
       WriteSmi(length);
-      WriteRawPointerValue(reinterpret_cast<intptr_t>(data));
-      WriteRawPointerValue(reinterpret_cast<intptr_t>(peer));
-      WriteRawPointerValue(reinterpret_cast<intptr_t>(callback));
+      finalizable_data_->Put(length, reinterpret_cast<void*>(data), peer,
+                             callback);
       break;
     }
     case Dart_CObject_kSendPort: {
@@ -1255,6 +1259,7 @@
     free(buffer());
     return NULL;
   }
+
   // Write out all objects that were added to the forward list and have
   // not been serialized yet. These would typically be fields of arrays.
   // NOTE: The forward list might grow as we process the list.
@@ -1266,8 +1271,12 @@
       return NULL;
     }
   }
+
   UnmarkAllCObjects(object);
-  return new Message(dest_port, buffer(), BytesWritten(), priority);
+  MessageFinalizableData* finalizable_data = finalizable_data_;
+  finalizable_data_ = NULL;
+  return new Message(dest_port, buffer(), BytesWritten(), finalizable_data,
+                     priority);
 }
 
 }  // namespace dart
diff --git a/runtime/vm/dart_api_message.h b/runtime/vm/dart_api_message.h
index 349ab5f..9c9a3ab 100644
--- a/runtime/vm/dart_api_message.h
+++ b/runtime/vm/dart_api_message.h
@@ -48,7 +48,7 @@
   // Allocation of all C Heap objects is done in the zone associated with
   // the enclosing ApiNativeScope.
   explicit ApiMessageReader(Message* message);
-  ~ApiMessageReader() {}
+  ~ApiMessageReader();
 
   Dart_CObject* ReadMessage();
 
@@ -148,6 +148,9 @@
 
   Dart_CObject type_arguments_marker;
   Dart_CObject dynamic_type_marker;
+
+  MessageFinalizableData* finalizable_data_;
+
   static _Dart_CObject* singleton_uint32_typed_data_;
 };
 
@@ -190,6 +193,7 @@
   Dart_CObject** forward_list_;
   intptr_t forward_list_length_;
   intptr_t forward_id_;
+  MessageFinalizableData* finalizable_data_;
 
   DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter);
 };
diff --git a/runtime/vm/finalizable_data.h b/runtime/vm/finalizable_data.h
new file mode 100644
index 0000000..f4ae01a
--- /dev/null
+++ b/runtime/vm/finalizable_data.h
@@ -0,0 +1,59 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef RUNTIME_VM_FINALIZABLE_DATA_H_
+#define RUNTIME_VM_FINALIZABLE_DATA_H_
+
+#include "include/dart_api.h"
+#include "platform/growable_array.h"
+#include "vm/globals.h"
+
+namespace dart {
+
+struct FinalizableData {
+  void* data;
+  void* peer;
+  Dart_WeakPersistentHandleFinalizer callback;
+};
+
+class MessageFinalizableData {
+ public:
+  MessageFinalizableData() : records_(0), position_(0), external_size_(0) {}
+
+  ~MessageFinalizableData() {
+    for (intptr_t i = position_; i < records_.length(); i++) {
+      records_[i].callback(NULL, NULL, records_[i].peer);
+    }
+  }
+
+  void Put(intptr_t external_size,
+           void* data,
+           void* peer,
+           Dart_WeakPersistentHandleFinalizer callback) {
+    FinalizableData finalizable_data;
+    finalizable_data.data = data;
+    finalizable_data.peer = peer;
+    finalizable_data.callback = callback;
+    records_.Add(finalizable_data);
+    external_size_ += external_size;
+  }
+
+  FinalizableData Take() {
+    ASSERT(position_ < records_.length());
+    return records_[position_++];
+  }
+
+  intptr_t external_size() const { return external_size_; }
+
+ private:
+  MallocGrowableArray<FinalizableData> records_;
+  intptr_t position_;
+  intptr_t external_size_;
+
+  DISALLOW_COPY_AND_ASSIGN(MessageFinalizableData);
+};
+
+}  // namespace dart
+
+#endif  // RUNTIME_VM_FINALIZABLE_DATA_H_
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 0e1f65a2..3dbb929 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -117,7 +117,6 @@
 };
 #endif
 
-// TODO(zra): Allocation of Message objects should be centralized.
 static Message* SerializeMessage(Dart_Port dest_port, const Instance& obj) {
   if (ApiObjectConverter::CanConvert(obj.raw())) {
     return new Message(dest_port, obj.raw(), Message::kNormalPriority);
@@ -127,6 +126,21 @@
   }
 }
 
+static RawInstance* DeserializeMessage(Thread* thread, Message* message) {
+  if (message == NULL) {
+    return Instance::null();
+  }
+  Zone* zone = thread->zone();
+  if (message->IsRaw()) {
+    return Instance::RawCast(message->raw_obj());
+  } else {
+    MessageSnapshotReader reader(message, thread);
+    const Object& obj = Object::Handle(zone, reader.ReadObject());
+    ASSERT(!obj.IsError());
+    return Instance::RawCast(obj.raw());
+  }
+}
+
 bool IsolateVisitor::IsVMInternalIsolate(Isolate* isolate) const {
   return Isolate::IsVMInternalIsolate(isolate);
 }
@@ -2771,19 +2785,6 @@
   thread_registry()->ReturnThreadLocked(is_mutator, thread);
 }
 
-static RawInstance* DeserializeObject(Thread* thread, Message* message) {
-  if (message == NULL) {
-    return Instance::null();
-  }
-  MessageSnapshotReader reader(message, thread);
-  Zone* zone = thread->zone();
-  const Object& obj = Object::Handle(zone, reader.ReadObject());
-  ASSERT(!obj.IsError());
-  Instance& instance = Instance::Handle(zone);
-  instance ^= obj.raw();  // Can't use Instance::Cast because may be null.
-  return instance.raw();
-}
-
 static const char* NewConstChar(const char* chars) {
   size_t len = strlen(chars);
   char* mem = new char[len + 1];
@@ -2969,11 +2970,11 @@
 }
 
 RawInstance* IsolateSpawnState::BuildArgs(Thread* thread) {
-  return DeserializeObject(thread, serialized_args_);
+  return DeserializeMessage(thread, serialized_args_);
 }
 
 RawInstance* IsolateSpawnState::BuildMessage(Thread* thread) {
-  return DeserializeObject(thread, serialized_message_);
+  return DeserializeMessage(thread, serialized_message_);
 }
 
 void IsolateSpawnState::DecrementSpawnCount() {
diff --git a/runtime/vm/message.cc b/runtime/vm/message.cc
index 6fa77d8..82816de 100644
--- a/runtime/vm/message.cc
+++ b/runtime/vm/message.cc
@@ -12,18 +12,21 @@
 namespace dart {
 
 Message::Message(Dart_Port dest_port,
-                 uint8_t* data,
-                 intptr_t len,
+                 uint8_t* snapshot,
+                 intptr_t snapshot_length,
+                 MessageFinalizableData* finalizable_data,
                  Priority priority,
                  Dart_Port delivery_failure_port)
     : next_(NULL),
       dest_port_(dest_port),
       delivery_failure_port_(delivery_failure_port),
-      data_(data),
-      len_(len),
+      snapshot_(snapshot),
+      snapshot_length_(snapshot_length),
+      finalizable_data_(finalizable_data),
       priority_(priority) {
   ASSERT((priority == kNormalPriority) ||
          (delivery_failure_port == kIllegalPort));
+  ASSERT(!IsRaw());
 }
 
 Message::Message(Dart_Port dest_port,
@@ -33,19 +36,22 @@
     : next_(NULL),
       dest_port_(dest_port),
       delivery_failure_port_(delivery_failure_port),
-      data_(reinterpret_cast<uint8_t*>(raw_obj)),
-      len_(0),
+      snapshot_(reinterpret_cast<uint8_t*>(raw_obj)),
+      snapshot_length_(0),
+      finalizable_data_(NULL),
       priority_(priority) {
   ASSERT(!raw_obj->IsHeapObject() || raw_obj->IsVMHeapObject());
   ASSERT((priority == kNormalPriority) ||
          (delivery_failure_port == kIllegalPort));
+  ASSERT(IsRaw());
 }
 
 Message::~Message() {
   ASSERT(delivery_failure_port_ == kIllegalPort);
-  if (len_ > 0) {
-    free(data_);
+  if (!IsRaw()) {
+    free(snapshot_);
   }
+  delete finalizable_data_;
 }
 
 bool Message::RedirectToDeliveryFailurePort() {
@@ -221,7 +227,7 @@
     message.AddProperty("type", "Message");
     message.AddPropertyF("name", "Isolate Message (%" Px ")", current->Id());
     message.AddPropertyF("messageObjectId", "messages/%" Px "", current->Id());
-    message.AddProperty("size", current->len());
+    message.AddProperty("size", current->Size());
     message.AddProperty("index", depth++);
     message.AddPropertyF("_destinationPort", "%" Pd64 "",
                          static_cast<int64_t>(current->dest_port()));
diff --git a/runtime/vm/message.h b/runtime/vm/message.h
index db46955..51ff2551 100644
--- a/runtime/vm/message.h
+++ b/runtime/vm/message.h
@@ -7,6 +7,7 @@
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
+#include "vm/finalizable_data.h"
 #include "vm/globals.h"
 
 // Duplicated from dart_api.h to avoid including the whole header.
@@ -45,8 +46,9 @@
   // message will be disposed by calling free() once the message object is
   // being destructed (after delivery or when the receiving port is closed).
   Message(Dart_Port dest_port,
-          uint8_t* data,
-          intptr_t len,
+          uint8_t* snapshot,
+          intptr_t snapshot_length,
+          MessageFinalizableData* finalizable_data,
           Priority priority,
           Dart_Port delivery_failure_port = kIllegalPort);
 
@@ -56,22 +58,35 @@
           RawObject* raw_obj,
           Priority priority,
           Dart_Port delivery_failure_port = kIllegalPort);
+
   ~Message();
 
   Dart_Port dest_port() const { return dest_port_; }
-  uint8_t* data() const {
-    ASSERT(len_ > 0);
-    return data_;
+
+  uint8_t* snapshot() const {
+    ASSERT(!IsRaw());
+    return snapshot_;
   }
-  intptr_t len() const { return len_; }
+  intptr_t snapshot_length() const { return snapshot_length_; }
+
+  MessageFinalizableData* finalizable_data() { return finalizable_data_; }
+
+  intptr_t Size() const {
+    intptr_t size = snapshot_length_;
+    if (finalizable_data_ != NULL) {
+      size += finalizable_data_->external_size();
+    }
+    return size;
+  }
+
   RawObject* raw_obj() const {
-    ASSERT(len_ == 0);
-    return reinterpret_cast<RawObject*>(data_);
+    ASSERT(IsRaw());
+    return reinterpret_cast<RawObject*>(snapshot_);
   }
   Priority priority() const { return priority_; }
 
   bool IsOOB() const { return priority_ == Message::kOOBPriority; }
-  bool IsRaw() const { return len_ == 0; }
+  bool IsRaw() const { return snapshot_length_ == 0; }
 
   bool RedirectToDeliveryFailurePort();
 
@@ -85,8 +100,9 @@
   Message* next_;
   Dart_Port dest_port_;
   Dart_Port delivery_failure_port_;
-  uint8_t* data_;
-  intptr_t len_;
+  uint8_t* snapshot_;
+  intptr_t snapshot_length_;
+  MessageFinalizableData* finalizable_data_;
   Priority priority_;
 
   DISALLOW_COPY_AND_ASSIGN(Message);
diff --git a/runtime/vm/message_handler.cc b/runtime/vm/message_handler.cc
index 238e6f3..eb14377 100644
--- a/runtime/vm/message_handler.cc
+++ b/runtime/vm/message_handler.cc
@@ -135,7 +135,7 @@
             "\tlen:        %" Pd "\n\tsource:     (%" Pd64
             ") %s\n\tdest:       %s\n"
             "\tdest_port:  %" Pd64 "\n",
-            message->len(), static_cast<int64_t>(source_isolate->main_port()),
+            message->Size(), static_cast<int64_t>(source_isolate->main_port()),
             source_isolate->name(), name(), message->dest_port());
       } else {
         OS::Print(
@@ -144,7 +144,7 @@
             "\n\tsource:     <native code>\n"
             "\tdest:       %s\n"
             "\tdest_port:  %" Pd64 "\n",
-            message->len(), name(), message->dest_port());
+            message->Size(), name(), message->dest_port());
       }
     }
 
@@ -212,7 +212,7 @@
                                             : Message::kOOBPriority);
   Message* message = DequeueMessage(min_priority);
   while (message != NULL) {
-    intptr_t message_len = message->len();
+    intptr_t message_len = message->Size();
     if (FLAG_trace_isolates) {
       OS::Print(
           "[<] Handling message:\n"
diff --git a/runtime/vm/message_handler_test.cc b/runtime/vm/message_handler_test.cc
index 183453b..75e0077 100644
--- a/runtime/vm/message_handler_test.cc
+++ b/runtime/vm/message_handler_test.cc
@@ -113,13 +113,18 @@
   return (reinterpret_cast<TestMessageHandler*>(data))->End();
 }
 
+static Message* BlankMessage(Dart_Port dest, Message::Priority priority) {
+  return new Message(dest, reinterpret_cast<uint8_t*>(malloc(1)), 1, NULL,
+                     priority);
+}
+
 VM_UNIT_TEST_CASE(MessageHandler_PostMessage) {
   TestMessageHandler handler;
   MessageHandlerTestPeer handler_peer(&handler);
   EXPECT_EQ(0, handler.notify_count());
 
   // Post a message.
-  Message* message = new Message(1, NULL, 0, Message::kNormalPriority);
+  Message* message = BlankMessage(1, Message::kNormalPriority);
   handler_peer.PostMessage(message);
 
   // The notify callback is called.
@@ -131,7 +136,7 @@
   delete message;
 
   // Post an oob message.
-  message = new Message(1, NULL, 0, Message::kOOBPriority);
+  message = BlankMessage(1, Message::kOOBPriority);
   handler_peer.PostMessage(message);
 
   // The notify callback is called.
@@ -150,7 +155,7 @@
   EXPECT(!handler.HasOOBMessages());
 
   // Post a normal message.
-  Message* message = new Message(1, NULL, 0, Message::kNormalPriority);
+  Message* message = BlankMessage(1, Message::kNormalPriority);
   handler_peer.PostMessage(message);
   EXPECT(!handler.HasOOBMessages());
   {
@@ -160,7 +165,7 @@
   }
 
   // Post an oob message.
-  message = new Message(1, NULL, 0, Message::kOOBPriority);
+  message = BlankMessage(1, Message::kOOBPriority);
   handler_peer.PostMessage(message);
   EXPECT(handler.HasOOBMessages());
   {
@@ -178,9 +183,9 @@
 VM_UNIT_TEST_CASE(MessageHandler_ClosePort) {
   TestMessageHandler handler;
   MessageHandlerTestPeer handler_peer(&handler);
-  Message* message1 = new Message(1, NULL, 0, Message::kNormalPriority);
+  Message* message1 = BlankMessage(1, Message::kNormalPriority);
   handler_peer.PostMessage(message1);
-  Message* message2 = new Message(2, NULL, 0, Message::kNormalPriority);
+  Message* message2 = BlankMessage(2, Message::kNormalPriority);
   handler_peer.PostMessage(message2);
 
   handler_peer.ClosePort(1);
@@ -195,9 +200,9 @@
 VM_UNIT_TEST_CASE(MessageHandler_CloseAllPorts) {
   TestMessageHandler handler;
   MessageHandlerTestPeer handler_peer(&handler);
-  Message* message1 = new Message(1, NULL, 0, Message::kNormalPriority);
+  Message* message1 = BlankMessage(1, Message::kNormalPriority);
   handler_peer.PostMessage(message1);
-  Message* message2 = new Message(2, NULL, 0, Message::kNormalPriority);
+  Message* message2 = BlankMessage(2, Message::kNormalPriority);
   handler_peer.PostMessage(message2);
 
   handler_peer.CloseAllPorts();
@@ -212,13 +217,13 @@
   Dart_Port port1 = PortMap::CreatePort(&handler);
   Dart_Port port2 = PortMap::CreatePort(&handler);
   Dart_Port port3 = PortMap::CreatePort(&handler);
-  Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+  Message* message1 = BlankMessage(port1, Message::kNormalPriority);
   handler_peer.PostMessage(message1);
-  Message* oob_message1 = new Message(port2, NULL, 0, Message::kOOBPriority);
+  Message* oob_message1 = BlankMessage(port2, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message1);
-  Message* message2 = new Message(port2, NULL, 0, Message::kNormalPriority);
+  Message* message2 = BlankMessage(port2, Message::kNormalPriority);
   handler_peer.PostMessage(message2);
-  Message* oob_message2 = new Message(port3, NULL, 0, Message::kOOBPriority);
+  Message* oob_message2 = BlankMessage(port3, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message2);
 
   // We handle both oob messages and a single normal message.
@@ -243,11 +248,11 @@
   Dart_Port port1 = PortMap::CreatePort(&handler);
   Dart_Port port2 = PortMap::CreatePort(&handler);
   Dart_Port port3 = PortMap::CreatePort(&handler);
-  Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+  Message* message1 = BlankMessage(port1, Message::kNormalPriority);
   handler_peer.PostMessage(message1);
-  Message* oob_message1 = new Message(port2, NULL, 0, Message::kOOBPriority);
+  Message* oob_message1 = BlankMessage(port2, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message1);
-  Message* oob_message2 = new Message(port3, NULL, 0, Message::kOOBPriority);
+  Message* oob_message2 = BlankMessage(port3, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message2);
 
   // When we get an error, we continue processing oob messages but
@@ -274,13 +279,13 @@
   Dart_Port port2 = PortMap::CreatePort(&handler);
   Dart_Port port3 = PortMap::CreatePort(&handler);
   Dart_Port port4 = PortMap::CreatePort(&handler);
-  Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+  Message* message1 = BlankMessage(port1, Message::kNormalPriority);
   handler_peer.PostMessage(message1);
-  Message* oob_message1 = new Message(port2, NULL, 0, Message::kOOBPriority);
+  Message* oob_message1 = BlankMessage(port2, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message1);
-  Message* oob_message2 = new Message(port3, NULL, 0, Message::kOOBPriority);
+  Message* oob_message2 = BlankMessage(port3, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message2);
-  Message* oob_message3 = new Message(port4, NULL, 0, Message::kOOBPriority);
+  Message* oob_message3 = BlankMessage(port4, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message3);
 
   // When we get a shutdown message, we stop processing all messages.
@@ -304,13 +309,13 @@
   Dart_Port port2 = PortMap::CreatePort(&handler);
   Dart_Port port3 = PortMap::CreatePort(&handler);
   Dart_Port port4 = PortMap::CreatePort(&handler);
-  Message* message1 = new Message(port1, NULL, 0, Message::kNormalPriority);
+  Message* message1 = BlankMessage(port1, Message::kNormalPriority);
   handler_peer.PostMessage(message1);
-  Message* message2 = new Message(port2, NULL, 0, Message::kNormalPriority);
+  Message* message2 = BlankMessage(port2, Message::kNormalPriority);
   handler_peer.PostMessage(message2);
-  Message* oob_message1 = new Message(port3, NULL, 0, Message::kOOBPriority);
+  Message* oob_message1 = BlankMessage(port3, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message1);
-  Message* oob_message2 = new Message(port4, NULL, 0, Message::kOOBPriority);
+  Message* oob_message2 = BlankMessage(port4, Message::kOOBPriority);
   handler_peer.PostMessage(oob_message2);
 
   // We handle both oob messages but no normal messages.
@@ -333,8 +338,7 @@
   MessageHandler* handler = info->handler;
   MessageHandlerTestPeer handler_peer(handler);
   for (int i = 0; i < info->count; i++) {
-    Message* message =
-        new Message(info->ports[i], NULL, 0, Message::kNormalPriority);
+    Message* message = BlankMessage(info->ports[i], Message::kNormalPriority);
     handler_peer.PostMessage(message);
   }
 }
@@ -352,7 +356,7 @@
   handler.Run(&pool, TestStartFunction, TestEndFunction,
               reinterpret_cast<uword>(&handler));
   Dart_Port port = PortMap::CreatePort(&handler);
-  Message* message = new Message(port, NULL, 0, Message::kNormalPriority);
+  Message* message = BlankMessage(port, Message::kNormalPriority);
   handler_peer.PostMessage(message);
 
   // Wait for the first message to be handled.
diff --git a/runtime/vm/message_test.cc b/runtime/vm/message_test.cc
index 24375fd..c07f78c 100644
--- a/runtime/vm/message_test.cc
+++ b/runtime/vm/message_test.cc
@@ -29,7 +29,7 @@
   const char* str6 = "msg6";
 
   // Add two messages.
-  Message* msg1 = new Message(port, AllocMsg(str1), strlen(str1) + 1,
+  Message* msg1 = new Message(port, AllocMsg(str1), strlen(str1) + 1, NULL,
                               Message::kNormalPriority);
   queue.Enqueue(msg1, false);
   EXPECT(queue.Length() == 1);
@@ -39,7 +39,7 @@
   EXPECT(it.Next() == msg1);
   EXPECT(!it.HasNext());
 
-  Message* msg2 = new Message(port, AllocMsg(str2), strlen(str2) + 1,
+  Message* msg2 = new Message(port, AllocMsg(str2), strlen(str2) + 1, NULL,
                               Message::kNormalPriority);
   queue.Enqueue(msg2, false);
   EXPECT(queue.Length() == 2);
@@ -61,7 +61,7 @@
   // Remove message 1
   Message* msg = queue.Dequeue();
   EXPECT(msg != NULL);
-  EXPECT_STREQ(str1, reinterpret_cast<char*>(msg->data()));
+  EXPECT_STREQ(str1, reinterpret_cast<char*>(msg->snapshot()));
   EXPECT(!queue.IsEmpty());
 
   it.Reset(&queue);
@@ -71,47 +71,47 @@
   // Remove message 2
   msg = queue.Dequeue();
   EXPECT(msg != NULL);
-  EXPECT_STREQ(str2, reinterpret_cast<char*>(msg->data()));
+  EXPECT_STREQ(str2, reinterpret_cast<char*>(msg->snapshot()));
   EXPECT(queue.IsEmpty());
 
   Message* msg3 = new Message(Message::kIllegalPort, AllocMsg(str3),
-                              strlen(str3) + 1, Message::kNormalPriority);
+                              strlen(str3) + 1, NULL, Message::kNormalPriority);
   queue.Enqueue(msg3, true);
   EXPECT(!queue.IsEmpty());
 
   Message* msg4 = new Message(Message::kIllegalPort, AllocMsg(str4),
-                              strlen(str4) + 1, Message::kNormalPriority);
+                              strlen(str4) + 1, NULL, Message::kNormalPriority);
   queue.Enqueue(msg4, true);
   EXPECT(!queue.IsEmpty());
 
-  Message* msg5 = new Message(port, AllocMsg(str5), strlen(str5) + 1,
+  Message* msg5 = new Message(port, AllocMsg(str5), strlen(str5) + 1, NULL,
                               Message::kNormalPriority);
   queue.Enqueue(msg5, false);
   EXPECT(!queue.IsEmpty());
 
   Message* msg6 = new Message(Message::kIllegalPort, AllocMsg(str6),
-                              strlen(str6) + 1, Message::kNormalPriority);
+                              strlen(str6) + 1, NULL, Message::kNormalPriority);
   queue.Enqueue(msg6, true);
   EXPECT(!queue.IsEmpty());
 
   msg = queue.Dequeue();
   EXPECT(msg != NULL);
-  EXPECT_STREQ(str3, reinterpret_cast<char*>(msg->data()));
+  EXPECT_STREQ(str3, reinterpret_cast<char*>(msg->snapshot()));
   EXPECT(!queue.IsEmpty());
 
   msg = queue.Dequeue();
   EXPECT(msg != NULL);
-  EXPECT_STREQ(str4, reinterpret_cast<char*>(msg->data()));
+  EXPECT_STREQ(str4, reinterpret_cast<char*>(msg->snapshot()));
   EXPECT(!queue.IsEmpty());
 
   msg = queue.Dequeue();
   EXPECT(msg != NULL);
-  EXPECT_STREQ(str6, reinterpret_cast<char*>(msg->data()));
+  EXPECT_STREQ(str6, reinterpret_cast<char*>(msg->snapshot()));
   EXPECT(!queue.IsEmpty());
 
   msg = queue.Dequeue();
   EXPECT(msg != NULL);
-  EXPECT_STREQ(str5, reinterpret_cast<char*>(msg->data()));
+  EXPECT_STREQ(str5, reinterpret_cast<char*>(msg->snapshot()));
   EXPECT(queue.IsEmpty());
 
   delete msg1;
@@ -131,10 +131,10 @@
   const char* str2 = "msg2";
 
   // Add two messages.
-  Message* msg1 = new Message(port1, AllocMsg(str1), strlen(str1) + 1,
+  Message* msg1 = new Message(port1, AllocMsg(str1), strlen(str1) + 1, NULL,
                               Message::kNormalPriority);
   queue.Enqueue(msg1, false);
-  Message* msg2 = new Message(port2, AllocMsg(str2), strlen(str2) + 1,
+  Message* msg2 = new Message(port2, AllocMsg(str2), strlen(str2) + 1, NULL,
                               Message::kNormalPriority);
   queue.Enqueue(msg2, false);
 
diff --git a/runtime/vm/port_test.cc b/runtime/vm/port_test.cc
index 68fdb63..ac65fd9 100644
--- a/runtime/vm/port_test.cc
+++ b/runtime/vm/port_test.cc
@@ -134,7 +134,7 @@
 
   EXPECT(PortMap::PostMessage(
       new Message(port, reinterpret_cast<uint8_t*>(strdup(message)),
-                  message_len, Message::kNormalPriority)));
+                  message_len, NULL, Message::kNormalPriority)));
 
   // Check that the message notify callback was called.
   EXPECT_EQ(1, handler.notify_count);
@@ -178,7 +178,7 @@
 
   EXPECT(!PortMap::PostMessage(
       new Message(port, reinterpret_cast<uint8_t*>(strdup(message)),
-                  message_len, Message::kNormalPriority)));
+                  message_len, NULL, Message::kNormalPriority)));
 }
 
 }  // namespace dart
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index a18a345..3c0f7a5 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+#include "vm/message.h"
 #include "vm/native_entry.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
@@ -2544,11 +2545,6 @@
   writer->Write<double>(ptr()->value_[1]);
 }
 
-#define TYPED_DATA_READ(setter, type, element_size)                            \
-  for (intptr_t i = 0; i < length_in_bytes; i += element_size) {               \
-    result.Set##setter(i, reader->Read<type>());                               \
-  }
-
 RawTypedData* TypedData::ReadFrom(SnapshotReader* reader,
                                   intptr_t object_id,
                                   intptr_t tags,
@@ -2565,51 +2561,10 @@
   // Setup the array elements.
   intptr_t element_size = ElementSizeInBytes(cid);
   intptr_t length_in_bytes = len * element_size;
-  switch (cid) {
-    case kTypedDataInt8ArrayCid:
-    case kTypedDataUint8ArrayCid:
-    case kTypedDataUint8ClampedArrayCid: {
-      NoSafepointScope no_safepoint;
-      uint8_t* data = reinterpret_cast<uint8_t*>(result.DataAddr(0));
-      reader->ReadBytes(data, length_in_bytes);
-      break;
-    }
-    case kTypedDataInt16ArrayCid:
-      TYPED_DATA_READ(Int16, int16_t, element_size);
-      break;
-    case kTypedDataUint16ArrayCid:
-      TYPED_DATA_READ(Uint16, uint16_t, element_size);
-      break;
-    case kTypedDataInt32ArrayCid:
-      TYPED_DATA_READ(Int32, int32_t, element_size);
-      break;
-    case kTypedDataUint32ArrayCid:
-      TYPED_DATA_READ(Uint32, uint32_t, element_size);
-      break;
-    case kTypedDataInt64ArrayCid:
-      TYPED_DATA_READ(Int64, int64_t, element_size);
-      break;
-    case kTypedDataUint64ArrayCid:
-      TYPED_DATA_READ(Uint64, uint64_t, element_size);
-      break;
-    case kTypedDataFloat32ArrayCid:
-      TYPED_DATA_READ(Float32, float, element_size);
-      break;
-    case kTypedDataFloat64ArrayCid:
-      TYPED_DATA_READ(Float64, double, element_size);
-      break;
-    case kTypedDataInt32x4ArrayCid:
-      TYPED_DATA_READ(Int32, int32_t, sizeof(int32_t));
-      break;
-    case kTypedDataFloat32x4ArrayCid:
-      TYPED_DATA_READ(Float32, float, sizeof(float));
-      break;
-    case kTypedDataFloat64x2ArrayCid:
-      TYPED_DATA_READ(Float64, double, sizeof(double));
-      break;
-    default:
-      UNREACHABLE();
-  }
+  NoSafepointScope no_safepoint;
+  uint8_t* data = reinterpret_cast<uint8_t*>(result.DataAddr(0));
+  reader->ReadBytes(data, length_in_bytes);
+
   // If it is a canonical constant make it one.
   // When reading a full snapshot we don't need to canonicalize the object
   // as it would already be a canonical object.
@@ -2622,7 +2577,6 @@
   }
   return result.raw();
 }
-#undef TYPED_DATA_READ
 
 RawExternalTypedData* ExternalTypedData::ReadFrom(SnapshotReader* reader,
                                                   intptr_t object_id,
@@ -2632,26 +2586,27 @@
   ASSERT(!Snapshot::IsFull(kind));
   intptr_t cid = RawObject::ClassIdTag::decode(tags);
   intptr_t length = reader->ReadSmiValue();
-  uint8_t* data = reinterpret_cast<uint8_t*>(reader->ReadRawPointerValue());
+
+  FinalizableData finalizable_data =
+      static_cast<MessageSnapshotReader*>(reader)->finalizable_data()->Take();
+  uint8_t* data = reinterpret_cast<uint8_t*>(finalizable_data.data);
   ExternalTypedData& obj =
       ExternalTypedData::ZoneHandle(ExternalTypedData::New(cid, data, length));
   reader->AddBackRef(object_id, &obj, kIsDeserialized);
-  void* peer = reinterpret_cast<void*>(reader->ReadRawPointerValue());
-  Dart_WeakPersistentHandleFinalizer callback =
-      reinterpret_cast<Dart_WeakPersistentHandleFinalizer>(
-          reader->ReadRawPointerValue());
   intptr_t external_size = obj.LengthInBytes();
-  obj.AddFinalizer(peer, callback, external_size);
+  obj.AddFinalizer(finalizable_data.peer, finalizable_data.callback,
+                   external_size);
   return obj.raw();
 }
 
-#define TYPED_DATA_WRITE(type, len)                                            \
-  {                                                                            \
-    type* data = reinterpret_cast<type*>(ptr()->data());                       \
-    for (intptr_t i = 0; i < (len); i++) {                                     \
-      writer->Write(data[i]);                                                  \
-    }                                                                          \
-  }
+// This function's name can appear in Observatory.
+static void IsolateMessageTypedDataFinalizer(void* isolate_callback_data,
+                                             Dart_WeakPersistentHandle handle,
+                                             void* buffer) {
+  free(buffer);
+}
+
+static const intptr_t kExternalizeTypedDataThreshold = 4 * KB;
 
 void RawTypedData::WriteTo(SnapshotWriter* writer,
                            intptr_t object_id,
@@ -2659,139 +2614,203 @@
                            bool as_reference) {
   ASSERT(writer != NULL);
   intptr_t cid = this->GetClassId();
-  intptr_t len = Smi::Value(ptr()->length_);
+  intptr_t length = Smi::Value(ptr()->length_);  // In elements.
+  intptr_t external_cid;
+  intptr_t bytes;
+  switch (cid) {
+    case kTypedDataInt8ArrayCid:
+      external_cid = kExternalTypedDataInt8ArrayCid;
+      bytes = length * sizeof(int8_t);
+      break;
+    case kTypedDataUint8ArrayCid:
+      external_cid = kExternalTypedDataUint8ArrayCid;
+      bytes = length * sizeof(uint8_t);
+      break;
+    case kTypedDataUint8ClampedArrayCid:
+      external_cid = kExternalTypedDataUint8ClampedArrayCid;
+      bytes = length * sizeof(uint8_t);
+      break;
+    case kTypedDataInt16ArrayCid:
+      external_cid = kExternalTypedDataInt16ArrayCid;
+      bytes = length * sizeof(int16_t);
+      break;
+    case kTypedDataUint16ArrayCid:
+      external_cid = kExternalTypedDataUint16ArrayCid;
+      bytes = length * sizeof(uint16_t);
+      break;
+    case kTypedDataInt32ArrayCid:
+      external_cid = kExternalTypedDataInt32ArrayCid;
+      bytes = length * sizeof(int32_t);
+      break;
+    case kTypedDataUint32ArrayCid:
+      external_cid = kExternalTypedDataUint32ArrayCid;
+      bytes = length * sizeof(uint32_t);
+      break;
+    case kTypedDataInt64ArrayCid:
+      external_cid = kExternalTypedDataInt64ArrayCid;
+      bytes = length * sizeof(int64_t);
+      break;
+    case kTypedDataUint64ArrayCid:
+      external_cid = kExternalTypedDataUint64ArrayCid;
+      bytes = length * sizeof(uint64_t);
+      break;
+    case kTypedDataFloat32ArrayCid:
+      external_cid = kExternalTypedDataFloat32ArrayCid;
+      bytes = length * sizeof(float);
+      break;
+    case kTypedDataFloat64ArrayCid:
+      external_cid = kExternalTypedDataFloat64ArrayCid;
+      bytes = length * sizeof(double);
+      break;
+    case kTypedDataInt32x4ArrayCid:
+      external_cid = kExternalTypedDataInt32x4ArrayCid;
+      bytes = length * sizeof(int32_t) * 4;
+      break;
+    case kTypedDataFloat32x4ArrayCid:
+      external_cid = kExternalTypedDataFloat32x4ArrayCid;
+      bytes = length * sizeof(float) * 4;
+      break;
+    case kTypedDataFloat64x2ArrayCid:
+      external_cid = kExternalTypedDataFloat64x2ArrayCid;
+      bytes = length * sizeof(double) * 2;
+      break;
+    default:
+      external_cid = kIllegalCid;
+      bytes = 0;
+      UNREACHABLE();
+  }
 
   // Write out the serialization header value for this object.
   writer->WriteInlinedObjectHeader(object_id);
 
-  // Write out the class and tags information.
-  writer->WriteIndexedObject(cid);
-  writer->WriteTags(writer->GetObjectTags(this));
-
-  // Write out the length field.
-  writer->Write<RawObject*>(ptr()->length_);
-
-  // Write out the array elements.
-  switch (cid) {
-    case kTypedDataInt8ArrayCid:
-    case kTypedDataUint8ArrayCid:
-    case kTypedDataUint8ClampedArrayCid: {
-      uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data());
-      writer->WriteBytes(data, len);
-      break;
+  if ((kind == Snapshot::kMessage) &&
+      (bytes >= kExternalizeTypedDataThreshold)) {
+    // Write as external.
+    writer->WriteIndexedObject(external_cid);
+    writer->WriteTags(writer->GetObjectTags(this));
+    writer->Write<RawObject*>(ptr()->length_);
+    uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data());
+    void* passed_data = malloc(bytes);
+    if (passed_data == NULL) {
+      OUT_OF_MEMORY();
     }
-    case kTypedDataInt16ArrayCid:
-      TYPED_DATA_WRITE(int16_t, len);
-      break;
-    case kTypedDataUint16ArrayCid:
-      TYPED_DATA_WRITE(uint16_t, len);
-      break;
-    case kTypedDataInt32ArrayCid:
-      TYPED_DATA_WRITE(int32_t, len);
-      break;
-    case kTypedDataUint32ArrayCid:
-      TYPED_DATA_WRITE(uint32_t, len);
-      break;
-    case kTypedDataInt64ArrayCid:
-      TYPED_DATA_WRITE(int64_t, len);
-      break;
-    case kTypedDataUint64ArrayCid:
-      TYPED_DATA_WRITE(uint64_t, len);
-      break;
-    case kTypedDataFloat32ArrayCid:
-      TYPED_DATA_WRITE(float, len);  // NOLINT.
-      break;
-    case kTypedDataFloat64ArrayCid:
-      TYPED_DATA_WRITE(double, len);  // NOLINT.
-      break;
-    case kTypedDataInt32x4ArrayCid:
-      TYPED_DATA_WRITE(int32_t, len * 4);  // NOLINT.
-      break;
-    case kTypedDataFloat32x4ArrayCid:
-      TYPED_DATA_WRITE(float, len * 4);  // NOLINT.
-      break;
-    case kTypedDataFloat64x2ArrayCid:
-      TYPED_DATA_WRITE(double, len * 2);  // NOLINT.
-      break;
-    default:
-      UNREACHABLE();
+    memmove(passed_data, data, bytes);
+    static_cast<MessageWriter*>(writer)->finalizable_data()->Put(
+        bytes,
+        passed_data,  // data
+        passed_data,  // peer,
+        IsolateMessageTypedDataFinalizer);
+  } else {
+    // Write as internal.
+    writer->WriteIndexedObject(cid);
+    writer->WriteTags(writer->GetObjectTags(this));
+    writer->Write<RawObject*>(ptr()->length_);
+    uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data());
+    writer->WriteBytes(data, bytes);
   }
 }
 
-#define TYPED_EXT_DATA_WRITE(type, len)                                        \
-  {                                                                            \
-    type* data = reinterpret_cast<type*>(ptr()->data_);                        \
-    for (intptr_t i = 0; i < (len); i++) {                                     \
-      writer->Write(data[i]);                                                  \
-    }                                                                          \
-  }
-
-#define EXT_TYPED_DATA_WRITE(cid, type, len)                                   \
-  writer->WriteIndexedObject(cid);                                             \
-  writer->WriteTags(writer->GetObjectTags(this));                              \
-  writer->Write<RawObject*>(ptr()->length_);                                   \
-  TYPED_EXT_DATA_WRITE(type, len)
-
 void RawExternalTypedData::WriteTo(SnapshotWriter* writer,
                                    intptr_t object_id,
                                    Snapshot::Kind kind,
                                    bool as_reference) {
   ASSERT(writer != NULL);
   intptr_t cid = this->GetClassId();
-  intptr_t len = Smi::Value(ptr()->length_);
+  intptr_t length = Smi::Value(ptr()->length_);  // In elements.
+  intptr_t internal_cid;
+  intptr_t bytes;
+  switch (cid) {
+    case kExternalTypedDataInt8ArrayCid:
+      internal_cid = kTypedDataInt8ArrayCid;
+      bytes = length * sizeof(int8_t);
+      break;
+    case kExternalTypedDataUint8ArrayCid:
+      internal_cid = kTypedDataUint8ArrayCid;
+      bytes = length * sizeof(uint8_t);
+      break;
+    case kExternalTypedDataUint8ClampedArrayCid:
+      internal_cid = kTypedDataUint8ClampedArrayCid;
+      bytes = length * sizeof(uint8_t);
+      break;
+    case kExternalTypedDataInt16ArrayCid:
+      internal_cid = kTypedDataInt16ArrayCid;
+      bytes = length * sizeof(int16_t);
+      break;
+    case kExternalTypedDataUint16ArrayCid:
+      internal_cid = kTypedDataUint16ArrayCid;
+      bytes = length * sizeof(uint16_t);
+      break;
+    case kExternalTypedDataInt32ArrayCid:
+      internal_cid = kTypedDataInt32ArrayCid;
+      bytes = length * sizeof(int32_t);
+      break;
+    case kExternalTypedDataUint32ArrayCid:
+      internal_cid = kTypedDataUint32ArrayCid;
+      bytes = length * sizeof(uint32_t);
+      break;
+    case kExternalTypedDataInt64ArrayCid:
+      internal_cid = kTypedDataInt64ArrayCid;
+      bytes = length * sizeof(int64_t);
+      break;
+    case kExternalTypedDataUint64ArrayCid:
+      internal_cid = kTypedDataUint64ArrayCid;
+      bytes = length * sizeof(uint64_t);
+      break;
+    case kExternalTypedDataFloat32ArrayCid:
+      internal_cid = kTypedDataFloat32ArrayCid;
+      bytes = length * sizeof(float);  // NOLINT.
+      break;
+    case kExternalTypedDataFloat64ArrayCid:
+      internal_cid = kTypedDataFloat64ArrayCid,
+      bytes = length * sizeof(double);  // NOLINT.
+      break;
+    case kExternalTypedDataInt32x4ArrayCid:
+      internal_cid = kTypedDataInt32x4ArrayCid;
+      bytes = length * sizeof(int32_t) * 4;
+      break;
+    case kExternalTypedDataFloat32x4ArrayCid:
+      internal_cid = kTypedDataFloat32x4ArrayCid;
+      bytes = length * sizeof(float) * 4;
+      break;
+    case kExternalTypedDataFloat64x2ArrayCid:
+      internal_cid = kTypedDataFloat64x2ArrayCid;
+      bytes = length * sizeof(double) * 2;
+      break;
+    default:
+      internal_cid = kIllegalCid;
+      bytes = 0;
+      UNREACHABLE();
+  }
 
   // Write out the serialization header value for this object.
   writer->WriteInlinedObjectHeader(object_id);
 
-  switch (cid) {
-    case kExternalTypedDataInt8ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt8ArrayCid, int8_t, len);
-      break;
-    case kExternalTypedDataUint8ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint8ArrayCid, uint8_t, len);
-      break;
-    case kExternalTypedDataUint8ClampedArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint8ClampedArrayCid, uint8_t, len);
-      break;
-    case kExternalTypedDataInt16ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt16ArrayCid, int16_t, len);
-      break;
-    case kExternalTypedDataUint16ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint16ArrayCid, uint16_t, len);
-      break;
-    case kExternalTypedDataInt32ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt32ArrayCid, int32_t, len);
-      break;
-    case kExternalTypedDataUint32ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint32ArrayCid, uint32_t, len);
-      break;
-    case kExternalTypedDataInt64ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt64ArrayCid, int64_t, len);
-      break;
-    case kExternalTypedDataUint64ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint64ArrayCid, uint64_t, len);
-      break;
-    case kExternalTypedDataFloat32ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataFloat32ArrayCid, float, len);  // NOLINT.
-      break;
-    case kExternalTypedDataFloat64ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataFloat64ArrayCid, double, len);  // NOLINT.
-      break;
-    case kExternalTypedDataInt32x4ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt32x4ArrayCid, int32_t, len * 4);
-      break;
-    case kExternalTypedDataFloat32x4ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataFloat32x4ArrayCid, float, len * 4);
-      break;
-    case kExternalTypedDataFloat64x2ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataFloat64x2ArrayCid, double, len * 2);
-      break;
-    default:
-      UNREACHABLE();
+  if ((kind == Snapshot::kMessage) &&
+      (bytes >= kExternalizeTypedDataThreshold)) {
+    // Write as external.
+    writer->WriteIndexedObject(cid);
+    writer->WriteTags(writer->GetObjectTags(this));
+    writer->Write<RawObject*>(ptr()->length_);
+    uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data_);
+    void* passed_data = malloc(bytes);
+    if (passed_data == NULL) {
+      OUT_OF_MEMORY();
+    }
+    memmove(passed_data, data, bytes);
+    static_cast<MessageWriter*>(writer)->finalizable_data()->Put(
+        bytes,
+        passed_data,  // data
+        passed_data,  // peer,
+        IsolateMessageTypedDataFinalizer);
+  } else {
+    // Write as internal.
+    writer->WriteIndexedObject(internal_cid);
+    writer->WriteTags(writer->GetObjectTags(this));
+    writer->Write<RawObject*>(ptr()->length_);
+    uint8_t* data = reinterpret_cast<uint8_t*>(ptr()->data_);
+    writer->WriteBytes(data, bytes);
   }
 }
-#undef TYPED_DATA_WRITE
-#undef EXT_TYPED_DATA_WRITE
 
 RawCapability* Capability::ReadFrom(SnapshotReader* reader,
                                     intptr_t object_id,
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 82fef8b..3e9e015 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -1829,11 +1829,11 @@
     // The user may try to load an expired message.
     return Object::sentinel().raw();
   }
-  if (message->len() > 0) {
+  if (message->IsRaw()) {
+    return message->raw_obj();
+  } else {
     MessageSnapshotReader reader(message, thread);
     return reader.ReadObject();
-  } else {
-    return message->raw_obj();
   }
 }
 
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 5c0f36ed..a03d79f 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -11,6 +11,7 @@
 #include "vm/exceptions.h"
 #include "vm/heap.h"
 #include "vm/longjump.h"
+#include "vm/message.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
 #include "vm/snapshot_ids.h"
@@ -919,11 +920,12 @@
 }
 
 MessageSnapshotReader::MessageSnapshotReader(Message* message, Thread* thread)
-    : SnapshotReader(message->data(),
-                     message->len(),
+    : SnapshotReader(message->snapshot(),
+                     message->snapshot_length(),
                      Snapshot::kMessage,
                      new ZoneGrowableArray<BackRefNode>(kNumInitialReferences),
-                     thread) {}
+                     thread),
+      finalizable_data_(message->finalizable_data()) {}
 
 MessageSnapshotReader::~MessageSnapshotReader() {
   ResetBackwardReferenceTable();
@@ -1612,7 +1614,12 @@
                      kInitialSize,
                      &forward_list_,
                      can_send_any_object),
-      forward_list_(thread(), kMaxPredefinedObjectIds) {}
+      forward_list_(thread(), kMaxPredefinedObjectIds),
+      finalizable_data_(new MessageFinalizableData()) {}
+
+MessageWriter::~MessageWriter() {
+  delete finalizable_data_;
+}
 
 Message* MessageWriter::WriteMessage(const Object& obj,
                                      Dart_Port dest_port,
@@ -1631,7 +1638,10 @@
     ThrowException(exception_type(), exception_msg());
   }
 
-  return new Message(dest_port, buffer(), BytesWritten(), priority);
+  MessageFinalizableData* finalizable_data = finalizable_data_;
+  finalizable_data_ = NULL;
+  return new Message(dest_port, buffer(), BytesWritten(), finalizable_data,
+                     priority);
 }
 
 }  // namespace dart
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 576b501..5db9e24 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -9,6 +9,7 @@
 #include "vm/allocation.h"
 #include "vm/bitfield.h"
 #include "vm/datastream.h"
+#include "vm/finalizable_data.h"
 #include "vm/globals.h"
 #include "vm/growable_array.h"
 #include "vm/isolate.h"
@@ -212,11 +213,6 @@
     return ReadStream::Raw<sizeof(T), T>::Read(&stream_);
   }
 
-  intptr_t ReadRawPointerValue() {
-    int64_t value = Read<int64_t>();
-    return static_cast<intptr_t>(value);
-  }
-
   classid_t ReadClassIDValue() {
     uint32_t value = Read<uint32_t>();
     return static_cast<classid_t>(value);
@@ -493,7 +489,11 @@
   MessageSnapshotReader(Message* message, Thread* thread);
   ~MessageSnapshotReader();
 
+  MessageFinalizableData* finalizable_data() const { return finalizable_data_; }
+
  private:
+  MessageFinalizableData* finalizable_data_;
+
   DISALLOW_COPY_AND_ASSIGN(MessageSnapshotReader);
 };
 
@@ -509,8 +509,6 @@
     WriteStream::Raw<sizeof(T), T>::Write(&stream_, value);
   }
 
-  void WriteRawPointerValue(intptr_t value) { Write<int64_t>(value); }
-
   void WriteClassIDValue(classid_t value) { Write<uint32_t>(value); }
   COMPILE_ASSERT(sizeof(uint32_t) >= sizeof(classid_t));
 
@@ -800,14 +798,17 @@
  public:
   static const intptr_t kInitialSize = 512;
   explicit MessageWriter(bool can_send_any_object);
-  ~MessageWriter() {}
+  ~MessageWriter();
 
   Message* WriteMessage(const Object& obj,
                         Dart_Port dest_port,
                         Message::Priority priority);
 
+  MessageFinalizableData* finalizable_data() const { return finalizable_data_; }
+
  private:
   ForwardList forward_list_;
+  MessageFinalizableData* finalizable_data_;
 
   DISALLOW_COPY_AND_ASSIGN(MessageWriter);
 };
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index c9b6306..220bfa8 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -98,6 +98,7 @@
   "dwarf.h",
   "exceptions.cc",
   "exceptions.h",
+  "finalizable_data.h",
   "fixed_cache.h",
   "flag_list.h",
   "flags.cc",
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index e670cc1..ce9b3e0 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -1085,7 +1085,7 @@
   /// Finds the amount significant digits in the provided [digits] array.
   static int _normalize(int used, Uint16List digits) {
     while (used > 0 && digits[used - 1] == 0) used--;
-    return used;
+    return 0 + used; // force inferred result to be non-null.
   }
 
   /// Factory returning an instance initialized with the given field values.
@@ -2614,7 +2614,15 @@
     return (this & (signMask - one)) - (this & signMask);
   }
 
-  bool get isValidInt => this == new _BigIntImpl._fromInt(toInt());
+  // Maximum number of digits that always fit in mantissa.
+  static const _simpleValidIntDigits = 53 ~/ _digitBits;
+
+  bool get isValidInt {
+    if (_used <= _simpleValidIntDigits) return true;
+    var asInt = toInt();
+    if (!asInt.toDouble().isFinite) return false;
+    return this == new _BigIntImpl._fromInt(asInt);
+  }
 
   int toInt() {
     var result = 0;
diff --git a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
index f309a9c..1be380f 100644
--- a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
+++ b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
@@ -31,8 +31,9 @@
     codegenWorldBuilder.compiledConstants
         .forEach(addConstantWithDependendencies);
     for (String stringValue in ["cA", "cB", "cC"]) {
-      ConstantValue constant = allConstants.firstWhere((dynamic constant) {
-        return constant.isString && constant.primitiveValue == stringValue;
+      StringConstantValue constant =
+          allConstants.firstWhere((dynamic constant) {
+        return constant.isString && constant.stringValue == stringValue;
       });
       Expect.notEquals(null, outputUnitForConstant(constant),
           "Constant value ${constant.toStructuredText()} has no output unit.");
diff --git a/tests/compiler/dart2js/old_frontend/metadata_test.dart b/tests/compiler/dart2js/old_frontend/metadata_test.dart
index 9130973..f24dcf22 100644
--- a/tests/compiler/dart2js/old_frontend/metadata_test.dart
+++ b/tests/compiler/dart2js/old_frontend/metadata_test.dart
@@ -3,7 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:async_helper/async_helper.dart';
-import 'package:compiler/src/constants/values.dart' show PrimitiveConstantValue;
+import 'package:compiler/src/constants/values.dart'
+    show ConstantValue, StringConstantValue;
 import 'package:expect/expect.dart';
 import '../compiler_helper.dart';
 import 'package:compiler/src/parser/partial_elements.dart'
@@ -39,9 +40,10 @@
         1, element.metadata.length, 'Unexpected metadata count on $element.');
     PartialMetadataAnnotation annotation = element.metadata.first;
     annotation.ensureResolved(compiler.resolution);
-    PrimitiveConstantValue value =
+    ConstantValue value =
         compiler.constants.getConstantValue(annotation.constant);
-    Expect.stringEquals('xyz', value.primitiveValue);
+    Expect.isTrue(value is StringConstantValue);
+    Expect.stringEquals('xyz', (value as StringConstantValue).stringValue);
 
     checkPosition(
         annotation, annotation.cachedNode, source1, compiler.reporter);
@@ -64,13 +66,15 @@
     Expect.isFalse(
         identical(annotation1, annotation2), 'expected unique instances');
     Expect.notEquals(annotation1, annotation2, 'expected unequal instances');
-    PrimitiveConstantValue value1 =
+    ConstantValue value1 =
         compiler.constants.getConstantValue(annotation1.constant);
-    PrimitiveConstantValue value2 =
+    ConstantValue value2 =
         compiler.constants.getConstantValue(annotation2.constant);
     Expect.identical(value1, value2, 'expected same compile-time constant');
-    Expect.stringEquals('xyz', value1.primitiveValue);
-    Expect.stringEquals('xyz', value2.primitiveValue);
+    Expect.isTrue(value1 is StringConstantValue);
+    Expect.isTrue(value2 is StringConstantValue);
+    Expect.stringEquals('xyz', (value1 as StringConstantValue).stringValue);
+    Expect.stringEquals('xyz', (value2 as StringConstantValue).stringValue);
 
     checkPosition(
         annotation1, annotation1.cachedNode, source2, compiler.reporter);
@@ -98,9 +102,10 @@
     Expect.equals(1, element.metadata.length);
     PartialMetadataAnnotation annotation = element.metadata.first;
     annotation.ensureResolved(compiler.resolution);
-    PrimitiveConstantValue value =
+    ConstantValue value =
         compiler.constants.getConstantValue(annotation.constant);
-    Expect.stringEquals('xyz', value.primitiveValue);
+    Expect.isTrue(value is StringConstantValue);
+    Expect.stringEquals('xyz', (value as StringConstantValue).stringValue);
 
     checkPosition(
         annotation, annotation.cachedNode, source3, compiler.reporter);
@@ -129,13 +134,15 @@
     Expect.isFalse(
         identical(annotation1, annotation2), 'expected unique instances');
     Expect.notEquals(annotation1, annotation2, 'expected unequal instances');
-    PrimitiveConstantValue value1 =
+    ConstantValue value1 =
         compiler.constants.getConstantValue(annotation1.constant);
-    PrimitiveConstantValue value2 =
+    ConstantValue value2 =
         compiler.constants.getConstantValue(annotation2.constant);
     Expect.identical(value1, value2, 'expected same compile-time constant');
-    Expect.stringEquals('xyz', value1.primitiveValue);
-    Expect.stringEquals('xyz', value2.primitiveValue);
+    Expect.isTrue(value1 is StringConstantValue);
+    Expect.isTrue(value2 is StringConstantValue);
+    Expect.stringEquals('xyz', (value1 as StringConstantValue).stringValue);
+    Expect.stringEquals('xyz', (value2 as StringConstantValue).stringValue);
 
     checkPosition(
         annotation1, annotation1.cachedNode, source4, compiler.reporter);
@@ -182,9 +189,11 @@
 
           PartialMetadataAnnotation annotation = metadata.first;
           annotation.ensureResolved(compiler.resolution);
-          PrimitiveConstantValue value =
+          ConstantValue value =
               compiler.constants.getConstantValue(annotation.constant);
-          Expect.stringEquals('xyz', value.primitiveValue);
+          Expect.isTrue(value is StringConstantValue);
+          Expect.stringEquals(
+              'xyz', (value as StringConstantValue).stringValue);
 
           checkPosition(
               annotation, annotation.cachedNode, source, compiler.reporter);
diff --git a/tests/corelib_2/bigint_js_test.dart b/tests/corelib_2/bigint_js_test.dart
new file mode 100644
index 0000000..7b982b7
--- /dev/null
+++ b/tests/corelib_2/bigint_js_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test for JavaScript specific BigInt behaviour. Any JavaScript number (double)
+// that is an integral value is a Dart 'int' value, so any BigInt that has a
+// value that is exactly a double integral value should return `true` for
+// [BigInt.isValidInt].
+
+import "package:expect/expect.dart";
+
+int intPow(int a, int p) {
+  int result = 1;
+  for (int i = 0; i < p; i++) result *= a;
+  return result;
+}
+
+int pow2_53 = intPow(2, 53);
+
+test(int n1, int n2, int shift, [bool expectedIsValidInt = true]) {
+  var n = (new BigInt.from(n1) * new BigInt.from(n2)) << shift;
+  Expect.equals(expectedIsValidInt, n.isValidInt, '${n}.isValidInt');
+  if (n >= new BigInt.from(pow2_53)) {
+    var nplus1 = n + BigInt.one;
+    Expect.isFalse(nplus1.isValidInt, '${nplus1}.isValidInt');
+  }
+}
+
+main() {
+  test(13, 19, 1);
+  test(19997, 19993, 100);
+  test(19997, pow2_53 ~/ 19997, 0);
+  test(19997, pow2_53 ~/ 19997, 1);
+  test(19997, pow2_53 ~/ 19997, 100);
+  test(1, 1, 100);
+  test(1, 1, 10000, false);
+
+  // More than 53 bits in product,
+  test(pow2_53 ~/ 3, pow2_53 ~/ 5, 0, false);
+}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 6e20711..5e4efa2 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -113,6 +113,9 @@
 [ $compiler == dart2analyzer && !$strong ]
 symbol_reserved_word_test/05: MissingCompileTimeError # Issue 30245
 
+[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk ]
+bigint_js_test: SkipByDesign # JavaScript-specific test
+
 # All static_tests have expected compile-time errors.
 [ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
 core_runtime_types_static_test: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 80dfdb1..f257594 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -941,16 +941,14 @@
 call_method_is_check_test/03: RuntimeError
 call_method_is_check_test/04: RuntimeError
 call_method_is_check_test/05: RuntimeError
+call_method_must_not_be_field_test/03: RuntimeError # Issue 32155
+call_method_must_not_be_getter_test/03: RuntimeError # Issue 32155
 call_with_no_such_method_test: RuntimeError
 callable_test/none: RuntimeError
 checked_setter2_test: RuntimeError # Issue 31128
 checked_setter_test: RuntimeError # Issue 31128
 extract_type_arguments_test: Crash # Issue 31371
 function_propagation_test: RuntimeError
-function_type_call_getter2_test/00: MissingCompileTimeError
-function_type_call_getter2_test/01: MissingCompileTimeError
-function_type_call_getter2_test/02: MissingCompileTimeError
-function_type_call_getter2_test/03: MissingCompileTimeError
 function_type_call_getter2_test/none: RuntimeError
 generic_test/01: MissingCompileTimeError # front end does not validate `extends`
 implicit_downcast_during_constructor_invocation_test: RuntimeError
diff --git a/tests/lib_2/isolate/large_byte_data_leak_test.dart b/tests/lib_2/isolate/large_byte_data_leak_test.dart
new file mode 100644
index 0000000..b55172e
--- /dev/null
+++ b/tests/lib_2/isolate/large_byte_data_leak_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:developer" show UserTag;
+import "dart:isolate" show Isolate, ReceivePort;
+import "dart:typed_data" show ByteData;
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+  print("Child start");
+
+  Expect.throws(() {
+    replyPort.send([
+      new ByteData(large),
+      new UserTag("User tags are not allowed in isolate messages"),
+      new ByteData(large),
+    ]);
+    replyPort.send("Not reached");
+  }, (e) {
+    return e.toString().contains("Illegal argument in isolate message");
+  });
+
+  replyPort.send("Done");
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+
+  Expect.equals("Done", await port.first);
+
+  print("Parent done");
+}
diff --git a/tests/lib_2/isolate/large_byte_data_test.dart b/tests/lib_2/isolate/large_byte_data_test.dart
new file mode 100644
index 0000000..d9e3d24
--- /dev/null
+++ b/tests/lib_2/isolate/large_byte_data_test.dart
@@ -0,0 +1,171 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+  print("Child start");
+
+  print("Child ByteData");
+  dynamic x = new ByteData(large);
+  for (int i = 0; i < 4; i++) {
+    x.setInt8(i, i);
+  }
+  replyPort.send(x);
+
+  print("Child Uint8List");
+  x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int8List");
+  x = new Int8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Uint16List");
+  x = new Uint16List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int16List");
+  x = new Int16List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Uint32List");
+  x = new Uint32List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int32List");
+  x = new Int32List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Uint64List");
+  x = new Uint64List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int64List");
+  x = new Int64List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+  StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+  print("Parent ByteData");
+  Expect.isTrue(await incoming.moveNext());
+  dynamic x = incoming.current;
+  Expect.isTrue(x is ByteData);
+  Expect.equals(large, x.lengthInBytes);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x.getUint8(i));
+  }
+
+  print("Parent Uint8");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint8List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int8");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int8List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint16");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint16List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int16");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int16List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint32");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint32List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int32");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int32List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint64");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint64List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int64");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int64List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  port.close();
+  print("Parent done");
+}
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 8e0728a..2d31eaa 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -763,6 +763,7 @@
 
 [ $compiler == dart2js && ($runtime == d8 || $runtime == jsshell) ]
 isolate/browser/issue_12474_test: RuntimeError # packageRoot not implemented.
+isolate/large_byte_data_leak_test: RuntimeError
 
 [ $compiler == dart2js && ($runtime == ff || $runtime == safari || $ie) ]
 html/custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Polyfill does not support
diff --git a/tools/VERSION b/tools/VERSION
index 91379c8..d08b1b6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 29
+PRERELEASE 30
 PRERELEASE_PATCH 0
diff --git a/tools/gardening/lib/src/shard_data.dart b/tools/gardening/lib/src/shard_data.dart
index 1d1f6f4..ad781d8 100644
--- a/tools/gardening/lib/src/shard_data.dart
+++ b/tools/gardening/lib/src/shard_data.dart
@@ -52,12 +52,10 @@
     'vm-kernel-precomp-linux-debug-x64-8-8-be',
   ],
   'vm-misc': const <String>[
-    'vm-win-debug-ia32-russian-be',
     'cross-arm64-vm-linux-release-be',
-    'vm-linux-release-ia32-asan-be',
-    'vm-linux-release-x64-asan-be',
     'vm-linux-release-ia32-optcounter-threshold-be',
     'vm-linux-release-x64-optcounter-threshold-be',
+    'vm-linux-release-x64-asan-be',
     'target-arm64-vm-linux-release-be',
   ],
   'vm-precomp': const <String>[
@@ -133,9 +131,7 @@
     'dart2js-linux-chromeff-4-4-be',
   ],
   'chrome': const <String>[
-    'dart2js-linux-drt-1-2-be',
-    'dart2js-linux-drt-2-2-be',
-    'dart2js-linux-drt-csp-minified-be',
+    'dart2js-linux-chrome-csp-minified-be',
     'dart2js-mac10.11-chrome-be',
   ],
   'safari': const <String>[
@@ -211,12 +207,10 @@
     'vm-kernel-precomp-linux-debug-x64-8-8-dev',
   ],
   'vm-misc-dev': const <String>[
-    'vm-win-debug-ia32-russian-dev',
     'cross-arm64-vm-linux-release-dev',
-    'vm-linux-release-ia32-asan-dev',
-    'vm-linux-release-x64-asan-dev',
     'vm-linux-release-ia32-optcounter-threshold-dev',
     'vm-linux-release-x64-optcounter-threshold-dev',
+    'vm-linux-release-x64-asan-dev',
     'target-arm64-vm-linux-release-dev',
   ],
   'vm-precomp-dev': const <String>[
@@ -292,9 +286,7 @@
     'dart2js-linux-chromeff-4-4-dev',
   ],
   'chrome-dev': const <String>[
-    'dart2js-linux-drt-1-2-dev',
-    'dart2js-linux-drt-2-2-dev',
-    'dart2js-linux-drt-csp-minified-dev',
+    'dart2js-linux-chrome-csp-minified-dev',
     'dart2js-mac10.11-chrome-dev',
   ],
   'safari-dev': const <String>[
@@ -351,12 +343,10 @@
     'vm-kernel-precomp-linux-debug-x64-8-8-stable',
   ],
   'vm-misc-stable': const <String>[
-    'vm-win-debug-ia32-russian-stable',
     'cross-arm64-vm-linux-release-stable',
-    'vm-linux-release-ia32-asan-stable',
-    'vm-linux-release-x64-asan-stable',
     'vm-linux-release-ia32-optcounter-threshold-stable',
     'vm-linux-release-x64-optcounter-threshold-stable',
+    'vm-linux-release-x64-asan-stable',
     'target-arm64-vm-linux-release-stable',
   ],
   'vm-precomp-stable': const <String>[
@@ -451,9 +441,7 @@
     'dart2js-linux-chromeff-4-4-stable',
   ],
   'chrome-stable': const <String>[
-    'dart2js-linux-drt-1-2-stable',
-    'dart2js-linux-drt-2-2-stable',
-    'dart2js-linux-drt-csp-minified-stable',
+    'dart2js-linux-chrome-csp-minified-stable',
     'dart2js-mac10.11-chrome-stable',
   ],
   'safari-stable': const <String>[