diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 210a22d..40612c7 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -109,7 +109,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  1.18.5
+  1.18.6
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -4275,6 +4275,12 @@
           The position that should be selected after the edits have been
           applied.
         </p>
+      </dd><dt class="field"><b>id: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          The optional identifier of the change kind. The identifier remains
+          stable even if the message changes, or is parameterized.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_SourceEdit">SourceEdit: object</a></dt><dd>
     <p>
       A description of a single change to a single file.
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 0ce8a02..de63821 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -108,7 +108,7 @@
    * The version of the analysis server. The value should be replaced
    * automatically during the build.
    */
-  static final String VERSION = '1.18.5';
+  static final String VERSION = '1.18.6';
 
   /**
    * The options of this server instance.
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
index 819655d..937fee9 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
@@ -38,6 +38,9 @@
   /// Flutter attribute, add it to the [attributes].
   void _addAttribute(List<protocol.FlutterOutlineAttribute> attributes,
       Expression argument, ParameterElement parameter) {
+    if (parameter == null) {
+      return;
+    }
     if (argument is NamedExpression) {
       argument = (argument as NamedExpression).expression;
     }
@@ -88,8 +91,6 @@
       var attributes = <protocol.FlutterOutlineAttribute>[];
       var children = <protocol.FlutterOutline>[];
       for (var argument in node.argumentList.arguments) {
-        ParameterElement parameter = argument.staticParameterElement;
-
         bool isWidgetArgument = isWidgetType(argument.staticType);
         bool isWidgetListArgument = isListOfWidgetsType(argument.staticType);
 
@@ -119,6 +120,7 @@
             }
           }
         } else {
+          ParameterElement parameter = argument.staticParameterElement;
           _addAttribute(attributes, argument, parameter);
         }
       }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index c13b677..bce108a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -87,7 +87,7 @@
       return null;
     }
     CompletionSuggestion suggestion = new CompletionSuggestion(
-        CompletionSuggestionKind.IDENTIFIER,
+        CompletionSuggestionKind.OVERRIDE,
         DART_RELEVANCE_HIGH,
         completion,
         targetId.offset,
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index e5f09b1..accff73 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -75,6 +75,10 @@
       const AssistKind('EXCHANGE_OPERANDS', 30, "Exchange operands");
   static const EXTRACT_CLASS =
       const AssistKind('EXTRACT_CLASS', 30, "Extract class into file '{0}'");
+  static const FLUTTER_CONVERT_TO_STATEFUL_WIDGET = const AssistKind(
+      "FLUTTER_CONVERT_TO_STATEFUL_WIDGET", 30, "Convert to StatefulWidget");
+  static const FLUTTER_REPLACE_WITH_CHILDREN = const AssistKind(
+      "FLUTTER_REPLACE_WITH_CHILDREN", 30, "Replace with children");
   static const IMPORT_ADD_SHOW =
       const AssistKind('IMPORT_ADD_SHOW', 30, "Add explicit 'show' combinator");
   static const INTRODUCE_LOCAL_CAST_TYPE = const AssistKind(
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 415b0bc..3ba249c 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -140,8 +140,11 @@
     await _addProposal_convertToIsNotEmpty();
     await _addProposal_convertToFieldParameter();
     await _addProposal_convertToNormalParameter();
+    await _addProposal_convertToStatefulWidget();
     await _addProposal_encapsulateField();
     await _addProposal_exchangeOperands();
+    await _addProposal_flutterReplaceWithChild();
+    await _addProposal_flutterReplaceWithChildren();
     await _addProposal_importAddShow();
     await _addProposal_introduceLocalTestedType();
     await _addProposal_invertIf();
@@ -1179,6 +1182,100 @@
     }
   }
 
+  Future<Null> _addProposal_convertToStatefulWidget() async {
+    ClassDeclaration widgetClass =
+        node.getAncestor((n) => n is ClassDeclaration);
+    TypeName superclass = widgetClass?.extendsClause?.superclass;
+    if (widgetClass == null || superclass == null) {
+      _coverageMarker();
+      return;
+    }
+
+    // Don't spam, activate only from the `class` keyword to the class body.
+    if (selectionOffset < widgetClass.classKeyword.offset ||
+        selectionOffset > widgetClass.leftBracket.end) {
+      _coverageMarker();
+      return;
+    }
+
+    // Find the build() method.
+    MethodDeclaration buildMethod;
+    for (var member in widgetClass.members) {
+      if (member is MethodDeclaration &&
+          member.name.name == 'build' &&
+          member.parameters != null &&
+          member.parameters.parameters.length == 1) {
+        buildMethod = member;
+        break;
+      }
+    }
+    if (buildMethod == null) {
+      _coverageMarker();
+      return;
+    }
+
+    // Must be a StatelessWidget subclasses.
+    ClassElement widgetClassElement = widgetClass.element;
+    if (!flutter.isExactlyStatelessWidgetType(widgetClassElement.supertype)) {
+      _coverageMarker();
+      return;
+    }
+
+    String widgetName = widgetClassElement.displayName;
+    String stateName = widgetName + 'State';
+
+    var buildLinesRange = utils.getLinesRange(range.node(buildMethod));
+    var buildText = utils.getRangeText(buildLinesRange);
+
+    // Update the build() text to insert `widget.` before references to
+    // the widget class members.
+    final List<SourceEdit> buildTextEdits = [];
+    buildMethod.body.accept(new _SimpleIdentifierRecursiveAstVisitor((node) {
+      if (node.staticElement?.enclosingElement == widgetClassElement) {
+        var offset = node.offset - buildLinesRange.offset;
+        AstNode parent = node.parent;
+        if (parent is InterpolationExpression &&
+            parent.leftBracket.type ==
+                TokenType.STRING_INTERPOLATION_IDENTIFIER) {
+          buildTextEdits.add(new SourceEdit(offset, 0, '{widget.'));
+          buildTextEdits.add(new SourceEdit(offset + node.length, 0, '}'));
+        } else {
+          buildTextEdits.add(new SourceEdit(offset, 0, 'widget.'));
+        }
+      }
+    }));
+    buildText = SourceEdit.applySequence(buildText, buildTextEdits.reversed);
+
+    var statefulWidgetClass =
+        await _getExportedClass(flutter.WIDGETS_LIBRARY_URI, 'StatefulWidget');
+    var stateClass =
+        await _getExportedClass(flutter.WIDGETS_LIBRARY_URI, 'State');
+    var stateType = stateClass.type.instantiate([widgetClassElement.type]);
+
+    DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+    await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) async {
+      builder.addReplacement(range.node(superclass), (builder) {
+        builder.writeType(statefulWidgetClass.type);
+      });
+      builder.addReplacement(buildLinesRange, (builder) {
+        builder.writeln('  @override');
+        builder.writeln('  $stateName createState() {');
+        builder.writeln('    return new $stateName();');
+        builder.writeln('  }');
+      });
+      builder.addInsertion(widgetClass.end, (builder) {
+        builder.writeln();
+        builder.writeln();
+        builder.writeClassDeclaration(stateName, superclass: stateType,
+            membersWriter: () {
+          builder.write(buildText);
+        });
+      });
+    });
+    _addAssistFromBuilder(
+        changeBuilder, DartAssistKind.FLUTTER_CONVERT_TO_STATEFUL_WIDGET);
+  }
+
   Future<Null> _addProposal_encapsulateField() async {
     // find FieldDeclaration
     FieldDeclaration fieldDeclaration =
@@ -1311,6 +1408,71 @@
     _addAssistFromBuilder(changeBuilder, DartAssistKind.EXCHANGE_OPERANDS);
   }
 
+  Future<Null> _addProposal_flutterReplaceWithChild() async {
+    var widgetCreation = flutter.identifyNewExpression(node);
+    if (widgetCreation == null) {
+      return;
+    }
+
+    var childArgument = flutter.findChildArgument(widgetCreation);
+    if (childArgument == null) {
+      return;
+    }
+
+    // child: new ThisWidget(child: ourChild)
+    // children: [foo, new ThisWidget(child: ourChild), bar]
+    DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+    await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+      var childExpression = childArgument.expression;
+      var childText = utils.getNodeText(childExpression);
+      var indentOld = utils.getLinePrefix(childExpression.offset);
+      var indentNew = utils.getLinePrefix(widgetCreation.offset);
+      childText = _replaceSourceIndent(childText, indentOld, indentNew);
+      builder.addSimpleReplacement(range.node(widgetCreation), childText);
+    });
+    _addAssistFromBuilder(
+        changeBuilder, DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN);
+  }
+
+  Future<Null> _addProposal_flutterReplaceWithChildren() async {
+    var widgetCreation = flutter.identifyNewExpression(node);
+    if (widgetCreation == null) {
+      return;
+    }
+
+    // We can inline the list of our children only into another list.
+    var widgetParentNode = widgetCreation.parent;
+    if (widgetParentNode is! ListLiteral) {
+      return;
+    }
+
+    // Prepare the list of our children.
+    List<Expression> childrenExpressions;
+    {
+      var childrenArgument = flutter.findChildrenArgument(widgetCreation);
+      var childrenExpression = childrenArgument?.expression;
+      if (childrenExpression is ListLiteral &&
+          childrenExpression.elements.isNotEmpty) {
+        childrenExpressions = childrenExpression.elements;
+      } else {
+        return;
+      }
+    }
+
+    DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+    await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+      var firstChild = childrenExpressions.first;
+      var lastChild = childrenExpressions.last;
+      var childText = utils.getRangeText(range.startEnd(firstChild, lastChild));
+      var indentOld = utils.getLinePrefix(firstChild.offset);
+      var indentNew = utils.getLinePrefix(widgetCreation.offset);
+      childText = _replaceSourceIndent(childText, indentOld, indentNew);
+      builder.addSimpleReplacement(range.node(widgetCreation), childText);
+    });
+    _addAssistFromBuilder(
+        changeBuilder, DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN);
+  }
+
   Future<Null> _addProposal_importAddShow() async {
     // prepare ImportDirective
     ImportDirective importDirective =
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 fcba496..d983f08 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -602,6 +602,7 @@
   }
 
   Future<Null> _addFix_addMissingRequiredArgument() async {
+    InstanceCreationExpression creation;
     Element targetElement;
     ArgumentList argumentList;
 
@@ -611,50 +612,59 @@
         targetElement = invocation.methodName.bestElement;
         argumentList = invocation.argumentList;
       } else {
-        AstNode ancestor =
+        creation =
             invocation.getAncestor((p) => p is InstanceCreationExpression);
-        if (ancestor is InstanceCreationExpression) {
-          targetElement = ancestor.staticElement;
-          argumentList = ancestor.argumentList;
+        if (creation != null) {
+          targetElement = creation.staticElement;
+          argumentList = creation.argumentList;
         }
       }
     }
 
     if (targetElement is ExecutableElement) {
       // Format: "Missing required argument 'foo"
-      List<String> parts = error.message.split("'");
-      if (parts.length < 2) {
+      List<String> messageParts = error.message.split("'");
+      if (messageParts.length < 2) {
+        return;
+      }
+      String missingParameterName = messageParts[1];
+
+      ParameterElement missingParameter = targetElement.parameters.firstWhere(
+          (p) => p.name == missingParameterName,
+          orElse: () => null);
+      if (missingParameter == null) {
         return;
       }
 
-      // add proposal
-      String paramName = parts[1];
-      final List<Expression> args = argumentList.arguments;
-      int offset =
-          args.isEmpty ? argumentList.leftParenthesis.end : args.last.end;
+      int offset;
+      bool hasTrailingComma = false;
+      List<Expression> arguments = argumentList.arguments;
+      if (arguments.isEmpty) {
+        offset = argumentList.leftParenthesis.end;
+      } else {
+        Expression lastArgument = arguments.last;
+        offset = lastArgument.end;
+        hasTrailingComma = lastArgument.endToken.next.type == TokenType.COMMA;
+      }
+
       DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
       await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
         builder.addInsertion(offset, (DartEditBuilder builder) {
-          if (args.isNotEmpty) {
+          if (arguments.isNotEmpty) {
             builder.write(', ');
           }
-          List<ParameterElement> parameters =
-              (targetElement as ExecutableElement).parameters;
-          ParameterElement element = parameters
-              .firstWhere((p) => p.name == paramName, orElse: () => null);
-          String defaultValue = getDefaultStringParameterValue(element);
-          builder.write('$paramName: $defaultValue');
+          String defaultValue =
+              getDefaultStringParameterValue(missingParameter);
+          builder.write('$missingParameterName: $defaultValue');
           // Insert a trailing comma after Flutter instance creation params.
-          InstanceCreationExpression newExpr =
-              flutter.identifyNewExpression(node);
-          if (newExpr != null && flutter.isWidgetCreation(newExpr)) {
+          if (!hasTrailingComma && flutter.isWidgetExpression(creation)) {
             builder.write(',');
           }
         });
       });
       _addFixFromBuilder(
           changeBuilder, DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-          args: [paramName]);
+          args: [missingParameterName]);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index 7f5f1ba..2a774f9 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -11,6 +11,7 @@
 
 const WIDGETS_LIBRARY_URI = 'package:flutter/widgets.dart';
 
+const _STATELESS_WIDGET_NAME = "StatelessWidget";
 const _WIDGET_NAME = "Widget";
 const _WIDGET_URI = "package:flutter/src/widgets/framework.dart";
 
@@ -100,8 +101,8 @@
 }
 
 /**
- * Return the named expression representing the 'child' argument of the given
- * [newExpr], or null if none.
+ * Return the named expression representing the `child` argument of the given
+ * [newExpr], or `null` if none.
  */
 NamedExpression findChildArgument(InstanceCreationExpression newExpr) =>
     newExpr.argumentList.arguments.firstWhere(
@@ -109,6 +110,15 @@
         orElse: () => null);
 
 /**
+ * Return the named expression representing the `children` argument of the
+ * given [newExpr], or `null` if none.
+ */
+NamedExpression findChildrenArgument(InstanceCreationExpression newExpr) =>
+    newExpr.argumentList.arguments.firstWhere(
+        (arg) => arg is NamedExpression && arg.name.label.name == 'children',
+        orElse: () => null);
+
+/**
  * Return the Flutter instance creation expression that is the value of the
  * 'child' argument of the given [newExpr], or null if none.
  */
@@ -247,6 +257,14 @@
 }
 
 /**
+ * Return `true` if the given [type] is the Flutter class `StatelessWidget`.
+ */
+bool isExactlyStatelessWidgetType(DartType type) {
+  return type is InterfaceType &&
+      _isExactWidget(type.element, _STATELESS_WIDGET_NAME, _WIDGET_URI);
+}
+
+/**
  * Return `true` if the given [type] is the Flutter class `Widget`, or its
  * subtype.
  */
@@ -282,7 +300,7 @@
  * class that has the Flutter class `Widget` as a superclass.
  */
 bool isWidgetCreation(InstanceCreationExpression expr) {
-  ClassElement element = expr.staticElement?.enclosingElement;
+  ClassElement element = expr?.staticElement?.enclosingElement;
   return isWidget(element);
 }
 
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index f41e3d7..7173f6e 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -1281,6 +1281,7 @@
  *   "edits": List<SourceFileEdit>
  *   "linkedEditGroups": List<LinkedEditGroup>
  *   "selection": optional Position
+ *   "id": optional String
  * }
  */
 final Matcher isSourceChange =
@@ -1289,7 +1290,8 @@
           "edits": isListOf(isSourceFileEdit),
           "linkedEditGroups": isListOf(isLinkedEditGroup)
         }, optionalFields: {
-          "selection": isPosition
+          "selection": isPosition,
+          "id": isString
         }));
 
 /**
diff --git a/pkg/analysis_server/test/mock_sdk.dart b/pkg/analysis_server/test/mock_sdk.dart
index a071987..438b035 100644
--- a/pkg/analysis_server/test/mock_sdk.dart
+++ b/pkg/analysis_server/test/mock_sdk.dart
@@ -163,6 +163,9 @@
     return null;
   }
 }
+
+class _Override { const _Override(); }
+const Object override = const _Override();
 ''');
 
   static const MockSdkLibrary LIB_ASYNC =
diff --git a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
index 25178e7..28cdcf6 100644
--- a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
@@ -36,6 +36,7 @@
 }
 ''');
     await computeSuggestions();
+    // TODO(pquitslund): test displayText
     _assertOverride('''@override
   A suggested1(int x) {
     // TODO: implement suggested1
@@ -75,6 +76,7 @@
     // assume information for context.getLibrariesContaining has been cached
     await computeLibrariesContaining();
     await computeSuggestions();
+    // TODO(pquitslund): test displayText
     _assertOverride('''@override
   A suggested1(int x) {
     // TODO: implement suggested1
@@ -88,15 +90,16 @@
         '''@override\n  C suggested3([String z]) {\n    // TODO: implement suggested3\n    return null;\n  }''');
   }
 
-  CompletionSuggestion _assertOverride(String completion) {
+  CompletionSuggestion _assertOverride(String completion,
+      {String displayText}) {
     CompletionSuggestion cs = getSuggest(
         completion: completion,
-        csKind: CompletionSuggestionKind.IDENTIFIER,
+        csKind: CompletionSuggestionKind.OVERRIDE,
         elemKind: null);
     if (cs == null) {
       failedCompletion('expected $completion', suggestions);
     }
-    expect(cs.kind, equals(CompletionSuggestionKind.IDENTIFIER));
+    expect(cs.kind, equals(CompletionSuggestionKind.OVERRIDE));
     expect(cs.relevance, equals(DART_RELEVANCE_HIGH));
     expect(cs.importUri, null);
 //    expect(cs.selectionOffset, equals(completion.length));
@@ -104,6 +107,7 @@
     expect(cs.isDeprecated, isFalse);
     expect(cs.isPotential, isFalse);
     expect(cs.element, isNotNull);
+    expect(cs.displayText, displayText);
     return cs;
   }
 }
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index 17e2c43..1961144 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -71,7 +71,7 @@
     List<Assist> assists = await _computeAssists();
     for (Assist assist in assists) {
       if (assist.kind == kind) {
-        throw fail('Unexpected assist $kind in\n${assists.join('\n')}');
+        fail('Unexpected assist $kind in\n${assists.join('\n')}');
       }
     }
   }
@@ -2267,6 +2267,95 @@
 ''');
   }
 
+  test_convertToStatefulWidget_BAD_notClass() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+/*caret*/main() {}
+''');
+    _setCaretLocation();
+    assertNoAssist(DartAssistKind.FLUTTER_CONVERT_TO_STATEFUL_WIDGET);
+  }
+
+  test_convertToStatefulWidget_BAD_notStatelessWidget() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+class /*caret*/MyWidget extends Text {
+  MyWidget() : super('');
+}
+''');
+    _setCaretLocation();
+    assertNoAssist(DartAssistKind.FLUTTER_CONVERT_TO_STATEFUL_WIDGET);
+  }
+
+  test_convertToStatefulWidget_BAD_notWidget() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+class /*caret*/MyWidget {}
+''');
+    _setCaretLocation();
+    assertNoAssist(DartAssistKind.FLUTTER_CONVERT_TO_STATEFUL_WIDGET);
+  }
+
+  test_convertToStatefulWidget_OK() async {
+    addFlutterPackage();
+    await resolveTestUnit(r'''
+import 'package:flutter/material.dart';
+
+class /*caret*/MyWidget extends StatelessWidget {
+  final String aaa;
+  final String bbb;
+
+  const MyWidget(this.aaa, this.bbb);
+
+  @override
+  Widget build(BuildContext context) {
+    return new Row(
+      children: [
+        new Text(aaa),
+        new Text(bbb),
+        new Text('$aaa'),
+        new Text('${bbb}'),
+      ],
+    );
+  }
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(
+        DartAssistKind.FLUTTER_CONVERT_TO_STATEFUL_WIDGET, r'''
+import 'package:flutter/material.dart';
+
+class /*caret*/MyWidget extends StatefulWidget {
+  final String aaa;
+  final String bbb;
+
+  const MyWidget(this.aaa, this.bbb);
+
+  @override
+  MyWidgetState createState() {
+    return new MyWidgetState();
+  }
+}
+
+class MyWidgetState extends State<MyWidget> {
+  @override
+  Widget build(BuildContext context) {
+    return new Row(
+      children: [
+        new Text(widget.aaa),
+        new Text(widget.bbb),
+        new Text('${widget.aaa}'),
+        new Text('${widget.bbb}'),
+      ],
+    );
+  }
+}
+''');
+  }
+
   test_encapsulateField_BAD_alreadyPrivate() async {
     await resolveTestUnit('''
 class A {
@@ -2539,6 +2628,182 @@
 ''');
   }
 
+  test_flutterReplaceWithChild_OK_childIntoChild_multiLine() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  new Column(
+    children: <Widget>[
+      new Center(
+        child: new /*caret*/Padding(
+          padding: const EdgeInsets.all(8.0),
+          child: new Center(
+            heightFactor: 0.5,
+            child: new Text('foo'),
+          ),
+        ),
+      ),
+    ],
+  );
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN, '''
+import 'package:flutter/material.dart';
+main() {
+  new Column(
+    children: <Widget>[
+      new Center(
+        child: new Center(
+          heightFactor: 0.5,
+          child: new Text('foo'),
+        ),
+      ),
+    ],
+  );
+}
+''');
+  }
+
+  test_flutterReplaceWithChild_OK_childIntoChild_singleLine() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  new Padding(
+    padding: const EdgeInsets.all(8.0),
+    child: new /*caret*/Center(
+      heightFactor: 0.5,
+      child: new Text('foo'),
+    ),
+  );
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN, '''
+import 'package:flutter/material.dart';
+main() {
+  new Padding(
+    padding: const EdgeInsets.all(8.0),
+    child: new Text('foo'),
+  );
+}
+''');
+  }
+
+  test_flutterReplaceWithChild_OK_childIntoChildren() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  new Column(
+    children: <Widget>[
+      new Text('foo'),
+      new /*caret*/Center(
+        heightFactor: 0.5,
+        child: new Padding(
+          padding: const EdgeInsets.all(8.0),
+          child: new Text('bar'),
+        ),
+      ),
+      new Text('baz'),
+    ],
+  );
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN, '''
+import 'package:flutter/material.dart';
+main() {
+  new Column(
+    children: <Widget>[
+      new Text('foo'),
+      new Padding(
+        padding: const EdgeInsets.all(8.0),
+        child: new Text('bar'),
+      ),
+      new Text('baz'),
+    ],
+  );
+}
+''');
+  }
+
+  test_flutterReplaceWithChildren_BAD_parentChild() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  new Center(
+    child: new /*caret*/Row(
+      children: [
+        new Text('aaa'),
+        new Text('bbb'),
+      ],
+    ),
+  );
+}
+''');
+    _setCaretLocation();
+    await assertNoAssist(DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN);
+  }
+
+  test_flutterReplaceWithChildren_OK_intoChildren() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/material.dart';
+main() {
+  new Column(
+    children: <Widget>[
+      new Text('aaa'),
+      new /*caret*/Column(
+        children: [
+          new Row(
+            children: [
+              new Text('bbb'),
+              new Text('ccc'),
+            ],
+          ),
+          new Row(
+            children: [
+              new Text('ddd'),
+              new Text('eee'),
+            ],
+          ),
+        ],
+      ),
+      new Text('fff'),
+    ],
+  );
+}
+''');
+    _setCaretLocation();
+    await assertHasAssist(DartAssistKind.FLUTTER_REPLACE_WITH_CHILDREN, '''
+import 'package:flutter/material.dart';
+main() {
+  new Column(
+    children: <Widget>[
+      new Text('aaa'),
+      new Row(
+        children: [
+          new Text('bbb'),
+          new Text('ccc'),
+        ],
+      ),
+      new Row(
+        children: [
+          new Text('ddd'),
+          new Text('eee'),
+        ],
+      ),
+      new Text('fff'),
+    ],
+  );
+}
+''');
+  }
+
   test_importAddShow_BAD_hasShow() async {
     await resolveTestUnit('''
 import 'dart:math' show PI;
@@ -4676,7 +4941,7 @@
         return assist;
       }
     }
-    throw fail('Expected to find assist $kind in\n${assists.join('\n')}');
+    fail('Expected to find assist $kind in\n${assists.join('\n')}');
   }
 
   void _assertLinkedGroup(LinkedEditGroup group, List<String> expectedStrings,
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 1e84fb1..1fcab846 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -100,7 +100,7 @@
     List<Fix> fixes = await _computeFixes(error);
     for (Fix fix in fixes) {
       if (fix.kind == kind) {
-        throw fail('Unexpected fix $kind in\n${fixes.join('\n')}');
+        fail('Unexpected fix $kind in\n${fixes.join('\n')}');
       }
     }
   }
@@ -140,7 +140,7 @@
         return fix;
       }
     }
-    throw fail('Expected to find fix $kind in\n${fixes.join('\n')}');
+    fail('Expected to find fix $kind in\n${fixes.join('\n')}');
   }
 
   void _assertLinkedGroup(LinkedEditGroup group, List<String> expectedStrings,
@@ -614,9 +614,7 @@
 }
 ''');
 
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'package:flutter/widgets.dart';
 import 'package:meta/meta.dart';
 
@@ -627,8 +625,38 @@
 build() {
   return new MyWidget(children: <Widget>[],);
 }
-''',
-        target: '/test.dart');
+''');
+  }
+
+  test_addMissingRequiredArg_cons_flutter_hasTrailingComma() async {
+    addFlutterPackage();
+    _addMetaPackageSource();
+
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
+
+class MyWidget extends Widget {
+  MyWidget({@required int a, @required int b});
+}
+
+build() {
+  return new MyWidget(a: 1,);
+}
+''');
+
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart';
+
+class MyWidget extends Widget {
+  MyWidget({@required int a, @required int b});
+}
+
+build() {
+  return new MyWidget(a: 1, b: null,);
+}
+''');
   }
 
   test_addMissingRequiredArg_cons_single() async {
@@ -649,16 +677,13 @@
   A a = new A();
 }
 ''');
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'libA.dart';
 
 main() {
   A a = new A(a: null);
 }
-''',
-        target: '/test.dart');
+''');
   }
 
   test_addMissingRequiredArg_cons_single_closure() async {
@@ -682,16 +707,13 @@
   A a = new A();
 }
 ''');
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'libA.dart';
 
 main() {
   A a = new A(onPressed: () {});
 }
-''',
-        target: '/test.dart');
+''');
   }
 
   test_addMissingRequiredArg_cons_single_closure_2() async {
@@ -715,16 +737,13 @@
   A a = new A();
 }
 ''');
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'libA.dart';
 
 main() {
   A a = new A(callback: (e) {});
 }
-''',
-        target: '/test.dart');
+''');
   }
 
   test_addMissingRequiredArg_cons_single_closure_3() async {
@@ -748,16 +767,13 @@
   A a = new A();
 }
 ''');
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'libA.dart';
 
 main() {
   A a = new A(callback: (a, b, c) {});
 }
-''',
-        target: '/test.dart');
+''');
   }
 
   test_addMissingRequiredArg_cons_single_closure_4() async {
@@ -781,16 +797,13 @@
   A a = new A();
 }
 ''');
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'libA.dart';
 
 main() {
   A a = new A(callback: (int a, String b, c) {});
 }
-''',
-        target: '/test.dart');
+''');
   }
 
   test_addMissingRequiredArg_cons_single_list() async {
@@ -812,16 +825,13 @@
   A a = new A();
 }
 ''');
-    await assertHasFix(
-        DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT,
-        '''
+    await assertHasFix(DartFixKind.ADD_MISSING_REQUIRED_ARGUMENT, '''
 import 'libA.dart';
 
 main() {
   A a = new A(names: <String>[]);
 }
-''',
-        target: '/test.dart');
+''');
   }
 
   test_addMissingRequiredArg_multiple() async {
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index 45a6435..6ecf220 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -159,6 +159,24 @@
     expect(attribute.literalValueString, 'my text');
   }
 
+  test_attributes_unresolved() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return const Row(1, foo: 2)
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+
+    var rowOutline = build.children[0];
+    expect(rowOutline.attributes, isEmpty);
+  }
+
   test_children() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index d0daca6..fb85da9 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -258,6 +258,8 @@
 var a = new Object();
 var b = new Text('bbb');
 ''');
+    expect(isWidgetCreation(null), isFalse);
+
     InstanceCreationExpression a = _getTopVariableCreation('a');
     expect(isWidgetCreation(a), isFalse);
 
diff --git a/pkg/analysis_server/test/src/utilities/flutter_util.dart b/pkg/analysis_server/test/src/utilities/flutter_util.dart
index 250cb37..b7bdb1b 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_util.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_util.dart
@@ -138,7 +138,7 @@
 export 'package:flutter/rendering.dart';
 
 class Center extends StatelessWidget {
-  const Center({Widget child, Key key});
+  const Center({Key key, double heightFactor, Widget child});
 }
 
 class Column extends Flex {
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java b/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
index 2d5f494..ff2d906 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
@@ -56,13 +56,20 @@
   private final Position selection;
 
   /**
+   * The optional identifier of the change kind. The identifier remains stable even if the message
+   * changes, or is parameterized.
+   */
+  private final String id;
+
+  /**
    * Constructor for {@link SourceChange}.
    */
-  public SourceChange(String message, List<SourceFileEdit> edits, List<LinkedEditGroup> linkedEditGroups, Position selection) {
+  public SourceChange(String message, List<SourceFileEdit> edits, List<LinkedEditGroup> linkedEditGroups, Position selection, String id) {
     this.message = message;
     this.edits = edits;
     this.linkedEditGroups = linkedEditGroups;
     this.selection = selection;
+    this.id = id;
   }
 
   @Override
@@ -73,7 +80,8 @@
         ObjectUtilities.equals(other.message, message) &&
         ObjectUtilities.equals(other.edits, edits) &&
         ObjectUtilities.equals(other.linkedEditGroups, linkedEditGroups) &&
-        ObjectUtilities.equals(other.selection, selection);
+        ObjectUtilities.equals(other.selection, selection) &&
+        ObjectUtilities.equals(other.id, id);
     }
     return false;
   }
@@ -83,7 +91,8 @@
     List<SourceFileEdit> edits = SourceFileEdit.fromJsonArray(jsonObject.get("edits").getAsJsonArray());
     List<LinkedEditGroup> linkedEditGroups = LinkedEditGroup.fromJsonArray(jsonObject.get("linkedEditGroups").getAsJsonArray());
     Position selection = jsonObject.get("selection") == null ? null : Position.fromJson(jsonObject.get("selection").getAsJsonObject());
-    return new SourceChange(message, edits, linkedEditGroups, selection);
+    String id = jsonObject.get("id") == null ? null : jsonObject.get("id").getAsString();
+    return new SourceChange(message, edits, linkedEditGroups, selection, id);
   }
 
   public static List<SourceChange> fromJsonArray(JsonArray jsonArray) {
@@ -106,6 +115,14 @@
   }
 
   /**
+   * The optional identifier of the change kind. The identifier remains stable even if the message
+   * changes, or is parameterized.
+   */
+  public String getId() {
+    return id;
+  }
+
+  /**
    * A list of the linked editing groups used to customize the changes that were made.
    */
   public List<LinkedEditGroup> getLinkedEditGroups() {
@@ -133,6 +150,7 @@
     builder.append(edits);
     builder.append(linkedEditGroups);
     builder.append(selection);
+    builder.append(id);
     return builder.toHashCode();
   }
 
@@ -152,6 +170,9 @@
     if (selection != null) {
       jsonObject.add("selection", selection.toJson());
     }
+    if (id != null) {
+      jsonObject.addProperty("id", id);
+    }
     return jsonObject;
   }
 
@@ -166,7 +187,9 @@
     builder.append("linkedEditGroups=");
     builder.append(StringUtils.join(linkedEditGroups, ", ") + ", ");
     builder.append("selection=");
-    builder.append(selection);
+    builder.append(selection + ", ");
+    builder.append("id=");
+    builder.append(id);
     builder.append("]");
     return builder.toString();
   }
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 3459953..09fcb67 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -7,7 +7,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  <version>1.18.5</version>
+  <version>1.18.6</version>
 </h1>
 <p>
   This document contains a specification of the API provided by the
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 1cf5070..b66e383 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.31.1
+
+* Update to reflect that `_InternalLinkedHashMap` is not a subtype of `HashMap`
+  in sdk 2.0.0-dev.22.0.
+
 ## 0.31.0+1
 
 * Update SDK constraint to require Dart v2-dev release.
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index f0ee200..6a89cad 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -303,7 +303,6 @@
   HintCode.UNUSED_LABEL,
   HintCode.UNUSED_LOCAL_VARIABLE,
   HintCode.UNUSED_SHOWN_NAME,
-  HintCode.USE_OF_VOID_RESULT,
   HintCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD,
   HtmlErrorCode.PARSE_ERROR,
   HtmlWarningCode.INVALID_URI,
@@ -627,6 +626,7 @@
   StaticWarningCode.UNDEFINED_STATIC_METHOD_OR_GETTER,
   StaticWarningCode.UNDEFINED_SUPER_GETTER,
   StaticWarningCode.UNDEFINED_SUPER_SETTER,
+  StaticWarningCode.USE_OF_VOID_RESULT,
   StrongModeCode.ASSIGNMENT_CAST,
   StrongModeCode.COULD_NOT_INFER,
   StrongModeCode.DOWN_CAST_COMPOSITE,
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 51f7726..824b3cb 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -663,17 +663,6 @@
       "Try removing the name from the list of shown members.");
 
   /**
-   * Hint for cases where the source expects a method or function to return a
-   * non-void result, but the method or function signature returns void.
-   *
-   * Parameters:
-   * 0: the name of the method or function that returns void
-   */
-  static const HintCode USE_OF_VOID_RESULT = const HintCode(
-      'USE_OF_VOID_RESULT',
-      "The result of '{0}' is being used, even though it is declared to be 'void'.");
-
-  /**
    * It will be a static type warning if <i>m</i> is not a generic method with
    * exactly <i>n</i> type parameters.
    *
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 81f5a4c..dcfe176 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -4761,6 +4761,20 @@
           "defining the setter in a superclass of '{1}'.");
 
   /**
+   * It is a static warning to assign void to any non-void type in dart.
+   * compile-time error). Report that error specially for a better user
+   * experience.
+   *
+   * Parameters: none
+   */
+  static const StaticWarningCode USE_OF_VOID_RESULT = const StaticWarningCode(
+      'USE_OF_VOID_RESULT',
+      "The expression here has a type of 'void', and therefore cannot be used.",
+      'Check if you are using the correct API; there may be a function or'
+      " call that returns void you didn't expect. Also check type parameters"
+      ' and variables which, in rare cases, may be void as well.');
+
+  /**
    * A flag indicating whether this warning is an error when running with strong
    * mode enabled.
    */
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 9b0220a..383b8a3 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -331,6 +331,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, offset, length);
         return;
+      case "MISSING_ASSIGNMENT_IN_INITIALIZER":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, offset, length);
+        return;
       case "MISSING_CATCH_OR_FINALLY":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_CATCH_OR_FINALLY, offset, length);
@@ -363,6 +367,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_IDENTIFIER, offset, length);
         return;
+      case "MISSING_INITIALIZER":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.MISSING_INITIALIZER, offset, length);
+        return;
       case "MISSING_KEYWORD_OPERATOR":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MISSING_KEYWORD_OPERATOR, offset, length);
@@ -427,6 +435,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.PREFIX_AFTER_COMBINATOR, offset, length);
         return;
+      case "REDIRECTING_CONSTRUCTOR_WITH_BODY":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, offset, length);
+        return;
       case "REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR,
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 9e112c9..5cd21d4 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -166,15 +166,26 @@
   Object visitAssignmentExpression(AssignmentExpression node) {
     Token operator = node.operator;
     TokenType operatorType = operator.type;
+    Expression leftHandSide = node.leftHandSide;
+    DartType staticType = _getStaticType(leftHandSide, read: true);
+
+    // For any compound assignments to a void variable, report bad void usage.
+    // Example: `y += voidFn()`, not allowed.
+    if (operatorType != TokenType.EQ &&
+        staticType != null &&
+        staticType.isVoid) {
+      _recordUndefinedToken(
+          null, StaticWarningCode.USE_OF_VOID_RESULT, operator, []);
+      return null;
+    }
+
     if (operatorType != TokenType.AMPERSAND_AMPERSAND_EQ &&
         operatorType != TokenType.BAR_BAR_EQ &&
         operatorType != TokenType.EQ &&
         operatorType != TokenType.QUESTION_QUESTION_EQ) {
       operatorType = _operatorFromCompoundAssignment(operatorType);
-      Expression leftHandSide = node.leftHandSide;
       if (leftHandSide != null) {
         String methodName = operatorType.lexeme;
-        DartType staticType = _getStaticType(leftHandSide, read: true);
         MethodElement staticMethod =
             _lookUpMethod(leftHandSide, staticType, methodName);
         node.staticElement = staticMethod;
@@ -888,6 +899,9 @@
           StaticTypeWarningCode.UNDEFINED_SUPER_METHOD,
           methodName,
           [methodName.name, targetTypeName]);
+    } else if (identical(errorCode, StaticWarningCode.USE_OF_VOID_RESULT)) {
+      _resolver.errorReporter.reportErrorForNode(
+          StaticWarningCode.USE_OF_VOID_RESULT, target ?? methodName, []);
     }
     return null;
   }
@@ -1304,9 +1318,7 @@
       FunctionType getterType = element.type;
       if (getterType != null) {
         DartType returnType = getterType.returnType;
-        if (!_isExecutableType(returnType)) {
-          return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
-        }
+        return _getErrorCodeForExecuting(returnType);
       }
     } else if (element is ExecutableElement) {
       return null;
@@ -1328,15 +1340,11 @@
         FunctionType getterType = getter.type;
         if (getterType != null) {
           DartType returnType = getterType.returnType;
-          if (!_isExecutableType(returnType)) {
-            return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
-          }
+          return _getErrorCodeForExecuting(returnType);
         }
       } else if (element is VariableElement) {
         DartType variableType = element.type;
-        if (!_isExecutableType(variableType)) {
-          return StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
-        }
+        return _getErrorCodeForExecuting(variableType);
       } else {
         if (target == null) {
           ClassElement enclosingClass = _resolver.enclosingClass;
@@ -1365,6 +1373,8 @@
               return null;
             }
             return StaticTypeWarningCode.UNDEFINED_FUNCTION;
+          } else if (targetType.isVoid) {
+            return StaticWarningCode.USE_OF_VOID_RESULT;
           } else if (!targetType.isDynamic && target is! NullLiteral) {
             // Proxy-conditional warning, based on state of
             // targetType.getElement()
@@ -1403,25 +1413,29 @@
       Token leftBracket = expression.leftBracket;
       Token rightBracket = expression.rightBracket;
       ErrorCode errorCode;
+      DartType type =
+          shouldReportMissingMember_static ? staticType : propagatedType;
+      var errorArguments = [methodName, type.displayName];
       if (shouldReportMissingMember_static) {
         if (target is SuperExpression) {
           errorCode = StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR;
+        } else if (staticType != null && staticType.isVoid) {
+          errorCode = StaticWarningCode.USE_OF_VOID_RESULT;
+          errorArguments = [];
         } else {
           errorCode = StaticTypeWarningCode.UNDEFINED_OPERATOR;
         }
       } else {
         errorCode = HintCode.UNDEFINED_OPERATOR;
       }
-      DartType type =
-          shouldReportMissingMember_static ? staticType : propagatedType;
       if (leftBracket == null || rightBracket == null) {
-        _recordUndefinedNode(type.element, errorCode, expression,
-            [methodName, type.displayName]);
+        _recordUndefinedNode(
+            type.element, errorCode, expression, errorArguments);
       } else {
         int offset = leftBracket.offset;
         int length = rightBracket.offset - offset + 1;
-        _recordUndefinedOffset(type.element, errorCode, offset, length,
-            [methodName, type.displayName]);
+        _recordUndefinedOffset(
+            type.element, errorCode, offset, length, errorArguments);
       }
       return true;
     }
@@ -1873,6 +1887,21 @@
   }
 
   /**
+   * Return an error if the [type], which is presumably being invoked, is not a
+   * function. The errors for non functions may be broken up by type; currently,
+   * it returns a special value for when the type is `void`.
+   */
+  ErrorCode _getErrorCodeForExecuting(DartType type) {
+    if (_isExecutableType(type)) {
+      return null;
+    }
+
+    return type.isVoid
+        ? StaticWarningCode.USE_OF_VOID_RESULT
+        : StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION;
+  }
+
+  /**
    * Return `true` if the given [type] represents an object that could be
    * invoked using the call operator '()'.
    */
@@ -2636,6 +2665,7 @@
           staticType.isVoid ? null : staticOrPropagatedEnclosingElt;
       if (propertyName.inSetterContext()) {
         ErrorCode errorCode;
+        var arguments = [propertyName.name, displayType.displayName];
         if (shouldReportMissingMember_static) {
           if (target is SuperExpression) {
             if (isStaticProperty && !staticType.isVoid) {
@@ -2644,7 +2674,10 @@
               errorCode = StaticTypeWarningCode.UNDEFINED_SUPER_SETTER;
             }
           } else {
-            if (isStaticProperty && !staticType.isVoid) {
+            if (staticType.isVoid) {
+              errorCode = StaticWarningCode.USE_OF_VOID_RESULT;
+              arguments = [];
+            } else if (isStaticProperty) {
               errorCode = StaticWarningCode.UNDEFINED_SETTER;
             } else {
               errorCode = StaticTypeWarningCode.UNDEFINED_SETTER;
@@ -2653,10 +2686,11 @@
         } else {
           errorCode = HintCode.UNDEFINED_SETTER;
         }
-        _recordUndefinedNode(declaringElement, errorCode, propertyName,
-            [propertyName.name, displayType.displayName]);
+        _recordUndefinedNode(
+            declaringElement, errorCode, propertyName, arguments);
       } else if (propertyName.inGetterContext()) {
         ErrorCode errorCode;
+        var arguments = [propertyName.name, displayType.displayName];
         if (shouldReportMissingMember_static) {
           if (target is SuperExpression) {
             if (isStaticProperty && !staticType.isVoid) {
@@ -2665,7 +2699,10 @@
               errorCode = StaticTypeWarningCode.UNDEFINED_SUPER_GETTER;
             }
           } else {
-            if (isStaticProperty && !staticType.isVoid) {
+            if (staticType.isVoid) {
+              errorCode = StaticWarningCode.USE_OF_VOID_RESULT;
+              arguments = [];
+            } else if (isStaticProperty) {
               errorCode = StaticWarningCode.UNDEFINED_GETTER;
             } else {
               errorCode = StaticTypeWarningCode.UNDEFINED_GETTER;
@@ -2674,8 +2711,8 @@
         } else {
           errorCode = HintCode.UNDEFINED_GETTER;
         }
-        _recordUndefinedNode(declaringElement, errorCode, propertyName,
-            [propertyName.name, displayType.displayName]);
+        _recordUndefinedNode(
+            declaringElement, errorCode, propertyName, arguments);
       } else {
         _recordUndefinedNode(
             declaringElement,
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index f88a050..2fc90b7 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -390,6 +390,7 @@
     } else {
       _checkForArgumentTypeNotAssignableForArgument(node.rightOperand);
     }
+    _checkForUseOfVoidResult(node.leftOperand);
     return super.visitBinaryExpression(node);
   }
 
@@ -547,6 +548,9 @@
   @override
   Object visitConditionalExpression(ConditionalExpression node) {
     _checkForNonBoolCondition(node.condition);
+    // TODO(mfairhurst) Enable this and get code compliant.
+    //_checkForUseOfVoidResult(node.thenExpression);
+    //_checkForUseOfVoidResult(node.elseExpression);
     return super.visitConditionalExpression(node);
   }
 
@@ -789,7 +793,8 @@
   Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
     Expression functionExpression = node.function;
     DartType expressionType = functionExpression.staticType;
-    if (!_isFunctionType(expressionType)) {
+    if (!_checkForUseOfVoidResult(functionExpression) &&
+        !_isFunctionType(expressionType)) {
       _errorReporter.reportErrorForNode(
           StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION,
           functionExpression);
@@ -924,6 +929,7 @@
   @override
   Object visitIsExpression(IsExpression node) {
     _checkForTypeAnnotationDeferredClass(node.type);
+    _checkForUseOfVoidResult(node.expression);
     return super.visitIsExpression(node);
   }
 
@@ -942,6 +948,7 @@
     }
     _checkForImplicitDynamicTypedLiteral(node);
     _checkForListElementTypeNotAssignable(node);
+
     return super.visitListLiteral(node);
   }
 
@@ -1175,6 +1182,7 @@
   @override
   Object visitThrowExpression(ThrowExpression node) {
     _checkForConstEvalThrowsException(node);
+    _checkForUseOfVoidResult(node.expression);
     return super.visitThrowExpression(node);
   }
 
@@ -2422,7 +2430,8 @@
    * [CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE],
    * [CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE],
    * [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE], and
-   * [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE].
+   * [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE], and
+   * [StaticWarningCode.USE_OF_VOID_RESULT].
    */
   void _checkForArgumentTypeNotAssignable(
       Expression expression,
@@ -2431,6 +2440,10 @@
       ErrorCode errorCode) {
     // Warning case: test static type information
     if (actualStaticType != null && expectedStaticType != null) {
+      if (!expectedStaticType.isVoid && _checkForUseOfVoidResult(expression)) {
+        return;
+      }
+
       _checkForAssignableExpressionAtType(
           expression, actualStaticType, expectedStaticType, errorCode);
     }
@@ -2449,6 +2462,7 @@
     if (argument == null) {
       return;
     }
+
     ParameterElement staticParameterElement = argument.staticParameterElement;
     DartType staticParameterType = staticParameterElement?.type;
     _checkForArgumentTypeNotAssignableWithExpectedTypes(argument,
@@ -4267,6 +4281,10 @@
       return;
     }
 
+    if (_checkForUseOfVoidResult(node.iterable)) {
+      return;
+    }
+
     DartType iterableType = getStaticType(node.iterable);
     if (iterableType.isDynamic) {
       return;
@@ -4276,6 +4294,9 @@
     SimpleIdentifier variable = node.identifier ?? node.loopVariable.identifier;
     DartType variableType = getStaticType(variable);
 
+    // TODO(mfairhurst) Check and guard against `for(void x in _)`?
+    //_checkForUseOfVoidResult(variable);
+
     DartType loopType = node.awaitKeyword != null
         ? _typeProvider.streamType
         : _typeProvider.iterableType;
@@ -4392,6 +4413,11 @@
     DartType leftType = (leftVariableElement == null)
         ? getStaticType(lhs)
         : leftVariableElement.type;
+
+    if (_checkForUseOfVoidResult(rhs)) {
+      return;
+    }
+
     _checkForAssignableExpression(
         rhs, leftType, StaticTypeWarningCode.INVALID_ASSIGNMENT,
         isDeclarationCast: isDeclarationCast);
@@ -5156,7 +5182,8 @@
    */
   void _checkForNonBoolCondition(Expression condition) {
     DartType conditionType = getStaticType(condition);
-    if (conditionType != null &&
+    if (!_checkForUseOfVoidResult(condition) &&
+        conditionType != null &&
         !_typeSystem.isAssignableTo(conditionType, _boolType)) {
       _errorReporter.reportErrorForNode(
           StaticTypeWarningCode.NON_BOOL_CONDITION, condition);
@@ -5674,8 +5701,12 @@
    * See [StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE].
    */
   void _checkForSwitchExpressionNotAssignable(SwitchStatement statement) {
-    // prepare 'switch' expression type
     Expression expression = statement.expression;
+    if (_checkForUseOfVoidResult(expression)) {
+      return;
+    }
+
+    // prepare 'switch' expression type
     DartType expressionType = getStaticType(expression);
     if (expressionType == null) {
       return;
@@ -6263,6 +6294,31 @@
     }
   }
 
+  /**
+   * Check for situations where the result of a method or function is used, when
+   * it returns 'void'. Or, in rare cases, when other types of expressions are
+   * void, such as identifiers.
+   *
+   * See [StaticWarningCode.USE_OF_VOID_RESULT].
+   */
+  bool _checkForUseOfVoidResult(Expression expression) {
+    if (expression == null ||
+        !identical(expression.staticType, VoidTypeImpl.instance)) {
+      return false;
+    }
+
+    if (expression is MethodInvocation) {
+      SimpleIdentifier methodName = expression.methodName;
+      _errorReporter.reportErrorForNode(
+          StaticWarningCode.USE_OF_VOID_RESULT, methodName, []);
+    } else {
+      _errorReporter.reportErrorForNode(
+          StaticWarningCode.USE_OF_VOID_RESULT, expression, []);
+    }
+
+    return true;
+  }
+
   DartType _computeReturnTypeForMethod(Expression returnExpression) {
     // This method should never be called for generators, since generators are
     // never allowed to contain return statements with expressions.
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index b07f7ab7..08c35e1 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -166,7 +166,6 @@
   Object visitAssignmentExpression(AssignmentExpression node) {
     TokenType operatorType = node.operator.type;
     if (operatorType == TokenType.EQ) {
-      _checkForUseOfVoidResult(node.rightHandSide);
       _checkForInvalidAssignment(node.leftHandSide, node.rightHandSide);
     } else {
       _checkForDeprecatedMemberUse(node.bestElement, node);
@@ -370,7 +369,6 @@
 
   @override
   Object visitVariableDeclaration(VariableDeclaration node) {
-    _checkForUseOfVoidResult(node.initializer);
     _checkForInvalidAssignment(node.name, node.initializer);
     return super.visitVariableDeclaration(node);
   }
@@ -1242,25 +1240,6 @@
     return false;
   }
 
-  /**
-   * Check for situations where the result of a method or function is used, when
-   * it returns 'void'.
-   *
-   * See [HintCode.USE_OF_VOID_RESULT].
-   */
-  void _checkForUseOfVoidResult(Expression expression) {
-    // TODO(jwren) Many other situations of use could be covered. We currently
-    // cover the cases var x = m() and x = m(), but we could also cover cases
-    // such as m().x, m()[k], a + m(), f(m()), return m().
-    if (expression is MethodInvocation) {
-      if (identical(expression.staticType, VoidTypeImpl.instance)) {
-        SimpleIdentifier methodName = expression.methodName;
-        _errorReporter.reportErrorForNode(
-            HintCode.USE_OF_VOID_RESULT, methodName, [methodName.name]);
-      }
-    }
-  }
-
   void _checkRequiredParameter(FormalParameterList node) {
     final requiredParameters =
         node.parameters.where((p) => p.element?.isRequired == true);
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index d5bfc2e..4b1f7a8 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -1129,7 +1129,9 @@
 
   /// Returns true if we need an implicit cast of [expr] from [from] type to
   /// [to] type, returns false if no cast is needed, and returns null if the
-  /// types are statically incompatible.
+  /// types are statically incompatible, or the types are compatible but don't
+  /// allow implicit cast (ie, void, which is one form of Top which oill not
+  /// downcast implicitly).
   ///
   /// If [from] is omitted, uses the static type of [expr]
   bool _needsImplicitCast(Expression expr, DartType to,
@@ -1138,8 +1140,8 @@
 
     if (!_checkNonNullAssignment(expr, to, from)) return false;
 
-    // We can use anything as void.
-    if (to.isVoid) return false;
+    // Void is considered Top, but may only be *explicitly* cast.
+    if (from.isVoid) return null;
 
     // fromT <: toT, no coercion needed.
     if (rules.isSubtypeOf(from, to)) return false;
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 7c25bb8..d858c1a 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.31.0+1
+version: 0.31.1
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
@@ -11,11 +11,11 @@
   collection: ^1.10.1
   convert: ^2.0.0
   crypto: '>=1.1.1 <3.0.0'
-  front_end: 0.1.0-alpha.8
+  front_end: 0.1.0-alpha.9
   glob: ^1.0.3
   html: '>=0.12.0 <1.14.0'
   isolate: '>=0.2.2 <2.0.0'
-  kernel: 0.3.0-alpha.5
+  kernel: 0.3.0-alpha.9
   meta: ^1.0.2
   package_config: '>=0.1.5 <2.0.0'
   path: '>=0.9.0 <2.0.0'
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 d80d8d5..f25776f 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
@@ -1728,6 +1728,12 @@
 
   @override
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/32091')
+  test_mixinInference_matchingClass_inPreviousMixin() =>
+      super.test_mixinInference_matchingClass_inPreviousMixin();
+
+  @override
+  @failingTest
   test_mixinInference_noMatchingClass() =>
       super.test_mixinInference_noMatchingClass();
 
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index 5e8fcea..d5c7d92 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -5293,85 +5293,4 @@
     assertNoErrors(source2);
     verify([source, source2]);
   }
-
-  test_useOfVoidResult_assignmentExpression_function() async {
-    Source source = addSource(r'''
-void f() {}
-class A {
-  n() {
-    var a;
-    a = f();
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
-    verify([source]);
-  }
-
-  test_useOfVoidResult_assignmentExpression_method() async {
-    Source source = addSource(r'''
-class A {
-  void m() {}
-  n() {
-    var a;
-    a = m();
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
-    verify([source]);
-  }
-
-  test_useOfVoidResult_inForLoop() async {
-    Source source = addSource(r'''
-class A {
-  void m() {}
-  n() {
-    for(var a = m();;) {}
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
-    verify([source]);
-  }
-
-  test_useOfVoidResult_variableDeclaration_function() async {
-    Source source = addSource(r'''
-void f() {}
-class A {
-  n() {
-    var a = f();
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
-    verify([source]);
-  }
-
-  test_useOfVoidResult_variableDeclaration_method() async {
-    Source source = addSource(r'''
-class A {
-  void m() {}
-  n() {
-    var a = m();
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [HintCode.USE_OF_VOID_RESULT]);
-    verify([source]);
-  }
-
-  test_useOfVoidResult_variableDeclaration_method2() async {
-    Source source = addSource(r'''
-class A {
-  void m() {}
-  n() {
-    var a = m(), b = m();
-  }
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(
-        source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]);
-    verify([source]);
-  }
 }
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 7042388..c5ecd70 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -657,41 +657,6 @@
 
   @override
   @failingTest
-  void test_invalidTopLevelVar() {
-    // TODO(danrubel) Does not recover.
-    //  'package:analyzer/src/fasta/ast_builder.dart': Failed assertion:
-    //      line 238 pos 12: 'token.isKeywordOrIdentifier': is not true.
-    //  dart:core-patch/errors_patch.dart 35                               _AssertionError._doThrowNew
-    //  dart:core-patch/errors_patch.dart 31                               _AssertionError._throwNew
-    //  package:analyzer/src/fasta/ast_builder.dart 238:12                 AstBuilder.handleIdentifier
-    //  package:front_end/src/fasta/parser/parser.dart 1639:14             Parser.ensureIdentifier
-    //  package:front_end/src/fasta/parser/parser.dart 2594:13             Parser.parseFields
-    //  package:front_end/src/fasta/parser/parser.dart 2565:11             Parser.parseTopLevelMember
-    //  package:front_end/src/fasta/parser/parser.dart 377:14              Parser.parseTopLevelDeclarationImpl
-    //  package:front_end/src/fasta/parser/parser.dart 300:15              Parser.parseUnit
-    //  package:analyzer/src/generated/parser_fasta.dart 85:33             _Parser2.parseCompilationUnit2
-    super.test_invalidTopLevelVar();
-  }
-
-  @failingTest
-  void test_invalidTypedef() {
-    // TODO(danrubel) Does not recover.
-    //  'package:analyzer/src/fasta/ast_builder.dart': Failed assertion:
-    //      line 238 pos 12: 'token.isKeywordOrIdentifier': is not true.
-    //  dart:core-patch/errors_patch.dart 35                               _AssertionError._doThrowNew
-    //  dart:core-patch/errors_patch.dart 31                               _AssertionError._throwNew
-    //  package:analyzer/src/fasta/ast_builder.dart 238:12                 AstBuilder.handleIdentifier
-    //  package:front_end/src/fasta/parser/parser.dart 1639:14             Parser.ensureIdentifier
-    //  package:front_end/src/fasta/parser/parser.dart 2594:13             Parser.parseFields
-    //  package:front_end/src/fasta/parser/parser.dart 2565:11             Parser.parseTopLevelMember
-    //  package:front_end/src/fasta/parser/parser.dart 377:14              Parser.parseTopLevelDeclarationImpl
-    //  package:front_end/src/fasta/parser/parser.dart 300:15              Parser.parseUnit
-    //  package:analyzer/src/generated/parser_fasta.dart 85:33             _Parser2.parseCompilationUnit2
-    super.test_invalidTypedef();
-  }
-
-  @override
-  @failingTest
   void test_invalidUnicodeEscape_incomplete_noDigits() {
     // TODO(brianwilkerson) Does not recover.
     //   Internal problem: Compiler cannot run without a compiler context.
@@ -1266,22 +1231,6 @@
 
   @override
   @failingTest
-  void test_redirectingConstructorWithBody_named() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, found 0
-    super.test_redirectingConstructorWithBody_named();
-  }
-
-  @override
-  @failingTest
-  void test_redirectingConstructorWithBody_unnamed() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, found 0
-    super.test_redirectingConstructorWithBody_unnamed();
-  }
-
-  @override
-  @failingTest
   void test_setterInFunction_block() {
     // TODO(brianwilkerson) Wrong errors:
     // Expected 1 errors of type ParserErrorCode.SETTER_IN_FUNCTION, found 0
@@ -2305,31 +2254,6 @@
 
   @override
   @failingTest
-  void test_incomplete_constructorInitializers_missingEquals() {
-    // TODO(brianwilkerson) exception:
-    //   NoSuchMethodError: The getter 'thisKeyword' was called on null.
-    //   Receiver: null
-    //   Tried calling: thisKeyword
-    //   dart:core                                                          Object.noSuchMethod
-    //   package:analyzer/src/fasta/ast_builder.dart 440:42                 AstBuilder.endInitializers
-    //   test/generated/parser_fasta_listener.dart 872:14                   ForwardingTestListener.endInitializers
-    //   package:front_end/src/fasta/parser/parser.dart 1942:14             Parser.parseInitializers
-    //   package:front_end/src/fasta/parser/parser.dart 1923:14             Parser.parseInitializersOpt
-    //   package:front_end/src/fasta/parser/parser.dart 2412:13             Parser.parseMethod
-    //   package:front_end/src/fasta/parser/parser.dart 2316:11             Parser.parseMember
-    super.test_incomplete_constructorInitializers_missingEquals();
-  }
-
-  @override
-  @failingTest
-  void test_incomplete_constructorInitializers_variable() {
-    // TODO(brianwilkerson) Wrong errors:
-    // Expected 1 errors of type ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, found 0
-    super.test_incomplete_constructorInitializers_variable();
-  }
-
-  @override
-  @failingTest
   void test_incomplete_returnType() {
     // TODO(brianwilkerson) reportUnrecoverableErrorWithToken
     super.test_incomplete_returnType();
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 7c03a15..dc832df 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -3897,16 +3897,28 @@
   }
 
   void test_invalidTopLevelVar() {
-    parseCompilationUnit("var Function(var arg);", errors: [
-      expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 21, 2),
-      expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 21, 2),
-    ]);
+    parseCompilationUnit("var Function(var arg);",
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.VAR_RETURN_TYPE, 0, 3),
+                expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 21, 1),
+              ]
+            : [
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 21, 2),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 21, 2),
+              ]);
   }
 
   void test_invalidTypedef() {
     parseCompilationUnit("typedef var Function(var arg);",
         errors: usingFastaParser
-            ? [expectedError(ParserErrorCode.VAR_AS_TYPE_NAME, 8, 3)]
+            ? [
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 0, 7),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 3),
+                expectedError(ParserErrorCode.VAR_RETURN_TYPE, 8, 3),
+                expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 29, 1),
+              ]
             : [
                 expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 3),
                 expectedError(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, 8, 3),
@@ -4793,7 +4805,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, 15, 2)
+      expectedError(ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, 15,
+          usingFastaParser ? 1 : 2)
     ]);
   }
 
@@ -4802,7 +4815,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, 15, 2)
+      expectedError(ParserErrorCode.REDIRECTING_CONSTRUCTOR_WITH_BODY, 15,
+          usingFastaParser ? 1 : 2)
     ]);
   }
 
@@ -10544,9 +10558,8 @@
     createParser('C() : {}');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(usingFastaParser
-        ? [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 1)]
-        : [expectedError(ParserErrorCode.MISSING_INITIALIZER, 4, 1)]);
+    listener.assertErrors(
+        [expectedError(ParserErrorCode.MISSING_INITIALIZER, 4, 1)]);
   }
 
   void test_incomplete_constructorInitializers_missingEquals() {
@@ -10554,7 +10567,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 11, 1)
+      expectedError(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER,
+          usingFastaParser ? 6 : 11, 1)
     ]);
     expect(member, new isInstanceOf<ConstructorDeclaration>());
     NodeList<ConstructorInitializer> initializers =
@@ -10565,7 +10579,53 @@
     Expression expression =
         (initializer as ConstructorFieldInitializer).expression;
     expect(expression, isNotNull);
-    expect(expression, new isInstanceOf<ParenthesizedExpression>());
+    expect(
+        expression,
+        usingFastaParser
+            ? new isInstanceOf<MethodInvocation>()
+            : new isInstanceOf<ParenthesizedExpression>());
+  }
+
+  void test_incomplete_constructorInitializers_this() {
+    createParser('C() : this {}');
+    ClassMember member = parser.parseClassMember('C');
+    expectNotNullIfNoErrors(member);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 1),
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 11, 1),
+      usingFastaParser
+          ? expectedError(
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 6, 4)
+          : expectedError(
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 11, 1)
+    ]);
+  }
+
+  void test_incomplete_constructorInitializers_thisField() {
+    createParser('C() : this.g {}');
+    ClassMember member = parser.parseClassMember('C');
+    expectNotNullIfNoErrors(member);
+    listener.assertErrors([
+      usingFastaParser
+          ? expectedError(
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 6, 4)
+          : expectedError(
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 8, 1)
+    ]);
+  }
+
+  void test_incomplete_constructorInitializers_thisPeriod() {
+    createParser('C() : this. {}');
+    ClassMember member = parser.parseClassMember('C');
+    expectNotNullIfNoErrors(member);
+    listener.assertErrors([
+      expectedError(ParserErrorCode.MISSING_IDENTIFIER, 12, 1),
+      usingFastaParser
+          ? expectedError(
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 6, 4)
+          : expectedError(
+              ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 11, 1)
+    ]);
   }
 
   void test_incomplete_constructorInitializers_variable() {
@@ -10573,7 +10633,8 @@
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
     listener.assertErrors([
-      expectedError(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 8, 1)
+      expectedError(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER,
+          usingFastaParser ? 6 : 8, 1)
     ]);
   }
 
@@ -15535,8 +15596,9 @@
 
   void test_parseCompilationUnit_builtIn_asFunctionName() {
     for (Keyword keyword in Keyword.values) {
-      if (keyword.isBuiltIn) {
+      if (keyword.isBuiltIn || keyword.isPseudo) {
         String lexeme = keyword.lexeme;
+        if (lexeme == 'Function' && !usingFastaParser) continue;
         parseCompilationUnit('$lexeme(x) => 0;');
         parseCompilationUnit('class C {$lexeme(x) => 0;}');
       }
@@ -15546,7 +15608,7 @@
   void test_parseCompilationUnit_builtIn_asFunctionName_withTypeParameter() {
     if (usingFastaParser) {
       for (Keyword keyword in Keyword.values) {
-        if (keyword.isBuiltIn) {
+        if (keyword.isBuiltIn || keyword.isPseudo) {
           String lexeme = keyword.lexeme;
           parseCompilationUnit('$lexeme<T>(x) => 0;');
           parseCompilationUnit('class C {$lexeme<T>(x) => 0;}');
@@ -15557,7 +15619,7 @@
 
   void test_parseCompilationUnit_builtIn_asGetter() {
     for (Keyword keyword in Keyword.values) {
-      if (keyword.isBuiltIn) {
+      if (keyword.isBuiltIn || keyword.isPseudo) {
         String lexeme = keyword.lexeme;
         parseCompilationUnit('get $lexeme => 0;');
         parseCompilationUnit('class C {get $lexeme => 0;}');
@@ -15640,6 +15702,16 @@
     expect(unit.declarations, hasLength(1));
   }
 
+  void test_parseCompilationUnit_pseudo_prefixed() {
+    for (Keyword keyword in Keyword.values) {
+      if (keyword.isPseudo) {
+        String lexeme = keyword.lexeme;
+        parseCompilationUnit('M.$lexeme f;');
+        parseCompilationUnit('class C {M.$lexeme f;}');
+      }
+    }
+  }
+
   void test_parseCompilationUnit_script() {
     createParser('#! /bin/dart');
     CompilationUnit unit = parser.parseCompilationUnit2();
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index b7c8fd2..b405734 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -1546,14 +1546,6 @@
 ''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
   }
 
-  test_undefinedGetter_void() async {
-    await assertErrorsInCode(r'''
-class T {
-  void m() {}
-}
-f(T e) { return e.m().f; }''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
-  }
-
   test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle() async {
     await assertErrorsInCode(r'''
 class A<K, V> {
@@ -1787,14 +1779,6 @@
 }''', [StaticTypeWarningCode.UNDEFINED_SETTER]);
   }
 
-  test_undefinedSetter_void() async {
-    await assertErrorsInCode(r'''
-class T {
-  void m() {}
-}
-f(T e) { e.m().f = 0; }''', [StaticTypeWarningCode.UNDEFINED_SETTER]);
-  }
-
   test_undefinedSuperGetter() async {
     await assertErrorsInCode(r'''
 class A {}
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 e28d5ae..266dedf 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -1811,4 +1811,259 @@
   test_undefinedStaticMethodOrGetter_setter_inSuperclass() async {
     return super.test_undefinedStaticMethodOrGetter_setter_inSuperclass();
   }
+
+  @override
+  @failingTest
+  test_generalizedVoid_assignToVoid_notStrong_error() async {
+    return super.test_generalizedVoid_assignToVoid_notStrong_error();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInForPartsOk() async {
+    return super.test_generalizedVoid_useOfVoidInForPartsOk();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInIsTestError() async {
+    return super.test_generalizedVoid_useOfVoidInIsTestError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalConditionError() async {
+    return super.test_generalizedVoid_useOfVoidInConditionalConditionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalLhsError() async {
+    return super.test_generalizedVoid_useOfVoidInConditionalLhsError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalRhsError() async {
+    return super.test_generalizedVoid_useOfVoidInConditionalRhsError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidWhenArgumentError() async {
+    return super.test_generalizedVoid_useOfVoidWhenArgumentError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidWithInitializerError() async {
+    return super.test_generalizedVoid_useOfVoidWithInitializerError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidAssignedToDynamicError() async {
+    return super.test_generalizedVoid_useOfVoidAssignedToDynamicError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_throwVoidValueError() async {
+    return super.test_generalizedVoid_throwVoidValueError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInListLiteralError() async {
+    return super.test_generalizedVoid_useOfVoidInListLiteralError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInMapLiteralValueError() async {
+    return super.test_generalizedVoid_useOfVoidInMapLiteralValueError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInMapLiteralKeyError() async {
+    return super.test_generalizedVoid_useOfVoidInMapLiteralKeyError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInNullOperatorLhsError() async {
+    return super.test_generalizedVoid_useOfVoidInNullOperatorLhsError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError() async {
+    return super.test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInWhileConditionError() async {
+    return super.test_generalizedVoid_useOfVoidInWhileConditionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInDoWhileConditionError() async {
+    return super.test_generalizedVoid_useOfVoidInDoWhileConditionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfInForeachIterableError() async {
+    return super.test_generalizedVoid_useOfInForeachIterableError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInForeachVariableError() async {
+    return super.test_generalizedVoid_useOfVoidInForeachVariableError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInSpecialAssignmentError() async {
+    return super.test_generalizedVoid_useOfVoidInSpecialAssignmentError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCallMethodError() async {
+    return super.test_generalizedVoid_useOfVoidCallMethodError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCallMethodWithNullError() async {
+    return super.test_generalizedVoid_useOfVoidCallMethodWithNullError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCascadeError() async {
+    return super.test_generalizedVoid_useOfVoidCascadeError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_invocationOfVoidToplevelError() async {
+    return super.test_generalizedVoid_invocationOfVoidToplevelError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_invocationOfVoidLocalError() async {
+    return super.test_generalizedVoid_invocationOfVoidLocalError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_invocationOfVoidFieldError() async {
+    return super.test_generalizedVoid_invocationOfVoidFieldError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_invocationOfVoidResultError() async {
+    return super.test_generalizedVoid_invocationOfVoidResultError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidByIndexingError() async {
+    return super.test_generalizedVoid_useOfVoidByIndexingError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidAsIndexError() async {
+    return super.test_generalizedVoid_useOfVoidAsIndexError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidAsIndexAssignError() async {
+    return super.test_generalizedVoid_useOfVoidAsIndexAssignError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidInSwitchExpressionError() async {
+    return super.test_generalizedVoid_useOfVoidInSwitchExpressionError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidPropertyAccessError() async {
+    return super.test_generalizedVoid_useOfVoidPropertyAccessError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidCallSetterError() async {
+    return super.test_generalizedVoid_useOfVoidCallSetterError();
+  }
+
+  @override
+  @failingTest
+  test_generalizedVoid_useOfVoidNullPropertyAccessError() async {
+    return super.test_generalizedVoid_useOfVoidNullPropertyAccessError();
+  }
+
+  @failingTest
+  @override
+  test_useOfVoidResult_assignmentExpression_function() async {
+    return super.test_useOfVoidResult_assignmentExpression_function();
+  }
+
+  @failingTest
+  @override
+  test_useOfVoidResult_assignmentExpression_method() async {
+    return super.test_useOfVoidResult_assignmentExpression_method();
+  }
+
+  @failingTest
+  @override
+  test_useOfVoidResult_variableDeclaration_method2() async {
+    return super.test_useOfVoidResult_variableDeclaration_method2();
+  }
+
+  @override
+  test_useOfVoidResult_inForLoop_ok() async {
+    return super.test_useOfVoidResult_inForLoop_ok();
+  }
+
+  @failingTest
+  @override
+  test_useOfVoidResult_inForLoop_error() async {
+    return super.test_useOfVoidResult_inForLoop_error();
+  }
+
+  @override
+  test_useOfVoidResult_variableDeclaration_function_ok() async {
+    return super.test_useOfVoidResult_variableDeclaration_function_ok();
+  }
+
+  @failingTest
+  @override
+  test_useOfVoidResult_variableDeclaration_function_error() async {
+    return super.test_useOfVoidResult_variableDeclaration_function_error();
+  }
+
+  @failingTest
+  @override
+  test_useOfVoidResult_variableDeclaration_method_error() async {
+    return super.test_useOfVoidResult_variableDeclaration_method_error();
+  }
+
+  @override
+  test_useOfVoidResult_variableDeclaration_method_ok() async {
+    return super.test_useOfVoidResult_variableDeclaration_method_ok();
+  }
 }
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index 3319dcb..81eb7e5 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -3594,4 +3594,606 @@
     await computeAnalysisResult(source);
     assertNoErrors(source);
   }
+
+  test_generalizedVoid_assignToVoid_notStrong_error() async {
+    // See StrongModeStaticTypeAnalyzer2Test.test_generalizedVoid_assignToVoidOk
+    // for testing that this does not have errors in strong mode.
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x = 42;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+  }
+
+  test_generalizedVoid_useOfVoidInExpStmtOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidInForPartsOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  for (x; false; x) {}
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidCastsOk() async {
+    Source source = addSource(r'''
+void use(dynamic x) { }
+void main() {
+  void x;
+  use(x as int);
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidInIsTestError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x is int;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInConditionalConditionError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x ? null : null;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalLhsError() async {
+    // TODO(mfairhurst) Enable this.
+    Source source = addSource(r'''
+void main(bool c) {
+  void x;
+  c ? x : null;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  @failingTest
+  test_generalizedVoid_useOfVoidInConditionalRhsError() async {
+    // TODO(mfairhurst) Enable this.
+    Source source = addSource(r'''
+void main(bool c) {
+  void x;
+  c ? null : x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidWhenArgumentError() async {
+    Source source = addSource(r'''
+void use(dynamic x) { }
+void main() {
+  void x;
+  use(x);
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidWithInitializerError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  void y = x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidAssignedToDynamicError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  dynamic z = x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_throwVoidValueError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  throw x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInListLiteralOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  <void>[x]; // not strong mode; we have to specify <void>.
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidInListLiteralError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  <dynamic>[x];
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInMapLiteralValueOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  var m1 = <int, void>{4: x}; // not strong mode; we have to specify <void>.
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidInMapLiteralValueError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  var m1 = <int, dynamic>{4: x};
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInMapLiteralKeyOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  var m2 = <void, int>{x : 4}; // not strong mode; we have to specify <void>.
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidInMapLiteralKeyError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  var m2 = <dynamic, int>{x : 4};
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInNullOperatorLhsError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x ?? 499;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInNullOperatorRhsOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  null ?? x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  @failingTest
+  test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError() async {
+    // TODO(mfairhurst) Get this test to pass once codebase is compliant.
+    Source source = addSource(r'''
+dynamic main() {
+  void x;
+  return x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+  }
+
+  test_generalizedVoid_useOfVoidReturnInVoidFunctionOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  return x;
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_generalizedVoid_useOfVoidInWhileConditionError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  while (x) {};
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInDoWhileConditionError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  do {} while (x);
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfInForeachIterableError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  for (var v in x) {}
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  @failingTest // This test may be completely invalid.
+  test_generalizedVoid_useOfVoidInForeachVariableError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  for (x in [1, 2]) {}
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInSpecialAssignmentError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x += 1;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidCallMethodError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x.toString();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidCallMethodWithNullError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x?.toString();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidCascadeError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x..toString();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_invocationOfVoidToplevelError() async {
+    Source source = addSource(r'''
+void x;
+void main() {
+  x();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_invocationOfVoidLocalError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_invocationOfVoidFieldError() async {
+    Source source = addSource(r'''
+class Container<T>{
+  T value;
+}
+void main(Container<void> voidContainer) {
+  voidContainer.value();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_invocationOfVoidResultError() async {
+    Source source = addSource(r'''
+void main() {
+  main()();
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidByIndexingError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x[0];
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidAsIndexError() async {
+    Source source = addSource(r'''
+void main(List list) {
+  void x;
+  list[x];
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidAsIndexAssignError() async {
+    Source source = addSource(r'''
+void main(List list) {
+  void x;
+  list[x] = null;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidInSwitchExpressionError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  switch(x) {}
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidPropertyAccessError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x.foo;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidCallSetterError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x.foo = null;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_useOfVoidNullPropertyAccessError() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x?.foo;
+}
+''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+  }
+
+  test_generalizedVoid_assignmentToVoidParameterOk() async {
+    // Note: the spec may decide to disallow this, but at this point that seems
+    // highly unlikely.
+    Source source = addSource(r'''
+void main() {
+  void x;
+  f(x);
+}
+void f(void x) {}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_useOfVoidResult_assignmentExpression_function() async {
+    Source source = addSource(r'''
+void f() {}
+class A {
+  n() {
+    var a;
+    a = f();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+    verify([source]);
+  }
+
+  test_useOfVoidResult_assignmentExpression_method() async {
+    Source source = addSource(r'''
+class A {
+  void m() {}
+  n() {
+    var a;
+    a = m();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+    verify([source]);
+  }
+
+  @failingTest
+  test_useOfVoidResult_inForLoop_ok() async {
+    Source source = addSource(r'''
+class A {
+  void m() {}
+  n() {
+    for(var a = m();;) {}
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_useOfVoidResult_inForLoop_error() async {
+    Source source = addSource(r'''
+class A {
+  void m() {}
+  n() {
+    for(Object a = m();;) {}
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+    verify([source]);
+  }
+
+  @failingTest
+  test_useOfVoidResult_variableDeclaration_function_ok() async {
+    Source source = addSource(r'''
+void f() {}
+class A {
+  n() {
+    var a = f();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_useOfVoidResult_variableDeclaration_function_error() async {
+    Source source = addSource(r'''
+void f() {}
+class A {
+  n() {
+    Object a = f();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+    verify([source]);
+  }
+
+  test_useOfVoidResult_variableDeclaration_method_error() async {
+    Source source = addSource(r'''
+class A {
+  void m() {}
+  n() {
+    Object a = m();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
+    verify([source]);
+  }
+
+  @failingTest
+  test_useOfVoidResult_variableDeclaration_method_ok() async {
+    Source source = addSource(r'''
+class A {
+  void m() {}
+  n() {
+    var a = m();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_useOfVoidResult_variableDeclaration_method2() async {
+    Source source = addSource(r'''
+class A {
+  void m() {}
+  n() {
+    Object a = m(), b = m();
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [
+      StaticWarningCode.USE_OF_VOID_RESULT,
+      StaticWarningCode.USE_OF_VOID_RESULT
+    ]);
+    verify([source]);
+  }
 }
diff --git a/pkg/analyzer/test/source/error_processor_test.dart b/pkg/analyzer/test/source/error_processor_test.dart
index e55d91e..37f2551 100644
--- a/pkg/analyzer/test/source/error_processor_test.dart
+++ b/pkg/analyzer/test/source/error_processor_test.dart
@@ -35,8 +35,8 @@
     ['x']
   ]);
 
-  AnalysisError use_of_void_result =
-      new AnalysisError(new TestSource(), 0, 1, HintCode.USE_OF_VOID_RESULT, [
+  AnalysisError use_of_void_result = new AnalysisError(
+      new TestSource(), 0, 1, StaticWarningCode.USE_OF_VOID_RESULT, [
     ['x']
   ]);
 
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 9a53d86..bb6b1d0 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -3751,7 +3751,7 @@
   void set d(y) => voidFn();
   /*warning:NON_VOID_RETURN_FOR_SETTER*/int set e(y) => 4;
   /*warning:NON_VOID_RETURN_FOR_SETTER*/int set f(y) => 
-    /*error:RETURN_OF_INVALID_TYPE, info:DOWN_CAST_IMPLICIT*/voidFn();
+    /*error:RETURN_OF_INVALID_TYPE*/voidFn();
   set g(y) {return /*error:RETURN_OF_INVALID_TYPE*/4;}
   void set h(y) {return /*error:RETURN_OF_INVALID_TYPE*/4;}
   /*warning:NON_VOID_RETURN_FOR_SETTER*/int set i(y) {return 4;}
@@ -4437,7 +4437,7 @@
 typedef int Foo();
 void foo() {}
 void main () {
-  Foo x = /*info:USE_OF_VOID_RESULT, info:DOWN_CAST_COMPOSITE*/foo();
+  Foo x = /*error:USE_OF_VOID_RESULT*/foo();
 }
 ''');
   }
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index fb326f8..18e4279 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -2429,7 +2429,7 @@
 class C extends B {
   f() {}
 }
-var x = /*error:TOP_LEVEL_INSTANCE_METHOD*/new C()./*info:USE_OF_VOID_RESULT*/f();
+var x = /*error:TOP_LEVEL_INSTANCE_METHOD*/new C()./*error:USE_OF_VOID_RESULT*/f();
 ''');
   }
 
@@ -3516,7 +3516,7 @@
   test_inferVariableVoid() async {
     var mainUnit = await checkFileElement('''
 void f() {}
-var x = /*info:USE_OF_VOID_RESULT*/f();
+var x = /*error:USE_OF_VOID_RESULT*/f();
   ''');
     var x = mainUnit.topLevelVariables[0];
     expect(x.name, 'x');
@@ -4309,12 +4309,12 @@
 
 void printRunning() { print("running"); }
 var x = run<dynamic>(printRunning);
-var y = /*info:USE_OF_VOID_RESULT*/run(printRunning);
+var y = /*error:USE_OF_VOID_RESULT*/run(printRunning);
 
 main() {
   void printRunning() { print("running"); }
   var x = run<dynamic>(printRunning);
-  var y = /*info:USE_OF_VOID_RESULT*/run(printRunning);
+  var y = /*error:USE_OF_VOID_RESULT*/run(printRunning);
   x = 123;
   x = 'hi';
   y = 123;
diff --git a/pkg/analyzer_plugin/doc/api.html b/pkg/analyzer_plugin/doc/api.html
index 7917358..8c92a60 100644
--- a/pkg/analyzer_plugin/doc/api.html
+++ b/pkg/analyzer_plugin/doc/api.html
@@ -997,6 +997,13 @@
           additionally insert a template for the parameters. The information
           required in order to do so is contained in other fields.
         </p>
+      </dd><dt class="field"><b>displayText: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          Text to be displayed in, for example, a completion pop-up. This field
+          is only defined if the displayed text should be different than the
+          completion.  Otherwise it is omitted.
+        </p>
       </dd><dt class="field"><b>selectionOffset: int</b></dt><dd>
         
         <p>
@@ -1023,7 +1030,7 @@
         
         <p>
           An abbreviated version of the Dartdoc associated with the element
-          being suggested, This field is omitted if there is no Dartdoc
+          being suggested. This field is omitted if there is no Dartdoc
           associated with the element.
         </p>
       </dd><dt class="field"><b>docComplete: String<span style="color:#999999"> (optional)</span></b></dt><dd>
@@ -1157,7 +1164,12 @@
           suggestions of this kind, the completion is the named argument
           identifier including a trailing ':' and a space.
         </p>
-      </dd><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_ContextRoot">ContextRoot: object</a></dt><dd>
+      </dd><dt class="value">OPTIONAL_ARGUMENT</dt><dt class="value">OVERRIDE</dt><dd>
+        
+        <p>
+          An overriding implementation of a class member is being suggested.
+        </p>
+      </dd><dt class="value">PARAMETER</dt></dl></dd><dt class="typeDefinition"><a name="type_ContextRoot">ContextRoot: object</a></dt><dd>
     <p>
       A description of an analysis context.
     </p>
@@ -1965,6 +1977,12 @@
           The position that should be selected after the edits have been
           applied.
         </p>
+      </dd><dt class="field"><b>id: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          The optional identifier of the change kind. The identifier remains
+          stable even if the message changes, or is parameterized.
+        </p>
       </dd></dl></dd><dt class="typeDefinition"><a name="type_SourceEdit">SourceEdit: object</a></dt><dd>
     <p>
       A description of a single change to a single file.
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index d622ae2..cb24ea5 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -597,6 +597,7 @@
  *   "kind": CompletionSuggestionKind
  *   "relevance": int
  *   "completion": String
+ *   "displayText": optional String
  *   "selectionOffset": int
  *   "selectionLength": int
  *   "isDeprecated": bool
@@ -626,6 +627,8 @@
 
   String _completion;
 
+  String _displayText;
+
   int _selectionOffset;
 
   int _selectionLength;
@@ -710,6 +713,22 @@
   }
 
   /**
+   * Text to be displayed in, for example, a completion pop-up. This field is
+   * only defined if the displayed text should be different than the
+   * completion. Otherwise it is omitted.
+   */
+  String get displayText => _displayText;
+
+  /**
+   * Text to be displayed in, for example, a completion pop-up. This field is
+   * only defined if the displayed text should be different than the
+   * completion. Otherwise it is omitted.
+   */
+  void set displayText(String value) {
+    this._displayText = value;
+  }
+
+  /**
    * The offset, relative to the beginning of the completion, of where the
    * selection should be placed after insertion.
    */
@@ -767,14 +786,14 @@
 
   /**
    * An abbreviated version of the Dartdoc associated with the element being
-   * suggested, This field is omitted if there is no Dartdoc associated with
+   * suggested. This field is omitted if there is no Dartdoc associated with
    * the element.
    */
   String get docSummary => _docSummary;
 
   /**
    * An abbreviated version of the Dartdoc associated with the element being
-   * suggested, This field is omitted if there is no Dartdoc associated with
+   * suggested. This field is omitted if there is no Dartdoc associated with
    * the element.
    */
   void set docSummary(String value) {
@@ -983,7 +1002,8 @@
       int selectionLength,
       bool isDeprecated,
       bool isPotential,
-      {String docSummary,
+      {String displayText,
+      String docSummary,
       String docComplete,
       String declaringType,
       String defaultArgumentListString,
@@ -1000,6 +1020,7 @@
     this.kind = kind;
     this.relevance = relevance;
     this.completion = completion;
+    this.displayText = displayText;
     this.selectionOffset = selectionOffset;
     this.selectionLength = selectionLength;
     this.isDeprecated = isDeprecated;
@@ -1047,6 +1068,11 @@
       } else {
         throw jsonDecoder.mismatch(jsonPath, "completion");
       }
+      String displayText;
+      if (json.containsKey("displayText")) {
+        displayText = jsonDecoder.decodeString(
+            jsonPath + ".displayText", json["displayText"]);
+      }
       int selectionOffset;
       if (json.containsKey("selectionOffset")) {
         selectionOffset = jsonDecoder.decodeInt(
@@ -1151,6 +1177,7 @@
       }
       return new CompletionSuggestion(kind, relevance, completion,
           selectionOffset, selectionLength, isDeprecated, isPotential,
+          displayText: displayText,
           docSummary: docSummary,
           docComplete: docComplete,
           declaringType: declaringType,
@@ -1176,6 +1203,9 @@
     result["kind"] = kind.toJson();
     result["relevance"] = relevance;
     result["completion"] = completion;
+    if (displayText != null) {
+      result["displayText"] = displayText;
+    }
     result["selectionOffset"] = selectionOffset;
     result["selectionLength"] = selectionLength;
     result["isDeprecated"] = isDeprecated;
@@ -1234,6 +1264,7 @@
       return kind == other.kind &&
           relevance == other.relevance &&
           completion == other.completion &&
+          displayText == other.displayText &&
           selectionOffset == other.selectionOffset &&
           selectionLength == other.selectionLength &&
           isDeprecated == other.isDeprecated &&
@@ -1265,6 +1296,7 @@
     hash = JenkinsSmiHash.combine(hash, kind.hashCode);
     hash = JenkinsSmiHash.combine(hash, relevance.hashCode);
     hash = JenkinsSmiHash.combine(hash, completion.hashCode);
+    hash = JenkinsSmiHash.combine(hash, displayText.hashCode);
     hash = JenkinsSmiHash.combine(hash, selectionOffset.hashCode);
     hash = JenkinsSmiHash.combine(hash, selectionLength.hashCode);
     hash = JenkinsSmiHash.combine(hash, isDeprecated.hashCode);
@@ -1298,6 +1330,7 @@
  *   KEYWORD
  *   NAMED_ARGUMENT
  *   OPTIONAL_ARGUMENT
+ *   OVERRIDE
  *   PARAMETER
  * }
  *
@@ -1351,6 +1384,12 @@
   static const CompletionSuggestionKind OPTIONAL_ARGUMENT =
       const CompletionSuggestionKind._("OPTIONAL_ARGUMENT");
 
+  /**
+   * An overriding implementation of a class member is being suggested.
+   */
+  static const CompletionSuggestionKind OVERRIDE =
+      const CompletionSuggestionKind._("OVERRIDE");
+
   static const CompletionSuggestionKind PARAMETER =
       const CompletionSuggestionKind._("PARAMETER");
 
@@ -1366,6 +1405,7 @@
     KEYWORD,
     NAMED_ARGUMENT,
     OPTIONAL_ARGUMENT,
+    OVERRIDE,
     PARAMETER
   ];
 
@@ -1390,6 +1430,8 @@
         return NAMED_ARGUMENT;
       case "OPTIONAL_ARGUMENT":
         return OPTIONAL_ARGUMENT;
+      case "OVERRIDE":
+        return OVERRIDE;
       case "PARAMETER":
         return PARAMETER;
     }
@@ -5207,6 +5249,7 @@
  *   "edits": List<SourceFileEdit>
  *   "linkedEditGroups": List<LinkedEditGroup>
  *   "selection": optional Position
+ *   "id": optional String
  * }
  *
  * Clients may not extend, implement or mix-in this class.
@@ -5220,6 +5263,8 @@
 
   Position _selection;
 
+  String _id;
+
   /**
    * A human-readable description of the change to be applied.
    */
@@ -5273,10 +5318,25 @@
     this._selection = value;
   }
 
+  /**
+   * The optional identifier of the change kind. The identifier remains stable
+   * even if the message changes, or is parameterized.
+   */
+  String get id => _id;
+
+  /**
+   * The optional identifier of the change kind. The identifier remains stable
+   * even if the message changes, or is parameterized.
+   */
+  void set id(String value) {
+    this._id = value;
+  }
+
   SourceChange(String message,
       {List<SourceFileEdit> edits,
       List<LinkedEditGroup> linkedEditGroups,
-      Position selection}) {
+      Position selection,
+      String id}) {
     this.message = message;
     if (edits == null) {
       this.edits = <SourceFileEdit>[];
@@ -5289,6 +5349,7 @@
       this.linkedEditGroups = linkedEditGroups;
     }
     this.selection = selection;
+    this.id = id;
   }
 
   factory SourceChange.fromJson(
@@ -5329,10 +5390,15 @@
         selection = new Position.fromJson(
             jsonDecoder, jsonPath + ".selection", json["selection"]);
       }
+      String id;
+      if (json.containsKey("id")) {
+        id = jsonDecoder.decodeString(jsonPath + ".id", json["id"]);
+      }
       return new SourceChange(message,
           edits: edits,
           linkedEditGroups: linkedEditGroups,
-          selection: selection);
+          selection: selection,
+          id: id);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "SourceChange", json);
     }
@@ -5350,6 +5416,9 @@
     if (selection != null) {
       result["selection"] = selection.toJson();
     }
+    if (id != null) {
+      result["id"] = id;
+    }
     return result;
   }
 
@@ -5389,7 +5458,8 @@
               (SourceFileEdit a, SourceFileEdit b) => a == b) &&
           listEqual(linkedEditGroups, other.linkedEditGroups,
               (LinkedEditGroup a, LinkedEditGroup b) => a == b) &&
-          selection == other.selection;
+          selection == other.selection &&
+          id == other.id;
     }
     return false;
   }
@@ -5401,6 +5471,7 @@
     hash = JenkinsSmiHash.combine(hash, edits.hashCode);
     hash = JenkinsSmiHash.combine(hash, linkedEditGroups.hashCode);
     hash = JenkinsSmiHash.combine(hash, selection.hashCode);
+    hash = JenkinsSmiHash.combine(hash, id.hashCode);
     return JenkinsSmiHash.finish(hash);
   }
 }
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index 5953c1c..62aebc6 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -133,6 +133,7 @@
  *   "kind": CompletionSuggestionKind
  *   "relevance": int
  *   "completion": String
+ *   "displayText": optional String
  *   "selectionOffset": int
  *   "selectionLength": int
  *   "isDeprecated": bool
@@ -163,6 +164,7 @@
           "isDeprecated": isBool,
           "isPotential": isBool
         }, optionalFields: {
+          "displayText": isString,
           "docSummary": isString,
           "docComplete": isString,
           "declaringType": isString,
@@ -190,6 +192,7 @@
  *   KEYWORD
  *   NAMED_ARGUMENT
  *   OPTIONAL_ARGUMENT
+ *   OVERRIDE
  *   PARAMETER
  * }
  */
@@ -202,6 +205,7 @@
   "KEYWORD",
   "NAMED_ARGUMENT",
   "OPTIONAL_ARGUMENT",
+  "OVERRIDE",
   "PARAMETER"
 ]);
 
@@ -849,6 +853,7 @@
  *   "edits": List<SourceFileEdit>
  *   "linkedEditGroups": List<LinkedEditGroup>
  *   "selection": optional Position
+ *   "id": optional String
  * }
  */
 final Matcher isSourceChange =
@@ -857,7 +862,8 @@
           "edits": isListOf(isSourceFileEdit),
           "linkedEditGroups": isListOf(isLinkedEditGroup)
         }, optionalFields: {
-          "selection": isPosition
+          "selection": isPosition,
+          "id": isString
         }));
 
 /**
diff --git a/pkg/analyzer_plugin/tool/spec/common_types_spec.html b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
index 1047f8d..fb0b467 100644
--- a/pkg/analyzer_plugin/tool/spec/common_types_spec.html
+++ b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
@@ -198,6 +198,14 @@
           required in order to do so is contained in other fields.
         </p>
       </field>
+      <field name="displayText" optional="true">
+        <ref>String</ref>
+        <p>
+          Text to be displayed in, for example, a completion pop-up. This field
+          is only defined if the displayed text should be different than the
+          completion.  Otherwise it is omitted.
+        </p>
+      </field>
       <field name="selectionOffset">
         <ref>int</ref>
         <p>
@@ -228,7 +236,7 @@
         <ref>String</ref>
         <p>
           An abbreviated version of the Dartdoc associated with the element
-          being suggested, This field is omitted if there is no Dartdoc
+          being suggested. This field is omitted if there is no Dartdoc
           associated with the element.
         </p>
       </field>
@@ -391,6 +399,12 @@
         </p>
       </value>
       <value><code>OPTIONAL_ARGUMENT</code></value>
+      <value>
+        <code>OVERRIDE</code>
+        <p>
+          An overriding implementation of a class member is being suggested.
+        </p>
+      </value>
       <value><code>PARAMETER</code></value>
     </enum>
   </type>
@@ -1349,6 +1363,13 @@
           applied.
         </p>
       </field>
+      <field name="id" optional="true">
+        <ref>String</ref>
+        <p>
+          The optional identifier of the change kind. The identifier remains
+          stable even if the message changes, or is parameterized.
+        </p>
+      </field>
     </object>
   </type>
   <type name="SourceEdit">
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index f3db942..0d0e81b 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -600,8 +600,10 @@
 
 class ConstantConverter implements ConstantValueVisitor<ConstantValue, Null> {
   final Entity Function(Entity) toBackendEntity;
+  final TypeConverter typeConverter;
 
-  ConstantConverter(this.toBackendEntity);
+  ConstantConverter(this.toBackendEntity)
+      : typeConverter = new TypeConverter(toBackendEntity);
 
   ConstantValue visitNull(NullConstantValue constant, _) => constant;
   ConstantValue visitInt(IntConstantValue constant, _) => constant;
@@ -612,12 +614,12 @@
   ConstantValue visitNonConstant(NonConstantValue constant, _) => constant;
 
   ConstantValue visitFunction(FunctionConstantValue constant, _) {
-    return new FunctionConstantValue(
-        toBackendEntity(constant.element), _handleType(constant.type));
+    return new FunctionConstantValue(toBackendEntity(constant.element),
+        typeConverter.convert(constant.type));
   }
 
   ConstantValue visitList(ListConstantValue constant, _) {
-    var type = _handleType(constant.type);
+    var type = typeConverter.convert(constant.type);
     List<ConstantValue> entries = _handleValues(constant.entries);
     if (identical(entries, constant.entries) && type == constant.type) {
       return constant;
@@ -626,7 +628,7 @@
   }
 
   ConstantValue visitMap(MapConstantValue constant, _) {
-    var type = _handleType(constant.type);
+    var type = typeConverter.convert(constant.type);
     List<ConstantValue> keys = _handleValues(constant.keys);
     List<ConstantValue> values = _handleValues(constant.values);
     if (identical(keys, constant.keys) &&
@@ -638,7 +640,7 @@
   }
 
   ConstantValue visitConstructed(ConstructedConstantValue constant, _) {
-    var type = _handleType(constant.type);
+    var type = typeConverter.convert(constant.type);
     if (type == constant.type && constant.fields.isEmpty) {
       return constant;
     }
@@ -650,8 +652,8 @@
   }
 
   ConstantValue visitType(TypeConstantValue constant, _) {
-    var type = _handleType(constant.type);
-    var representedType = _handleType(constant.representedType);
+    var type = typeConverter.convert(constant.type);
+    var representedType = typeConverter.convert(constant.representedType);
     if (type == constant.type && representedType == constant.representedType) {
       return constant;
     }
@@ -672,22 +674,6 @@
     return new DeferredGlobalConstantValue(referenced, constant.unit);
   }
 
-  DartType _handleType(DartType type) {
-    if (type is InterfaceType) {
-      var element = toBackendEntity(type.element);
-      var args = type.typeArguments.map(_handleType).toList();
-      return new InterfaceType(element, args);
-    }
-    if (type is TypedefType) {
-      var element = toBackendEntity(type.element);
-      var args = type.typeArguments.map(_handleType).toList();
-      return new TypedefType(element, args);
-    }
-
-    // TODO(redemption): handle other types.
-    return type;
-  }
-
   List<ConstantValue> _handleValues(List<ConstantValue> values) {
     List<ConstantValue> result;
     for (int i = 0; i < values.length; i++) {
@@ -701,3 +687,50 @@
     return result ?? values;
   }
 }
+
+class TypeConverter extends DartTypeVisitor<DartType, Null> {
+  final Entity Function(Entity) toBackendEntity;
+  TypeConverter(this.toBackendEntity);
+
+  DartType convert(DartType type) => type.accept(this, null);
+
+  DartType visitVoidType(VoidType type, _) => type;
+  DartType visitDynamicType(DynamicType type, _) => type;
+
+  DartType visitTypeVariableType(TypeVariableType type, _) {
+    return new TypeVariableType(toBackendEntity(type.element));
+  }
+
+  DartType visitFunctionTypeVariable(FunctionTypeVariable type, _) {
+    var bound = type.bound?.accept(this, null);
+    return new FunctionTypeVariable(type.index, bound);
+  }
+
+  DartType visitFunctionType(FunctionType type, _) {
+    var returnType = type.returnType.accept(this, null);
+    var parameterTypes = _visitList(type.parameterTypes);
+    var optionalParameterTypes = _visitList(type.optionalParameterTypes);
+    var namedParameterTypes = _visitList(type.namedParameterTypes);
+    var typeVariables = type.typeVariables
+        .map<FunctionTypeVariable>((t) => t.accept<DartType, Null>(this, null))
+        .toList();
+    var typedefType = type.typedefType?.accept(this, null);
+    return new FunctionType(returnType, parameterTypes, optionalParameterTypes,
+        type.namedParameters, namedParameterTypes, typeVariables, typedefType);
+  }
+
+  DartType visitInterfaceType(InterfaceType type, _) {
+    var element = toBackendEntity(type.element);
+    var args = _visitList(type.typeArguments);
+    return new InterfaceType(element, args);
+  }
+
+  DartType visitTypedefType(TypedefType type, _) {
+    var element = toBackendEntity(type.element);
+    var args = _visitList(type.typeArguments);
+    return new TypedefType(element, args);
+  }
+
+  List<DartType> _visitList(List<DartType> list) =>
+      list.map<DartType>((t) => t.accept(this, null)).toList();
+}
diff --git a/pkg/compiler/lib/src/resolution/constructors.dart b/pkg/compiler/lib/src/resolution/constructors.dart
index 8f9bbcf..8d721f4 100644
--- a/pkg/compiler/lib/src/resolution/constructors.dart
+++ b/pkg/compiler/lib/src/resolution/constructors.dart
@@ -310,7 +310,7 @@
     // parameters (regular ones and initializing formals) we must extend
     // the parameter scope rather than adding a new nested scope.
     visitor.scope = new ExtensionScope(visitor.scope);
-    Link<Node> parameterNodes = (functionNode.parameters == null)
+    Link<Node> parameterNodes = (functionNode?.parameters == null)
         ? const Link<Node>()
         : functionNode.parameters.nodes;
     functionParameters.forEachParameter((FormalElement _element) {
@@ -367,7 +367,7 @@
       parameterNodes = parameterNodes.tail;
     });
 
-    if (functionNode.initializers == null) {
+    if (functionNode?.initializers == null) {
       initializers = const Link<Node>();
     } else {
       initializers = functionNode.initializers.nodes;
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 056ae25..d3591d3 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -2476,14 +2476,12 @@
     for (var field in fieldDecls) {
       var f = field.element;
       if (f.isStatic) continue;
-      var init = field.initializer;
-      if (init == null ||
-          ctorFields != null &&
-              ctorFields.contains(f) &&
-              _constants.isFieldInitConstant(field)) {
+      if (ctorFields != null &&
+          ctorFields.contains(f) &&
+          _constants.isFieldInitConstant(field)) {
         continue;
       }
-      emitFieldInit(f, init, field.name);
+      emitFieldInit(f, field.initializer, field.name);
     }
 
     if (ctor != null) {
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 4f1c302..3d16a4c 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1470,10 +1470,9 @@
     for (var f in fields) {
       if (f.isStatic) continue;
       var init = f.initializer;
-      if (init == null ||
-          ctorFields != null &&
-              ctorFields.contains(f) &&
-              _constants.isConstant(init)) {
+      if (ctorFields != null &&
+          ctorFields.contains(f) &&
+          (init == null || _constants.isConstant(init))) {
         continue;
       }
       emitFieldInit(f, init);
diff --git a/pkg/expect/lib/minitest.dart b/pkg/expect/lib/minitest.dart
index d3f2ce6..8082bd5 100644
--- a/pkg/expect/lib/minitest.dart
+++ b/pkg/expect/lib/minitest.dart
@@ -25,7 +25,7 @@
 
 import 'package:expect/expect.dart';
 
-typedef void _Action();
+typedef dynamic _Action();
 typedef void _ExpectationFunction(Object actual);
 
 final List<_Group> _groups = [new _Group()];
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 59301ae..a2aa3c9 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -303,6 +303,13 @@
     return _sdkSummaryProgram;
   }
 
+  void set sdkSummaryComponent(Program platform) {
+    if (_sdkSummaryProgram != null) {
+      throw new StateError("sdkSummary already loaded.");
+    }
+    _sdkSummaryProgram = platform;
+  }
+
   /// Get the summary programs for each of the underlying `inputSummaries`
   /// provided via [CompilerOptions].
   // TODO(sigmund): move, this doesn't feel like an "option".
diff --git a/pkg/front_end/lib/src/fasta/command_line_reporting.dart b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
index 2f48cb8..3efcc4d 100644
--- a/pkg/front_end/lib/src/fasta/command_line_reporting.dart
+++ b/pkg/front_end/lib/src/fasta/command_line_reporting.dart
@@ -176,6 +176,22 @@
   }
 }
 
+bool isCompileTimeError(Severity severity) {
+  switch (severity) {
+    case Severity.error:
+    case Severity.internalProblem:
+      return true;
+
+    case Severity.errorLegacyWarning:
+      return CompilerContext.current.options.strongMode;
+
+    case Severity.nit:
+    case Severity.warning:
+      return false;
+  }
+  return unexpected("$severity", "isCompileTimeError", -1, null);
+}
+
 /// Report [message] unless [severity] is suppressed (see [isHidden]). Throws
 /// an exception if [severity] is fatal (see [isFatal]).
 ///
@@ -183,6 +199,9 @@
 /// [CompilerContext.report] instead.
 void report(LocatedMessage message, Severity severity) {
   if (isHidden(severity)) return;
+  if (isCompileTimeError(severity)) {
+    CompilerContext.current.logError(message, severity);
+  }
   _printAndThrowIfDebugging(
       format(message, severity), severity, message.uri, message.charOffset);
 }
@@ -193,6 +212,9 @@
 /// [CompilerContext.reportWithoutLocation] instead.
 void reportWithoutLocation(Message message, Severity severity) {
   if (isHidden(severity)) return;
+  if (isCompileTimeError(severity)) {
+    CompilerContext.current.logError(message, severity);
+  }
   _printAndThrowIfDebugging(
       formatWithoutLocation(message, severity), severity, null, -1);
 }
diff --git a/pkg/front_end/lib/src/fasta/compiler_context.dart b/pkg/front_end/lib/src/fasta/compiler_context.dart
index 3194861..c34c57f 100644
--- a/pkg/front_end/lib/src/fasta/compiler_context.dart
+++ b/pkg/front_end/lib/src/fasta/compiler_context.dart
@@ -47,6 +47,8 @@
   /// programs.
   final Map<Uri, Source> uriToSource = <Uri, Source>{};
 
+  final List errors = <Object>[];
+
   FileSystem get fileSystem => options.fileSystem;
 
   bool enableColorsCached = null;
@@ -77,6 +79,11 @@
     return command_line_reporting.formatWithoutLocation(message, severity);
   }
 
+  void logError(Object message, Severity severity) {
+    errors.add(message);
+    errors.add(severity);
+  }
+
   static CompilerContext get current {
     var context = Zone.current[compilerContextKey];
     if (context == null) {
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 34ce204..5f95770 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -1372,6 +1372,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedAnInitializer = const MessageCode(
     "ExpectedAnInitializer",
+    analyzerCode: "MISSING_INITIALIZER",
+    dart2jsCode: "*fatal*",
     message: r"""Expected an initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3216,6 +3218,18 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeMissingAssignmentInInitializer =
+    messageMissingAssignmentInInitializer;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageMissingAssignmentInInitializer = const MessageCode(
+    "MissingAssignmentInInitializer",
+    analyzerCode: "MISSING_ASSIGNMENT_IN_INITIALIZER",
+    dart2jsCode: "*fatal*",
+    message: r"""Expected an assignment after the field name.""",
+    tip: r"""To initialize a field, use the syntax 'name = value'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMissingConstFinalVarOrType =
     messageMissingConstFinalVarOrType;
 
@@ -4201,6 +4215,19 @@
     message: r"""An optional named parameter can't start with '_'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeRedirectingConstructorWithBody =
+    messageRedirectingConstructorWithBody;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageRedirectingConstructorWithBody = const MessageCode(
+    "RedirectingConstructorWithBody",
+    analyzerCode: "REDIRECTING_CONSTRUCTOR_WITH_BODY",
+    dart2jsCode: "*fatal*",
+    message: r"""Redirecting constructors can't have a body.""",
+    tip:
+        r"""Try removing the body, or not making this a redirecting constructor.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeRedirectionInNonFactory = messageRedirectionInNonFactory;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index a0ea650..2c46b7b 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -1420,7 +1420,7 @@
           // Return the newly inserted synthetic token
           // as the end of the type reference.
           return token.next;
-        } else if (identical(value, '<') || identical(value, 'Function')) {
+        } else if (identical(value, '<')) {
           // Found a type reference, but missing an identifier after the period.
           rewriteAndRecover(
               token,
@@ -3294,12 +3294,57 @@
     } else if (optional('super', next)) {
       token = parseExpression(token);
     } else if (optional('this', next)) {
-      token = parseExpression(token);
+      if (!optional('(', next.next)) {
+        if (!optional('.', next.next)) {
+          // Recovery
+          reportRecoverableError(
+              next.next, fasta.templateExpectedButGot.withArguments('.'));
+          rewriter.insertTokenAfter(
+              next, new SyntheticToken(TokenType.PERIOD, next.next.offset));
+        }
+        next = next.next;
+        if (!next.next.isIdentifier) {
+          // Recovery
+          insertSyntheticIdentifier(next, IdentifierContext.fieldInitializer);
+        }
+        next = next.next;
+      }
+      if (optional('(', next.next)) {
+        token = parseExpression(token);
+        next = token.next;
+        if (optional('{', next) || optional('=>', next)) {
+          reportRecoverableError(
+              next, fasta.messageRedirectingConstructorWithBody);
+        }
+      } else {
+        if (!optional('=', next.next)) {
+          // Recovery
+          reportRecoverableError(
+              token.next, fasta.messageMissingAssignmentInInitializer);
+          next = rewriter
+              .insertTokenAfter(
+                  next, new SyntheticToken(TokenType.EQ, next.next.offset))
+              .next;
+          rewriter.insertTokenAfter(next,
+              new SyntheticStringToken(TokenType.IDENTIFIER, '', next.offset));
+        }
+        token = parseExpression(token);
+      }
     } else if (next.isIdentifier) {
+      if (!optional('=', next.next)) {
+        // Recovery
+        next = insertSyntheticIdentifier(
+            token, IdentifierContext.fieldInitializer,
+            message: fasta.messageMissingAssignmentInInitializer,
+            messageOnToken: next);
+        rewriter.insertTokenAfter(
+            next, new SyntheticToken(TokenType.EQ, next.offset));
+      }
       token = parseExpression(token);
     } else {
       // Recovery
-      insertSyntheticIdentifier(token, IdentifierContext.fieldInitializer);
+      insertSyntheticIdentifier(token, IdentifierContext.fieldInitializer,
+          message: fasta.messageExpectedAnInitializer, messageOnToken: token);
       token = parseExpression(token);
     }
     listener.endInitializer(token.next);
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 2ecd66f..0dda491 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -514,6 +514,9 @@
   void endMethod(
       Token getOrSet, Token beginToken, Token beginParam, Token endToken) {
     debugEvent("Method");
+    // TODO(danrubel): Consider removing the beginParam parameter
+    // and using bodyToken, but pushing a NullValue on the stack
+    // in handleNoFormalParameters rather than the supplied token.
     pop(); // bodyToken
     Object name = pop();
     Token metadata = pop();
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 7882c3b..c6e9652 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1664,6 +1664,26 @@
 
 ExpectedAnInitializer:
   template: "Expected an initializer."
+  analyzerCode: MISSING_INITIALIZER
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { C() : {} }"
+
+MissingAssignmentInInitializer:
+  template: "Expected an assignment after the field name."
+  tip: "To initialize a field, use the syntax 'name = value'."
+  analyzerCode: MISSING_ASSIGNMENT_IN_INITIALIZER
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { C() : x(3) {} }"
+
+RedirectingConstructorWithBody:
+  template: "Redirecting constructors can't have a body."
+  tip: "Try removing the body, or not making this a redirecting constructor."
+  analyzerCode: REDIRECTING_CONSTRUCTOR_WITH_BODY
+  dart2jsCode: "*fatal*"
+  script:
+    - "class C { C() : this.x() {} }"
 
 NotAnLvalue:
   template: "Can't assign to this."
diff --git a/pkg/front_end/pubspec.yaml b/pkg/front_end/pubspec.yaml
index 370ee5b..25ed266 100644
--- a/pkg/front_end/pubspec.yaml
+++ b/pkg/front_end/pubspec.yaml
@@ -1,5 +1,5 @@
 name: front_end
-version: 0.1.0-alpha.8
+version: 0.1.0-alpha.9
 author: Dart Team <misc@dartlang.org>
 description: Front end for compilation of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/front_end
@@ -9,7 +9,7 @@
   charcode: '^1.1.1'
   convert: '^2.0.1'
   crypto: '^2.0.2'
-  kernel: 0.3.0-alpha.5
+  kernel: 0.3.0-alpha.9
   meta: '^1.1.1'
   package_config: '^1.0.1'
   path: '^1.3.9'
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 a3c7dee..e92df86 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.direct.expect
@@ -5,6 +5,7 @@
 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:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\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.\n  Increment() : x++ {}\n                ^" {}
 }
+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 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 a3c7dee..e92df86 100644
--- a/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31192.dart.strong.expect
@@ -5,6 +5,7 @@
 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:18: Error: Not a valid initializer.\nTo initialize a field, use the syntax 'name = value'.\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.\n  Increment() : x++ {}\n                ^" {}
 }
+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 method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart b/pkg/front_end/testcases/regress/issue_31996.dart
new file mode 100644
index 0000000..90260dc
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31996.dart
@@ -0,0 +1,15 @@
+// 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.
+
+abstract class B<T> {}
+
+abstract class C<T> {}
+
+class Base implements B {}
+
+class Child1 extends Base implements C<int> {}
+
+class Child2 extends Base implements C<double> {}
+
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect
new file mode 100644
index 0000000..7b5a76e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.direct.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class B<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class C<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Base extends core::Object implements self::B<dynamic> {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → void
+    : super self::Base::•()
+    ;
+}
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → void
+    : super self::Base::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect
new file mode 100644
index 0000000..5dca73f
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.outline.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class B<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+abstract class C<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class Base extends core::Object implements self::B<dynamic> {
+  synthetic constructor •() → void
+    ;
+}
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → void
+    ;
+}
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect
new file mode 100644
index 0000000..7b5a76e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_31996.dart.strong.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+abstract class B<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class C<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Base extends core::Object implements self::B<dynamic> {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class Child1 extends self::Base implements self::C<core::int> {
+  synthetic constructor •() → void
+    : super self::Base::•()
+    ;
+}
+class Child2 extends self::Base implements self::C<core::double> {
+  synthetic constructor •() → void
+    : super self::Base::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect b/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect
index 06a5a03..8e30b21 100644
--- a/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/empty_program.dart.outline.expect
@@ -72,6 +72,8 @@
   method any((self::Stream::T) → core::bool test) → self::Future<core::bool>;
   get length() → self::Future<core::int>;
   get isEmpty() → self::Future<core::bool>;
+  method cast<R extends core::Object>() → self::Stream<self::Stream::cast::R>;
+  method retype<R extends core::Object>() → self::Stream<self::Stream::retype::R>;
   method toList() → self::Future<core::List<self::Stream::T>>;
   method toSet() → self::Future<core::Set<self::Stream::T>>;
   method drain<E extends core::Object>([self::Stream::drain::E futureValue]) → self::Future<self::Stream::drain::E>;
@@ -83,9 +85,9 @@
   get first() → self::Future<self::Stream::T>;
   get last() → self::Future<self::Stream::T>;
   get single() → self::Future<self::Stream::T>;
-  method firstWhere((self::Stream::T) → core::bool test, {() → core::Object defaultValue}) → self::Future<dynamic>;
-  method lastWhere((self::Stream::T) → core::bool test, {() → core::Object defaultValue}) → self::Future<dynamic>;
-  method singleWhere((self::Stream::T) → core::bool test) → self::Future<self::Stream::T>;
+  method firstWhere((self::Stream::T) → core::bool test, {() → dynamic defaultValue, () → self::Stream::T orElse}) → self::Future<self::Stream::T>;
+  method lastWhere((self::Stream::T) → core::bool test, {() → dynamic defaultValue, () → self::Stream::T orElse}) → self::Future<self::Stream::T>;
+  method singleWhere((self::Stream::T) → core::bool test, {() → self::Stream::T orElse}) → self::Future<self::Stream::T>;
   method elementAt(core::int index) → self::Future<self::Stream::T>;
   method timeout(core::Duration timeLimit, {(self::EventSink<self::Stream::T>) → void onTimeout}) → self::Stream<self::Stream::T>;
 }
@@ -114,6 +116,8 @@
 }
 abstract class StreamTransformer<S extends core::Object, T extends core::Object> extends core::Object {
   abstract method bind(self::Stream<self::StreamTransformer::S> stream) → self::Stream<self::StreamTransformer::T>;
+  abstract method cast<RS extends core::Object, RT extends core::Object>() → self::StreamTransformer<self::StreamTransformer::cast::RS, self::StreamTransformer::cast::RT>;
+  abstract method retype<RS extends core::Object, RT extends core::Object>() → self::StreamTransformer<self::StreamTransformer::retype::RS, self::StreamTransformer::retype::RT>;
 }
 abstract class StreamIterator<T extends core::Object> extends core::Object {
   abstract method moveNext() → self::Future<core::bool>;
diff --git a/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect b/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect
index e788b61..56ce3ff 100644
--- a/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect
+++ b/pkg/front_end/testcases/shaker/empty_program.dart.shaker.expect
@@ -62,6 +62,8 @@
     - any
     - length
     - isEmpty
+    - cast
+    - retype
     - toList
     - toSet
     - drain
@@ -99,6 +101,8 @@
     - done
   - class StreamTransformer
     - bind
+    - cast
+    - retype
   - class StreamIterator
     - moveNext
     - current
diff --git a/pkg/front_end/tool/_fasta/batch.dart b/pkg/front_end/tool/_fasta/batch.dart
new file mode 100644
index 0000000..968014e
--- /dev/null
+++ b/pkg/front_end/tool/_fasta/batch.dart
@@ -0,0 +1,7 @@
+// 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 'entry_points.dart' show batchEntryPoint;
+
+main(List<String> arguments) => batchEntryPoint(arguments);
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index d2304b1..aa54f46 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -4,16 +4,22 @@
 
 library fasta.tool.entry_points;
 
-import 'dart:async' show Future;
+import 'dart:async' show Future, Stream;
 
-import 'dart:convert' show JSON;
+import 'dart:convert' show JSON, LineSplitter, UTF8;
 
-import 'dart:io' show File, exitCode;
+import 'dart:io' show File, exitCode, stderr, stdin, stdout;
 
 import 'package:compiler/src/kernel/dart2js_target.dart' show Dart2jsTarget;
 
+import 'package:kernel/kernel.dart'
+    show CanonicalName, Library, Program, Source, loadProgramFromBytes;
+
 import 'package:kernel/target/targets.dart' show TargetFlags, targets;
 
+import 'package:front_end/src/base/processed_options.dart'
+    show ProcessedOptions;
+
 import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
 
 import 'package:front_end/src/fasta/deprecated_problems.dart'
@@ -33,8 +39,6 @@
 
 import 'package:front_end/src/fasta/uri_translator.dart' show UriTranslator;
 
-import 'package:kernel/kernel.dart' show Program, loadProgramFromBytes;
-
 import 'command_line.dart' show withGlobalOptions;
 
 const bool summary = const bool.fromEnvironment("summary", defaultValue: false);
@@ -73,6 +77,78 @@
   }
 }
 
+batchEntryPoint(List<String> arguments) {
+  return new BatchCompiler(
+          stdin.transform(UTF8.decoder).transform(new LineSplitter()))
+      .run();
+}
+
+class BatchCompiler {
+  final Stream lines;
+
+  Uri platformUri;
+
+  Program platformComponent;
+
+  BatchCompiler(this.lines);
+
+  run() async {
+    await for (String line in lines) {
+      try {
+        if (await batchCompile(line)) {
+          stdout.writeln(">>> TEST OK");
+        } else {
+          stdout.writeln(">>> TEST FAIL");
+        }
+      } catch (e, trace) {
+        stderr.writeln("Unhandled exception:\n  $e");
+        stderr.writeln(trace);
+        stdout.writeln(">>> TEST CRASH");
+      }
+      await stdout.flush();
+      stderr.writeln(">>> EOF STDERR");
+      await stderr.flush();
+    }
+  }
+
+  Future<bool> batchCompile(String line) async {
+    List<String> arguments = new List<String>.from(JSON.decode(line));
+    try {
+      return await withGlobalOptions("compile", arguments, true,
+          (CompilerContext c, _) async {
+        ProcessedOptions options = c.options;
+        bool verbose = options.verbose;
+        Ticker ticker = new Ticker(isVerbose: verbose);
+        if (verbose) {
+          print("Compiling directly to Kernel: $line");
+        }
+        if (platformComponent == null || platformUri != options.sdkSummary) {
+          platformUri = options.sdkSummary;
+          platformComponent = await options.loadSdkSummary(null);
+        } else {
+          options.sdkSummaryComponent = platformComponent;
+        }
+        CompileTask task = new CompileTask(c, ticker);
+        await task.compile(sansPlatform: true);
+        CanonicalName root = platformComponent.root;
+        for (Library library in platformComponent.libraries) {
+          library.parent = platformComponent;
+          CanonicalName name = library.reference.canonicalName;
+          if (name != null && name.parent != root) {
+            root.adoptChild(name);
+          }
+        }
+        root.unbindAll();
+        return c.errors.isEmpty;
+      });
+    } on deprecated_InputError catch (e) {
+      CompilerContext.runWithDefaultOptions(
+          (c) => c.report(deprecated_InputError.toMessage(e), Severity.error));
+      return false;
+    }
+  }
+}
+
 Future<KernelTarget> outline(List<String> arguments) async {
   try {
     return await withGlobalOptions("outline", arguments, true,
@@ -159,14 +235,27 @@
     return kernelTarget;
   }
 
-  Future<Uri> compile() async {
+  Future<Uri> compile({bool sansPlatform: false}) async {
     KernelTarget kernelTarget = await buildOutline();
     if (exitCode != 0) return null;
     Uri uri = c.options.output;
-    var program = await kernelTarget.buildProgram(verify: c.options.verify);
+    Program program = await kernelTarget.buildProgram(verify: c.options.verify);
     if (c.options.debugDump) {
       printProgramText(program, libraryFilter: kernelTarget.isSourceLibrary);
     }
+    if (sansPlatform) {
+      program.computeCanonicalNames();
+      Program userCode = new Program(
+          nameRoot: program.root,
+          uriToSource: new Map<Uri, Source>.from(program.uriToSource));
+      userCode.mainMethodName = program.mainMethodName;
+      for (Library library in program.libraries) {
+        if (library.importUri.scheme != "dart") {
+          userCode.libraries.add(library);
+        }
+      }
+      program = userCode;
+    }
     await writeProgramToFile(program, uri);
     ticker.logMs("Wrote program to ${uri.toFilePath()}");
     return uri;
diff --git a/pkg/front_end/tool/fasta b/pkg/front_end/tool/fasta
index 97a1833..eb455cd 100755
--- a/pkg/front_end/tool/fasta
+++ b/pkg/front_end/tool/fasta
@@ -54,9 +54,7 @@
     PATCHED_SDK_DIR=$(
       ls -d {xcodebuild,out}/${DART_CONFIGURATION} 2>/dev/null \
         | head -1)
-    exec "${DART_VM}" -DDFE_VERBOSE=true \
-         --kernel-binaries=${PATCHED_SDK_DIR} \
-         --dfe="${REPO_DIR}/pkg/vm/bin/kernel_service.dart" "$@"
+    exec "${DART_VM}" --preview_dart_2 -DDFE_VERBOSE=true "$@"
     ;;
   testing)
     SCRIPT="${REPO_DIR}/pkg/testing/bin/testing.dart"
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index 0a74e92..53ec37b 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -26,6 +26,7 @@
     }
     onAmbiguousSupertypes ??= (Class cls, Supertype a, Supertype b) {
       if (!cls.isSyntheticMixinImplementation) {
+        // See https://github.com/dart-lang/sdk/issues/32091
         throw "$cls can't implement both $a and $b";
       }
     };
@@ -945,27 +946,13 @@
     _ClassInfo superInfo = _infoFor[supertype.classNode];
     if (supertype.typeArguments.isEmpty) {
       if (superInfo.genericSuperTypes == null) return;
-      // Since the immediate super type is not generic, all entries in its
-      // super type map are also valid entries for this class.
-      if (subInfo.genericSuperTypes == null &&
-          superInfo.ownsGenericSuperTypeMap) {
-        // Instead of copying the map, take ownership of the map object.
-        // This may result in more entries being added to the map later. Those
-        // are not valid for the super type, but it works out because all
-        // lookups in the map are guarded by a subtype check, so the super type
-        // will not be bothered by the extra entries.
-        subInfo.genericSuperTypes = superInfo.genericSuperTypes;
-        superInfo.ownsGenericSuperTypeMap = false;
-      } else {
-        // Copy over the super type entries.
-        subInfo.genericSuperTypes ??= <Class, List<Supertype>>{};
-        superInfo.genericSuperTypes
-            ?.forEach((Class key, List<Supertype> types) {
-          for (Supertype type in types) {
-            subInfo.recordGenericSuperType(key, type, _onAmbiguousSupertypes);
-          }
-        });
-      }
+      // Copy over the super type entries.
+      subInfo.genericSuperTypes ??= <Class, List<Supertype>>{};
+      superInfo.genericSuperTypes?.forEach((Class key, List<Supertype> types) {
+        for (Supertype type in types) {
+          subInfo.recordGenericSuperType(key, type, _onAmbiguousSupertypes);
+        }
+      });
     } else {
       // Copy over all transitive generic super types, and substitute the
       // free variables with those provided in [supertype].
@@ -1066,10 +1053,7 @@
   int getSuperTypeHashTableSize() {
     int sum = 0;
     for (Class class_ in classes) {
-      _ClassInfo info = _infoFor[class_];
-      if (info.ownsGenericSuperTypeMap) {
-        sum += _infoFor[class_].genericSuperTypes?.length ?? 0;
-      }
+      sum += _infoFor[class_].genericSuperTypes?.length ?? 0;
     }
     return sum;
   }
@@ -1204,29 +1188,8 @@
   ///
   /// E.g. `List` maps to `List<String>` for a class that directly of indirectly
   /// implements `List<String>`.
-  ///
-  /// However, the map may contain additional entries for classes that are not
-  /// supertypes of this class, so that a single map object can be shared
-  /// between different classes.  Lookups into the map should therefore be
-  /// guarded by a subtype check.
-  ///
-  /// For example:
-  ///
-  ///     class Q<T>
-  ///     class A<T>
-  ///
-  ///     class B extends A<String>
-  ///     class C extends B implements Q<int>
-  ///
-  /// In this case, a single map object `{A: A<String>, Q: Q<int>}` may be
-  /// shared by the classes `B` and `C`.
   Map<Class, List<Supertype>> genericSuperTypes;
 
-  /// If true, this is the current "owner" of [genericSuperTypes], meaning
-  /// we may add additional entries to the map or transfer ownership to another
-  /// class.
-  bool ownsGenericSuperTypeMap = true;
-
   /// Instance fields, getters, methods, and operators declared in this class
   /// or its mixed-in class, sorted according to [_compareMembers].
   List<Member> declaredGettersAndCalls;
diff --git a/pkg/kernel/pubspec.yaml b/pkg/kernel/pubspec.yaml
index 4a5212c..c3ca880 100644
--- a/pkg/kernel/pubspec.yaml
+++ b/pkg/kernel/pubspec.yaml
@@ -1,5 +1,5 @@
 name: kernel
-version: 0.3.0-alpha.5
+version: 0.3.0-alpha.9
 author: Dart Team <misc@dartlang.org>
 description: Dart IR (Intermediate Representation)
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/kernel
@@ -12,7 +12,7 @@
   package_config: ^1.0.0
 dev_dependencies:
   analyzer: '>=0.30.0 <0.32.0'
-  front_end: 0.1.0-alpha.8
+  front_end: 0.1.0-alpha.9
   test: ^0.12.15+6
   stack_trace: ^1.6.6
   ansicolor: ^0.0.9
diff --git a/pkg/kernel/test/reify/suite.dart b/pkg/kernel/test/reify/suite.dart
index 0d7aca2..b9a70a8 100644
--- a/pkg/kernel/test/reify/suite.dart
+++ b/pkg/kernel/test/reify/suite.dart
@@ -140,10 +140,7 @@
     File generated = new File.fromUri(uri);
     StdioProcess process;
     try {
-      var args = [
-        '--kernel-binaries=${context.platformBinaries.toFilePath()}',
-        generated.path
-      ];
+      var args = [generated.path];
       process = await StdioProcess.run(context.vm.toFilePath(), args);
       print(process.output);
     } finally {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 2fa7f84..78d03b8 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -52,6 +52,7 @@
 
 [ $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/vm/bin/gen_kernel.dart b/pkg/vm/bin/gen_kernel.dart
index 1a5b13c..be3b85d 100644
--- a/pkg/vm/bin/gen_kernel.dart
+++ b/pkg/vm/bin/gen_kernel.dart
@@ -12,6 +12,8 @@
 import 'package:kernel/src/tool/batch_util.dart' as batch_util;
 import 'package:kernel/target/targets.dart' show TargetFlags;
 import 'package:kernel/target/vm.dart' show VmTarget;
+import 'package:kernel/text/ast_to_text.dart'
+    show globalDebuggingNames, NameSystem;
 import 'package:vm/kernel_front_end.dart' show compileToKernel, ErrorDetector;
 
 final ArgParser _argParser = new ArgParser(allowTrailingOptions: true)
@@ -109,6 +111,10 @@
     //     report the compilation result accordingly.
     //
     final exitCode = await compile(arguments);
+
+    // Re-create global NameSystem to avoid accumulating garbage.
+    globalDebuggingNames = new NameSystem();
+
     switch (exitCode) {
       case 0:
         return batch_util.CompilerOutcome.Ok;
diff --git a/pkg/vm/tool/dart2 b/pkg/vm/tool/dart2
index 66ac062..e127775 100755
--- a/pkg/vm/tool/dart2
+++ b/pkg/vm/tool/dart2
@@ -38,11 +38,10 @@
   DART_BINARY="$BUILD_DIR"/dart
   KERNEL_BINARIES_DIR="$BUILD_DIR"
 fi
-KERNEL_SERVICE_SNAPSHOT="$BUILD_DIR"/gen/kernel-service.dart.snapshot
 
 exec "$DART_BINARY"                                                            \
+     --preview_dart_2                                                          \
      --strong                                                                  \
      --reify-generic-functions                                                 \
      --limit-ints-to-64-bits                                                   \
-     --dfe="$KERNEL_SERVICE_SNAPSHOT"                                          \
      "$@"
diff --git a/pkg/vm/tool/dart2.bat b/pkg/vm/tool/dart2.bat
index 91004d6..83e73bb 100644
--- a/pkg/vm/tool/dart2.bat
+++ b/pkg/vm/tool/dart2.bat
@@ -35,4 +35,4 @@
 )
 set KERNEL_SERVICE_SNAPSHOT=%BUILD_DIR%/gen/kernel-service.dart.snapshot
 
-"%DART_BINARY%" --strong --reify-generic-functions --limit-ints-to-64-bits --dfe="%KERNEL_SERVICE_SNAPSHOT%" --kernel-binaries="%KERNEL_BINARIES_DIR%" %*
+"%DART_BINARY%" --preview_dart_2 --strong --reify-generic-functions --limit-ints-to-64-bits %*
diff --git a/runtime/bin/dfe.h b/runtime/bin/dfe.h
index 72dacfe..9d5e471 100644
--- a/runtime/bin/dfe.h
+++ b/runtime/bin/dfe.h
@@ -95,7 +95,6 @@
   void* platform_strong_program_;
 
   // Kernel binary specified on the cmd line.
-  // Loaded instead of platform if --kernel-binaries is not specified.
   void* application_kernel_binary_;
 
   DISALLOW_COPY_AND_ASSIGN(DFE);
diff --git a/runtime/bin/platform.h b/runtime/bin/platform.h
index d174902..7361772 100644
--- a/runtime/bin/platform.h
+++ b/runtime/bin/platform.h
@@ -91,6 +91,9 @@
   static DART_NORETURN void Exit(int exit_code);
 
  private:
+  static void SaveConsoleConfiguration();
+  static void RestoreConsoleConfiguration();
+
   // The path to the executable.
   static const char* executable_name_;
   // The path to the resolved executable.
diff --git a/runtime/bin/platform_android.cc b/runtime/bin/platform_android.cc
index 7e3f880..9f29cb5 100644
--- a/runtime/bin/platform_android.cc
+++ b/runtime/bin/platform_android.cc
@@ -7,13 +7,16 @@
 
 #include "bin/platform.h"
 
+#include <errno.h>        // NOLINT
 #include <signal.h>       // NOLINT
 #include <string.h>       // NOLINT
 #include <sys/utsname.h>  // NOLINT
+#include <termios.h>      // NOLINT
 #include <unistd.h>       // NOLINT
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
+#include "platform/signal_blocker.h"
 
 namespace dart {
 namespace bin {
@@ -28,6 +31,53 @@
   abort();
 }
 
+class PlatformPosix {
+ public:
+  static void SaveConsoleConfiguration() {
+    SaveConsoleConfigurationHelper(STDOUT_FILENO, &stdout_initial_c_lflag_);
+    SaveConsoleConfigurationHelper(STDERR_FILENO, &stderr_initial_c_lflag_);
+    SaveConsoleConfigurationHelper(STDIN_FILENO, &stdin_initial_c_lflag_);
+  }
+
+  static void RestoreConsoleConfiguration() {
+    RestoreConsoleConfigurationHelper(STDOUT_FILENO, stdout_initial_c_lflag_);
+    RestoreConsoleConfigurationHelper(STDERR_FILENO, stderr_initial_c_lflag_);
+    RestoreConsoleConfigurationHelper(STDIN_FILENO, stdin_initial_c_lflag_);
+    stdout_initial_c_lflag_ = -1;
+    stderr_initial_c_lflag_ = -1;
+    stdin_initial_c_lflag_ = -1;
+  }
+
+ private:
+  static tcflag_t stdout_initial_c_lflag_;
+  static tcflag_t stderr_initial_c_lflag_;
+  static tcflag_t stdin_initial_c_lflag_;
+
+  static void SaveConsoleConfigurationHelper(intptr_t fd, tcflag_t* flag) {
+    ASSERT(flag != NULL);
+    struct termios term;
+    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
+    if (status != 0) {
+      return;
+    }
+    *flag = term.c_lflag;
+  }
+
+  static void RestoreConsoleConfigurationHelper(intptr_t fd, tcflag_t flag) {
+    struct termios term;
+    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
+    if (status != 0) {
+      return;
+    }
+    term.c_lflag = flag;
+    NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
+  }
+};
+
+tcflag_t PlatformPosix::stdout_initial_c_lflag_ = 0;
+tcflag_t PlatformPosix::stderr_initial_c_lflag_ = 0;
+tcflag_t PlatformPosix::stdin_initial_c_lflag_ = 0;
+
 bool Platform::Initialize() {
   // Turn off the signal handler for SIGPIPE as it causes the process
   // to terminate on writing to a closed pipe. Without the signal
@@ -62,7 +112,7 @@
     perror("sigaction() failed.");
     return false;
   }
-
+  SaveConsoleConfiguration();
   return true;
 }
 
@@ -142,9 +192,18 @@
 }
 
 void Platform::Exit(int exit_code) {
+  RestoreConsoleConfiguration();
   exit(exit_code);
 }
 
+void Platform::SaveConsoleConfiguration() {
+  PlatformPosix::SaveConsoleConfiguration();
+}
+
+void Platform::RestoreConsoleConfiguration() {
+  PlatformPosix::RestoreConsoleConfiguration();
+}
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_fuchsia.cc b/runtime/bin/platform_fuchsia.cc
index cda405e..d0277e0 100644
--- a/runtime/bin/platform_fuchsia.cc
+++ b/runtime/bin/platform_fuchsia.cc
@@ -150,6 +150,16 @@
   exit(exit_code);
 }
 
+bool Platform::SaveConsoleConfiguration() {
+  UNIMPLEMENTED();
+  return false;
+}
+
+bool Platform::RestoreConsoleConfiguration() {
+  UNIMPLEMENTED();
+  return false;
+}
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_linux.cc b/runtime/bin/platform_linux.cc
index e681f03..b087151 100644
--- a/runtime/bin/platform_linux.cc
+++ b/runtime/bin/platform_linux.cc
@@ -7,13 +7,16 @@
 
 #include "bin/platform.h"
 
+#include <errno.h>        // NOLINT
 #include <signal.h>       // NOLINT
 #include <string.h>       // NOLINT
 #include <sys/utsname.h>  // NOLINT
+#include <termios.h>      // NOLINT
 #include <unistd.h>       // NOLINT
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
+#include "platform/signal_blocker.h"
 
 namespace dart {
 namespace bin {
@@ -28,6 +31,53 @@
   abort();
 }
 
+class PlatformPosix {
+ public:
+  static void SaveConsoleConfiguration() {
+    SaveConsoleConfigurationHelper(STDOUT_FILENO, &stdout_initial_c_lflag_);
+    SaveConsoleConfigurationHelper(STDERR_FILENO, &stderr_initial_c_lflag_);
+    SaveConsoleConfigurationHelper(STDIN_FILENO, &stdin_initial_c_lflag_);
+  }
+
+  static void RestoreConsoleConfiguration() {
+    RestoreConsoleConfigurationHelper(STDOUT_FILENO, stdout_initial_c_lflag_);
+    RestoreConsoleConfigurationHelper(STDERR_FILENO, stderr_initial_c_lflag_);
+    RestoreConsoleConfigurationHelper(STDIN_FILENO, stdin_initial_c_lflag_);
+    stdout_initial_c_lflag_ = -1;
+    stderr_initial_c_lflag_ = -1;
+    stdin_initial_c_lflag_ = -1;
+  }
+
+ private:
+  static tcflag_t stdout_initial_c_lflag_;
+  static tcflag_t stderr_initial_c_lflag_;
+  static tcflag_t stdin_initial_c_lflag_;
+
+  static void SaveConsoleConfigurationHelper(intptr_t fd, tcflag_t* flag) {
+    ASSERT(flag != NULL);
+    struct termios term;
+    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
+    if (status != 0) {
+      return;
+    }
+    *flag = term.c_lflag;
+  }
+
+  static void RestoreConsoleConfigurationHelper(intptr_t fd, tcflag_t flag) {
+    struct termios term;
+    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
+    if (status != 0) {
+      return;
+    }
+    term.c_lflag = flag;
+    NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
+  }
+};
+
+tcflag_t PlatformPosix::stdout_initial_c_lflag_ = 0;
+tcflag_t PlatformPosix::stderr_initial_c_lflag_ = 0;
+tcflag_t PlatformPosix::stdin_initial_c_lflag_ = 0;
+
 bool Platform::Initialize() {
   // Turn off the signal handler for SIGPIPE as it causes the process
   // to terminate on writing to a closed pipe. Without the signal
@@ -62,6 +112,7 @@
     perror("sigaction() failed.");
     return false;
   }
+  SaveConsoleConfiguration();
   return true;
 }
 
@@ -141,9 +192,18 @@
 }
 
 void Platform::Exit(int exit_code) {
+  RestoreConsoleConfiguration();
   exit(exit_code);
 }
 
+void Platform::SaveConsoleConfiguration() {
+  PlatformPosix::SaveConsoleConfiguration();
+}
+
+void Platform::RestoreConsoleConfiguration() {
+  PlatformPosix::RestoreConsoleConfiguration();
+}
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_macos.cc b/runtime/bin/platform_macos.cc
index e563788..3f72398 100644
--- a/runtime/bin/platform_macos.cc
+++ b/runtime/bin/platform_macos.cc
@@ -12,16 +12,19 @@
 #if !HOST_OS_IOS
 #include <crt_externs.h>  // NOLINT
 #endif                    // !HOST_OS_IOS
+#include <errno.h>        // NOLINT
 #include <mach-o/dyld.h>
 #include <signal.h>       // NOLINT
 #include <string.h>       // NOLINT
 #include <sys/sysctl.h>   // NOLINT
 #include <sys/types.h>    // NOLINT
 #include <sys/utsname.h>  // NOLINT
+#include <termios.h>      // NOLINT
 #include <unistd.h>       // NOLINT
 
 #include "bin/fdutils.h"
 #include "bin/file.h"
+#include "platform/signal_blocker.h"
 
 namespace dart {
 namespace bin {
@@ -36,6 +39,53 @@
   abort();
 }
 
+class PlatformPosix {
+ public:
+  static void SaveConsoleConfiguration() {
+    SaveConsoleConfigurationHelper(STDOUT_FILENO, &stdout_initial_c_lflag_);
+    SaveConsoleConfigurationHelper(STDERR_FILENO, &stderr_initial_c_lflag_);
+    SaveConsoleConfigurationHelper(STDIN_FILENO, &stdin_initial_c_lflag_);
+  }
+
+  static void RestoreConsoleConfiguration() {
+    RestoreConsoleConfigurationHelper(STDOUT_FILENO, stdout_initial_c_lflag_);
+    RestoreConsoleConfigurationHelper(STDERR_FILENO, stderr_initial_c_lflag_);
+    RestoreConsoleConfigurationHelper(STDIN_FILENO, stdin_initial_c_lflag_);
+    stdout_initial_c_lflag_ = -1;
+    stderr_initial_c_lflag_ = -1;
+    stdin_initial_c_lflag_ = -1;
+  }
+
+ private:
+  static tcflag_t stdout_initial_c_lflag_;
+  static tcflag_t stderr_initial_c_lflag_;
+  static tcflag_t stdin_initial_c_lflag_;
+
+  static void SaveConsoleConfigurationHelper(intptr_t fd, tcflag_t* flag) {
+    ASSERT(flag != NULL);
+    struct termios term;
+    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
+    if (status != 0) {
+      return;
+    }
+    *flag = term.c_lflag;
+  }
+
+  static void RestoreConsoleConfigurationHelper(intptr_t fd, tcflag_t flag) {
+    struct termios term;
+    int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
+    if (status != 0) {
+      return;
+    }
+    term.c_lflag = flag;
+    NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
+  }
+};
+
+tcflag_t PlatformPosix::stdout_initial_c_lflag_ = 0;
+tcflag_t PlatformPosix::stderr_initial_c_lflag_ = 0;
+tcflag_t PlatformPosix::stdin_initial_c_lflag_ = 0;
+
 bool Platform::Initialize() {
   // Turn off the signal handler for SIGPIPE as it causes the process
   // to terminate on writing to a closed pipe. Without the signal
@@ -69,6 +119,7 @@
     perror("sigaction() failed.");
     return false;
   }
+  SaveConsoleConfiguration();
   return true;
 }
 
@@ -229,9 +280,18 @@
 }
 
 void Platform::Exit(int exit_code) {
+  RestoreConsoleConfiguration();
   exit(exit_code);
 }
 
+void Platform::SaveConsoleConfiguration() {
+  PlatformPosix::SaveConsoleConfiguration();
+}
+
+void Platform::RestoreConsoleConfiguration() {
+  PlatformPosix::RestoreConsoleConfiguration();
+}
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/platform_win.cc b/runtime/bin/platform_win.cc
index 333d57c..8b61246 100644
--- a/runtime/bin/platform_win.cc
+++ b/runtime/bin/platform_win.cc
@@ -47,6 +47,9 @@
     platform_win_mutex_ = new Mutex();
     saved_output_cp_ = -1;
     saved_input_cp_ = -1;
+    saved_stdout_mode_ = -1;
+    saved_stderr_mode_ = -1;
+    saved_stdin_mode_ = -1;
     // Set up a no-op handler so that CRT functions return an error instead of
     // hitting an assertion failure.
     // See: https://msdn.microsoft.com/en-us/library/a9yf33zb.aspx
@@ -83,6 +86,9 @@
     // Set both the input and output code pages to UTF8.
     ASSERT(saved_output_cp_ == -1);
     ASSERT(saved_input_cp_ == -1);
+    ASSERT(saved_stdout_mode_ == -1);
+    ASSERT(saved_stderr_mode_ == -1);
+    ASSERT(saved_stdin_mode_ == -1);
     const int output_cp = GetConsoleOutputCP();
     const int input_cp = GetConsoleCP();
     if (output_cp != CP_UTF8) {
@@ -95,12 +101,11 @@
     }
 
     // Try to set the bits for ANSI support, but swallow any failures.
-    HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
-    DWORD out_mode;
-    if ((out != INVALID_HANDLE_VALUE) && GetConsoleMode(out, &out_mode)) {
-      const DWORD request = out_mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
-      SetConsoleMode(out, request);
-    }
+    saved_stdout_mode_ =
+        ModifyMode(STD_OUTPUT_HANDLE, ENABLE_VIRTUAL_TERMINAL_PROCESSING);
+    saved_stderr_mode_ = ModifyMode(STD_ERROR_HANDLE, 0);
+    saved_stdin_mode_ = ModifyMode(STD_INPUT_HANDLE, 0);
+
     // TODO(28984): Due to issue #29104, we cannot set
     // ENABLE_VIRTUAL_TERMINAL_INPUT here, as it causes ENABLE_PROCESSED_INPUT
     // to be ignored.
@@ -133,43 +138,54 @@
   static Mutex* platform_win_mutex_;
   static int saved_output_cp_;
   static int saved_input_cp_;
+  static DWORD saved_stdout_mode_;
+  static DWORD saved_stderr_mode_;
+  static DWORD saved_stdin_mode_;
 
-  static void RestoreConsoleLocked() {
-    // STD_OUTPUT_HANDLE and STD_INPUT_HANDLE may have been closed or
-    // redirected. Therefore, we explicitly open the CONOUT$ and CONIN$
-    // devices, so that we can be sure that we are really unsetting
-    // ENABLE_VIRTUAL_TERMINAL_PROCESSING and ENABLE_VIRTUAL_TERMINAL_INPUT
-    // respectively.
+  static DWORD ModifyMode(DWORD handle, DWORD flags) {
+    HANDLE h = GetStdHandle(handle);
+    DWORD mode;
+    DWORD old_mode = 0;
+
+    if ((h != INVALID_HANDLE_VALUE) && GetConsoleMode(h, &mode)) {
+      old_mode = mode;
+      if (flags != 0) {
+        const DWORD request = mode | flags;
+        SetConsoleMode(h, request);
+      }
+    }
+    return old_mode;
+  }
+
+  static void CleanupDevices(const char* device,
+                             DWORD handle,
+                             DWORD orig_flags) {
     const intptr_t kWideBufLen = 64;
-    const char* conout = "CONOUT$";
     wchar_t widebuf[kWideBufLen];
     int result =
-        MultiByteToWideChar(CP_UTF8, 0, conout, -1, widebuf, kWideBufLen);
+        MultiByteToWideChar(CP_UTF8, 0, device, -1, widebuf, kWideBufLen);
     ASSERT(result != 0);
-    HANDLE out = CreateFileW(widebuf, GENERIC_READ | GENERIC_WRITE,
-                             FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
-    if (out != INVALID_HANDLE_VALUE) {
-      SetStdHandle(STD_OUTPUT_HANDLE, out);
+    HANDLE h = CreateFileW(widebuf, GENERIC_READ | GENERIC_WRITE,
+                           FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
+    if (h != INVALID_HANDLE_VALUE) {
+      SetStdHandle(STD_OUTPUT_HANDLE, h);
+      if (orig_flags != -1) {
+        SetConsoleMode(h, orig_flags);
+      }
     }
-    DWORD out_mode;
-    if ((out != INVALID_HANDLE_VALUE) && GetConsoleMode(out, &out_mode)) {
-      DWORD request = out_mode & ~ENABLE_VIRTUAL_TERMINAL_INPUT;
-      SetConsoleMode(out, request);
-    }
+  }
 
-    const char* conin = "CONIN$";
-    result = MultiByteToWideChar(CP_UTF8, 0, conin, -1, widebuf, kWideBufLen);
-    ASSERT(result != 0);
-    HANDLE in = CreateFileW(widebuf, GENERIC_READ | GENERIC_WRITE,
-                            FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
-    if (in != INVALID_HANDLE_VALUE) {
-      SetStdHandle(STD_INPUT_HANDLE, in);
-    }
-    DWORD in_mode;
-    if ((in != INVALID_HANDLE_VALUE) && GetConsoleMode(in, &in_mode)) {
-      DWORD request = in_mode & ~ENABLE_VIRTUAL_TERMINAL_INPUT;
-      SetConsoleMode(in, request);
-    }
+  static void RestoreConsoleLocked() {
+    // STD_OUTPUT_HANDLE, STD_ERROR_HANDLE, and STD_INPUT_HANDLE may have been
+    // closed or redirected. Therefore, we explicitly open the CONOUT$, CONERR$
+    // and CONIN$ devices, so that we can be sure that we are really restoring
+    // the console to its original state.
+    CleanupDevices("CONOUT$", STD_OUTPUT_HANDLE, saved_stdout_mode_);
+    saved_stdout_mode_ = -1;
+    CleanupDevices("CONERR$", STD_ERROR_HANDLE, saved_stderr_mode_);
+    saved_stderr_mode_ = -1;
+    CleanupDevices("CONIN$", STD_INPUT_HANDLE, saved_stdin_mode_);
+    saved_stdin_mode_ = -1;
 
     if (saved_output_cp_ != -1) {
       SetConsoleOutputCP(saved_output_cp_);
@@ -196,11 +212,15 @@
 
 int PlatformWin::saved_output_cp_ = -1;
 int PlatformWin::saved_input_cp_ = -1;
+DWORD PlatformWin::saved_stdout_mode_ = -1;
+DWORD PlatformWin::saved_stderr_mode_ = -1;
+DWORD PlatformWin::saved_stdin_mode_ = -1;
+
 Mutex* PlatformWin::platform_win_mutex_ = NULL;
 
 bool Platform::Initialize() {
   PlatformWin::InitOnce();
-  PlatformWin::SaveAndConfigureConsole();
+  SaveConsoleConfiguration();
   return true;
 }
 
@@ -385,12 +405,20 @@
   // TODO(zra): Remove once VM shuts down cleanly.
   ::dart::private_flag_windows_run_tls_destructors = false;
   // Restore the console's output code page
-  PlatformWin::RestoreConsole();
+  RestoreConsoleConfiguration();
   // On Windows we use ExitProcess so that threads can't clobber the exit_code.
   // See: https://code.google.com/p/nativeclient/issues/detail?id=2870
   ::ExitProcess(exit_code);
 }
 
+void Platform::SaveConsoleConfiguration() {
+  PlatformWin::SaveAndConfigureConsole();
+}
+
+void Platform::RestoreConsoleConfiguration() {
+  PlatformWin::RestoreConsole();
+}
+
 }  // namespace bin
 }  // namespace dart
 
diff --git a/runtime/bin/thread_fuchsia.cc b/runtime/bin/thread_fuchsia.cc
index f424ebb..64e7fce 100644
--- a/runtime/bin/thread_fuchsia.cc
+++ b/runtime/bin/thread_fuchsia.cc
@@ -9,7 +9,6 @@
 #include "bin/thread_fuchsia.h"
 
 #include <errno.h>         // NOLINT
-#include <sys/resource.h>  // NOLINT
 #include <sys/time.h>      // NOLINT
 
 #include "platform/assert.h"
diff --git a/runtime/observatory/tests/service/breakpoint_in_parts_class_part.dart b/runtime/observatory/tests/service/breakpoint_in_parts_class_part.dart
index 2da4190..4855332 100644
--- a/runtime/observatory/tests/service/breakpoint_in_parts_class_part.dart
+++ b/runtime/observatory/tests/service/breakpoint_in_parts_class_part.dart
@@ -88,4 +88,4 @@
   }
 }
 
-var foo2 = foo();
+var foo2 = foo() as dynamic;
diff --git a/runtime/observatory/tests/service/service_test_common.dart b/runtime/observatory/tests/service/service_test_common.dart
index 254ee14..71eea66 100644
--- a/runtime/observatory/tests/service/service_test_common.dart
+++ b/runtime/observatory/tests/service/service_test_common.dart
@@ -552,7 +552,8 @@
 
 bool isKernel() {
   for (String argument in Platform.executableArguments) {
-    if (argument.startsWith("--dfe=")) return true;
+    if (argument.startsWith("--preview_dart_2") || argument.startsWith("--dfe"))
+      return true;
   }
   return false;
 }
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index 04e2241..69a615c 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.h
@@ -31,7 +31,7 @@
   static inline T Abs(T x) {
     // Note: as a general rule, it is not OK to use STL in Dart VM.
     // However, std::numeric_limits<T>::min() and max() are harmless
-    // and worthwile exception from this rule.
+    // and worthwhile exception from this rule.
     ASSERT(x != std::numeric_limits<T>::min());
     if (x < 0) return -x;
     return x;
@@ -45,7 +45,7 @@
     if (x < 0) {
       // Note: as a general rule, it is not OK to use STL in Dart VM.
       // However, std::numeric_limits<T>::min() and max() are harmless
-      // and worthwile exception from this rule.
+      // and worthwhile exception from this rule.
       if (x == std::numeric_limits<T>::min()) {
         return std::numeric_limits<T>::max();
       }
diff --git a/runtime/tests/vm/dart/wrap_around_in_range_analysis_test.dart b/runtime/tests/vm/dart/wrap_around_in_range_analysis_test.dart
new file mode 100644
index 0000000..3ef127d
--- /dev/null
+++ b/runtime/tests/vm/dart/wrap_around_in_range_analysis_test.dart
@@ -0,0 +1,28 @@
+// 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.
+
+// VMOptions=--no-background-compilation --enable-inlining-annotations
+
+// Test for overflow (wrap-around) during computations in range analysis.
+
+import "package:expect/expect.dart";
+
+const NeverInline = 'NeverInline';
+
+@NeverInline
+int foofoo(int b) {
+  for (int i = 0x7ffffffffffffffc; i <= b; i += 2) {
+    if (i < 0) {
+      return i - 0x4000000000000000;
+    }
+  }
+  return 0;
+}
+
+main() {
+  for (var i = 0; i < 10000; i++) {
+    foofoo(0x7fffffffffffffff);
+  }
+  Expect.equals(foofoo(0x7fffffffffffffff), 4611686018427387904);
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 9ca4e38..ee0eaf1 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -62,6 +62,7 @@
 dart/simd128float32_array_test: Skip # compilers not aware of Simd128
 dart/simd128float32_test: Skip # compilers not aware of Simd128
 dart/truncating_ints_test: Skip # dart2js doesn't know about --limit-ints-to-64-bits
+dart/wrap_around_in_range_analysis_test: SkipByDesign # The test requires int64.
 
 [ $compiler == dartk ]
 cc/DartAPI_New: Crash
@@ -386,6 +387,9 @@
 [ $compiler == none && $runtime == drt ]
 dart/truncating_ints_test: Skip # Issue 14651
 
+[ $compiler == precompiler && $runtime == dart_precompiled ]
+dart/optimized_stacktrace_line_and_column_test: RuntimeError, OK # AOT lacks column information
+
 [ $mode == debug && $system == windows ]
 dart/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
 
diff --git a/runtime/vm/compiler/assembler/assembler.h b/runtime/vm/compiler/assembler/assembler.h
index cb8f495..daa31a5 100644
--- a/runtime/vm/compiler/assembler/assembler.h
+++ b/runtime/vm/compiler/assembler/assembler.h
@@ -24,6 +24,80 @@
 class AssemblerBuffer;
 class MemoryRegion;
 
+class Label : public ValueObject {
+ public:
+  Label() : position_(0), unresolved_(0) {
+#ifdef DEBUG
+    for (int i = 0; i < kMaxUnresolvedBranches; i++) {
+      unresolved_near_positions_[i] = -1;
+    }
+#endif  // DEBUG
+  }
+
+  ~Label() {
+    // Assert if label is being destroyed with unresolved branches pending.
+    ASSERT(!IsLinked());
+    ASSERT(!HasNear());
+  }
+
+  // Returns the position for bound and linked labels. Cannot be used
+  // for unused labels.
+  intptr_t Position() const {
+    ASSERT(!IsUnused());
+    return IsBound() ? -position_ - kWordSize : position_ - kWordSize;
+  }
+
+  intptr_t LinkPosition() const {
+    ASSERT(IsLinked());
+    return position_ - kWordSize;
+  }
+
+  intptr_t NearPosition() {
+    ASSERT(HasNear());
+    return unresolved_near_positions_[--unresolved_];
+  }
+
+  bool IsBound() const { return position_ < 0; }
+  bool IsUnused() const { return position_ == 0 && unresolved_ == 0; }
+  bool IsLinked() const { return position_ > 0; }
+  bool HasNear() const { return unresolved_ != 0; }
+
+ private:
+#if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_IA32)
+  static const int kMaxUnresolvedBranches = 20;
+#else
+  static const int kMaxUnresolvedBranches = 1;  // Unused on non-Intel.
+#endif
+
+  intptr_t position_;
+  intptr_t unresolved_;
+  intptr_t unresolved_near_positions_[kMaxUnresolvedBranches];
+
+  void Reinitialize() { position_ = 0; }
+
+  void BindTo(intptr_t position) {
+    ASSERT(!IsBound());
+    ASSERT(!HasNear());
+    position_ = -position - kWordSize;
+    ASSERT(IsBound());
+  }
+
+  void LinkTo(intptr_t position) {
+    ASSERT(!IsBound());
+    position_ = position + kWordSize;
+    ASSERT(IsLinked());
+  }
+
+  void NearLinkTo(intptr_t position) {
+    ASSERT(!IsBound());
+    ASSERT(unresolved_ < kMaxUnresolvedBranches);
+    unresolved_near_positions_[unresolved_++] = position;
+  }
+
+  friend class Assembler;
+  DISALLOW_COPY_AND_ASSIGN(Label);
+};
+
 // External labels keep a function pointer to allow them
 // to be called from code generated by the assembler.
 class ExternalLabel : public ValueObject {
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index fafeff5..b13d839 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -64,47 +64,6 @@
   B27 = 1 << 27,
 };
 
-class Label : public ValueObject {
- public:
-  Label() : position_(0) {}
-
-  ~Label() {
-    // Assert if label is being destroyed with unresolved branches pending.
-    ASSERT(!IsLinked());
-  }
-
-  // Returns the position for bound and linked labels. Cannot be used
-  // for unused labels.
-  intptr_t Position() const {
-    ASSERT(!IsUnused());
-    return IsBound() ? -position_ - kWordSize : position_ - kWordSize;
-  }
-
-  bool IsBound() const { return position_ < 0; }
-  bool IsUnused() const { return position_ == 0; }
-  bool IsLinked() const { return position_ > 0; }
-
- private:
-  intptr_t position_;
-
-  void Reinitialize() { position_ = 0; }
-
-  void BindTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = -position - kWordSize;
-    ASSERT(IsBound());
-  }
-
-  void LinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = position + kWordSize;
-    ASSERT(IsLinked());
-  }
-
-  friend class Assembler;
-  DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
 class ArmEncode : public AllStatic {
  public:
   static inline uint32_t Rd(Register rd) {
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index ce1f83b..4a9c450 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -41,47 +41,6 @@
   friend class Assembler;
 };
 
-class Label : public ValueObject {
- public:
-  Label() : position_(0) {}
-
-  ~Label() {
-    // Assert if label is being destroyed with unresolved branches pending.
-    ASSERT(!IsLinked());
-  }
-
-  // Returns the position for bound and linked labels. Cannot be used
-  // for unused labels.
-  intptr_t Position() const {
-    ASSERT(!IsUnused());
-    return IsBound() ? -position_ - kWordSize : position_ - kWordSize;
-  }
-
-  bool IsBound() const { return position_ < 0; }
-  bool IsUnused() const { return position_ == 0; }
-  bool IsLinked() const { return position_ > 0; }
-
- private:
-  intptr_t position_;
-
-  void Reinitialize() { position_ = 0; }
-
-  void BindTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = -position - kWordSize;
-    ASSERT(IsBound());
-  }
-
-  void LinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = position + kWordSize;
-    ASSERT(IsLinked());
-  }
-
-  friend class Assembler;
-  DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
 class Arm64Encode : public AllStatic {
  public:
   static inline uint32_t Rd(Register rd) {
diff --git a/runtime/vm/compiler/assembler/assembler_dbc.h b/runtime/vm/compiler/assembler/assembler_dbc.h
index 794ec1b..29e6d3a 100644
--- a/runtime/vm/compiler/assembler/assembler_dbc.h
+++ b/runtime/vm/compiler/assembler/assembler_dbc.h
@@ -25,47 +25,6 @@
   Address();
 };
 
-class Label : public ValueObject {
- public:
-  Label() : position_(0) {}
-
-  ~Label() {
-    // Assert if label is being destroyed with unresolved branches pending.
-    ASSERT(!IsLinked());
-  }
-
-  // Returns the position for bound and linked labels. Cannot be used
-  // for unused labels.
-  intptr_t Position() const {
-    ASSERT(!IsUnused());
-    return IsBound() ? -position_ - kWordSize : position_ - kWordSize;
-  }
-
-  bool IsBound() const { return position_ < 0; }
-  bool IsUnused() const { return position_ == 0; }
-  bool IsLinked() const { return position_ > 0; }
-
- private:
-  intptr_t position_;
-
-  void Reinitialize() { position_ = 0; }
-
-  void BindTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = -position - kWordSize;
-    ASSERT(IsBound());
-  }
-
-  void LinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = position + kWordSize;
-    ASSERT(IsLinked());
-  }
-
-  friend class Assembler;
-  DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
 class Assembler : public ValueObject {
  public:
   explicit Assembler(bool use_far_branches = false) : buffer_(), comments_() {}
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 8c861e4..0164bab 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -221,74 +221,6 @@
   }
 };
 
-class Label : public ValueObject {
- public:
-  Label() : position_(0), unresolved_(0) {
-#ifdef DEBUG
-    for (int i = 0; i < kMaxUnresolvedBranches; i++) {
-      unresolved_near_positions_[i] = -1;
-    }
-#endif  // DEBUG
-  }
-
-  ~Label() {
-    // Assert if label is being destroyed with unresolved branches pending.
-    ASSERT(!IsLinked());
-    ASSERT(!HasNear());
-  }
-
-  // Returns the position for bound labels. Cannot be used for unused or linked
-  // labels.
-  intptr_t Position() const {
-    ASSERT(IsBound());
-    return -position_ - kWordSize;
-  }
-
-  intptr_t LinkPosition() const {
-    ASSERT(IsLinked());
-    return position_ - kWordSize;
-  }
-
-  intptr_t NearPosition() {
-    ASSERT(HasNear());
-    return unresolved_near_positions_[--unresolved_];
-  }
-
-  bool IsBound() const { return position_ < 0; }
-  bool IsUnused() const { return (position_ == 0) && (unresolved_ == 0); }
-  bool IsLinked() const { return position_ > 0; }
-  bool HasNear() const { return unresolved_ != 0; }
-
- private:
-  void BindTo(intptr_t position) {
-    ASSERT(!IsBound());
-    ASSERT(!HasNear());
-    position_ = -position - kWordSize;
-    ASSERT(IsBound());
-  }
-
-  void LinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = position + kWordSize;
-    ASSERT(IsLinked());
-  }
-
-  void NearLinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    ASSERT(unresolved_ < kMaxUnresolvedBranches);
-    unresolved_near_positions_[unresolved_++] = position;
-  }
-
-  static const int kMaxUnresolvedBranches = 20;
-
-  intptr_t position_;
-  intptr_t unresolved_;
-  intptr_t unresolved_near_positions_[kMaxUnresolvedBranches];
-
-  friend class Assembler;
-  DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
 class Assembler : public ValueObject {
  public:
   explicit Assembler(bool use_far_branches = false)
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index e73773c..c6117d1 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -275,74 +275,6 @@
   }
 };
 
-class Label : public ValueObject {
- public:
-  Label() : position_(0), unresolved_(0) {
-#ifdef DEBUG
-    for (int i = 0; i < kMaxUnresolvedBranches; i++) {
-      unresolved_near_positions_[i] = -1;
-    }
-#endif  // DEBUG
-  }
-
-  ~Label() {
-    // Assert if label is being destroyed with unresolved branches pending.
-    ASSERT(!IsLinked());
-    ASSERT(!HasNear());
-  }
-
-  // Returns the position for bound labels. Cannot be used for unused or linked
-  // labels.
-  intptr_t Position() const {
-    ASSERT(IsBound());
-    return -position_ - kWordSize;
-  }
-
-  intptr_t LinkPosition() const {
-    ASSERT(IsLinked());
-    return position_ - kWordSize;
-  }
-
-  intptr_t NearPosition() {
-    ASSERT(HasNear());
-    return unresolved_near_positions_[--unresolved_];
-  }
-
-  bool IsBound() const { return position_ < 0; }
-  bool IsUnused() const { return (position_ == 0) && (unresolved_ == 0); }
-  bool IsLinked() const { return position_ > 0; }
-  bool HasNear() const { return unresolved_ != 0; }
-
- private:
-  void BindTo(intptr_t position) {
-    ASSERT(!IsBound());
-    ASSERT(!HasNear());
-    position_ = -position - kWordSize;
-    ASSERT(IsBound());
-  }
-
-  void LinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    position_ = position + kWordSize;
-    ASSERT(IsLinked());
-  }
-
-  void NearLinkTo(intptr_t position) {
-    ASSERT(!IsBound());
-    ASSERT(unresolved_ < kMaxUnresolvedBranches);
-    unresolved_near_positions_[unresolved_++] = position;
-  }
-
-  static const int kMaxUnresolvedBranches = 20;
-
-  intptr_t position_;
-  intptr_t unresolved_;
-  intptr_t unresolved_near_positions_[kMaxUnresolvedBranches];
-
-  friend class Assembler;
-  DISALLOW_COPY_AND_ASSIGN(Label);
-};
-
 class Assembler : public ValueObject {
  public:
   explicit Assembler(bool use_far_branches = false);
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 74b9b45..b888721 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -2768,6 +2768,10 @@
       value_check = Cids::CreateMonomorphic(Z, kFloat32x4Cid);
       break;
     }
+    case kTypedDataInt64ArrayCid:
+      // StoreIndexedInstr takes unboxed int64, so value
+      // is checked when unboxing.
+      break;
     default:
       // Array cids are already checked in the caller.
       UNREACHABLE();
@@ -3339,6 +3343,13 @@
       return InlineByteArrayBaseStore(flow_graph, target, call, receiver,
                                       receiver_cid, kTypedDataUint32ArrayCid,
                                       entry, last);
+    case MethodRecognizer::kByteArrayBaseSetInt64:
+      if (!ShouldInlineInt64ArrayOps()) {
+        return false;
+      }
+      return InlineByteArrayBaseStore(flow_graph, target, call, receiver,
+                                      receiver_cid, kTypedDataInt64ArrayCid,
+                                      entry, last);
     case MethodRecognizer::kByteArrayBaseSetFloat32:
       if (!CanUnboxDouble()) {
         return false;
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 6a2aa26..865982a 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -1785,6 +1785,7 @@
   if (defn->IsConstant() && defn->AsConstant()->value().IsSmi()) {
     return FromConstant(Smi::Cast(defn->AsConstant()->value()).Value() + offs);
   }
+  ASSERT(IsValidOffsetForSymbolicRangeBoundary(offs));
   return RangeBoundary(kSymbol, reinterpret_cast<intptr_t>(defn), offs);
 }
 
@@ -1846,6 +1847,10 @@
 
     const int64_t offset = a.offset() + b.ConstantValue();
 
+    if (!IsValidOffsetForSymbolicRangeBoundary(offset)) {
+      return false;
+    }
+
     *result = RangeBoundary::FromDefinition(a.symbol(), offset);
     return true;
   } else if (b.IsSymbol() && a.IsConstant()) {
@@ -1864,6 +1869,10 @@
 
     const int64_t offset = a.offset() - b.ConstantValue();
 
+    if (!IsValidOffsetForSymbolicRangeBoundary(offset)) {
+      return false;
+    }
+
     *result = RangeBoundary::FromDefinition(a.symbol(), offset);
     return true;
   }
@@ -1959,6 +1968,10 @@
     }
   } while (changed);
 
+  if (!RangeBoundary::IsValidOffsetForSymbolicRangeBoundary(offset)) {
+    return overflow;
+  }
+
   return RangeBoundary::FromDefinition(symbol, offset);
 }
 
@@ -1975,6 +1988,11 @@
 
   const int64_t offset = range->max().offset() + a->offset();
 
+  if (!RangeBoundary::IsValidOffsetForSymbolicRangeBoundary(offset)) {
+    *a = RangeBoundary::PositiveInfinity();
+    return true;
+  }
+
   *a = CanonicalizeBoundary(
       RangeBoundary::FromDefinition(range->max().symbol(), offset),
       RangeBoundary::PositiveInfinity());
@@ -1995,6 +2013,11 @@
 
   const int64_t offset = range->min().offset() + a->offset();
 
+  if (!RangeBoundary::IsValidOffsetForSymbolicRangeBoundary(offset)) {
+    *a = RangeBoundary::NegativeInfinity();
+    return true;
+  }
+
   *a = CanonicalizeBoundary(
       RangeBoundary::FromDefinition(range->min().symbol(), offset),
       RangeBoundary::NegativeInfinity());
diff --git a/runtime/vm/compiler/backend/range_analysis.h b/runtime/vm/compiler/backend/range_analysis.h
index fd533c4..33f53b6 100644
--- a/runtime/vm/compiler/backend/range_analysis.h
+++ b/runtime/vm/compiler/backend/range_analysis.h
@@ -63,6 +63,17 @@
   // Construct a RangeBoundary from a definition and offset.
   static RangeBoundary FromDefinition(Definition* defn, int64_t offs = 0);
 
+  static bool IsValidOffsetForSymbolicRangeBoundary(int64_t offset) {
+    if (FLAG_limit_ints_to_64_bits) {
+      if ((offset > (kMaxInt64 - kSmiMax)) ||
+          (offset < (kMinInt64 - kSmiMin))) {
+        // Avoid creating symbolic range boundaries which can wrap around.
+        return false;
+      }
+    }
+    return true;
+  }
+
   // Construct a RangeBoundary for the constant MinSmi value.
   static RangeBoundary MinSmi() { return FromConstant(Smi::kMinValue); }
 
@@ -70,12 +81,6 @@
   static RangeBoundary MaxSmi() { return FromConstant(Smi::kMaxValue); }
 
   // Construct a RangeBoundary for the constant kMin value.
-  static RangeBoundary MinConstant() { return FromConstant(kMin); }
-
-  // Construct a RangeBoundary for the constant kMax value.
-  static RangeBoundary MaxConstant() { return FromConstant(kMax); }
-
-  // Construct a RangeBoundary for the constant kMin value.
   static RangeBoundary MinConstant(RangeSize size) {
     switch (size) {
       case kRangeBoundarySmi:
@@ -288,8 +293,15 @@
 class Range : public ZoneAllocated {
  public:
   Range() : min_(), max_() {}
+
   Range(RangeBoundary min, RangeBoundary max) : min_(min), max_(max) {
     ASSERT(min_.IsUnknown() == max_.IsUnknown());
+
+    if (FLAG_limit_ints_to_64_bits &&
+        (min_.IsInfinity() || max_.IsInfinity())) {
+      // Value can wrap around, so fall back to the full 64-bit range.
+      SetInt64Range();
+    }
   }
 
   Range(const Range& other)
@@ -326,8 +338,24 @@
 
   const RangeBoundary& min() const { return min_; }
   const RangeBoundary& max() const { return max_; }
-  void set_min(const RangeBoundary& value) { min_ = value; }
-  void set_max(const RangeBoundary& value) { max_ = value; }
+
+  void set_min(const RangeBoundary& value) {
+    min_ = value;
+
+    if (FLAG_limit_ints_to_64_bits && min_.IsInfinity()) {
+      // Value can wrap around, so fall back to the full 64-bit range.
+      SetInt64Range();
+    }
+  }
+
+  void set_max(const RangeBoundary& value) {
+    max_ = value;
+
+    if (FLAG_limit_ints_to_64_bits && max_.IsInfinity()) {
+      // Value can wrap around, so fall back to the full 64-bit range.
+      SetInt64Range();
+    }
+  }
 
   static RangeBoundary ConstantMinSmi(const Range* range) {
     return ConstantMin(range, RangeBoundary::kRangeBoundarySmi);
@@ -453,6 +481,11 @@
  private:
   RangeBoundary min_;
   RangeBoundary max_;
+
+  void SetInt64Range() {
+    min_ = RangeBoundary::MinConstant(RangeBoundary::kRangeBoundaryInt64);
+    max_ = RangeBoundary::MaxConstant(RangeBoundary::kRangeBoundaryInt64);
+  }
 };
 
 class RangeUtils : public AllStatic {
@@ -537,12 +570,6 @@
   bool ConstrainValueAfterBranch(Value* use, Definition* defn);
   void ConstrainValueAfterCheckArrayBound(Value* use, Definition* defn);
 
-  // Replace uses of the definition def that are dominated by instruction dom
-  // with uses of other definition.
-  void RenameDominatedUses(Definition* def,
-                           Instruction* dom,
-                           Definition* other);
-
   // Infer ranges for integer (smi or mint) definitions.
   void InferRanges();
 
diff --git a/runtime/vm/compiler/backend/range_analysis_test.cc b/runtime/vm/compiler/backend/range_analysis_test.cc
index 4cb1586..081c7e8 100644
--- a/runtime/vm/compiler/backend/range_analysis_test.cc
+++ b/runtime/vm/compiler/backend/range_analysis_test.cc
@@ -102,27 +102,46 @@
   EXPECT(RangeBoundary::NegativeInfinity().OverflowedMint());
   EXPECT(RangeBoundary::PositiveInfinity().OverflowedMint());
 
+  const Range fullInt64Range = Range::Full(RangeBoundary::kRangeBoundaryInt64);
+
   Range* all = new Range(RangeBoundary::NegativeInfinity(),
                          RangeBoundary::PositiveInfinity());
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(all->Equals(&fullInt64Range));
+  }
   EXPECT(all->Overlaps(0, 0));
   EXPECT(all->Overlaps(-1, 1));
   EXPECT(!all->IsWithin(0, 100));
+
   Range* positive = new Range(RangeBoundary::FromConstant(0),
                               RangeBoundary::PositiveInfinity());
-  EXPECT(positive->IsPositive());
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(positive->Equals(&fullInt64Range));
+  } else {
+    EXPECT(positive->IsPositive());
+    EXPECT(!positive->Overlaps(-2, -1));
+  }
   EXPECT(positive->Overlaps(0, 1));
   EXPECT(positive->Overlaps(1, 100));
   EXPECT(positive->Overlaps(-1, 0));
-  EXPECT(!positive->Overlaps(-2, -1));
+
   Range* negative = new Range(RangeBoundary::NegativeInfinity(),
                               RangeBoundary::FromConstant(-1));
-  EXPECT(!negative->IsPositive());
-  EXPECT(!negative->Overlaps(0, 1));
-  EXPECT(!negative->Overlaps(1, 100));
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(positive->Equals(&fullInt64Range));
+  } else {
+    EXPECT(!negative->IsPositive());
+    EXPECT(!negative->Overlaps(0, 1));
+    EXPECT(!negative->Overlaps(1, 100));
+  }
   EXPECT(negative->Overlaps(-1, 0));
   EXPECT(negative->Overlaps(-2, -1));
+
   Range* negpos = new Range(RangeBoundary::NegativeInfinity(),
                             RangeBoundary::FromConstant(0));
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(negpos->Equals(&fullInt64Range));
+  }
   EXPECT(!negpos->IsPositive());
 
   Range* a = new Range(RangeBoundary::NegativeInfinity(),
@@ -134,45 +153,74 @@
   Range* c = new Range(RangeBoundary::NegativeInfinity(),
                        RangeBoundary::FromConstant(32));
 
-  EXPECT(a->OnlyLessThanOrEqualTo(31));
-  EXPECT(b->OnlyLessThanOrEqualTo(31));
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(a->Equals(&fullInt64Range));
+    EXPECT(b->Equals(&fullInt64Range));
+    EXPECT(c->Equals(&fullInt64Range));
+  } else {
+    EXPECT(a->OnlyLessThanOrEqualTo(31));
+    EXPECT(b->OnlyLessThanOrEqualTo(31));
+  }
   EXPECT(!c->OnlyLessThanOrEqualTo(31));
 
   Range* unsatisfiable = new Range(RangeBoundary::PositiveInfinity(),
                                    RangeBoundary::NegativeInfinity());
-  EXPECT(unsatisfiable->IsUnsatisfiable());
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(unsatisfiable->Equals(&fullInt64Range));
+  } else {
+    EXPECT(unsatisfiable->IsUnsatisfiable());
+  }
 
   Range* unsatisfiable_right = new Range(RangeBoundary::PositiveInfinity(),
                                          RangeBoundary::FromConstant(0));
-  EXPECT(unsatisfiable_right->IsUnsatisfiable());
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(unsatisfiable_right->Equals(&fullInt64Range));
+  } else {
+    EXPECT(unsatisfiable_right->IsUnsatisfiable());
+  }
 
   Range* unsatisfiable_left = new Range(RangeBoundary::FromConstant(0),
                                         RangeBoundary::NegativeInfinity());
-  EXPECT(unsatisfiable_left->IsUnsatisfiable());
+  if (FLAG_limit_ints_to_64_bits) {
+    EXPECT(unsatisfiable_left->Equals(&fullInt64Range));
+  } else {
+    EXPECT(unsatisfiable_left->IsUnsatisfiable());
+  }
 }
 
 TEST_CASE(RangeUtils) {
+  // Use kMin/kMax instead of +/-inf with limited 64-bit integers, as
+  // any range with a +/-inf bound is converted to the full int64
+  // range due to wrap-around.
+  const RangeBoundary negativeInfinity =
+      (FLAG_limit_ints_to_64_bits
+           ? RangeBoundary::FromConstant(RangeBoundary::kMin)
+           : RangeBoundary::NegativeInfinity());
+  const RangeBoundary positiveInfinity =
+      (FLAG_limit_ints_to_64_bits
+           ? RangeBoundary::FromConstant(RangeBoundary::kMax)
+           : RangeBoundary::PositiveInfinity());
+
   // [-inf, +inf].
-  const Range& range_0 = *(new Range(RangeBoundary::NegativeInfinity(),
-                                     RangeBoundary::PositiveInfinity()));
+  const Range& range_0 = *(new Range(negativeInfinity, positiveInfinity));
   // [-inf, -1].
-  const Range& range_a = *(new Range(RangeBoundary::NegativeInfinity(),
-                                     RangeBoundary::FromConstant(-1)));
+  const Range& range_a =
+      *(new Range(negativeInfinity, RangeBoundary::FromConstant(-1)));
   // [-inf, 0].
-  const Range& range_b = *(new Range(RangeBoundary::NegativeInfinity(),
-                                     RangeBoundary::FromConstant(0)));
+  const Range& range_b =
+      *(new Range(negativeInfinity, RangeBoundary::FromConstant(0)));
   // [-inf, 1].
-  const Range& range_c = *(new Range(RangeBoundary::NegativeInfinity(),
-                                     RangeBoundary::FromConstant(1)));
+  const Range& range_c =
+      *(new Range(negativeInfinity, RangeBoundary::FromConstant(1)));
   // [-1, +inf]
-  const Range& range_d = *(new Range(RangeBoundary::FromConstant(-1),
-                                     RangeBoundary::PositiveInfinity()));
+  const Range& range_d =
+      *(new Range(RangeBoundary::FromConstant(-1), positiveInfinity));
   // [0, +inf]
-  const Range& range_e = *(new Range(RangeBoundary::FromConstant(0),
-                                     RangeBoundary::PositiveInfinity()));
+  const Range& range_e =
+      *(new Range(RangeBoundary::FromConstant(0), positiveInfinity));
   // [1, +inf].
-  const Range& range_f = *(new Range(RangeBoundary::FromConstant(1),
-                                     RangeBoundary::PositiveInfinity()));
+  const Range& range_f =
+      *(new Range(RangeBoundary::FromConstant(1), positiveInfinity));
   // [1, 2].
   const Range& range_g = *(new Range(RangeBoundary::FromConstant(1),
                                      RangeBoundary::FromConstant(2)));
@@ -237,23 +285,53 @@
 }
 
 TEST_CASE(RangeBinaryOp) {
-  Range* range_a = new Range(RangeBoundary::FromConstant(-1),
-                             RangeBoundary::PositiveInfinity());
-  range_a->Clamp(RangeBoundary::kRangeBoundaryInt64);
-  EXPECT(range_a->min().ConstantValue() == -1);
-  EXPECT(range_a->max().ConstantValue() == RangeBoundary::kMax);
-  Range* range_b = new Range(RangeBoundary::NegativeInfinity(),
-                             RangeBoundary::FromConstant(1));
-  range_b->Clamp(RangeBoundary::kRangeBoundaryInt64);
-  EXPECT(range_b->min().ConstantValue() == RangeBoundary::kMin);
-  EXPECT(range_b->max().ConstantValue() == 1);
+  if (FLAG_limit_ints_to_64_bits) {
+    Range* range_a =
+        new Range(RangeBoundary::FromConstant(-1),
+                  RangeBoundary::FromConstant(RangeBoundary::kMax));
+    range_a->Clamp(RangeBoundary::kRangeBoundaryInt32);
+    EXPECT(range_a->min().ConstantValue() == -1);
+    EXPECT(range_a->max().ConstantValue() == kMaxInt32);
+    range_a->set_max(RangeBoundary::FromConstant(RangeBoundary::kMax));
 
-  {
-    Range result;
-    Range::BinaryOp(Token::kADD, range_a, range_b, NULL, &result);
-    ASSERT(!Range::IsUnknown(&result));
-    EXPECT(result.min().IsNegativeInfinity());
-    EXPECT(result.max().IsPositiveInfinity());
+    Range* range_b = new Range(RangeBoundary::FromConstant(RangeBoundary::kMin),
+                               RangeBoundary::FromConstant(1));
+    range_b->Clamp(RangeBoundary::kRangeBoundaryInt32);
+    EXPECT(range_b->min().ConstantValue() == kMinInt32);
+    EXPECT(range_b->max().ConstantValue() == 1);
+    range_b->set_min(RangeBoundary::FromConstant(RangeBoundary::kMin));
+
+    {
+      Range result;
+      Range::BinaryOp(Token::kADD, range_a, range_b, NULL, &result);
+      ASSERT(!Range::IsUnknown(&result));
+      EXPECT(!result.min().IsNegativeInfinity());
+      EXPECT(!result.max().IsPositiveInfinity());
+      EXPECT(result.min().Equals(
+          RangeBoundary::MinConstant(RangeBoundary::kRangeBoundaryInt64)));
+      EXPECT(result.max().Equals(
+          RangeBoundary::MaxConstant(RangeBoundary::kRangeBoundaryInt64)));
+    }
+  } else {
+    Range* range_a = new Range(RangeBoundary::FromConstant(-1),
+                               RangeBoundary::PositiveInfinity());
+    range_a->Clamp(RangeBoundary::kRangeBoundaryInt64);
+    EXPECT(range_a->min().ConstantValue() == -1);
+    EXPECT(range_a->max().ConstantValue() == RangeBoundary::kMax);
+
+    Range* range_b = new Range(RangeBoundary::NegativeInfinity(),
+                               RangeBoundary::FromConstant(1));
+    range_b->Clamp(RangeBoundary::kRangeBoundaryInt64);
+    EXPECT(range_b->min().ConstantValue() == RangeBoundary::kMin);
+    EXPECT(range_b->max().ConstantValue() == 1);
+
+    {
+      Range result;
+      Range::BinaryOp(Token::kADD, range_a, range_b, NULL, &result);
+      ASSERT(!Range::IsUnknown(&result));
+      EXPECT(result.min().IsNegativeInfinity());
+      EXPECT(result.max().IsPositiveInfinity());
+    }
   }
 
   // Test that [5, 10] + [0, 5] = [5, 15].
diff --git a/runtime/vm/dwarf.cc b/runtime/vm/dwarf.cc
index 2b2bf2a..4270fdc 100644
--- a/runtime/vm/dwarf.cc
+++ b/runtime/vm/dwarf.cc
@@ -28,7 +28,10 @@
         end_pc_offset(-1),
         children_head(NULL),
         children_tail(NULL),
-        children_next(NULL) {}
+        children_next(NULL) {
+    ASSERT(!function.IsNull());
+    ASSERT(function.IsNotTemporaryScopedHandle());
+  }
 
   void AppendChild(InliningNode* child) {
     if (children_tail == NULL) {
@@ -86,7 +89,7 @@
 }
 
 intptr_t Dwarf::AddFunction(const Function& function) {
-  ASSERT(!function.IsNull());
+  RELEASE_ASSERT(!function.IsNull());
   FunctionIndexPair* pair = function_to_index_.Lookup(&function);
   if (pair != NULL) {
     return pair->index_;
@@ -349,7 +352,7 @@
     return NULL;
   }
   const Array& functions = Array::Handle(zone_, code.inlined_id_to_function());
-  const Function& root_function = Function::Handle(zone_, code.function());
+  const Function& root_function = Function::ZoneHandle(zone_, code.function());
 
   GrowableArray<InliningNode*> node_stack(zone_, 4);
   GrowableArray<TokenPosition> token_positions(zone_, 4);
@@ -380,7 +383,7 @@
       case CodeSourceMapBuilder::kPushFunction: {
         int32_t func = stream.Read<int32_t>();
         const Function& child_func =
-            Function::Handle(zone_, Function::RawCast(functions.At(func)));
+            Function::ZoneHandle(zone_, Function::RawCast(functions.At(func)));
         TokenPosition call_pos = token_positions.Last();
         InliningNode* child_node =
             new (zone_) InliningNode(child_func, call_pos, current_pc_offset);
diff --git a/runtime/vm/dwarf.h b/runtime/vm/dwarf.h
index d51dc40..070eb75 100644
--- a/runtime/vm/dwarf.h
+++ b/runtime/vm/dwarf.h
@@ -34,8 +34,10 @@
     return pair.script_->raw() == key->raw();
   }
 
-  ScriptIndexPair(const Script* s, intptr_t index)
-      : script_(s), index_(index) {}
+  ScriptIndexPair(const Script* s, intptr_t index) : script_(s), index_(index) {
+    ASSERT(!s->IsNull());
+    ASSERT(s->IsNotTemporaryScopedHandle());
+  }
 
   ScriptIndexPair() : script_(NULL), index_(-1) {}
 
@@ -64,7 +66,10 @@
   }
 
   FunctionIndexPair(const Function* f, intptr_t index)
-      : function_(f), index_(index) {}
+      : function_(f), index_(index) {
+    ASSERT(!f->IsNull());
+    ASSERT(f->IsNotTemporaryScopedHandle());
+  }
 
   FunctionIndexPair() : function_(NULL), index_(-1) {}
 
@@ -95,7 +100,10 @@
     return pair.code_->raw() == key->raw();
   }
 
-  CodeIndexPair(const Code* c, intptr_t index) : code_(c), index_(index) {}
+  CodeIndexPair(const Code* c, intptr_t index) : code_(c), index_(index) {
+    ASSERT(!c->IsNull());
+    ASSERT(c->IsNotTemporaryScopedHandle());
+  }
 
   CodeIndexPair() : code_(NULL), index_(-1) {}
 
diff --git a/sdk/lib/_http/websocket_impl.dart b/sdk/lib/_http/websocket_impl.dart
index 726dfba..4ed7bb2 100644
--- a/sdk/lib/_http/websocket_impl.dart
+++ b/sdk/lib/_http/websocket_impl.dart
@@ -62,11 +62,9 @@
  * socket will be closed when the processor encounter an error. Not using it
  * will lead to undefined behaviour.
  */
-class _WebSocketProtocolTransformer
-    implements
-        EventSink<List<int>>,
-        StreamTransformer<List<int>,
-            dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ > {
+class _WebSocketProtocolTransformer extends StreamTransformerBase<List<int>,
+        dynamic /*List<int>|_WebSocketPing|_WebSocketPong*/ >
+    implements EventSink<List<int>> {
   static const int START = 0;
   static const int LEN_FIRST = 1;
   static const int LEN_REST = 2;
@@ -406,7 +404,9 @@
 
 typedef /*String|Future<String>*/ _ProtocolSelector(List<String> protocols);
 
-class _WebSocketTransformerImpl implements WebSocketTransformer {
+class _WebSocketTransformerImpl
+    extends StreamTransformerBase<HttpRequest, WebSocket>
+    implements WebSocketTransformer {
   final StreamController<WebSocket> _controller =
       new StreamController<WebSocket>(sync: true);
   final _ProtocolSelector _protocolSelector;
@@ -655,7 +655,7 @@
 
 // TODO(ajohnsen): Make this transformer reusable.
 class _WebSocketOutgoingTransformer
-    implements StreamTransformer<dynamic, List<int>>, EventSink {
+    extends StreamTransformerBase<dynamic, List<int>> implements EventSink {
   final _WebSocketImpl webSocket;
   EventSink<List<int>> _eventSink;
 
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart
index 6e2f3a9..c616cda 100644
--- a/sdk/lib/async/async.dart
+++ b/sdk/lib/async/async.dart
@@ -92,7 +92,13 @@
 library dart.async;
 
 import "dart:collection" show HashMap, IterableBase;
-import "dart:_internal" show printToZone, printToConsole, IterableElementError;
+import "dart:_internal"
+    show
+        CastStream,
+        CastStreamTransformer,
+        printToZone,
+        printToConsole,
+        IterableElementError;
 
 part 'async_error.dart';
 part 'broadcast_stream_controller.dart';
diff --git a/sdk/lib/async/broadcast_stream_controller.dart b/sdk/lib/async/broadcast_stream_controller.dart
index 2bcb539..44e468d 100644
--- a/sdk/lib/async/broadcast_stream_controller.dart
+++ b/sdk/lib/async/broadcast_stream_controller.dart
@@ -282,7 +282,7 @@
   Future addStream(Stream<T> stream, {bool cancelOnError}) {
     if (!_mayAddEvent) throw _addEventError();
     _state |= _STATE_ADDSTREAM;
-    _addStreamState = new _AddStreamState(this, stream, cancelOnError ?? true);
+    _addStreamState = new _AddStreamState(this, stream, cancelOnError ?? false);
     return _addStreamState.addStreamFuture;
   }
 
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index 7bbc70e..9d06d03 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -270,7 +270,7 @@
    *       void close() { _outputSink.close(); }
    *     }
    *
-   *     class DuplicationTransformer implements StreamTransformer<String, String> {
+   *     class DuplicationTransformer extends StreamTransformerBase<String, String> {
    *       // Some generic types omitted for brevity.
    *       Stream bind(Stream stream) => new Stream<String>.eventTransformed(
    *           stream,
@@ -287,6 +287,17 @@
   }
 
   /**
+   * Adapts [source] to be a `Stream<T>`.
+   *
+   * This allows [source] to be used at the new type, but at run-time it
+   * must satisfy the requirements of both the new type and its original type.
+   *
+   * Data events created by the source stream must also be instances of [T].
+   */
+  static Stream<T> castFrom<S, T>(Stream<S> source) =>
+      new CastStream<S, T>(source);
+
+  /**
    * Whether this stream is a broadcast stream.
    */
   bool get isBroadcast => false;
@@ -922,6 +933,26 @@
   }
 
   /**
+   * Adapt this stream to be a `Stream<R>`.
+   *
+   * If this stream already has the desired type, its returned directly.
+   * Otherwise it is wrapped as a `Stream<R>` which checks at run-time that
+   * each data event emitted by this stream is also an instance of [R].
+   */
+  Stream<R> cast<R>() {
+    Stream<Object> self = this;
+    return self is Stream<R> ? self : retype<R>();
+  }
+
+  /**
+   * Adapt this stream to be a `Stream<R>`.
+   *
+   * This stream is wrapped as a `Stream<R>` which checks at run-time that
+   * each data event emitted by this stream is also an instance of [R].
+   */
+  Stream<R> retype<R>() => Stream.castFrom<T, R>(this);
+
+  /**
    * Collects all elements of this stream in a [List].
    *
    * Creates a `List<T>` and adds all elements of the stream to the list
@@ -1225,8 +1256,8 @@
    * that [test] returns `true` for.
    *
    * If no such element is found before this stream is done, and a
-   * [defaultValue] function is provided, the result of calling [defaultValue]
-   * becomes the value of the future. If [defaultValue] throws, the returned
+   * [orElse] function is provided, the result of calling [orElse]
+   * becomes the value of the future. If [orElse] throws, the returned
    * future is completed with that error.
    *
    * If this stream emits an error before the first matching element,
@@ -1240,11 +1271,12 @@
    * streams are closed and cannot be reused after a call to this method.
    *
    * If an error occurs, or if this stream ends without finding a match and
-   * with no [defaultValue] function provided,
+   * with no [orElse] function provided,
    * the returned future is completed with an error.
    */
-  Future<dynamic> firstWhere(bool test(T element), {Object defaultValue()}) {
-    _Future<dynamic> future = new _Future();
+  Future<T> firstWhere(bool test(T element),
+      {dynamic defaultValue(), T orElse()}) {
+    _Future<T> future = new _Future();
     StreamSubscription subscription;
     subscription = this.listen(
         (T value) {
@@ -1256,8 +1288,11 @@
         },
         onError: future._completeError,
         onDone: () {
-          if (defaultValue != null) {
-            _runUserCode(defaultValue, future._complete, future._completeError);
+          if (orElse == null && defaultValue != null) {
+            orElse = () => defaultValue() as T;
+          }
+          if (orElse != null) {
+            _runUserCode(orElse, future._complete, future._completeError);
             return;
           }
           try {
@@ -1281,8 +1316,9 @@
    * That means that a non-error result cannot be provided before this stream
    * is done.
    */
-  Future<dynamic> lastWhere(bool test(T element), {Object defaultValue()}) {
-    _Future<dynamic> future = new _Future();
+  Future<T> lastWhere(bool test(T element),
+      {dynamic defaultValue(), T orElse()}) {
+    _Future<T> future = new _Future();
     T result = null;
     bool foundResult = false;
     StreamSubscription subscription;
@@ -1301,8 +1337,11 @@
             future._complete(result);
             return;
           }
-          if (defaultValue != null) {
-            _runUserCode(defaultValue, future._complete, future._completeError);
+          if (orElse == null && defaultValue != null) {
+            orElse = () => defaultValue() as T;
+          }
+          if (orElse != null) {
+            _runUserCode(orElse, future._complete, future._completeError);
             return;
           }
           try {
@@ -1321,7 +1360,7 @@
    * Like [lastWhere], except that it is an error if more than one
    * matching element occurs in the stream.
    */
-  Future<T> singleWhere(bool test(T element)) {
+  Future<T> singleWhere(bool test(T element), {T orElse()}) {
     _Future<T> future = new _Future<T>();
     T result = null;
     bool foundResult = false;
@@ -1350,6 +1389,10 @@
             return;
           }
           try {
+            if (orElse != null) {
+              _runUserCode(orElse, future._complete, future._completeError);
+              return;
+            }
             throw IterableElementError.noElement();
           } catch (e, s) {
             _completeWithErrorCallback(future, e, s);
@@ -1948,6 +1991,21 @@
       void handleDone(EventSink<T> sink)}) = _StreamHandlerTransformer<S, T>;
 
   /**
+   * Adapts [source] to be a `StreamTransfomer<TS, TT>`.
+   *
+   * This allows [source] to be used at the new type, but at run-time it
+   * must satisfy the requirements of both the new type and its original type.
+   *
+   * Data events passed into the returned transformer must also be instances
+   * of [SS], and data events produced by [source] for those events must
+   * also be instances of [TT].
+   */
+  static StreamTransformer<TS, TT> castFrom<SS, ST, TS, TT>(
+      StreamTransformer<SS, ST> source) {
+    return new CastStreamTransformer<SS, ST, TS, TT>(source);
+  }
+
+  /**
    * Transforms the provided [stream].
    *
    * Returns a new stream with events that are computed from events of the
@@ -1969,6 +2027,25 @@
    * duration. Others might not delay them at all, or just by a microtask.
    */
   Stream<T> bind(Stream<S> stream);
+
+  /**
+   * Provides a `StreamTransformer<RS, RT>` view of this stream transformer.
+   *
+   * If this transformer already has the desired type, or a subtype,
+   * it is returned directly,
+   * otherwise returns the result of `retype<RS, RT>()`.
+   */
+  StreamTransformer<RS, RT> cast<RS, RT>();
+
+  /**
+   * Provides a `StreamTrasformer<RS, RT>` view of this stream transformer.
+   *
+   * The resulting transformer will check at run-time that all data events
+   * of the stream it transforms are actually instances of [S],
+   * and it will check that all data events produced by this transformer
+   * are acually instances of [RT].
+   */
+  StreamTransformer<RS, RT> retype<RS, RT>();
 }
 
 /**
@@ -1978,6 +2055,14 @@
  */
 abstract class StreamTransformerBase<S, T> implements StreamTransformer<S, T> {
   const StreamTransformerBase();
+
+  StreamTransformer<RS, RT> cast<RS, RT>() {
+    StreamTransformer<Object, Object> self = this;
+    return self is StreamTransformer<RS, RT> ? self : retype<RS, RT>();
+  }
+
+  StreamTransformer<RS, RT> retype<RS, RT>() =>
+      StreamTransformer.castFrom<S, T, RS, RT>(this);
 }
 
 /**
diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
index 8b89163e..71b857f 100644
--- a/sdk/lib/async/stream_controller.dart
+++ b/sdk/lib/async/stream_controller.dart
@@ -271,7 +271,7 @@
    * forwarded to the controller's stream, and the `addStream` ends
    * after this. If [cancelOnError] is false, all errors are forwarded
    * and only a done event will end the `addStream`.
-   * If [cancelOnError] is omitted, it defaults to true.
+   * If [cancelOnError] is omitted, it defaults to false.
    */
   Future addStream(Stream<T> source, {bool cancelOnError});
 }
@@ -555,7 +555,7 @@
     if (_isCanceled) return new _Future.immediate(null);
     _StreamControllerAddStreamState<T> addState =
         new _StreamControllerAddStreamState<T>(
-            this, _varData, source, cancelOnError ?? true);
+            this, _varData, source, cancelOnError ?? false);
     _varData = addState;
     _state |= _STATE_ADDSTREAM;
     return addState.addStreamFuture;
@@ -863,8 +863,9 @@
   }
 
   Future close() => _target.close();
-  Future addStream(Stream<T> source, {bool cancelOnError}) =>
-      _target.addStream(source, cancelOnError: cancelOnError);
+
+  Future addStream(Stream<T> source) => _target.addStream(source);
+
   Future get done => _target.done;
 }
 
diff --git a/sdk/lib/async/stream_transformers.dart b/sdk/lib/async/stream_transformers.dart
index ad75a4d..37bbc02 100644
--- a/sdk/lib/async/stream_transformers.dart
+++ b/sdk/lib/async/stream_transformers.dart
@@ -155,7 +155,7 @@
  *
  * Note that this class can be `const`.
  */
-class _StreamSinkTransformer<S, T> implements StreamTransformer<S, T> {
+class _StreamSinkTransformer<S, T> extends StreamTransformerBase<S, T> {
   final _SinkMapper<S, T> _sinkMapper;
   const _StreamSinkTransformer(this._sinkMapper);
 
@@ -298,7 +298,7 @@
  * `StreamSubscription`. As such it can also act on `cancel` events, making it
  * fully general.
  */
-class _StreamSubscriptionTransformer<S, T> implements StreamTransformer<S, T> {
+class _StreamSubscriptionTransformer<S, T> extends StreamTransformerBase<S, T> {
   final _SubscriptionTransformer<S, T> _onListen;
 
   const _StreamSubscriptionTransformer(this._onListen);
diff --git a/sdk/lib/convert/convert.dart b/sdk/lib/convert/convert.dart
index 21f8521..1255c22 100644
--- a/sdk/lib/convert/convert.dart
+++ b/sdk/lib/convert/convert.dart
@@ -55,7 +55,7 @@
 
 import 'dart:async';
 import 'dart:typed_data';
-import 'dart:_internal' show parseHexByte;
+import 'dart:_internal' show CastConverter, parseHexByte;
 
 part 'ascii.dart';
 part 'base64.dart';
diff --git a/sdk/lib/convert/converter.dart b/sdk/lib/convert/converter.dart
index 6c135cb..01d6186 100644
--- a/sdk/lib/convert/converter.dart
+++ b/sdk/lib/convert/converter.dart
@@ -10,10 +10,22 @@
  * It is recommended that implementations of `Converter` extend this class,
  * to inherit any further methods that may be added to the class.
  */
-abstract class Converter<S, T> implements StreamTransformer<S, T> {
+abstract class Converter<S, T> extends StreamTransformerBase<S, T> {
   const Converter();
 
   /**
+   * Adapts [source] to be a `Converter<TS, TT>`.
+   *
+   * This allows [source] to be used at the new type, but at run-time it
+   * must satisfy the requirements of both the new type and its original type.
+   *
+   * Conversion input must be both [SS] and [TS] and the output created by
+   * [source] for those input must be both [ST] and [TT].
+   */
+  static Converter<TS, TT> castFrom<SS, ST, TS, TT>(Converter<SS, ST> source) =>
+      new CastConverter<SS, ST, TS, TT>(source);
+
+  /**
    * Converts [input] and returns the result of the conversion.
    */
   T convert(S input);
@@ -43,6 +55,28 @@
     return new Stream<T>.eventTransformed(
         stream, (EventSink sink) => new _ConverterStreamEventSink(this, sink));
   }
+
+  /**
+   * Provides a `Converter<RS, RT>` view of this stream transformer.
+   *
+   * If this transformer already has the desired type, or a subtype,
+   * it is returned directly,
+   * otherwise returns the result of `retype<RS, RT>()`.
+   */
+  Converter<RS, RT> cast<RS, RT>() {
+    Converter<Object, Object> self = this;
+    return self is Converter<RS, RT> ? self : retype<RS, RT>();
+  }
+
+  /**
+   * Provides a `Converter<RS, RT>` view of this stream transformer.
+   *
+   * The resulting transformer will check at run-time that all conversion
+   * inputs are actually instances of [S],
+   * and it will check that all conversion output produced by this converter
+   * are acually instances of [RT].
+   */
+  Converter<RS, RT> retype<RS, RT>() => Converter.castFrom<S, T, RS, RT>(this);
 }
 
 /**
diff --git a/sdk/lib/convert/line_splitter.dart b/sdk/lib/convert/line_splitter.dart
index b9b024c..2522b14 100644
--- a/sdk/lib/convert/line_splitter.dart
+++ b/sdk/lib/convert/line_splitter.dart
@@ -18,7 +18,7 @@
  * The returned lines do not contain the line terminators.
  */
 
-class LineSplitter implements StreamTransformer<String, String> {
+class LineSplitter extends StreamTransformerBase<String, String> {
   const LineSplitter();
 
   /// Split [lines] into individual lines.
diff --git a/sdk/lib/internal/async_cast.dart b/sdk/lib/internal/async_cast.dart
new file mode 100644
index 0000000..924ac53
--- /dev/null
+++ b/sdk/lib/internal/async_cast.dart
@@ -0,0 +1,88 @@
+// Copyright (c) 2012, 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.
+
+part of dart._internal;
+
+// Casting wrappers for asynchronous classes.
+
+class CastStream<S, T> extends Stream<T> {
+  final Stream<S> _source;
+  CastStream(this._source);
+  bool get isBroadcast => _source.isBroadcast;
+
+  StreamSubscription<T> listen(void onData(T data),
+      {Function onError, void onDone(), bool cancelOnError}) {
+    return new CastStreamSubscription<S, T>(_source.listen(null,
+        onError: onError, onDone: onDone, cancelOnError: cancelOnError))
+      ..onData(onData);
+  }
+
+  Stream<R> cast<R>() {
+    Stream<Object> self = this;
+    return self is Stream<R> ? self : this.retype<R>();
+  }
+
+  Stream<R> retype<R>() => new CastStream<S, R>(_source);
+}
+
+class CastStreamSubscription<S, T> implements StreamSubscription<T> {
+  final StreamSubscription<S> _source;
+
+  CastStreamSubscription(this._source);
+
+  Future cancel() => _source.cancel();
+
+  void onData(void handleData(T data)) {
+    _source.onData((S data) => handleData(data as T));
+  }
+
+  void onError(Function handleError) {
+    _source.onError(handleError);
+  }
+
+  void onDone(void handleDone()) {
+    _source.onDone(handleDone);
+  }
+
+  void pause([Future resumeSignal]) {
+    _source.pause(resumeSignal);
+  }
+
+  void resume() {
+    _source.resume();
+  }
+
+  bool get isPaused => _source.isPaused;
+
+  Future<E> asFuture<E>([E futureValue]) => _source.asFuture<E>(futureValue);
+}
+
+class CastStreamTransformer<SS, ST, TS, TT>
+    extends StreamTransformerBase<TS, TT> {
+  final StreamTransformer<SS, ST> _source;
+  CastStreamTransformer(this._source);
+
+  // cast is inherited from StreamTransformerBase.
+
+  StreamTransformer<RS, RT> retype<RS, RT>() =>
+      new CastStreamTransformer<SS, ST, RS, RT>(_source);
+
+  Stream<TT> bind(Stream<TS> stream) =>
+      _source.bind(stream.cast<SS>()).cast<TT>();
+}
+
+class CastConverter<SS, ST, TS, TT> extends Converter<TS, TT> {
+  final Converter<SS, ST> _source;
+  CastConverter(this._source);
+
+  TT convert(TS input) => _source.convert(input as SS) as TT;
+
+  // cast is inherited from Converter.
+
+  Stream<TT> bind(Stream<TS> stream) =>
+      _source.bind(stream.cast<SS>()).cast<TT>();
+
+  Converter<RS, RT> retype<RS, RT>() =>
+      new CastConverter<SS, ST, RS, RT>(_source);
+}
diff --git a/sdk/lib/internal/cast.dart b/sdk/lib/internal/cast.dart
index d871f40..c91dff7 100644
--- a/sdk/lib/internal/cast.dart
+++ b/sdk/lib/internal/cast.dart
@@ -4,7 +4,7 @@
 
 part of dart._internal;
 
-// Casting wrappers for collections and asynchronous classes.
+// Casting wrappers for collection classes.
 
 abstract class _CastIterableBase<S, T> extends Iterable<T> {
   Iterable<S> get _source;
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 0869856..96bbddf 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -6,10 +6,19 @@
 
 import 'dart:collection';
 
+import 'dart:async'
+    show
+        Future,
+        Stream,
+        StreamSubscription,
+        StreamTransformer,
+        StreamTransformerBase;
+import 'dart:convert' show Converter;
 import 'dart:core' hide Symbol;
 import 'dart:core' as core;
 import 'dart:math' show Random;
 
+part 'async_cast.dart';
 part 'cast.dart';
 part 'iterable.dart';
 part 'list.dart';
diff --git a/sdk/lib/internal/internal_sources.gni b/sdk/lib/internal/internal_sources.gni
index 6acd227..7c8af46 100644
--- a/sdk/lib/internal/internal_sources.gni
+++ b/sdk/lib/internal/internal_sources.gni
@@ -7,6 +7,7 @@
   "internal.dart",
 
   # The above file needs to be first as it lists the parts below.
+  "async_cast.dart",
   "cast.dart",
   "iterable.dart",
   "list.dart",
diff --git a/tests/co19/co19-analyzer.status b/tests/co19/co19-analyzer.status
index 352cb5c..723a34f 100644
--- a/tests/co19/co19-analyzer.status
+++ b/tests/co19/co19-analyzer.status
@@ -80,7 +80,9 @@
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t06: StaticWarning # Issue 15467
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t07: StaticWarning # Issue 15467
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/proxy_annotation_t08: StaticWarning # Issue 15467
+Language/Functions/implicit_return_t01: StaticWarning # invalid use of void for dart 2. Also see #32100
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/inheritance_t03: StaticWarning # Please triage this failure.
+Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/not_overriden_members_t01: StaticWarning # uses void in a way not allowed in dart 2, see also #32100
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: CompileTimeError # Please triage this failure.
 Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t02: CompileTimeError # Please triage this failure.
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError # Please triage this failure.
@@ -121,6 +123,7 @@
 Language/Types/Type_Void/syntax_t02: MissingCompileTimeError # Issue co19/30264
 Language/Types/Type_Void/syntax_t04: MissingCompileTimeError # Issue co19/30264
 Language/Types/Type_Void/syntax_t09: MissingCompileTimeError # Issue 30177: `print(v)` is an error.
+Language/Types/Type_Void/using_t03: StaticWarning # invalid usage of void for dart 2, see also #32100
 Language/Variables/final_or_static_initialization_t01: MissingCompileTimeError # Please triage this failure
 Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError # Please triage this failure
 Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError # Please triage this failure
@@ -133,6 +136,7 @@
 LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: StaticWarning # Issue 20939
 LayoutTests/fast/canvas/canvas-createImageBitmap-animated_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/canvas/webgl/webgl-specific_t01: StaticWarning # Please triage this failure.
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: StaticWarning # uses void in a way not allowed in dart 2, see also #32100
 LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/dom/DOMImplementation/createDocumentType-err_t01: StaticWarning # Please triage this failure.
 LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: StaticWarning # Please triage this failure.
@@ -227,6 +231,9 @@
 LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t01: StaticWarning # co19 issue 703
 LibTest/async/StreamController/EventSink_class_A01_t01: StaticWarning # Please triage this failure.
 LibTest/async/StreamController/StreamConsumer_class_A01_t01: StaticWarning # Please triage this failure.
+LibTest/async/Zone/runBinaryGuarded_A01_t01: StaticWarning # uses void in a way not allowed in dart 2, see also #32100
+LibTest/async/Zone/runGuarded_A01_t01: StaticWarning # get the build green #32100
+LibTest/async/Zone/runUnaryGuarded_A01_t01: StaticWarning # uses void in a way not allowed in dart 2, see also #32100
 LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Fail, OK # co19 issue 642, The argument type 'int' cannot be assigned to the parameter type 'Iterable'
 LibTest/collection/HashMap/HashMap_class_A01_t01: StaticWarning # Please triage this failure.
 LibTest/collection/HashSet/HashSet_class_A01_t01: StaticWarning # Imports libraries with static warnings
@@ -374,6 +381,7 @@
 WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: CompileTimeError # Please triage this failure.
 WebPlatformTest/dom/nodes/Node-appendChild_t02: StaticWarning # Please triage this failure.
 WebPlatformTest/dom/nodes/Node-contains_t01: StaticWarning # Please triage this failure.
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: StaticWarning # Uses void in a way not allowed in dart 2, see also #32100
 WebPlatformTest/dom/nodes/Node-isEqualNode_t01: StaticWarning # Please triage this failure.
 WebPlatformTest/dom/nodes/Node-parentNode_t01: StaticWarning # Please triage this failure.
 WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: StaticWarning # Please triage this failure.
@@ -389,6 +397,7 @@
 WebPlatformTest/html/dom/elements/global-attributes/dataset-set_t01: StaticWarning # Please triage this failure.
 WebPlatformTest/html/semantics/document-metadata/styling/LinkStyle_t01: StaticWarning # Please triage this failure.
 WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: StaticWarning # Please triage this failure.
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: StaticWarning # uses void in a way not allowed in dart 2, see also #32100
 WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode_t01: StaticWarning # Please triage this failure.
 WebPlatformTest/html/semantics/embedded-content/the-audio-element/audio_constructor_t01: StaticWarning # Please triage this failure.
 WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address_t01: StaticWarning # Please triage this failure.
@@ -505,4 +514,3 @@
 
 [ $compiler == dart2analyzer && $strong ]
 *: Skip # Issue 28649
-
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index d6bebfe..494dd14 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -62,6 +62,8 @@
 Language/Expressions/Instance_Creation/Const/abstract_class_t01: Pass, Fail # co19 issue 66
 Language/Expressions/Instance_Creation/Const/abstract_class_t03: Pass, Fail # co19 issue 66
 LibTest/async/Stream/asBroadcastStream_A02_t01: Fail # co19 issue 687
+LibTest/async/StreamController/addStream_A03_t01: RuntimeError # Issue <TODO>
+LibTest/async/StreamSink/addStream_A01_t02: RuntimeError # Issue <TODO>
 LibTest/async/Zone/runBinaryGuarded_A01_t01: Fail # co19 issue 126
 LibTest/async/Zone/runGuarded_A01_t01: Fail # co19 issue 126
 LibTest/async/Zone/runUnaryGuarded_A01_t01: Fail # co19 issue 126
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 93bda7c..e55b34f 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -66,7 +66,6 @@
 Language/Classes/Constructors/Generative_Constructors/execution_t06: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/execution_t07: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/execution_t12: MissingCompileTimeError
-Language/Classes/Constructors/Generative_Constructors/redirection_t02: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/redirection_t03: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/redirection_t07: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/redirection_t08: MissingCompileTimeError
@@ -80,8 +79,6 @@
 Language/Classes/Static_Methods/declaration_t01: MissingCompileTimeError
 Language/Classes/Superclasses/wrong_superclass_t08: MissingCompileTimeError
 Language/Classes/Superinterfaces/wrong_type_t05: MissingCompileTimeError
-Language/Classes/declarations_t06: MissingCompileTimeError
-Language/Classes/declarations_t08: MissingCompileTimeError
 Language/Classes/declarations_t33: MissingCompileTimeError
 Language/Classes/same_name_type_variable_t04: MissingCompileTimeError
 Language/Classes/same_name_type_variable_t07: MissingCompileTimeError
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index cb6325d..0e0083a 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -34,6 +34,7 @@
 old_frontend/compile_with_empty_libraries_test: Fail # Issue 24223
 old_frontend/compile_with_empty_libraries_test: Fail # Issue 24223
 old_frontend/patch_test/bug: RuntimeError # Issue 21132
+old_frontend/resolver_test: RuntimeError # Test must be updated given new parser recovery
 packages/*: Skip # Skip packages folder
 quarantined/http_test: Pass, Slow
 rti/rti_need_test: Pass, Slow, Fail # Issue 32055
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map.dart
new file mode 100644
index 0000000..0015e60
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map.dart
@@ -0,0 +1,11 @@
+// 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 '../libs/deferred_typed_map_lib1.dart' deferred as lib;
+
+/*element: main:OutputUnit(main, {})*/
+main() async {
+  await lib.loadLibrary();
+  print(lib.table[1]);
+}
diff --git a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
index c4f9e1a..d69452a 100644
--- a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
+++ b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
@@ -139,7 +139,7 @@
     SourceSpan span = computeSourceSpanFromTreeNode(node);
     if (node is ir.ConstructorInvocation ||
         node is ir.ListLiteral ||
-        node is ir.MapLiteral) {
+        (node is ir.MapLiteral && node.keyType == null)) {
       // Adjust the source-span to match the AST-based location. The kernel FE
       // skips the "const" keyword for the expression offset and any prefix in
       // front of the constructor. The "-6" is an approximation assuming that
diff --git a/tests/compiler/dart2js/deferred_loading/libs/deferred_typed_map_lib1.dart b/tests/compiler/dart2js/deferred_loading/libs/deferred_typed_map_lib1.dart
new file mode 100644
index 0000000..0700011
--- /dev/null
+++ b/tests/compiler/dart2js/deferred_loading/libs/deferred_typed_map_lib1.dart
@@ -0,0 +1,19 @@
+// 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.
+
+class M {}
+
+typedef dynamic FF({M b});
+
+/*element: table:OutputUnit(1, {lib})*/
+const table =
+/*ast.null*/
+/*kernel.OutputUnit(1, {lib})*/
+    const <int, FF>{1: f1, 2: f2};
+
+/*element: f1:OutputUnit(1, {lib})*/
+dynamic f1({M b}) => null;
+
+/*element: f2:OutputUnit(1, {lib})*/
+dynamic f2({M b}) => null;
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index fa02dc6c..4f5250d 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -190,9 +190,6 @@
 map_test: Crash # tests/corelib_2/map_test.dart:903:7: Internal problem: Unhandled Null in installDefaultConstructor.
 symbol_reserved_word_test/03: RuntimeError
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel && !$strong ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $dart2js_with_kernel ]
 int_from_environment_test: Pass # Issue 31762
 int_parse_radix_test/none: Pass # Issue 31762
@@ -208,12 +205,10 @@
 symbol_reserved_word_test/03: RuntimeError
 uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && !$strong ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
 apply3_test: CompileTimeError
 cast_test: RuntimeError
+collection_length_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 collection_removes_test: RuntimeError
 dynamic_nosuchmethod_test: CompileTimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
@@ -227,46 +222,36 @@
 iterable_empty_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': Failed assertion: line 391 pos 16: 'receiver.nonCheck() == user.inputs[1].nonCheck()': is not true.
 iterable_fold_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
 iterable_generate_test/01: RuntimeError
-iterable_generate_test/none: RuntimeError
 iterable_reduce_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
-iterable_return_type_test/01: RuntimeError
-iterable_return_type_test/02: RuntimeError
-iterable_return_type_test/none: RuntimeError
-iterable_to_list_test/01: RuntimeError
-iterable_to_list_test/none: RuntimeError
+iterable_return_type_test/01: Crash # Assertion failure: Only 2 of 4 arguments have been read from: [HTypeInfoExpression(COMPLETE, int), HTypeInfoExpression(COMPLETE, int), HTypeInfoExpression(COMPLETE, int), HTypeInfoExpression(COMPLETE, int)]
+iterable_return_type_test/02: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+iterable_return_type_test/none: Crash # Assertion failure: Only 2 of 4 arguments have been read from: [HTypeInfoExpression(COMPLETE, int), HTypeInfoExpression(COMPLETE, int), HTypeInfoExpression(COMPLETE, int), HTypeInfoExpression(COMPLETE, int)]
+iterable_to_list_test/01: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+iterable_to_list_test/none: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 iterable_to_set_test: RuntimeError
-linked_hash_map_from_iterable_test: RuntimeError
-linked_hash_map_from_iterables_test: RuntimeError
+json_map_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 list_concurrent_modify_test: RuntimeError
-list_filled_type_argument_test: RuntimeError
 list_insert_all_test: RuntimeError
 list_replace_range_test: RuntimeError
 list_set_all_test: RuntimeError
 list_test/01: RuntimeError
 list_test/none: RuntimeError
-map_from_iterable_test: RuntimeError
-map_from_iterables_test: RuntimeError
+list_unmodifiable_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 map_keys2_test: RuntimeError
-map_test: RuntimeError
-map_values2_test: RuntimeError
-map_values3_test: RuntimeError
-map_values4_test: RuntimeError
 nan_infinity_test/01: RuntimeError
 null_nosuchmethod_test/01: CompileTimeError
 null_nosuchmethod_test/none: CompileTimeError
+null_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 queue_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart': Failed assertion: line 391 pos 16: 'receiver.nonCheck() == user.inputs[1].nonCheck()': is not true.
 splay_tree_from_iterable_test: RuntimeError
-splay_tree_from_iterables_test: RuntimeError
 stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 string_replace_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
 string_split_test/checkedstore: RuntimeError
 symbol_reserved_word_test/03: RuntimeError
+type_hashcode_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 uri_base_test: RuntimeError
 uri_query_test: Crash # Assertion failure: Cannot find value local(testQueryParameters#normalizedQuery) in (BoxLocal(_box_0)) for j:signature(testQueryParameters_test.$signature).
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && !$strong ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
 apply3_test: CompileTimeError
 cast_test: RuntimeError
@@ -288,7 +273,6 @@
 iterable_return_type_test/01: RuntimeError
 iterable_return_type_test/02: RuntimeError
 iterable_to_list_test/01: RuntimeError
-iterable_to_list_test/none: RuntimeError
 iterable_to_set_test: RuntimeError
 list_concurrent_modify_test: RuntimeError
 list_insert_all_test: RuntimeError
@@ -311,7 +295,7 @@
 uri_base_test: RuntimeError
 uri_query_test: Crash # Assertion failure: Cannot find value local(testQueryParameters#normalizedQuery) in (BoxLocal(_box_0)) for j:signature(testQueryParameters_test.$signature).
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified && !$strong ]
+[ $compiler == dart2js && $dart2js_with_kernel && !$strong ]
 *: SkipByDesign
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
@@ -335,6 +319,11 @@
 string_base_vm_static_test: MissingCompileTimeError
 string_static_test: MissingCompileTimeError
 
+# Dart2JS does not support strong mode without the new front end, though it
+# does support checked mode which is partly compatible.
+[ $compiler == dart2js && !$dart2js_with_kernel && $strong ]
+*: SkipByDesign
+
 [ $compiler == dart2js && $fast_startup ]
 apply3_test: Fail # mirrors not supported
 dynamic_nosuchmethod_test: Fail # mirrors not supported
diff --git a/tests/corelib_2/set_removeAll_test.dart b/tests/corelib_2/set_removeAll_test.dart
index 12dfa39..c48cb06 100644
--- a/tests/corelib_2/set_removeAll_test.dart
+++ b/tests/corelib_2/set_removeAll_test.dart
@@ -23,6 +23,6 @@
   for (var setToTest in sets) {
     // Test that the set accepts a list that is not of the same type:
     //   Set<B>.removeAll(List<A>)
-    Expect.isNull(setToTest.removeAll(<A>[new A()]));
+    Expect.isNull(setToTest.removeAll(<A>[new A()]) as dynamic);
   }
 }
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 67463f9..814eee9 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -117,6 +117,7 @@
 getter_no_setter_test/01: StaticWarning
 getter_no_setter_test/none: Fail # Issue 11579
 getter_setter_in_lib_test: Fail # Issue 23286
+if_null_evaluation_order_test/01: StaticWarning # invalid use of void for dart 2, see also #32100
 implicit_this_test/02: StaticWarning
 implicit_this_test/none: Fail # Issue 11575
 implied_interface_test: StaticWarning
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index ad5f14a..368ba6a 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -1136,7 +1136,6 @@
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test: Crash # Issue 30856
 constructor_redirect2_negative_test: Crash # Issue 30856
-constructor_redirect2_test/01: MissingCompileTimeError
 constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
 cyclic_constructor_test/01: Crash # Issue 30856
 deferred_constraints_constants_test/none: CompileTimeError
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index 40ddb5e..7f1bb06 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -28,7 +28,6 @@
 constants_test/05: MissingCompileTimeError
 constructor_redirect1_negative_test: Fail
 constructor_redirect2_negative_test: Fail
-constructor_redirect2_test/01: MissingCompileTimeError
 constructor_redirect_test/01: MissingCompileTimeError
 cyclic_constructor_test/01: MissingCompileTimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
diff --git a/tests/language_2/field_test.dart b/tests/language_2/field_test.dart
index fd255fa..03e7085 100644
--- a/tests/language_2/field_test.dart
+++ b/tests/language_2/field_test.dart
@@ -4,13 +4,10 @@
 // Dart test program for testing setting/getting of instance fields.
 
 import "package:expect/expect.dart";
-import "package:meta/meta.dart" show virtual;
 
 class First {
   First() {}
-  @virtual
   var a;
-  @virtual
   var b;
 
   addFields() {
@@ -25,8 +22,6 @@
 }
 
 class Second extends First {
-  // TODO: consider removing once http://b/4254120 is fixed.
-  Second() : super() {}
   var c;
   get a {
     return -12;
@@ -37,6 +32,21 @@
   }
 }
 
+class FieldInitializedToNull {
+  int x, y;
+
+  static void test() {
+    var f = new FieldInitializedToNull();
+    int missingArg([int x = 42]) => x;
+    Expect.isNull(f.x);
+    Expect.isNull(f.y);
+    // Regression tests for a DDC bug, where undefined gets initialized in the
+    // fields, and is incorrect recognized as a missing argument.
+    Expect.isNull(missingArg(f.x));
+    Expect.isNull(missingArg(f.y));
+  }
+}
+
 class FieldTest {
   static one() {
     var f = new First();
@@ -68,13 +78,10 @@
     o.b = o;
     Expect.equals(12, o.c);
   }
-
-  static testMain() {
-    // FieldTest.one();
-    FieldTest.two();
-  }
 }
 
 main() {
-  FieldTest.testMain();
+  FieldTest.one();
+  FieldTest.two();
+  FieldInitializedToNull.test();
 }
diff --git a/tests/language_2/generalized_void_syntax_test.dart b/tests/language_2/generalized_void_syntax_test.dart
index f18d69a..6ceb475 100644
--- a/tests/language_2/generalized_void_syntax_test.dart
+++ b/tests/language_2/generalized_void_syntax_test.dart
@@ -28,11 +28,13 @@
 A<void> m3(A<void> x, [A<void> y]) => new A<void>(null);
 A<void> m4(A<void> x, {A<void> y}) => new A<void>(null);
 
-class B<S, T> implements A<void> { void get t => null; }
+class B<S, T> implements A<void> {
+  void get t => null;
+}
 
 class C extends A<void> with B<void, A<void>> {
-  C(): super(null);
-  
+  C() : super(null);
+
   static final void x1 = null;
   static final A<void> x2 = new A<void>(null);
 
@@ -47,7 +49,7 @@
 
   covariant void x11 = null, x12;
   covariant A<void> x13 = new A<void>(null), x14;
-  
+
   static void get g1 => null;
   static A<void> get g2 => new A<void>(null);
   static void set s1(void x) => null;
@@ -68,11 +70,25 @@
 
   // Ensure that all members are used, and use `void` in expressions.
   void run() {
-    List<dynamic> ignore = [
-      x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, //
-      g1, g2, g3, g4,
-    ];
-    
+    x1;
+    x2;
+    x3;
+    x4;
+    x5;
+    x6;
+    x7;
+    x8;
+    x9;
+    x10;
+    x11;
+    x12;
+    x13;
+    x14;
+    g1;
+    g2;
+    g3;
+    g4;
+
     s1 = null;
     s2 = new A<void>(null);
     s3 = null;
@@ -96,7 +112,17 @@
 
 // Testing syntax, just enforce compilation.
 main() {
-  List<dynamic> ignore = [x1, x2, x3, x4, x5, x6, x7, x8, g1, g2];
+  // ignore
+  x1;
+  x2;
+  x3;
+  x4;
+  x5;
+  x6;
+  x7;
+  x8;
+  g1;
+  g2;
 
   s1 = null;
   s2 = new A<void>(null);
diff --git a/tests/language_2/if_null_evaluation_order_test.dart b/tests/language_2/if_null_evaluation_order_test.dart
index fa93170..c819a9b 100644
--- a/tests/language_2/if_null_evaluation_order_test.dart
+++ b/tests/language_2/if_null_evaluation_order_test.dart
@@ -10,7 +10,7 @@
 
 import "package:expect/expect.dart";
 
-void bad() {
+bad() {
   throw new Exception();
 }
 
diff --git a/tests/language_2/inlined_throw_test.dart b/tests/language_2/inlined_throw_test.dart
index 976f127..52f3ef4 100644
--- a/tests/language_2/inlined_throw_test.dart
+++ b/tests/language_2/inlined_throw_test.dart
@@ -126,7 +126,7 @@
 call1() => ternary(0, kast("call1"), 1);
 call2() => ternary(kast("call2"), 0, 1);
 call3() => ternary(0, 1, kast("call3"));
-call1c() => ternary(callMe(), kast("call1"), 1);
+call1c() => ternary(callMe() as dynamic, kast("call1"), 1);
 call3c() => ternary(callMeTrue(), 1, kast("call3"));
 call4c() => ternary(0, callMeTrue(), kast("call3"));
 
@@ -135,7 +135,7 @@
 }
 
 sendSetCallThrow() {
-  var x = callMe(), y = kast("sendSet");
+  var x = callMe() as dynamic, y = kast("sendSet");
 }
 
 isSend() => kast("isSend") is int;
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index d231e1f..2902b0f 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -156,201 +156,81 @@
 void_type_override_test/01: MissingCompileTimeError
 void_type_override_test/02: MissingCompileTimeError
 void_type_override_test/03: MissingCompileTimeError
-void_type_usage_test/call_argument: MissingCompileTimeError
 void_type_usage_test/call_conditional: MissingCompileTimeError
-void_type_usage_test/call_do_while: MissingCompileTimeError
-void_type_usage_test/call_dynamic_init: MissingCompileTimeError
-void_type_usage_test/call_for_in: MissingCompileTimeError
-void_type_usage_test/call_is: MissingCompileTimeError
 void_type_usage_test/call_literal_list_init: MissingCompileTimeError
 void_type_usage_test/call_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/call_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/call_null_equals2: MissingCompileTimeError
 void_type_usage_test/call_return: MissingCompileTimeError
-void_type_usage_test/call_throw: MissingCompileTimeError
-void_type_usage_test/call_void_init: MissingCompileTimeError
-void_type_usage_test/call_while: MissingCompileTimeError
-void_type_usage_test/conditional2_argument: MissingCompileTimeError
 void_type_usage_test/conditional2_conditional: MissingCompileTimeError
-void_type_usage_test/conditional2_dynamic_init: MissingCompileTimeError
 void_type_usage_test/conditional2_for: MissingCompileTimeError
 void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError
 void_type_usage_test/conditional2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional2_literal_map_value_init2: MissingCompileTimeError
 void_type_usage_test/conditional2_null_equals2: MissingCompileTimeError
 void_type_usage_test/conditional2_parens: MissingCompileTimeError
 void_type_usage_test/conditional2_return: MissingCompileTimeError
 void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional2_stmt: MissingCompileTimeError
-void_type_usage_test/conditional2_throw: MissingCompileTimeError
-void_type_usage_test/conditional2_void_init: MissingCompileTimeError
-void_type_usage_test/conditional2do_while: MissingCompileTimeError
-void_type_usage_test/conditional2for_in: MissingCompileTimeError
-void_type_usage_test/conditional2while: MissingCompileTimeError
-void_type_usage_test/conditional3_argument: MissingCompileTimeError
 void_type_usage_test/conditional3_conditional: MissingCompileTimeError
-void_type_usage_test/conditional3_dynamic_init: MissingCompileTimeError
 void_type_usage_test/conditional3_for: MissingCompileTimeError
 void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError
 void_type_usage_test/conditional3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional3_literal_map_value_init2: MissingCompileTimeError
 void_type_usage_test/conditional3_null_equals2: MissingCompileTimeError
 void_type_usage_test/conditional3_parens: MissingCompileTimeError
 void_type_usage_test/conditional3_return: MissingCompileTimeError
 void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional3_stmt: MissingCompileTimeError
-void_type_usage_test/conditional3_throw: MissingCompileTimeError
-void_type_usage_test/conditional3_void_init: MissingCompileTimeError
-void_type_usage_test/conditional_argument: MissingCompileTimeError
 void_type_usage_test/conditional_conditional: MissingCompileTimeError
-void_type_usage_test/conditional_do_while: MissingCompileTimeError
-void_type_usage_test/conditional_dynamic_init: MissingCompileTimeError
 void_type_usage_test/conditional_for: MissingCompileTimeError
-void_type_usage_test/conditional_for_in: MissingCompileTimeError
 void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError
 void_type_usage_test/conditional_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional_literal_map_value_init2: MissingCompileTimeError
 void_type_usage_test/conditional_null_equals2: MissingCompileTimeError
 void_type_usage_test/conditional_parens: MissingCompileTimeError
 void_type_usage_test/conditional_return: MissingCompileTimeError
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional_stmt: MissingCompileTimeError
-void_type_usage_test/conditional_throw: MissingCompileTimeError
-void_type_usage_test/conditional_void_init: MissingCompileTimeError
-void_type_usage_test/conditional_while: MissingCompileTimeError
-void_type_usage_test/final_local_argument: MissingCompileTimeError
 void_type_usage_test/final_local_conditional: MissingCompileTimeError
-void_type_usage_test/final_local_do_while: MissingCompileTimeError
-void_type_usage_test/final_local_dynamic_init: MissingCompileTimeError
-void_type_usage_test/final_local_for_in: MissingCompileTimeError
 void_type_usage_test/final_local_for_in2: MissingCompileTimeError
-void_type_usage_test/final_local_is: MissingCompileTimeError
 void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError
 void_type_usage_test/final_local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/final_local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/final_local_null_equals2: MissingCompileTimeError
 void_type_usage_test/final_local_return: MissingCompileTimeError
-void_type_usage_test/final_local_throw: MissingCompileTimeError
-void_type_usage_test/final_local_void_init: MissingCompileTimeError
-void_type_usage_test/final_local_while: MissingCompileTimeError
-void_type_usage_test/global_argument: MissingCompileTimeError
 void_type_usage_test/global_conditional: MissingCompileTimeError
-void_type_usage_test/global_do_while: MissingCompileTimeError
-void_type_usage_test/global_dynamic_init: MissingCompileTimeError
-void_type_usage_test/global_for_in: MissingCompileTimeError
-void_type_usage_test/global_is: MissingCompileTimeError
 void_type_usage_test/global_literal_list_init: MissingCompileTimeError
 void_type_usage_test/global_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/global_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/global_null_equals2: MissingCompileTimeError
 void_type_usage_test/global_return: MissingCompileTimeError
-void_type_usage_test/global_throw: MissingCompileTimeError
-void_type_usage_test/global_void_init: MissingCompileTimeError
-void_type_usage_test/global_while: MissingCompileTimeError
-void_type_usage_test/instance2_argument: MissingCompileTimeError
 void_type_usage_test/instance2_conditional: MissingCompileTimeError
-void_type_usage_test/instance2_do_while: MissingCompileTimeError
-void_type_usage_test/instance2_dynamic_init: MissingCompileTimeError
-void_type_usage_test/instance2_for_in: MissingCompileTimeError
 void_type_usage_test/instance2_for_in2: MissingCompileTimeError
-void_type_usage_test/instance2_is: MissingCompileTimeError
 void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError
 void_type_usage_test/instance2_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/instance2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/instance2_null_equals2: MissingCompileTimeError
 void_type_usage_test/instance2_return: MissingCompileTimeError
-void_type_usage_test/instance2_throw: MissingCompileTimeError
-void_type_usage_test/instance2_void_init: MissingCompileTimeError
-void_type_usage_test/instance2_while: MissingCompileTimeError
-void_type_usage_test/instance3_argument: MissingCompileTimeError
 void_type_usage_test/instance3_conditional: MissingCompileTimeError
-void_type_usage_test/instance3_do_while: MissingCompileTimeError
-void_type_usage_test/instance3_dynamic_init: MissingCompileTimeError
-void_type_usage_test/instance3_for_in: MissingCompileTimeError
 void_type_usage_test/instance3_for_in2: MissingCompileTimeError
-void_type_usage_test/instance3_is: MissingCompileTimeError
 void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError
 void_type_usage_test/instance3_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/instance3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/instance3_null_equals2: MissingCompileTimeError
 void_type_usage_test/instance3_return: MissingCompileTimeError
-void_type_usage_test/instance3_throw: MissingCompileTimeError
-void_type_usage_test/instance3_void_init: MissingCompileTimeError
-void_type_usage_test/instance3_while: MissingCompileTimeError
-void_type_usage_test/instance_argument: MissingCompileTimeError
 void_type_usage_test/instance_conditional: MissingCompileTimeError
-void_type_usage_test/instance_do_while: MissingCompileTimeError
-void_type_usage_test/instance_dynamic_init: MissingCompileTimeError
-void_type_usage_test/instance_for_in: MissingCompileTimeError
-void_type_usage_test/instance_is: MissingCompileTimeError
 void_type_usage_test/instance_literal_list_init: MissingCompileTimeError
 void_type_usage_test/instance_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/instance_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/instance_null_equals2: MissingCompileTimeError
 void_type_usage_test/instance_return: MissingCompileTimeError
-void_type_usage_test/instance_throw: MissingCompileTimeError
-void_type_usage_test/instance_void_init: MissingCompileTimeError
-void_type_usage_test/instance_while: MissingCompileTimeError
-void_type_usage_test/local_argument: MissingCompileTimeError
 void_type_usage_test/local_conditional: MissingCompileTimeError
-void_type_usage_test/local_do_while: MissingCompileTimeError
-void_type_usage_test/local_dynamic_init: MissingCompileTimeError
-void_type_usage_test/local_for_in: MissingCompileTimeError
-void_type_usage_test/local_is: MissingCompileTimeError
 void_type_usage_test/local_literal_list_init: MissingCompileTimeError
 void_type_usage_test/local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/local_null_equals2: MissingCompileTimeError
 void_type_usage_test/local_return: MissingCompileTimeError
-void_type_usage_test/local_throw: MissingCompileTimeError
-void_type_usage_test/local_void_init: MissingCompileTimeError
-void_type_usage_test/local_while: MissingCompileTimeError
-void_type_usage_test/param_argument: MissingCompileTimeError
 void_type_usage_test/param_conditional: MissingCompileTimeError
-void_type_usage_test/param_do_while: MissingCompileTimeError
-void_type_usage_test/param_dynamic_init: MissingCompileTimeError
-void_type_usage_test/param_for_in: MissingCompileTimeError
-void_type_usage_test/param_is: MissingCompileTimeError
 void_type_usage_test/param_literal_list_init: MissingCompileTimeError
 void_type_usage_test/param_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/param_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/param_null_equals2: MissingCompileTimeError
 void_type_usage_test/param_return: MissingCompileTimeError
-void_type_usage_test/param_throw: MissingCompileTimeError
-void_type_usage_test/param_void_init: MissingCompileTimeError
-void_type_usage_test/param_while: MissingCompileTimeError
-void_type_usage_test/paren_argument: MissingCompileTimeError
 void_type_usage_test/paren_conditional: MissingCompileTimeError
-void_type_usage_test/paren_do_while: MissingCompileTimeError
-void_type_usage_test/paren_dynamic_init: MissingCompileTimeError
-void_type_usage_test/paren_for_in: MissingCompileTimeError
-void_type_usage_test/paren_is: MissingCompileTimeError
 void_type_usage_test/paren_literal_list_init: MissingCompileTimeError
 void_type_usage_test/paren_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/paren_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/paren_null_equals2: MissingCompileTimeError
 void_type_usage_test/paren_return: MissingCompileTimeError
-void_type_usage_test/paren_throw: MissingCompileTimeError
-void_type_usage_test/paren_void_init: MissingCompileTimeError
-void_type_usage_test/paren_while: MissingCompileTimeError
 
 [ $compiler == dart2analyzer && $runtime == none ]
 error_stacktrace_test/00: MissingCompileTimeError
@@ -1243,6 +1123,7 @@
 instantiate_type_variable_test/01: CompileTimeError
 interceptor6_test: CompileTimeError
 issue13673_test: StaticWarning # Issue 31925
+issue15606_test/none: CompileTimeError # invalid use of void for dart 2
 issue31596_implement_covariant_test: CompileTimeError
 issue31596_override_test/01: CompileTimeError
 issue31596_override_test/02: CompileTimeError
@@ -1333,7 +1214,6 @@
 type_promotion_functions_test/10: Pass
 vm/lazy_deopt_with_exception_test: CompileTimeError
 void_type_callbacks_test/00: MissingCompileTimeError # Issue 30177
-void_type_callbacks_test/01: MissingCompileTimeError # Issue 30177
 void_type_function_types_test/none: CompileTimeError # Issue 30177
 
 [ $compiler == dart2analyzer && !$strong ]
@@ -1534,6 +1414,7 @@
 invalid_cast_test/11: MissingCompileTimeError
 invocation_mirror_test: StaticWarning
 issue13179_test: StaticWarning
+issue15606_test/none: StaticWarning # invalid use of void for dart 2, see also #32100
 issue31596_override_test/05: MissingCompileTimeError
 issue31596_override_test/06: MissingCompileTimeError
 issue31596_override_test/07: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index 29af3d6..22eab3f 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -755,9 +755,6 @@
 type_parameter_test/09: Crash # Internal Error: Unexpected type variable in static context.
 type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
 
-[ $compiler == dart2js && $checked && $dart2js_with_kernel && !$strong ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $checked && !$dart2js_with_kernel ]
 async_return_types_test/nestedFuture: Fail # Issue 26429
 async_return_types_test/wrongTypeParameter: Fail # Issue 26429
@@ -877,9 +874,6 @@
 list_literal1_test/01: MissingCompileTimeError
 type_check_const_function_typedef2_test: MissingCompileTimeError
 
-[ $compiler == dart2js && !$checked && !$dart2js_with_kernel && $minified ]
-function_subtype_inline2_test: RuntimeError
-
 [ $compiler == dart2js && $dart2js_with_kernel ]
 async_error_timing_test: Crash
 bug31436_test: RuntimeError
@@ -1351,9 +1345,6 @@
 type_variable_conflict2_test/02: MissingCompileTimeError
 typevariable_substitution2_test/02: RuntimeError
 
-[ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && !$strong ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
 abstract_factory_constructor_test/00: MissingCompileTimeError
 abstract_getter_test/01: MissingCompileTimeError
@@ -1432,7 +1423,6 @@
 class_literal_static_test/01: MissingCompileTimeError
 class_literal_static_test/03: MissingCompileTimeError
 class_literal_static_test/07: MissingCompileTimeError
-closure_in_constructor_test: RuntimeError
 closure_invoked_through_interface_target_field_test: MissingCompileTimeError
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
 closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
@@ -1482,7 +1472,6 @@
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test/01: Crash # Stack Overflow
 constructor_redirect2_negative_test: Crash # Issue 30856
-constructor_redirect2_test/01: MissingCompileTimeError
 constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
 constructor_redirect_test/none: CompileTimeError
 covariance_type_parameter_test/01: RuntimeError
@@ -1521,6 +1510,7 @@
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
+dynamic_invoke_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 dynamic_prefix_core_test/none: CompileTimeError
 dynamic_test: RuntimeError
 emit_const_fields_test: CompileTimeError
@@ -1533,6 +1523,9 @@
 external_test/21: CompileTimeError
 external_test/24: CompileTimeError
 extract_type_arguments_test: RuntimeError
+f_bounded_equality_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+f_bounded_quantification4_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+f_bounded_quantification5_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 f_bounded_quantification_test/01: MissingCompileTimeError
 f_bounded_quantification_test/02: MissingCompileTimeError
 factory2_test/03: MissingCompileTimeError
@@ -1552,6 +1545,11 @@
 field_override4_test/02: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
+first_class_types_libraries_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+first_class_types_literals_test/01: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+first_class_types_literals_test/02: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+first_class_types_literals_test/none: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+first_class_types_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 flatten_test/05: MissingRuntimeError
 flatten_test/08: MissingRuntimeError
 flatten_test/09: MissingRuntimeError
@@ -1576,7 +1574,6 @@
 function_subtype_checked0_test: RuntimeError
 function_subtype_closure0_test: RuntimeError
 function_subtype_closure1_test: RuntimeError
-function_subtype_factory0_test: RuntimeError
 function_subtype_factory1_test: RuntimeError
 function_subtype_inline1_test: RuntimeError
 function_subtype_inline2_test: RuntimeError
@@ -1598,6 +1595,7 @@
 function_subtype_typearg3_test: RuntimeError
 function_subtype_typearg5_test: RuntimeError
 function_type2_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(B.T) in (local(B.#)) for j:signature(B_closure.$signature).
+function_type_alias10_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 function_type_alias2_test: RuntimeError
 function_type_alias3_test: RuntimeError
 function_type_alias4_test: RuntimeError
@@ -1605,8 +1603,9 @@
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
 fuzzy_arrows_test/03: RuntimeError
-generic_closure_test/01: RuntimeError
+generic_closure_test/01: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 generic_closure_test/none: RuntimeError
+generic_creation_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 generic_field_mixin6_test/none: RuntimeError
 generic_function_bounds_test: Crash # Unsupported operation: Unsupported type parameter type node U.
 generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
@@ -1622,9 +1621,9 @@
 generic_methods_dynamic_test/02: MissingRuntimeError
 generic_methods_dynamic_test/04: MissingRuntimeError
 generic_methods_generic_class_tearoff_test: RuntimeError
-generic_methods_generic_function_result_test/01: MissingCompileTimeError
+generic_methods_generic_function_result_test/01: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+generic_methods_generic_function_result_test/none: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 generic_methods_named_parameters_test: RuntimeError
-generic_methods_new_test: RuntimeError
 generic_methods_optional_parameters_test: RuntimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
@@ -1803,6 +1802,7 @@
 mixin_mixin3_test: RuntimeError
 mixin_mixin_type_arguments_test: RuntimeError
 mixin_of_mixin_test/none: CompileTimeError
+mixin_regress_13688_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 mixin_super_2_test/none: CompileTimeError
 mixin_super_bound_test/01: MissingCompileTimeError
 mixin_super_bound_test/02: MissingCompileTimeError
@@ -1857,12 +1857,13 @@
 named_parameters_test/08: MissingCompileTimeError
 named_parameters_test/10: MissingCompileTimeError
 nan_identical_test: RuntimeError
-nested_generic_closure_test: RuntimeError
+nested_generic_closure_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 no_main_test/01: CompileTimeError
 no_such_method_mock_test: RuntimeError
 no_such_method_test: CompileTimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
+null2_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 null_no_such_method_test: CompileTimeError
 null_test/mirrors: CompileTimeError
 null_test/none: CompileTimeError
@@ -1935,6 +1936,7 @@
 override_method_with_field_test/01: MissingCompileTimeError
 parser_quirks_test: CompileTimeError
 prefix5_negative_test: Crash # 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart': Failed assertion: line 441 pos 16: 'identical(combiner.arguments.positional[0], rhs)': is not true.
+recursive_generic_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_default_values_test/03: MissingCompileTimeError
@@ -1947,7 +1949,6 @@
 regress_18535_test: CompileTimeError
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
-regress_23650_test: RuntimeError
 regress_24283_test: RuntimeError
 regress_25550_test: CompileTimeError
 regress_26175_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
@@ -1960,7 +1961,9 @@
 regress_30339_test: CompileTimeError
 regress_31591_test: RuntimeError
 regress_32012_test: Crash # Unsupported operation: Unsupported type parameter type node B.
-runtime_type_function_test: RuntimeError
+reify_typevar_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+runtime_type_function_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
+runtime_type_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 setter4_test: MissingCompileTimeError
 setter_no_getter_call_test/01: CompileTimeError
 setter_no_getter_test/01: CompileTimeError
@@ -2031,7 +2034,6 @@
 type_error_test: RuntimeError
 type_literal_prefix_call_test/00: MissingCompileTimeError
 type_literal_test: RuntimeError
-type_parameter_test/none: RuntimeError
 type_promotion_functions_test/02: CompileTimeError
 type_promotion_functions_test/03: CompileTimeError
 type_promotion_functions_test/04: CompileTimeError
@@ -2054,10 +2056,8 @@
 type_variable_bounds_test/06: MissingCompileTimeError
 type_variable_bounds_test/08: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
-type_variable_closure2_test: RuntimeError
-type_variable_closure4_test: RuntimeError
 type_variable_nested_test/01: RuntimeError
-type_variable_promotion_test: RuntimeError
+type_variable_promotion_test: Crash # Assertion failure: Only 2 of 3 arguments have been read from: [HRef(HForeignCode("# ? Object.keys(#) : []")), literal: NullConstant, literal: NullConstant]
 typevariable_substitution2_test/02: RuntimeError
 vm/async_await_catch_stacktrace_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/causal_async_exception_stack2_test: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
@@ -2130,9 +2130,6 @@
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
 
-[ $compiler == dart2js && $dart2js_with_kernel && $host_checked && !$strong ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
 abstract_factory_constructor_test/00: MissingCompileTimeError
 abstract_getter_test/01: MissingCompileTimeError
@@ -2259,7 +2256,6 @@
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test/01: Crash # Stack Overflow
 constructor_redirect2_negative_test: Crash # Issue 30856
-constructor_redirect2_test/01: MissingCompileTimeError
 constructor_redirect_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(A.named2#x), local(A.named2#y), local(A.named2#z)) for j:constructor(A.named2).
 constructor_redirect_test/none: CompileTimeError
 covariance_type_parameter_test/01: RuntimeError
@@ -2840,7 +2836,7 @@
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
 
-[ $compiler == dart2js && $dart2js_with_kernel && $minified && !$strong ]
+[ $compiler == dart2js && $dart2js_with_kernel && !$strong ]
 *: SkipByDesign
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
@@ -3226,8 +3222,7 @@
 identical_const_test/03: MissingCompileTimeError
 identical_const_test/04: MissingCompileTimeError
 if_null_assignment_behavior_test/03: MissingCompileTimeError
-if_null_assignment_behavior_test/13: Crash # Issue 23491
-if_null_assignment_behavior_test/13: MissingCompileTimeError
+if_null_assignment_behavior_test/13: MissingCompileTimeError, Crash # Issue 23491
 if_null_assignment_behavior_test/14: Crash # Issue 23491
 if_null_assignment_behavior_test/15: MissingCompileTimeError
 if_null_assignment_static_test/02: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 5e36a0c..e3eb89a 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -54,6 +54,7 @@
 instantiate_tearoff_of_call_test: RuntimeError
 interface_test/00: MissingCompileTimeError
 internal_library_test/01: MissingCompileTimeError # Issue 29920
+issue15606_test/none: CompileTimeError
 issue31596_implement_covariant_test: CompileTimeError
 issue31596_override_test/01: CompileTimeError
 issue31596_override_test/02: CompileTimeError
@@ -135,208 +136,87 @@
 type_promotion_functions_test/none: CompileTimeError # Issue 30895
 type_variable_scope_test/none: CompileTimeError
 void_type_callbacks_test/00: MissingCompileTimeError # Issue 30514
-void_type_callbacks_test/01: MissingCompileTimeError # Issue 30514
 void_type_function_types_test/none: CompileTimeError # Issue 30514
 void_type_override_test/00: MissingCompileTimeError
 void_type_override_test/00b: MissingCompileTimeError
 void_type_override_test/01: MissingCompileTimeError
 void_type_override_test/02: MissingCompileTimeError
 void_type_override_test/03: MissingCompileTimeError
-void_type_usage_test/call_argument: MissingCompileTimeError
 void_type_usage_test/call_conditional: MissingCompileTimeError
-void_type_usage_test/call_do_while: MissingCompileTimeError
-void_type_usage_test/call_dynamic_init: MissingCompileTimeError
-void_type_usage_test/call_for_in: MissingCompileTimeError
-void_type_usage_test/call_is: MissingCompileTimeError
 void_type_usage_test/call_literal_list_init: MissingCompileTimeError
 void_type_usage_test/call_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/call_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/call_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/call_null_equals2: MissingCompileTimeError
 void_type_usage_test/call_return: MissingCompileTimeError
-void_type_usage_test/call_throw: MissingCompileTimeError
-void_type_usage_test/call_void_init: MissingCompileTimeError
-void_type_usage_test/call_while: MissingCompileTimeError
-void_type_usage_test/conditional2_argument: MissingCompileTimeError
 void_type_usage_test/conditional2_conditional: MissingCompileTimeError
-void_type_usage_test/conditional2_dynamic_init: MissingCompileTimeError
 void_type_usage_test/conditional2_for: MissingCompileTimeError
 void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError
 void_type_usage_test/conditional2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional2_literal_map_value_init2: MissingCompileTimeError
 void_type_usage_test/conditional2_null_equals2: MissingCompileTimeError
 void_type_usage_test/conditional2_parens: MissingCompileTimeError
 void_type_usage_test/conditional2_return: MissingCompileTimeError
 void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional2_stmt: MissingCompileTimeError
-void_type_usage_test/conditional2_throw: MissingCompileTimeError
-void_type_usage_test/conditional2_void_init: MissingCompileTimeError
-void_type_usage_test/conditional2do_while: MissingCompileTimeError
-void_type_usage_test/conditional2for_in: MissingCompileTimeError
-void_type_usage_test/conditional2while: MissingCompileTimeError
-void_type_usage_test/conditional3_argument: MissingCompileTimeError
 void_type_usage_test/conditional3_conditional: MissingCompileTimeError
-void_type_usage_test/conditional3_dynamic_init: MissingCompileTimeError
 void_type_usage_test/conditional3_for: MissingCompileTimeError
 void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError
 void_type_usage_test/conditional3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional3_literal_map_value_init2: MissingCompileTimeError
 void_type_usage_test/conditional3_null_equals2: MissingCompileTimeError
 void_type_usage_test/conditional3_parens: MissingCompileTimeError
 void_type_usage_test/conditional3_return: MissingCompileTimeError
 void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional3_stmt: MissingCompileTimeError
-void_type_usage_test/conditional3_throw: MissingCompileTimeError
-void_type_usage_test/conditional3_void_init: MissingCompileTimeError
-void_type_usage_test/conditional_argument: MissingCompileTimeError
 void_type_usage_test/conditional_conditional: MissingCompileTimeError
-void_type_usage_test/conditional_do_while: MissingCompileTimeError
-void_type_usage_test/conditional_dynamic_init: MissingCompileTimeError
 void_type_usage_test/conditional_for: MissingCompileTimeError
-void_type_usage_test/conditional_for_in: MissingCompileTimeError
 void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError
 void_type_usage_test/conditional_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/conditional_literal_map_value_init2: MissingCompileTimeError
 void_type_usage_test/conditional_null_equals2: MissingCompileTimeError
 void_type_usage_test/conditional_parens: MissingCompileTimeError
 void_type_usage_test/conditional_return: MissingCompileTimeError
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional_stmt: MissingCompileTimeError
-void_type_usage_test/conditional_throw: MissingCompileTimeError
-void_type_usage_test/conditional_void_init: MissingCompileTimeError
-void_type_usage_test/conditional_while: MissingCompileTimeError
-void_type_usage_test/final_local_argument: MissingCompileTimeError
 void_type_usage_test/final_local_conditional: MissingCompileTimeError
-void_type_usage_test/final_local_do_while: MissingCompileTimeError
-void_type_usage_test/final_local_dynamic_init: MissingCompileTimeError
-void_type_usage_test/final_local_for_in: MissingCompileTimeError
 void_type_usage_test/final_local_for_in2: MissingCompileTimeError
-void_type_usage_test/final_local_is: MissingCompileTimeError
 void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError
 void_type_usage_test/final_local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/final_local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/final_local_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/final_local_null_equals2: MissingCompileTimeError
 void_type_usage_test/final_local_return: MissingCompileTimeError
-void_type_usage_test/final_local_throw: MissingCompileTimeError
-void_type_usage_test/final_local_void_init: MissingCompileTimeError
-void_type_usage_test/final_local_while: MissingCompileTimeError
-void_type_usage_test/global_argument: MissingCompileTimeError
 void_type_usage_test/global_conditional: MissingCompileTimeError
-void_type_usage_test/global_do_while: MissingCompileTimeError
-void_type_usage_test/global_dynamic_init: MissingCompileTimeError
-void_type_usage_test/global_for_in: MissingCompileTimeError
-void_type_usage_test/global_is: MissingCompileTimeError
 void_type_usage_test/global_literal_list_init: MissingCompileTimeError
 void_type_usage_test/global_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/global_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/global_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/global_null_equals2: MissingCompileTimeError
 void_type_usage_test/global_return: MissingCompileTimeError
-void_type_usage_test/global_throw: MissingCompileTimeError
-void_type_usage_test/global_void_init: MissingCompileTimeError
-void_type_usage_test/global_while: MissingCompileTimeError
-void_type_usage_test/instance2_argument: MissingCompileTimeError
 void_type_usage_test/instance2_conditional: MissingCompileTimeError
-void_type_usage_test/instance2_do_while: MissingCompileTimeError
-void_type_usage_test/instance2_dynamic_init: MissingCompileTimeError
-void_type_usage_test/instance2_for_in: MissingCompileTimeError
 void_type_usage_test/instance2_for_in2: MissingCompileTimeError
-void_type_usage_test/instance2_is: MissingCompileTimeError
 void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError
 void_type_usage_test/instance2_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/instance2_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance2_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/instance2_null_equals2: MissingCompileTimeError
 void_type_usage_test/instance2_return: MissingCompileTimeError
-void_type_usage_test/instance2_throw: MissingCompileTimeError
-void_type_usage_test/instance2_void_init: MissingCompileTimeError
-void_type_usage_test/instance2_while: MissingCompileTimeError
-void_type_usage_test/instance3_argument: MissingCompileTimeError
 void_type_usage_test/instance3_conditional: MissingCompileTimeError
-void_type_usage_test/instance3_do_while: MissingCompileTimeError
-void_type_usage_test/instance3_dynamic_init: MissingCompileTimeError
-void_type_usage_test/instance3_for_in: MissingCompileTimeError
 void_type_usage_test/instance3_for_in2: MissingCompileTimeError
-void_type_usage_test/instance3_is: MissingCompileTimeError
 void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError
 void_type_usage_test/instance3_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/instance3_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance3_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/instance3_null_equals2: MissingCompileTimeError
 void_type_usage_test/instance3_return: MissingCompileTimeError
-void_type_usage_test/instance3_throw: MissingCompileTimeError
-void_type_usage_test/instance3_void_init: MissingCompileTimeError
-void_type_usage_test/instance3_while: MissingCompileTimeError
-void_type_usage_test/instance_argument: MissingCompileTimeError
 void_type_usage_test/instance_conditional: MissingCompileTimeError
-void_type_usage_test/instance_do_while: MissingCompileTimeError
-void_type_usage_test/instance_dynamic_init: MissingCompileTimeError
-void_type_usage_test/instance_for_in: MissingCompileTimeError
-void_type_usage_test/instance_is: MissingCompileTimeError
 void_type_usage_test/instance_literal_list_init: MissingCompileTimeError
 void_type_usage_test/instance_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/instance_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/instance_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/instance_null_equals2: MissingCompileTimeError
 void_type_usage_test/instance_return: MissingCompileTimeError
-void_type_usage_test/instance_throw: MissingCompileTimeError
-void_type_usage_test/instance_void_init: MissingCompileTimeError
-void_type_usage_test/instance_while: MissingCompileTimeError
-void_type_usage_test/local_argument: MissingCompileTimeError
 void_type_usage_test/local_conditional: MissingCompileTimeError
-void_type_usage_test/local_do_while: MissingCompileTimeError
-void_type_usage_test/local_dynamic_init: MissingCompileTimeError
-void_type_usage_test/local_for_in: MissingCompileTimeError
-void_type_usage_test/local_is: MissingCompileTimeError
 void_type_usage_test/local_literal_list_init: MissingCompileTimeError
 void_type_usage_test/local_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/local_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/local_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/local_null_equals2: MissingCompileTimeError
 void_type_usage_test/local_return: MissingCompileTimeError
-void_type_usage_test/local_throw: MissingCompileTimeError
-void_type_usage_test/local_void_init: MissingCompileTimeError
-void_type_usage_test/local_while: MissingCompileTimeError
-void_type_usage_test/param_argument: MissingCompileTimeError
 void_type_usage_test/param_conditional: MissingCompileTimeError
-void_type_usage_test/param_do_while: MissingCompileTimeError
-void_type_usage_test/param_dynamic_init: MissingCompileTimeError
-void_type_usage_test/param_for_in: MissingCompileTimeError
-void_type_usage_test/param_is: MissingCompileTimeError
 void_type_usage_test/param_literal_list_init: MissingCompileTimeError
 void_type_usage_test/param_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/param_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/param_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/param_null_equals2: MissingCompileTimeError
 void_type_usage_test/param_return: MissingCompileTimeError
-void_type_usage_test/param_throw: MissingCompileTimeError
-void_type_usage_test/param_void_init: MissingCompileTimeError
-void_type_usage_test/param_while: MissingCompileTimeError
-void_type_usage_test/paren_argument: MissingCompileTimeError
 void_type_usage_test/paren_conditional: MissingCompileTimeError
-void_type_usage_test/paren_do_while: MissingCompileTimeError
-void_type_usage_test/paren_dynamic_init: MissingCompileTimeError
-void_type_usage_test/paren_for_in: MissingCompileTimeError
-void_type_usage_test/paren_is: MissingCompileTimeError
 void_type_usage_test/paren_literal_list_init: MissingCompileTimeError
 void_type_usage_test/paren_literal_map_key_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_key_init2: MissingCompileTimeError
 void_type_usage_test/paren_literal_map_value_init: MissingCompileTimeError
-void_type_usage_test/paren_literal_map_value_init2: MissingCompileTimeError
-void_type_usage_test/paren_null_equals2: MissingCompileTimeError
 void_type_usage_test/paren_return: MissingCompileTimeError
-void_type_usage_test/paren_throw: MissingCompileTimeError
-void_type_usage_test/paren_void_init: MissingCompileTimeError
-void_type_usage_test/paren_while: MissingCompileTimeError
 
 [ $compiler == dartdevk ]
 abstract_factory_constructor_test/00: MissingCompileTimeError
@@ -430,7 +310,6 @@
 constants_test/05: MissingCompileTimeError
 constructor_redirect1_negative_test/01: MissingCompileTimeError
 constructor_redirect2_negative_test: MissingCompileTimeError
-constructor_redirect2_test/01: MissingCompileTimeError
 constructor_redirect_test/01: MissingCompileTimeError
 covariant_subtyping_test: CompileTimeError
 cyclic_constructor_test/01: MissingCompileTimeError
@@ -616,9 +495,11 @@
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 mixin_type_parameter_inference_error_test/01: MissingCompileTimeError
 mixin_type_parameter_inference_error_test/02: MissingCompileTimeError
+mixin_type_parameter_inference_previous_mixin_test/01: Crash # Issue 32091
 mixin_type_parameter_inference_previous_mixin_test/02: CompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/04: MissingCompileTimeError
-mixin_type_parameter_inference_previous_mixin_test/05: RuntimeError
+mixin_type_parameter_inference_previous_mixin_test/04: Crash # Issue 32091
+mixin_type_parameter_inference_previous_mixin_test/05: Crash # Issue 32091
+mixin_type_parameter_inference_previous_mixin_test/none: Crash # Issue 32091
 mixin_type_parameter_inference_test/01: CompileTimeError
 mixin_type_parameter_inference_test/02: CompileTimeError
 mixin_type_parameter_inference_test/03: CompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 20d84c2..ff7baba 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -97,7 +97,6 @@
 const_types_test/40: MissingCompileTimeError
 constructor_redirect1_negative_test/01: MissingCompileTimeError
 constructor_redirect2_negative_test: MissingCompileTimeError
-constructor_redirect2_test/01: MissingCompileTimeError # Fasta bug: Body on redirecting constructor.
 constructor_redirect_test/01: MissingCompileTimeError # Fasta bug: Initializer refers to this.
 covariant_subtyping_test: CompileTimeError
 cyclic_constructor_test/01: MissingCompileTimeError # Fasta bug: Cyclic constructor redirection.
diff --git a/tests/language_2/pure_function2_test.dart b/tests/language_2/pure_function2_test.dart
index 159564e..61b218e 100644
--- a/tests/language_2/pure_function2_test.dart
+++ b/tests/language_2/pure_function2_test.dart
@@ -30,7 +30,7 @@
   var t1 = f(trace);
   var t2 = b(trace);
   var t3 = identical(t2, "foo");
-  var t4 = trace.add(t1);
+  trace.add(t1);
   trace.add(t3);
   trace.add(t3);
   Expect.listEquals(["foo", "bar", "foo", false, false], trace);
diff --git a/tests/language_2/void_subtype_test.dart b/tests/language_2/void_subtype_test.dart
index 6cf3082..2ecdc33 100644
--- a/tests/language_2/void_subtype_test.dart
+++ b/tests/language_2/void_subtype_test.dart
@@ -7,7 +7,7 @@
 
 var _str = new StringBuffer();
 
-/*=T*/ run/*<T>*/(/*=T*/ f()) {
+T run<T>(T f()) {
   _str.write("+");
   var t = f();
   _str.write("-");
@@ -20,12 +20,12 @@
 
 main() {
   {
-    var x = run/*<dynamic>*/(writeV);
+    var x = run<dynamic>(writeV);
     Expect.equals('+V-', _str.toString());
     Expect.equals(null, x);
     _str.clear();
 
-    var y = run(writeV);
+    var y = run(writeV) as dynamic;
     Expect.equals('+V-', _str.toString());
     Expect.equals(null, y);
     _str.clear();
@@ -34,7 +34,7 @@
   // implicit cast
   {
     dynamic d = writeV;
-    var x = run/*<dynamic>*/(d);
+    var x = run<dynamic>(d);
     Expect.equals('+V-', _str.toString());
     Expect.equals(null, x);
     _str.clear();
@@ -48,7 +48,7 @@
   // dynamic dispatch
   {
     dynamic d = run;
-    var x = d/*<dynamic>*/(writeV);
+    var x = d<dynamic>(writeV);
     Expect.equals('+V-', _str.toString());
     Expect.equals(null, x);
     _str.clear();
diff --git a/tests/language_2/void_type_test.dart b/tests/language_2/void_type_test.dart
index 37cd993..c858989 100644
--- a/tests/language_2/void_type_test.dart
+++ b/tests/language_2/void_type_test.dart
@@ -21,12 +21,12 @@
   return f();
 }
 
-void test(int n, void func(), bool must_get_error) {
+void test(int n, void func()) {
   // Test as closure call.
   {
     bool got_type_error = false;
     try {
-      var x = func();
+      func();
     } on TypeError catch (error) {
       got_type_error = true;
     }
@@ -39,16 +39,16 @@
       var x;
       switch (n) {
         case 0:
-          x = f();
+          x = f() as dynamic;
           break;
         case 1:
-          x = f_null();
+          x = f_null() as dynamic;
           break;
         case 2:
-          x = f_dyn_null();
+          x = f_dyn_null() as dynamic;
           break;
         case 3:
-          x = f_f();
+          x = f_f() as dynamic;
           break;
       }
     } on TypeError catch (error) {
@@ -59,8 +59,8 @@
 }
 
 main() {
-  test(0, f, false);
-  test(1, f_null, false);
-  test(2, f_dyn_null, false);
-  test(3, f_f, false);
+  test(0, f);
+  test(1, f_null);
+  test(2, f_dyn_null);
+  test(3, f_f);
 }
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 4af0127..9370d97 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -12,6 +12,7 @@
 mirrors/*: Skip # Issue 27929: Triage
 
 [ $compiler == dart2analyzer ]
+async/stream_event_transformed_test: StaticWarning
 convert/base64_test/01: CompileTimeError # int64
 convert/utf82_test: CompileTimeError # int64
 math/double_pow_test: CompileTimeError # int64
@@ -28,6 +29,9 @@
 profiler/metrics_test: Fail # Issue 20309
 typed_data/int32x4_bigint_test: CompileTimeError # int64
 
+[ $compiler != dart2analyzer ]
+async/stream_controller_async_test: StaticWarning
+
 [ $compiler == dart2js ]
 async/schedule_microtask6_test: RuntimeError # global error handling is not supported. Issue 5958
 convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
@@ -166,6 +170,10 @@
 async/stream_event_transformed_test: Skip # Flutter Issue 9113
 mirrors/*: Skip # Flutter does not support mirrors.
 
+[ $runtime != none ]
+async/stream_controller_async_test: RuntimeError # Library changed.
+async/stream_from_iterable_test: RuntimeError # Library changed.
+
 [ $runtime == safari ]
 convert/json_test: Fail # https://bugs.webkit.org/show_bug.cgi?id=134920
 typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
@@ -199,6 +207,10 @@
 [ $strong ]
 *: SkipByDesign # tests/lib_2 has the strong mode versions of these tests.
 
+[ !$strong ]
+async/stream_first_where_test: RuntimeError
+async/stream_last_where_test: RuntimeError
+
 [ $arch == ia32 && $mode == debug && $system == windows ]
 convert/streamed_conversion_json_utf8_decode_test: Skip # Verification OOM.
 
@@ -503,6 +515,11 @@
 mirrors/native_class_test: Fail, OK # This test is meant to run in a browser.
 typed_data/int32x4_bigint_test: CompileTimeError # Large integer literal
 
+[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm || $compiler == dart2js && $dart2js_with_kernel ]
+convert/base64_test/01: CompileTimeError # Large integer literal
+convert/utf82_test: CompileTimeError # Large integer literal
+math/double_pow_test: CompileTimeError # Large integer literal
+
 [ $hot_reload || $hot_reload_rollback ]
 async/stream_transformer_test: Pass, Fail # Closure identity
 mirrors/fake_function_with_call_test: SkipByDesign # Method equality
diff --git a/tests/lib_2/async/first_regression_test.dart b/tests/lib_2/async/first_regression_test.dart
index 7efcb81..590251b 100644
--- a/tests/lib_2/async/first_regression_test.dart
+++ b/tests/lib_2/async/first_regression_test.dart
@@ -8,7 +8,7 @@
 
 import 'dart:async';
 
-class DoubleTransformer<T> implements StreamTransformer<T, T> {
+class DoubleTransformer<T> extends StreamTransformerBase<T, T> {
   Stream<T> bind(Stream<T> stream) {
     var transformer = new StreamTransformer<T, T>.fromHandlers(
         handleData: (T data, EventSink<T> sink) {
diff --git a/tests/lib_2/async/stream_controller_async_test.dart b/tests/lib_2/async/stream_controller_async_test.dart
index 104b6f8..17c2349 100644
--- a/tests/lib_2/async/stream_controller_async_test.dart
+++ b/tests/lib_2/async/stream_controller_async_test.dart
@@ -155,8 +155,7 @@
 
   test("firstWhere 3", () {
     StreamController c = new StreamController();
-    Future f =
-        c.stream.firstWhere((x) => (x % 4) == 0, defaultValue: () => 999);
+    Future f = c.stream.firstWhere((x) => (x % 4) == 0, orElse: () => 999);
     f.then(expectAsync((v) {
       Expect.equals(999, v);
     }));
@@ -181,7 +180,7 @@
 
   test("lastWhere 3", () {
     StreamController c = new StreamController();
-    Future f = c.stream.lastWhere((x) => (x % 4) == 0, defaultValue: () => 999);
+    Future f = c.stream.lastWhere((x) => (x % 4) == 0, orElse: () => 999);
     f.then(expectAsync((v) {
       Expect.equals(999, v);
     }));
@@ -813,7 +812,7 @@
       ..error("BAD")
       ..close();
     StreamController sourceController = new StreamController();
-    c.addStream(sourceController.stream).then((_) {
+    c.addStream(sourceController.stream, cancelOnError: true).then((_) {
       c.close().then((_) {
         Expect.listEquals(expected.events, actual.events);
         done();
@@ -843,7 +842,7 @@
       ..close();
 
     StreamController sourceController = new StreamController();
-    c.addStream(sourceController.stream, cancelOnError: false).then((_) {
+    c.addStream(sourceController.stream).then((_) {
       c.close().then((_) {
         Expect.listEquals(source.events, actual.events);
         done();
@@ -881,7 +880,7 @@
       ..add(5);
     expected..close();
 
-    c.addStream(s1).then((_) {
+    c.addStream(s1, cancelOnError: true).then((_) {
       c.addStream(s2, cancelOnError: false).then((_) {
         c.close().then((_) {
           Expect.listEquals(expected.events, actual.events);
diff --git a/tests/lib_2/async/stream_event_transformed_test.dart b/tests/lib_2/async/stream_event_transformed_test.dart
index 7f75785..2a05683 100644
--- a/tests/lib_2/async/stream_event_transformed_test.dart
+++ b/tests/lib_2/async/stream_event_transformed_test.dart
@@ -71,7 +71,7 @@
   }
 }
 
-class SinkTransformer<S, T> implements StreamTransformer<S, T> {
+class SinkTransformer<S, T> extends StreamTransformerBase<S, T> {
   final Function sinkMapper;
   SinkTransformer(this.sinkMapper);
 
diff --git a/tests/lib_2/async/stream_first_where_test.dart b/tests/lib_2/async/stream_first_where_test.dart
index ff5f261..ad1a83c 100644
--- a/tests/lib_2/async/stream_first_where_test.dart
+++ b/tests/lib_2/async/stream_first_where_test.dart
@@ -7,10 +7,7 @@
 import 'dart:async';
 
 import 'package:expect/expect.dart';
-import 'package:unittest/unittest.dart';
-
-import 'event_helper.dart';
-import 'stream_state_helper.dart';
+import 'package:async_helper/async_helper.dart';
 
 class A {
   const A();
@@ -20,17 +17,30 @@
   const B();
 }
 
-main() {
-  Events sentEvents = new Events()..close();
+class C extends B {
+  const C();
+}
 
-  // Make sure that firstWhere allows to return instances of types that are
-  // different than the generic type of the stream.
-  test("firstWhere with super class", () {
-    StreamController c = new StreamController<B>();
-    Future f = c.stream.firstWhere((x) => false, defaultValue: () => const A());
-    f.then(expectAsync((v) {
-      Expect.equals(const A(), v);
-    }));
-    sentEvents.replay(c);
-  });
+main() {
+  asyncStart();
+  {
+    Stream<B> stream = new Stream<B>.fromIterable([new B()]);
+    A aFunc() => const A();
+    // Make sure that firstWhere does not allow you to return instances
+    // of types that are not subtypes of the generic type of the stream.
+    stream.firstWhere((x) => false, //# badType: compile-time error
+        orElse: aFunc); //          //# badType: continued
+  }
+  {
+    asyncStart();
+    C cFunc() => const C();
+    Stream<B> stream = new Stream<B>.fromIterable([new B()]);
+    // Make sure that firstWhere does allow you to return instances
+    // of types that are subtypes of the generic type of the stream.
+    stream.firstWhere((x) => false, orElse: cFunc).then((value) {
+      Expect.identical(const C(), value);
+      asyncEnd();
+    });
+  }
+  asyncEnd();
 }
diff --git a/tests/lib_2/async/stream_from_iterable_test.dart b/tests/lib_2/async/stream_from_iterable_test.dart
index 9367cc7..dfe199c 100644
--- a/tests/lib_2/async/stream_from_iterable_test.dart
+++ b/tests/lib_2/async/stream_from_iterable_test.dart
@@ -105,29 +105,6 @@
     });
   });
 
-  test("regression-14334-a", () {
-    var from = new Stream.fromIterable([1, 2, 3, 4, 5]);
-
-    // odd numbers as data events, even numbers as error events
-    from = from.map((x) => x.isOdd ? x : throw x);
-
-    var c = new StreamController();
-    var sink = c.sink;
-
-    var done = expectAsync(() {}, count: 2);
-
-    var data = [], errors = [];
-    c.stream.listen(data.add, onError: errors.add, onDone: () {
-      Expect.listEquals([1], data);
-      Expect.listEquals([2], errors);
-      done();
-    });
-    sink.addStream(from).then((_) {
-      c.close();
-      done();
-    });
-  });
-
   test("regression-14334-b", () {
     var from = new Stream.fromIterable([1, 2, 3, 4, 5]);
 
@@ -144,7 +121,7 @@
       Expect.listEquals([2, 4], errors);
       done();
     });
-    c.addStream(from, cancelOnError: false).then((_) {
+    c.addStream(from).then((_) {
       c.close();
       done();
     });
diff --git a/tests/lib_2/async/stream_last_where_test.dart b/tests/lib_2/async/stream_last_where_test.dart
index 805cfc0..42418b9 100644
--- a/tests/lib_2/async/stream_last_where_test.dart
+++ b/tests/lib_2/async/stream_last_where_test.dart
@@ -7,10 +7,7 @@
 import 'dart:async';
 
 import 'package:expect/expect.dart';
-import 'package:unittest/unittest.dart';
-
-import 'event_helper.dart';
-import 'stream_state_helper.dart';
+import 'package:async_helper/async_helper.dart';
 
 class A {
   const A();
@@ -20,17 +17,30 @@
   const B();
 }
 
-main() {
-  Events sentEvents = new Events()..close();
+class C extends B {
+  const C();
+}
 
-  // Make sure that lastWhere allows to return instances of types that are
-  // different than the generic type of the stream.
-  test("lastWhere with super class", () {
-    StreamController c = new StreamController<B>();
-    Future f = c.stream.lastWhere((x) => false, defaultValue: () => const A());
-    f.then(expectAsync((v) {
-      Expect.equals(const A(), v);
-    }));
-    sentEvents.replay(c);
-  });
+main() {
+  asyncStart();
+  {
+    Stream<B> stream = new Stream<B>.fromIterable([new B()]);
+    A aFunc() => const A();
+    // Make sure that lastWhere does not allow you to return instances
+    // of types that are not subtypes of the generic type of the stream.
+    stream.lastWhere((x) => false, //# badType: compile-time error
+        orElse: aFunc); //         //# badType: continued
+  }
+  {
+    asyncStart();
+    C cFunc() => const C();
+    Stream<B> stream = new Stream<B>.fromIterable([new B()]);
+    // Make sure that lastWhere does allow you to return instances
+    // of types that are subtypes of the generic type of the stream.
+    stream.lastWhere((x) => false, orElse: cFunc).then((value) {
+      Expect.identical(const C(), value);
+      asyncEnd();
+    });
+  }
+  asyncEnd();
 }
diff --git a/tests/lib_2/html/js_typed_interop_test.dart b/tests/lib_2/html/js_typed_interop_test.dart
index bcbbf0b..c75116e 100644
--- a/tests/lib_2/html/js_typed_interop_test.dart
+++ b/tests/lib_2/html/js_typed_interop_test.dart
@@ -78,6 +78,8 @@
 
   function confuse(obj) { return obj; }
 
+  function isUndefined(obj) { return obj === void 0; }
+
   function StringWrapper(str) {
     this.str = str;
   }
@@ -192,6 +194,9 @@
 external confuse(obj);
 
 @JS()
+external isUndefined(obj);
+
+@JS()
 external CanvasRenderingContext2D getCanvasContext();
 
 @JS('window.window.document.documentProperty')
@@ -200,6 +205,10 @@
 @JS('window.self.window.window.windowProperty')
 external num get propertyOnWindow;
 
+class DartClassWithNullField {
+  int x;
+}
+
 main() {
   _injectJs();
 
@@ -433,6 +442,7 @@
       expect(selection is List, isTrue);
     });
   });
+
   group('html', () {
     test('return html type', () {
       expect(getCanvasContext() is CanvasRenderingContext2D, isTrue);
@@ -442,4 +452,8 @@
       expect(propertyOnDocument, equals(45));
     });
   });
+
+  test('Dart field is null instead of undefined', () {
+    expect(isUndefined(new DartClassWithNullField().x), false);
+  });
 }
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index 21354c7..8dafc68 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -116,6 +116,10 @@
 [ $jscl ]
 isolate/spawn_uri_multi_test/none: RuntimeError # Issue 13544
 
+[ !$strong ]
+async/stream_first_where_test/badType: MissingCompileTimeError
+async/stream_last_where_test/badType: MissingCompileTimeError
+
 [ $builder_tag == mac10_7 && $runtime == safari ]
 typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
 typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
@@ -185,6 +189,7 @@
 html/webgl_1_test: Pass, Fail # Issue 8219
 
 [ $runtime == chrome || $runtime == ff ]
+async/periodic_timer4_test: Pass, RuntimeError # Flaky. Issue 32094
 async/slow_consumer2_test: SkipSlow # Times out. Issue 22050
 async/stream_timeout_test: SkipSlow # Times out. Issue 22050
 
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 4c6228e..21b3a73 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -764,7 +764,6 @@
 convert/streamed_conversion_json_utf8_encode_test: SkipSlow # Times out. Issue 22050
 convert/streamed_conversion_utf8_decode_test: SkipSlow # Times out. Issue 22050
 isolate/kill_self_synchronously_test: RuntimeError
-periodic_timer4_test: Pass, RuntimeError # Flaky. Issue 32094.
 
 [ $compiler == dart2js && ($runtime == d8 || $runtime == jsshell) ]
 isolate/browser/issue_12474_test: RuntimeError # packageRoot not implemented.
diff --git a/tests/standalone_2/io/file_test.dart b/tests/standalone_2/io/file_test.dart
index 335cb9e..c5229cf 100644
--- a/tests/standalone_2/io/file_test.dart
+++ b/tests/standalone_2/io/file_test.dart
@@ -873,7 +873,7 @@
     ;
 
     write([start, end]) {
-      var returnValue = openedFile.writeFromSync(buffer, start, end);
+      openedFile.writeFromSync(buffer, start, end);
       result.addAll(buffer.sublist(start, end));
     }
 
diff --git a/tools/VERSION b/tools/VERSION
index a6b4427..1145d30 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 22
+PRERELEASE 23
 PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 82a859b..6efea6f 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -30,7 +30,7 @@
       "third_party/pkg_tested/",
       "third_party/d8/",
       "third_party/firefox_jsshell/",
-      "third_party/observatory_pub_packages/packages/web_components/",
+      "third_party/observatory_pub_packages/packages/",
       "tests/",
       "pkg/async_helper/",
       "pkg/expect/",
@@ -63,9 +63,24 @@
       "tools/",
       "third_party/pkg/",
       "third_party/pkg_tested/",
-      "third_party/observatory_pub_packages/packages/unittest/",
-      "third_party/observatory_pub_packages/packages/web_components/",
-      "tests/",
+      "third_party/observatory_pub_packages/packages/",
+      "tests/angular/",
+      "tests/co19/",
+      "tests/compiler/",
+      "tests/corelib/",
+      "tests/corelib_2/",
+      "tests/dart/",
+      "tests/html/",
+      "tests/isolate/",
+      "tests/kernel/",
+      "tests/language/",
+      "tests/language_2/",
+      "tests/lib/",
+      "tests/lib_2/",
+      "tests/light_unittest.dart",
+      "tests/search/",
+      "tests/standalone/",
+      "tests/standalone_2/",
       "pkg/async_helper/",
       "pkg/dart_internal/",
       "pkg/expect/",
@@ -171,7 +186,9 @@
             "--compiler=dartkp",
             "--runtime=dart_precompiled",
             "--use-blobs"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         },
         {
           "name": "strong vm tests",
@@ -180,7 +197,9 @@
             "--runtime=dart_precompiled",
             "--strong",
             "--use-blobs"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         }
       ]
     },
@@ -203,7 +222,9 @@
         {
           "name": "vm tests",
           "arguments": [
-            "--compiler=dartkp","--runtime=dart_precompiled"]
+            "--compiler=dartkp","--runtime=dart_precompiled"],
+          "fileset": "vm-kernel",
+          "shards": 10
         },
         {
           "name": "strong vm tests",
@@ -211,7 +232,9 @@
             "--compiler=dartkp",
             "--runtime=dart_precompiled",
             "--strong"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         }
       ]
     },
@@ -237,7 +260,9 @@
             "--compiler=dartkp",
             "--runtime=dart_precompiled",
             "--vm-options=--no-enable-malloc-hooks"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         },
         {
           "name": "strong vm tests",
@@ -246,7 +271,9 @@
             "--runtime=dart_precompiled",
             "--vm-options=--no-enable-malloc-hooks",
             "--strong"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         }
       ]
     },
@@ -309,11 +336,15 @@
         },
         {
           "name": "vm tests",
-          "arguments": ["--compiler=dartk"]
+          "arguments": ["--compiler=dartk"],
+          "fileset": "vm-kernel",
+          "shards": 10
         },
         {
           "name": "strong vm tests",
-          "arguments": ["--compiler=dartk", "--strong"]
+          "arguments": ["--compiler=dartk", "--strong"],
+          "fileset": "vm-kernel",
+          "shards": 10
         },
         {
           "name": "front-end tests",
@@ -589,7 +620,9 @@
           "arguments": [
             "--compiler=dartk",
             "--vm-options=--optimization-counter-threshold=5"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         },
         {
           "name": "strong vm tests",
@@ -597,7 +630,9 @@
             "--compiler=dartk",
             "--strong",
             "--vm-options=--optimization-counter-threshold=5"
-          ]
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
         }
       ]
     },
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index be259ac..8cb66ae 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -169,11 +169,7 @@
       // correct arguments to VM binary. No need to pass any additional
       // arguments.
       if (!_isStrong) {
-        args.add('--dfe=${buildDir}/gen/kernel-service.dart.snapshot');
-        args.add('--kernel-binaries=' +
-            (_useSdk
-                ? '${_configuration.buildDirectory}/dart-sdk/lib/_internal'
-                : '${buildDir}'));
+        args.add('--preview_dart_2');
       }
       if (_isDebug) {
         // Temporarily disable background compilation to avoid flaky crashes
diff --git a/tools/testing/dart/runtime_configuration.dart b/tools/testing/dart/runtime_configuration.dart
index c7482f3..83e9078 100644
--- a/tools/testing/dart/runtime_configuration.dart
+++ b/tools/testing/dart/runtime_configuration.dart
@@ -232,10 +232,6 @@
 
     String executable = suite.dartVmBinaryFileName;
     if (type == 'application/kernel-ir-fully-linked') {
-      // We don't use the pkg/vm/tool/dart2 wrapper script for fully linked
-      // kernel files, since we don't want to pass the --dfe/--kernel-binaries
-      // flags to the VM (the vm cannot distinguish fully-linked vs
-      // not-fully-linked, see http://dartbug.com/31545)
       executable = suite.dartVmExecutableFileName;
     }
     return [Command.vm(executable, arguments, environmentOverrides)];
