Version 2.0.0-dev.20.0

Merge commit '7d00b79477407df5e983da1488cf316ddfadc8d4' into dev
diff --git a/.packages b/.packages
index cfa718c..1727351 100644
--- a/.packages
+++ b/.packages
@@ -43,6 +43,7 @@
 glob:third_party/pkg/glob/lib
 html:third_party/pkg/html/lib
 http:third_party/pkg/http/lib
+http_io:third_party/pkg_tested/http_io/lib
 http_multi_server:third_party/pkg/http_multi_server/lib
 http_parser:third_party/pkg/http_parser/lib
 http_retry:third_party/pkg/http_retry/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 16177c9..1c96bf6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -90,6 +90,8 @@
   * Added `IOOverrides` and `HttpOverrides` to aid in writing tests that wish to
     mock varios `dart:io` objects.
   * Added `Stdin.hasTerminal`, which is true if stdin is attached to a terminal.
+  * Added `ProcessStartMode.INHERIT_STDIO`, which allows a child process to
+    inherit the parent's stdio handles.
 
 * `dart:isolate`
   * Rename `IMMEDIATE` and `BEFORE_NEXT_EVENT` on `Isolate` to `immediate` and
@@ -111,8 +113,14 @@
     `little`, `big` and `host`.
 
 ### Dart VM
+
 * Support for MIPS has been removed.
 
+* Dart `int` is now restricted to 64 bits. On overflow, arithmetic operations wrap
+  around, and integer literals larger than 64 bits are not allowed.
+  See https://github.com/dart-lang/sdk/blob/master/docs/language/informal/int64.md
+  for details.
+
 ### Tool Changes
 
 * Analyzer
diff --git a/DEPS b/DEPS
index ce9dfaa..dca297c 100644
--- a/DEPS
+++ b/DEPS
@@ -87,6 +87,7 @@
   "func_rev": "@25eec48146a58967d75330075ab376b3838b18a8",
   "glob_tag": "@1.1.5",
   "html_tag" : "@0.13.2+2",
+  "http_io_tag": "@bea7f236fbd62f6e1b47d4806a889f628c58d114",
   "http_multi_server_tag" : "@2.0.4",
   "http_parser_tag" : "@3.1.1",
   "http_retry_tag": "@0.1.0",
@@ -115,7 +116,7 @@
   "protobuf_tag": "@0.7.0",
   "pub_rev": "@64c5f40adf6828da1b63320dd39bcedbef1354c6",
   "pub_semver_tag": "@1.3.2",
-  "quiver_tag": "@0.27.0",
+  "quiver_tag": "@0.28.0",
   "resource_rev":"@af5a5bf65511943398146cf146e466e5f0b95cb9",
   "root_certificates_rev": "@a4c7c6f23a664a37bc1b6f15a819e3f2a292791a",
   "shelf_static_rev": "@3558aa35a0d2f0f35868c3fd64b258e140db0122",
@@ -134,7 +135,7 @@
   "test_process_tag": "@1.0.1",
   "term_glyph_tag": "@1.0.0",
   "test_reflective_loader_tag": "@0.1.3",
-  "test_tag": "@0.12.29+1",
+  "test_tag": "@0.12.30+1",
   "tuple_tag": "@v1.0.1",
   "typed_data_tag": "@1.1.3",
   "usage_tag": "@3.3.0",
@@ -229,6 +230,8 @@
       Var("dart_git") + "html.git" + Var("html_tag"),
   Var("dart_root") + "/third_party/pkg/http":
       Var("dart_git") + "http.git" + Var("http_tag"),
+  Var("dart_root") + "/third_party/pkg_tested/http_io":
+    Var("dart_git") + "http_io.git" + Var("http_io_tag"),
   Var("dart_root") + "/third_party/pkg/http_multi_server":
       Var("dart_git") + "http_multi_server.git" +
       Var("http_multi_server_tag"),
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 6528f6d..6923a31 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -2500,6 +2500,7 @@
 
 
 
+
   <h2 class="domain"><a name="types">Types</a></h2>
   <p>
     This section contains descriptions of the data types referenced
@@ -2536,6 +2537,10 @@
   
   
   
+  
+  
+  
+  
 <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
     <p>
       A directive to begin overlaying the contents of a file. The supplied
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index 9ff059c..2a33b08 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -206,6 +206,11 @@
 const String EXECUTION_RESPONSE_CREATE_CONTEXT_ID = 'id';
 const String EXECUTION_RESPONSE_MAP_URI_FILE = 'file';
 const String EXECUTION_RESPONSE_MAP_URI_URI = 'uri';
+const String FLUTTER_NOTIFICATION_OUTLINE = 'flutter.outline';
+const String FLUTTER_NOTIFICATION_OUTLINE_FILE = 'file';
+const String FLUTTER_NOTIFICATION_OUTLINE_OUTLINE = 'outline';
+const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS = 'flutter.setSubscriptions';
+const String FLUTTER_REQUEST_SET_SUBSCRIPTIONS_SUBSCRIPTIONS = 'subscriptions';
 const String KYTHE_REQUEST_GET_KYTHE_ENTRIES = 'kythe.getKytheEntries';
 const String KYTHE_REQUEST_GET_KYTHE_ENTRIES_FILE = 'file';
 const String KYTHE_RESPONSE_GET_KYTHE_ENTRIES_ENTRIES = 'entries';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index 2040057..b78ce28 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -10619,6 +10619,941 @@
 }
 
 /**
+ * FlutterOutline
+ *
+ * {
+ *   "kind": FlutterOutlineKind
+ *   "offset": int
+ *   "length": int
+ *   "label": optional String
+ *   "dartElement": optional Element
+ *   "attributes": optional List<FlutterOutlineAttribute>
+ *   "className": optional String
+ *   "parentAssociationLabel": optional String
+ *   "variableName": optional String
+ *   "children": optional List<FlutterOutline>
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterOutline implements HasToJson {
+  FlutterOutlineKind _kind;
+
+  int _offset;
+
+  int _length;
+
+  String _label;
+
+  Element _dartElement;
+
+  List<FlutterOutlineAttribute> _attributes;
+
+  String _className;
+
+  String _parentAssociationLabel;
+
+  String _variableName;
+
+  List<FlutterOutline> _children;
+
+  /**
+   * The kind of the node.
+   */
+  FlutterOutlineKind get kind => _kind;
+
+  /**
+   * The kind of the node.
+   */
+  void set kind(FlutterOutlineKind value) {
+    assert(value != null);
+    this._kind = value;
+  }
+
+  /**
+   * The offset of the first character of the element. This is different than
+   * the offset in the Element, which is the offset of the name of the element.
+   * It can be used, for example, to map locations in the file back to an
+   * outline.
+   */
+  int get offset => _offset;
+
+  /**
+   * The offset of the first character of the element. This is different than
+   * the offset in the Element, which is the offset of the name of the element.
+   * It can be used, for example, to map locations in the file back to an
+   * outline.
+   */
+  void set offset(int value) {
+    assert(value != null);
+    this._offset = value;
+  }
+
+  /**
+   * The length of the element.
+   */
+  int get length => _length;
+
+  /**
+   * The length of the element.
+   */
+  void set length(int value) {
+    assert(value != null);
+    this._length = value;
+  }
+
+  /**
+   * The text label of the node children of the node. It is provided for any
+   * FlutterOutlineKind.GENERIC node, where better information is not
+   * available.
+   */
+  String get label => _label;
+
+  /**
+   * The text label of the node children of the node. It is provided for any
+   * FlutterOutlineKind.GENERIC node, where better information is not
+   * available.
+   */
+  void set label(String value) {
+    this._label = value;
+  }
+
+  /**
+   * If this node is a Dart element, the description of it; omitted otherwise.
+   */
+  Element get dartElement => _dartElement;
+
+  /**
+   * If this node is a Dart element, the description of it; omitted otherwise.
+   */
+  void set dartElement(Element value) {
+    this._dartElement = value;
+  }
+
+  /**
+   * Additional attributes for this node, which might be interesting to display
+   * on the client. These attributes are usually arguments for the instance
+   * creation or the invocation that created the widget.
+   */
+  List<FlutterOutlineAttribute> get attributes => _attributes;
+
+  /**
+   * Additional attributes for this node, which might be interesting to display
+   * on the client. These attributes are usually arguments for the instance
+   * creation or the invocation that created the widget.
+   */
+  void set attributes(List<FlutterOutlineAttribute> value) {
+    this._attributes = value;
+  }
+
+  /**
+   * If the node creates a new class instance, or a reference to an instance,
+   * this field has the name of the class.
+   */
+  String get className => _className;
+
+  /**
+   * If the node creates a new class instance, or a reference to an instance,
+   * this field has the name of the class.
+   */
+  void set className(String value) {
+    this._className = value;
+  }
+
+  /**
+   * A short text description how this node is associated with the parent node.
+   * For example "appBar" or "body" in Scaffold.
+   */
+  String get parentAssociationLabel => _parentAssociationLabel;
+
+  /**
+   * A short text description how this node is associated with the parent node.
+   * For example "appBar" or "body" in Scaffold.
+   */
+  void set parentAssociationLabel(String value) {
+    this._parentAssociationLabel = value;
+  }
+
+  /**
+   * If FlutterOutlineKind.VARIABLE, the name of the variable.
+   */
+  String get variableName => _variableName;
+
+  /**
+   * If FlutterOutlineKind.VARIABLE, the name of the variable.
+   */
+  void set variableName(String value) {
+    this._variableName = value;
+  }
+
+  /**
+   * The children of the node. The field will be omitted if the node has no
+   * children.
+   */
+  List<FlutterOutline> get children => _children;
+
+  /**
+   * The children of the node. The field will be omitted if the node has no
+   * children.
+   */
+  void set children(List<FlutterOutline> value) {
+    this._children = value;
+  }
+
+  FlutterOutline(FlutterOutlineKind kind, int offset, int length,
+      {String label,
+      Element dartElement,
+      List<FlutterOutlineAttribute> attributes,
+      String className,
+      String parentAssociationLabel,
+      String variableName,
+      List<FlutterOutline> children}) {
+    this.kind = kind;
+    this.offset = offset;
+    this.length = length;
+    this.label = label;
+    this.dartElement = dartElement;
+    this.attributes = attributes;
+    this.className = className;
+    this.parentAssociationLabel = parentAssociationLabel;
+    this.variableName = variableName;
+    this.children = children;
+  }
+
+  factory FlutterOutline.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      FlutterOutlineKind kind;
+      if (json.containsKey("kind")) {
+        kind = new FlutterOutlineKind.fromJson(
+            jsonDecoder, jsonPath + ".kind", json["kind"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "kind");
+      }
+      int offset;
+      if (json.containsKey("offset")) {
+        offset = jsonDecoder.decodeInt(jsonPath + ".offset", json["offset"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "offset");
+      }
+      int length;
+      if (json.containsKey("length")) {
+        length = jsonDecoder.decodeInt(jsonPath + ".length", json["length"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "length");
+      }
+      String label;
+      if (json.containsKey("label")) {
+        label = jsonDecoder.decodeString(jsonPath + ".label", json["label"]);
+      }
+      Element dartElement;
+      if (json.containsKey("dartElement")) {
+        dartElement = new Element.fromJson(
+            jsonDecoder, jsonPath + ".dartElement", json["dartElement"]);
+      }
+      List<FlutterOutlineAttribute> attributes;
+      if (json.containsKey("attributes")) {
+        attributes = jsonDecoder.decodeList(
+            jsonPath + ".attributes",
+            json["attributes"],
+            (String jsonPath, Object json) =>
+                new FlutterOutlineAttribute.fromJson(
+                    jsonDecoder, jsonPath, json));
+      }
+      String className;
+      if (json.containsKey("className")) {
+        className = jsonDecoder.decodeString(
+            jsonPath + ".className", json["className"]);
+      }
+      String parentAssociationLabel;
+      if (json.containsKey("parentAssociationLabel")) {
+        parentAssociationLabel = jsonDecoder.decodeString(
+            jsonPath + ".parentAssociationLabel",
+            json["parentAssociationLabel"]);
+      }
+      String variableName;
+      if (json.containsKey("variableName")) {
+        variableName = jsonDecoder.decodeString(
+            jsonPath + ".variableName", json["variableName"]);
+      }
+      List<FlutterOutline> children;
+      if (json.containsKey("children")) {
+        children = jsonDecoder.decodeList(
+            jsonPath + ".children",
+            json["children"],
+            (String jsonPath, Object json) =>
+                new FlutterOutline.fromJson(jsonDecoder, jsonPath, json));
+      }
+      return new FlutterOutline(kind, offset, length,
+          label: label,
+          dartElement: dartElement,
+          attributes: attributes,
+          className: className,
+          parentAssociationLabel: parentAssociationLabel,
+          variableName: variableName,
+          children: children);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "FlutterOutline", json);
+    }
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["kind"] = kind.toJson();
+    result["offset"] = offset;
+    result["length"] = length;
+    if (label != null) {
+      result["label"] = label;
+    }
+    if (dartElement != null) {
+      result["dartElement"] = dartElement.toJson();
+    }
+    if (attributes != null) {
+      result["attributes"] = attributes
+          .map((FlutterOutlineAttribute value) => value.toJson())
+          .toList();
+    }
+    if (className != null) {
+      result["className"] = className;
+    }
+    if (parentAssociationLabel != null) {
+      result["parentAssociationLabel"] = parentAssociationLabel;
+    }
+    if (variableName != null) {
+      result["variableName"] = variableName;
+    }
+    if (children != null) {
+      result["children"] =
+          children.map((FlutterOutline value) => value.toJson()).toList();
+    }
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is FlutterOutline) {
+      return kind == other.kind &&
+          offset == other.offset &&
+          length == other.length &&
+          label == other.label &&
+          dartElement == other.dartElement &&
+          listEqual(
+              attributes,
+              other.attributes,
+              (FlutterOutlineAttribute a, FlutterOutlineAttribute b) =>
+                  a == b) &&
+          className == other.className &&
+          parentAssociationLabel == other.parentAssociationLabel &&
+          variableName == other.variableName &&
+          listEqual(children, other.children,
+              (FlutterOutline a, FlutterOutline b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, kind.hashCode);
+    hash = JenkinsSmiHash.combine(hash, offset.hashCode);
+    hash = JenkinsSmiHash.combine(hash, length.hashCode);
+    hash = JenkinsSmiHash.combine(hash, label.hashCode);
+    hash = JenkinsSmiHash.combine(hash, dartElement.hashCode);
+    hash = JenkinsSmiHash.combine(hash, attributes.hashCode);
+    hash = JenkinsSmiHash.combine(hash, className.hashCode);
+    hash = JenkinsSmiHash.combine(hash, parentAssociationLabel.hashCode);
+    hash = JenkinsSmiHash.combine(hash, variableName.hashCode);
+    hash = JenkinsSmiHash.combine(hash, children.hashCode);
+    return JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * FlutterOutlineAttribute
+ *
+ * {
+ *   "name": String
+ *   "label": String
+ *   "literalValueBoolean": optional bool
+ *   "literalValueInteger": optional int
+ *   "literalValueString": optional String
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterOutlineAttribute implements HasToJson {
+  String _name;
+
+  String _label;
+
+  bool _literalValueBoolean;
+
+  int _literalValueInteger;
+
+  String _literalValueString;
+
+  /**
+   * The name of the attribute.
+   */
+  String get name => _name;
+
+  /**
+   * The name of the attribute.
+   */
+  void set name(String value) {
+    assert(value != null);
+    this._name = value;
+  }
+
+  /**
+   * The label of the attribute value, usually the Dart code. It might be quite
+   * long, the client should abbreviate as needed.
+   */
+  String get label => _label;
+
+  /**
+   * The label of the attribute value, usually the Dart code. It might be quite
+   * long, the client should abbreviate as needed.
+   */
+  void set label(String value) {
+    assert(value != null);
+    this._label = value;
+  }
+
+  /**
+   * The boolean literal value of the attribute. This field is absent if the
+   * value is not a boolean literal.
+   */
+  bool get literalValueBoolean => _literalValueBoolean;
+
+  /**
+   * The boolean literal value of the attribute. This field is absent if the
+   * value is not a boolean literal.
+   */
+  void set literalValueBoolean(bool value) {
+    this._literalValueBoolean = value;
+  }
+
+  /**
+   * The integer literal value of the attribute. This field is absent if the
+   * value is not an integer literal.
+   */
+  int get literalValueInteger => _literalValueInteger;
+
+  /**
+   * The integer literal value of the attribute. This field is absent if the
+   * value is not an integer literal.
+   */
+  void set literalValueInteger(int value) {
+    this._literalValueInteger = value;
+  }
+
+  /**
+   * The string literal value of the attribute. This field is absent if the
+   * value is not a string literal.
+   */
+  String get literalValueString => _literalValueString;
+
+  /**
+   * The string literal value of the attribute. This field is absent if the
+   * value is not a string literal.
+   */
+  void set literalValueString(String value) {
+    this._literalValueString = value;
+  }
+
+  FlutterOutlineAttribute(String name, String label,
+      {bool literalValueBoolean,
+      int literalValueInteger,
+      String literalValueString}) {
+    this.name = name;
+    this.label = label;
+    this.literalValueBoolean = literalValueBoolean;
+    this.literalValueInteger = literalValueInteger;
+    this.literalValueString = literalValueString;
+  }
+
+  factory FlutterOutlineAttribute.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      String name;
+      if (json.containsKey("name")) {
+        name = jsonDecoder.decodeString(jsonPath + ".name", json["name"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "name");
+      }
+      String label;
+      if (json.containsKey("label")) {
+        label = jsonDecoder.decodeString(jsonPath + ".label", json["label"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "label");
+      }
+      bool literalValueBoolean;
+      if (json.containsKey("literalValueBoolean")) {
+        literalValueBoolean = jsonDecoder.decodeBool(
+            jsonPath + ".literalValueBoolean", json["literalValueBoolean"]);
+      }
+      int literalValueInteger;
+      if (json.containsKey("literalValueInteger")) {
+        literalValueInteger = jsonDecoder.decodeInt(
+            jsonPath + ".literalValueInteger", json["literalValueInteger"]);
+      }
+      String literalValueString;
+      if (json.containsKey("literalValueString")) {
+        literalValueString = jsonDecoder.decodeString(
+            jsonPath + ".literalValueString", json["literalValueString"]);
+      }
+      return new FlutterOutlineAttribute(name, label,
+          literalValueBoolean: literalValueBoolean,
+          literalValueInteger: literalValueInteger,
+          literalValueString: literalValueString);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "FlutterOutlineAttribute", json);
+    }
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["name"] = name;
+    result["label"] = label;
+    if (literalValueBoolean != null) {
+      result["literalValueBoolean"] = literalValueBoolean;
+    }
+    if (literalValueInteger != null) {
+      result["literalValueInteger"] = literalValueInteger;
+    }
+    if (literalValueString != null) {
+      result["literalValueString"] = literalValueString;
+    }
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is FlutterOutlineAttribute) {
+      return name == other.name &&
+          label == other.label &&
+          literalValueBoolean == other.literalValueBoolean &&
+          literalValueInteger == other.literalValueInteger &&
+          literalValueString == other.literalValueString;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, name.hashCode);
+    hash = JenkinsSmiHash.combine(hash, label.hashCode);
+    hash = JenkinsSmiHash.combine(hash, literalValueBoolean.hashCode);
+    hash = JenkinsSmiHash.combine(hash, literalValueInteger.hashCode);
+    hash = JenkinsSmiHash.combine(hash, literalValueString.hashCode);
+    return JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * FlutterOutlineKind
+ *
+ * enum {
+ *   DART_ELEMENT
+ *   GENERIC
+ *   NEW_INSTANCE
+ *   INVOCATION
+ *   VARIABLE
+ *   PLACEHOLDER
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterOutlineKind implements Enum {
+  /**
+   * A dart element declaration.
+   */
+  static const FlutterOutlineKind DART_ELEMENT =
+      const FlutterOutlineKind._("DART_ELEMENT");
+
+  /**
+   * A generic Flutter element, without additional information.
+   */
+  static const FlutterOutlineKind GENERIC =
+      const FlutterOutlineKind._("GENERIC");
+
+  /**
+   * A new instance creation.
+   */
+  static const FlutterOutlineKind NEW_INSTANCE =
+      const FlutterOutlineKind._("NEW_INSTANCE");
+
+  /**
+   * An invocation of a method, a top-level function, a function expression,
+   * etc.
+   */
+  static const FlutterOutlineKind INVOCATION =
+      const FlutterOutlineKind._("INVOCATION");
+
+  /**
+   * A reference to a local variable, or a field.
+   */
+  static const FlutterOutlineKind VARIABLE =
+      const FlutterOutlineKind._("VARIABLE");
+
+  /**
+   * The parent node has a required Widget. The node works as a placeholder
+   * child to drop a new Widget to.
+   */
+  static const FlutterOutlineKind PLACEHOLDER =
+      const FlutterOutlineKind._("PLACEHOLDER");
+
+  /**
+   * A list containing all of the enum values that are defined.
+   */
+  static const List<FlutterOutlineKind> VALUES = const <FlutterOutlineKind>[
+    DART_ELEMENT,
+    GENERIC,
+    NEW_INSTANCE,
+    INVOCATION,
+    VARIABLE,
+    PLACEHOLDER
+  ];
+
+  @override
+  final String name;
+
+  const FlutterOutlineKind._(this.name);
+
+  factory FlutterOutlineKind(String name) {
+    switch (name) {
+      case "DART_ELEMENT":
+        return DART_ELEMENT;
+      case "GENERIC":
+        return GENERIC;
+      case "NEW_INSTANCE":
+        return NEW_INSTANCE;
+      case "INVOCATION":
+        return INVOCATION;
+      case "VARIABLE":
+        return VARIABLE;
+      case "PLACEHOLDER":
+        return PLACEHOLDER;
+    }
+    throw new Exception('Illegal enum value: $name');
+  }
+
+  factory FlutterOutlineKind.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json is String) {
+      try {
+        return new FlutterOutlineKind(json);
+      } catch (_) {
+        // Fall through
+      }
+    }
+    throw jsonDecoder.mismatch(jsonPath, "FlutterOutlineKind", json);
+  }
+
+  @override
+  String toString() => "FlutterOutlineKind.$name";
+
+  String toJson() => name;
+}
+
+/**
+ * flutter.outline params
+ *
+ * {
+ *   "file": FilePath
+ *   "outline": FlutterOutline
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterOutlineParams implements HasToJson {
+  String _file;
+
+  FlutterOutline _outline;
+
+  /**
+   * The file with which the outline is associated.
+   */
+  String get file => _file;
+
+  /**
+   * The file with which the outline is associated.
+   */
+  void set file(String value) {
+    assert(value != null);
+    this._file = value;
+  }
+
+  /**
+   * The outline associated with the file.
+   */
+  FlutterOutline get outline => _outline;
+
+  /**
+   * The outline associated with the file.
+   */
+  void set outline(FlutterOutline value) {
+    assert(value != null);
+    this._outline = value;
+  }
+
+  FlutterOutlineParams(String file, FlutterOutline outline) {
+    this.file = file;
+    this.outline = outline;
+  }
+
+  factory FlutterOutlineParams.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      String file;
+      if (json.containsKey("file")) {
+        file = jsonDecoder.decodeString(jsonPath + ".file", json["file"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "file");
+      }
+      FlutterOutline outline;
+      if (json.containsKey("outline")) {
+        outline = new FlutterOutline.fromJson(
+            jsonDecoder, jsonPath + ".outline", json["outline"]);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "outline");
+      }
+      return new FlutterOutlineParams(file, outline);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "flutter.outline params", json);
+    }
+  }
+
+  factory FlutterOutlineParams.fromNotification(Notification notification) {
+    return new FlutterOutlineParams.fromJson(
+        new ResponseDecoder(null), "params", notification.params);
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["file"] = file;
+    result["outline"] = outline.toJson();
+    return result;
+  }
+
+  Notification toNotification() {
+    return new Notification("flutter.outline", toJson());
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is FlutterOutlineParams) {
+      return file == other.file && outline == other.outline;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, file.hashCode);
+    hash = JenkinsSmiHash.combine(hash, outline.hashCode);
+    return JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * FlutterService
+ *
+ * enum {
+ *   OUTLINE
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterService implements Enum {
+  static const FlutterService OUTLINE = const FlutterService._("OUTLINE");
+
+  /**
+   * A list containing all of the enum values that are defined.
+   */
+  static const List<FlutterService> VALUES = const <FlutterService>[OUTLINE];
+
+  @override
+  final String name;
+
+  const FlutterService._(this.name);
+
+  factory FlutterService(String name) {
+    switch (name) {
+      case "OUTLINE":
+        return OUTLINE;
+    }
+    throw new Exception('Illegal enum value: $name');
+  }
+
+  factory FlutterService.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json is String) {
+      try {
+        return new FlutterService(json);
+      } catch (_) {
+        // Fall through
+      }
+    }
+    throw jsonDecoder.mismatch(jsonPath, "FlutterService", json);
+  }
+
+  @override
+  String toString() => "FlutterService.$name";
+
+  String toJson() => name;
+}
+
+/**
+ * flutter.setSubscriptions params
+ *
+ * {
+ *   "subscriptions": Map<FlutterService, List<FilePath>>
+ * }
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterSetSubscriptionsParams implements RequestParams {
+  Map<FlutterService, List<String>> _subscriptions;
+
+  /**
+   * A table mapping services to a list of the files being subscribed to the
+   * service.
+   */
+  Map<FlutterService, List<String>> get subscriptions => _subscriptions;
+
+  /**
+   * A table mapping services to a list of the files being subscribed to the
+   * service.
+   */
+  void set subscriptions(Map<FlutterService, List<String>> value) {
+    assert(value != null);
+    this._subscriptions = value;
+  }
+
+  FlutterSetSubscriptionsParams(
+      Map<FlutterService, List<String>> subscriptions) {
+    this.subscriptions = subscriptions;
+  }
+
+  factory FlutterSetSubscriptionsParams.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      Map<FlutterService, List<String>> subscriptions;
+      if (json.containsKey("subscriptions")) {
+        subscriptions = jsonDecoder.decodeMap(
+            jsonPath + ".subscriptions", json["subscriptions"],
+            keyDecoder: (String jsonPath, Object json) =>
+                new FlutterService.fromJson(jsonDecoder, jsonPath, json),
+            valueDecoder: (String jsonPath, Object json) => jsonDecoder
+                .decodeList(jsonPath, json, jsonDecoder.decodeString));
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, "subscriptions");
+      }
+      return new FlutterSetSubscriptionsParams(subscriptions);
+    } else {
+      throw jsonDecoder.mismatch(
+          jsonPath, "flutter.setSubscriptions params", json);
+    }
+  }
+
+  factory FlutterSetSubscriptionsParams.fromRequest(Request request) {
+    return new FlutterSetSubscriptionsParams.fromJson(
+        new RequestDecoder(request), "params", request.params);
+  }
+
+  @override
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["subscriptions"] = mapMap(subscriptions,
+        keyCallback: (FlutterService value) => value.toJson());
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return new Request(id, "flutter.setSubscriptions", toJson());
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is FlutterSetSubscriptionsParams) {
+      return mapEqual(
+          subscriptions,
+          other.subscriptions,
+          (List<String> a, List<String> b) =>
+              listEqual(a, b, (String a, String b) => a == b));
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = JenkinsSmiHash.combine(hash, subscriptions.hashCode);
+    return JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * flutter.setSubscriptions result
+ *
+ * Clients may not extend, implement or mix-in this class.
+ */
+class FlutterSetSubscriptionsResult implements ResponseResult {
+  @override
+  Map<String, dynamic> toJson() => <String, dynamic>{};
+
+  @override
+  Response toResponse(String id) {
+    return new Response(id, result: null);
+  }
+
+  @override
+  bool operator ==(other) {
+    if (other is FlutterSetSubscriptionsResult) {
+      return true;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    return 628296315;
+  }
+}
+
+/**
  * GeneralAnalysisService
  *
  * enum {
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 2108ce0..369bb62 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -30,6 +30,8 @@
 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart';
 import 'package:analysis_server/src/edit/edit_domain.dart';
+import 'package:analysis_server/src/flutter/flutter_domain.dart';
+import 'package:analysis_server/src/flutter/flutter_notifications.dart';
 import 'package:analysis_server/src/operation/operation_analysis.dart';
 import 'package:analysis_server/src/plugin/notification_manager.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
@@ -201,6 +203,12 @@
       new HashMap<AnalysisService, Set<String>>();
 
   /**
+   * A table mapping [FlutterService]s to the file paths for which these
+   * notifications should be sent.
+   */
+  Map<FlutterService, Set<String>> flutterServices = {};
+
+  /**
    * Performance information before initial analysis is complete.
    */
   ServerPerformance performanceDuringStartup = new ServerPerformance();
@@ -428,7 +436,8 @@
       new ExecutionDomainHandler(this),
       new DiagnosticDomainHandler(this),
       new AnalyticsDomainHandler(this),
-      new KytheDomainHandler(this)
+      new KytheDomainHandler(this),
+      new FlutterDomainHandler(this)
     ];
   }
 
@@ -909,6 +918,23 @@
   }
 
   /**
+   * Implementation for `flutter.setSubscriptions`.
+   */
+  void setFlutterSubscriptions(Map<FlutterService, Set<String>> subscriptions) {
+    this.flutterServices = subscriptions;
+    Set<String> allNewFiles =
+        subscriptions.values.expand((files) => files).toSet();
+    for (String file in allNewFiles) {
+      // The result will be produced by the "results" stream with
+      // the fully resolved unit, and processed with sending analysis
+      // notifications as it happens after content changes.
+      if (AnalysisEngine.isDartFileName(file)) {
+        getAnalysisResult(file, sendCachedToStream: true);
+      }
+    }
+  }
+
+  /**
    * Implementation for `analysis.setGeneralSubscriptions`.
    */
   void setGeneralAnalysisSubscriptions(
@@ -1084,6 +1110,10 @@
     return analysisServices[service]?.contains(file) ?? false;
   }
 
+  bool _hasFlutterServiceSubscription(FlutterService service, String file) {
+    return flutterServices[service]?.contains(file) ?? false;
+  }
+
   _scheduleAnalysisImplementedNotification() async {
     Set<String> files = analysisServices[AnalysisService.IMPLEMENTED];
     if (files != null) {
@@ -1260,6 +1290,13 @@
             sendAnalysisNotificationOverrides(analysisServer, path, unit);
           });
         }
+        if (analysisServer._hasFlutterServiceSubscription(
+            FlutterService.OUTLINE, path)) {
+          _runDelayed(() {
+            sendFlutterNotificationOutline(
+                analysisServer, path, result.lineInfo, unit);
+          });
+        }
         // TODO(scheglov) Implement notifications for AnalysisService.IMPLEMENTED.
       }
     });
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index c9e4a86..23c0983 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -18,8 +18,10 @@
   final String file;
   final CompilationUnit unit;
   final LineInfo lineInfo;
+  final bool withBasicFlutter;
 
-  DartUnitOutlineComputer(this.file, this.lineInfo, this.unit);
+  DartUnitOutlineComputer(this.file, this.lineInfo, this.unit,
+      {this.withBasicFlutter: false});
 
   /**
    * Returns the computed outline, not `null`.
@@ -418,7 +420,7 @@
 
   @override
   visitInstanceCreationExpression(InstanceCreationExpression node) {
-    if (flutter.isWidgetCreation(node)) {
+    if (outlineComputer.withBasicFlutter && flutter.isWidgetCreation(node)) {
       List<Outline> children = <Outline>[];
       node.argumentList
           .accept(new _FunctionBodyOutlinesVisitor(outlineComputer, children));
diff --git a/pkg/analysis_server/lib/src/computer/import_elements_computer.dart b/pkg/analysis_server/lib/src/computer/import_elements_computer.dart
index 0b3617e..c1be612 100644
--- a/pkg/analysis_server/lib/src/computer/import_elements_computer.dart
+++ b/pkg/analysis_server/lib/src/computer/import_elements_computer.dart
@@ -375,8 +375,9 @@
    * the same prefix.
    */
   bool _matches(ImportDirective import, ImportedElements importedElements) {
-    return (import.element as ImportElement).importedLibrary.source.fullName ==
-            importedElements.path &&
+    LibraryElement library = (import.element as ImportElement).importedLibrary;
+    return library != null &&
+        library.source.fullName == importedElements.path &&
         (import.prefix?.name ?? '') == importedElements.prefix;
   }
 }
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_correction.dart b/pkg/analysis_server/lib/src/flutter/flutter_correction.dart
new file mode 100644
index 0000000..4f667b5
--- /dev/null
+++ b/pkg/analysis_server/lib/src/flutter/flutter_correction.dart
@@ -0,0 +1,86 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/src/services/correction/util.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:meta/meta.dart';
+
+class FlutterCorrections {
+  final String file;
+  final String fileContent;
+
+  final int selectionOffset;
+  final int selectionLength;
+  final int selectionEnd;
+  final SourceRange selectionRange;
+
+  final AnalysisSession session;
+  final CompilationUnit unit;
+
+  CorrectionUtils utils;
+
+  FlutterCorrections(
+      {@required this.file,
+      @required this.fileContent,
+      @required this.selectionOffset,
+      @required this.selectionLength,
+      @required this.session,
+      @required this.unit})
+      : assert(file != null),
+        assert(fileContent != null),
+        assert(selectionOffset != null),
+        assert(selectionLength != null),
+        assert(session != null),
+        assert(unit != null),
+        selectionEnd = selectionOffset + selectionLength,
+        selectionRange = new SourceRange(selectionOffset, selectionLength) {
+    utils = new CorrectionUtils(unit, buffer: fileContent);
+  }
+
+  /**
+   * Returns the EOL to use for this [CompilationUnit].
+   */
+  String get eol => utils.endOfLine;
+
+  /// Wrap the code between [selectionOffset] and [selectionEnd] into a new
+  /// widget with the [parentType].  It is expected that the parent widget has
+  /// the default constructor and the `child` named parameter.
+  Future<SourceChange> wrapWidget(InterfaceType parentType) async {
+    String src = utils.getText(selectionOffset, selectionLength);
+    var changeBuilder = new DartChangeBuilder(session);
+    await changeBuilder.addFileEdit(file, (builder) {
+      builder.addReplacement(selectionRange, (builder) {
+        builder.write('new ');
+        builder.writeType(parentType);
+        builder.write('(');
+        if (src.contains(eol)) {
+          String indentOld = utils.getLinePrefix(selectionOffset);
+          String indentNew = indentOld + utils.getIndent(1);
+          builder.write(eol);
+          builder.write(indentNew);
+          src = _replaceSourceIndent(src, indentOld, indentNew);
+          src += ',$eol$indentOld';
+        }
+        builder.write('child: ');
+        builder.selectHere();
+        builder.write(src);
+        builder.write(')');
+      });
+    });
+    return changeBuilder.sourceChange;
+  }
+
+  static String _replaceSourceIndent(
+      String source, String indentOld, String indentNew) {
+    return source.replaceAll(
+        new RegExp('^$indentOld', multiLine: true), indentNew);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_domain.dart b/pkg/analysis_server/lib/src/flutter/flutter_domain.dart
new file mode 100644
index 0000000..aa486b8
--- /dev/null
+++ b/pkg/analysis_server/lib/src/flutter/flutter_domain.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:core';
+
+import 'package:analysis_server/protocol/protocol_constants.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_abstract.dart';
+import 'package:analysis_server/src/protocol/protocol_internal.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+
+/**
+ * A [RequestHandler] that handles requests in the `flutter` domain.
+ */
+class FlutterDomainHandler extends AbstractRequestHandler {
+  /**
+   * Initialize a newly created handler to handle requests for the given [server].
+   */
+  FlutterDomainHandler(AnalysisServer server) : super(server);
+
+  @override
+  Response handleRequest(Request request) {
+    try {
+      String requestName = request.method;
+      if (requestName == FLUTTER_REQUEST_SET_SUBSCRIPTIONS) {
+        return setSubscriptions(request);
+      }
+    } on RequestFailure catch (exception) {
+      return exception.response;
+    }
+    return null;
+  }
+
+  /**
+   * Implement the 'flutter.setSubscriptions' request.
+   */
+  Response setSubscriptions(Request request) {
+    var params = new FlutterSetSubscriptionsParams.fromRequest(request);
+    Map<FlutterService, Set<String>> subMap = mapMap(params.subscriptions,
+        valueCallback: (List<String> subscriptions) => subscriptions.toSet());
+    server.setFlutterSubscriptions(subMap);
+    return new FlutterSetSubscriptionsResult().toResponse(request.id);
+  }
+}
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart b/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
new file mode 100644
index 0000000..2b6dd30
--- /dev/null
+++ b/pkg/analysis_server/lib/src/flutter/flutter_notifications.dart
@@ -0,0 +1,34 @@
+// 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 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/flutter/flutter_outline_computer.dart';
+import 'package:analysis_server/src/protocol_server.dart' as protocol;
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+void sendFlutterNotificationOutline(AnalysisServer server, String file,
+    LineInfo lineInfo, CompilationUnit dartUnit) {
+  _sendNotification(server, () {
+    var computer = new FlutterOutlineComputer(file, lineInfo, dartUnit);
+    protocol.FlutterOutline outline = computer.compute();
+    // send notification
+    var params = new protocol.FlutterOutlineParams(file, outline);
+    server.sendNotification(params.toNotification());
+  });
+}
+
+/**
+ * Runs the given notification producing function [f], catching exceptions.
+ */
+void _sendNotification(AnalysisServer server, f()) {
+  ServerPerformanceStatistics.notices.makeCurrentWhile(() {
+    try {
+      f();
+    } catch (exception, stackTrace) {
+      server.sendServerErrorNotification(
+          'Failed to send notification', exception, stackTrace);
+    }
+  });
+}
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
new file mode 100644
index 0000000..5abb20f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
@@ -0,0 +1,170 @@
+// 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 'package:analysis_server/src/computer/computer_outline.dart';
+import 'package:analysis_server/src/protocol_server.dart' as protocol;
+import 'package:analysis_server/src/utilities/flutter.dart';
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/// Computer for Flutter specific outlines.
+class FlutterOutlineComputer {
+  final String file;
+  final LineInfo lineInfo;
+  final CompilationUnit unit;
+  final TypeProvider typeProvider;
+
+  final List<protocol.FlutterOutline> _depthFirstOrder = [];
+
+  FlutterOutlineComputer(this.file, this.lineInfo, this.unit)
+      : typeProvider = unit.element.context.typeProvider;
+
+  protocol.FlutterOutline compute() {
+    protocol.Outline dartOutline = new DartUnitOutlineComputer(
+            file, lineInfo, unit,
+            withBasicFlutter: false)
+        .compute();
+    var flutterDartOutline = _convert(dartOutline);
+    unit.accept(new _FlutterOutlineBuilder(this));
+    return flutterDartOutline;
+  }
+
+  /// If the given [argument] for the [parameter] can be represented as a
+  /// Flutter attribute, add it to the [attributes].
+  void _addAttribute(List<protocol.FlutterOutlineAttribute> attributes,
+      Expression argument, ParameterElement parameter) {
+    if (argument is NamedExpression) {
+      argument = (argument as NamedExpression).expression;
+    }
+    String label = argument.toString();
+    if (argument is BooleanLiteral) {
+      attributes.add(new protocol.FlutterOutlineAttribute(
+          parameter.displayName, label,
+          literalValueBoolean: argument.value));
+    } else if (argument is IntegerLiteral) {
+      attributes.add(new protocol.FlutterOutlineAttribute(
+          parameter.displayName, label,
+          literalValueInteger: argument.value));
+    } else if (argument is StringLiteral) {
+      attributes.add(new protocol.FlutterOutlineAttribute(
+          parameter.displayName, label,
+          literalValueString: argument.stringValue));
+    } else {
+      attributes.add(
+          new protocol.FlutterOutlineAttribute(parameter.displayName, label));
+    }
+  }
+
+  protocol.FlutterOutline _convert(protocol.Outline dartOutline) {
+    protocol.FlutterOutline flutterOutline = new protocol.FlutterOutline(
+        protocol.FlutterOutlineKind.DART_ELEMENT,
+        dartOutline.offset,
+        dartOutline.length,
+        dartElement: dartOutline.element);
+    if (dartOutline.children != null) {
+      flutterOutline.children = dartOutline.children.map(_convert).toList();
+    }
+    _depthFirstOrder.add(flutterOutline);
+    return flutterOutline;
+  }
+
+  /// If the [node] is a supported Flutter widget creation, create a new
+  /// outline item for it. If the node is not a widget creation, but its type
+  /// is a Flutter Widget class subtype, and [withGeneric] is `true`, return
+  /// a widget reference outline item.
+  protocol.FlutterOutline _createOutline(Expression node, bool withGeneric) {
+    DartType type = node.staticType;
+    if (!isWidgetType(type)) {
+      return null;
+    }
+    String className = type.element.displayName;
+
+    if (node is InstanceCreationExpression) {
+      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);
+
+        String parentAssociationLabel;
+        Expression childrenExpression;
+
+        if (argument is NamedExpression) {
+          parentAssociationLabel = argument.name.label.name;
+          childrenExpression = argument.expression;
+        } else {
+          childrenExpression = argument;
+        }
+
+        if (isWidgetArgument) {
+          var child = _createOutline(childrenExpression, true);
+          if (child != null) {
+            child.parentAssociationLabel = parentAssociationLabel;
+            children.add(child);
+          }
+        } else if (isWidgetListArgument) {
+          if (childrenExpression is ListLiteral) {
+            for (var element in childrenExpression.elements) {
+              var child = _createOutline(element, true);
+              if (child != null) {
+                children.add(child);
+              }
+            }
+          }
+        } else {
+          _addAttribute(attributes, argument, parameter);
+        }
+      }
+
+      return new protocol.FlutterOutline(
+          protocol.FlutterOutlineKind.NEW_INSTANCE, node.offset, node.length,
+          className: className, attributes: attributes, children: children);
+    }
+
+    // A generic Widget typed expression.
+    if (withGeneric) {
+      var kind = protocol.FlutterOutlineKind.GENERIC;
+
+      String variableName;
+      if (node is SimpleIdentifier) {
+        kind = protocol.FlutterOutlineKind.VARIABLE;
+        variableName = node.name;
+      }
+
+      return new protocol.FlutterOutline(kind, node.offset, node.length,
+          className: className, variableName: variableName);
+    }
+
+    return null;
+  }
+}
+
+class _FlutterOutlineBuilder extends GeneralizingAstVisitor<void> {
+  final FlutterOutlineComputer computer;
+
+  _FlutterOutlineBuilder(this.computer);
+
+  @override
+  void visitExpression(Expression node) {
+    var outline = computer._createOutline(node, false);
+    if (outline != null) {
+      for (var parent in computer._depthFirstOrder) {
+        if (parent.offset < outline.offset &&
+            outline.offset + outline.length < parent.offset + parent.length) {
+          parent.children ??= <protocol.FlutterOutline>[];
+          parent.children.add(outline);
+          return;
+        }
+      }
+    } else {
+      super.visitExpression(node);
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index 60bfdae..3a9fbc2 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -117,7 +117,8 @@
     // compute library name
     String libraryName = _computeLibraryName(dartUnit);
     // compute Outline
-    var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit);
+    var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit,
+        withBasicFlutter: true);
     protocol.Outline outline = computer.compute();
     // send notification
     var params = new protocol.AnalysisOutlineParams(file, fileKind, outline,
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index b31343c..1347247 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -650,14 +650,14 @@
   String _buffer;
   String _endOfLine;
 
-  CorrectionUtils(this.unit) {
+  CorrectionUtils(this.unit, {String buffer}) {
     CompilationUnitElement unitElement = unit.element;
     AnalysisContext context = unitElement.context;
     if (context == null) {
       throw new CancelCorrectionException();
     }
     this._library = unitElement.library;
-    this._buffer = context.getContents(unitElement.source).data;
+    this._buffer = buffer ?? context.getContents(unitElement.source).data;
   }
 
   /**
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index e43652e..66796d1 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -969,7 +969,7 @@
 
       if (overlays[overlayPath] != null) {
         buf.write('<pre><code>');
-        buf.write(overlays[overlayPath]);
+        buf.write(escape(overlays[overlayPath]));
         buf.writeln('</code></pre>');
       } else {
         p('<code>${escape(overlayPath)}</code> not found.', raw: true);
@@ -1025,7 +1025,11 @@
           name = components[length - 1];
         }
         h4(name);
-        p('path: $id');
+        p('bootstrap package path: $id');
+        if (plugin is DiscoveredPluginInfo) {
+          p('execution path: ${plugin.executionPath}');
+          p('packages file path: ${plugin.packagesPath}');
+        }
         if (data.name == null) {
           if (plugin.exception != null) {
             p('not running');
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index b49c372..a875de8 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -229,19 +229,31 @@
 }
 
 /**
- * Return `true` if the given [element] has the Flutter class `Widget` as
- * a superclass.
+ * Return `true` if the given [type] is the Flutter class `Widget`, or its
+ * subtype.
+ */
+bool isListOfWidgetsType(DartType type) {
+  return type is InterfaceType &&
+      type.element.library.isDartCore &&
+      type.element.name == 'List' &&
+      type.typeArguments.length == 1 &&
+      isWidgetType(type.typeArguments[0]);
+}
+
+/**
+ * Return `true` if the given [element] is the Flutter class `Widget`, or its
+ * subtype.
  */
 bool isWidget(ClassElement element) {
   if (element == null) {
     return false;
   }
+  if (_isExactWidget(element, _WIDGET_NAME, _WIDGET_URI)) {
+    return true;
+  }
   for (InterfaceType type in element.allSupertypes) {
-    if (type.name == _WIDGET_NAME) {
-      Uri uri = type.element.source.uri;
-      if (uri.toString() == _WIDGET_URI) {
-        return true;
-      }
+    if (_isExactWidget(type.element, _WIDGET_NAME, _WIDGET_URI)) {
+      return true;
     }
   }
   return false;
@@ -257,6 +269,25 @@
 }
 
 /**
+ * Return `true` if the given [node] is the Flutter class `Widget`, or its
+ * subtype.
+ */
+bool isWidgetExpression(AstNode node) {
+  if (node is Expression) {
+    return isWidgetType(node.staticType);
+  }
+  return false;
+}
+
+/**
+ * Return `true` if the given [type] is the Flutter class `Widget`, or its
+ * subtype.
+ */
+bool isWidgetType(DartType type) {
+  return type is InterfaceType && isWidget(type.element);
+}
+
+/**
  * Return `true` if the given [element] is the exact [type] defined in the
  * file with the given [uri].
  */
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 8660144..18a5002 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -21,12 +21,19 @@
   bool verifyNoTestUnitErrors = true;
 
   String testCode;
-  String testFile = '/test.dart';
+  String testFile;
   Source testSource;
+  AnalysisResult testAnalysisResult;
   CompilationUnit testUnit;
   CompilationUnitElement testUnitElement;
   LibraryElement testLibraryElement;
 
+  @override
+  void setUp() {
+    super.setUp();
+    testFile = resourceProvider.convertPath('/test.dart');
+  }
+
   void addTestSource(String code, [Uri uri]) {
     testCode = code;
     testSource = addSource(testFile, code, uri);
@@ -111,10 +118,10 @@
 
   Future<Null> resolveTestUnit(String code) async {
     addTestSource(code);
-    AnalysisResult result = await driver.getResult(testFile);
-    testUnit = result.unit;
+    testAnalysisResult = await driver.getResult(testFile);
+    testUnit = testAnalysisResult.unit;
     if (verifyNoTestUnitErrors) {
-      expect(result.errors.where((AnalysisError error) {
+      expect(testAnalysisResult.errors.where((AnalysisError error) {
         return error.errorCode != HintCode.DEAD_CODE &&
             error.errorCode != HintCode.UNUSED_CATCH_CLAUSE &&
             error.errorCode != HintCode.UNUSED_CATCH_STACK &&
diff --git a/pkg/analysis_server/test/integration/coverage.md b/pkg/analysis_server/test/integration/coverage.md
index 9d0ac62..108ef38 100644
--- a/pkg/analysis_server/test/integration/coverage.md
+++ b/pkg/analysis_server/test/integration/coverage.md
@@ -81,3 +81,7 @@
 
 ## kythe domain
 - [x] kythe.getKytheEntries
+
+## flutter domain
+- [ ] flutter.setSubscriptions
+- [ ] flutter.outline
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index 2580f2c..46763b5 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -2077,6 +2077,70 @@
   }
 
   /**
+   * Subscribe for services that are specific to individual files. All previous
+   * subscriptions are replaced by the current set of subscriptions. If a given
+   * service is not included as a key in the map then no files will be
+   * subscribed to the service, exactly as if the service had been included in
+   * the map with an explicit empty list of files.
+   *
+   * Note that this request determines the set of requested subscriptions. The
+   * actual set of subscriptions at any given time is the intersection of this
+   * set with the set of files currently subject to analysis. The files
+   * currently subject to analysis are the set of files contained within an
+   * actual analysis root but not excluded, plus all of the files transitively
+   * reachable from those files via import, export and part directives. (See
+   * analysis.setAnalysisRoots for an explanation of how the actual analysis
+   * roots are determined.) When the actual analysis roots change, the actual
+   * set of subscriptions is automatically updated, but the set of requested
+   * subscriptions is unchanged.
+   *
+   * If a requested subscription is a directory it is ignored, but remains in
+   * the set of requested subscriptions so that if it later becomes a file it
+   * can be included in the set of actual subscriptions.
+   *
+   * It is an error if any of the keys in the map are not valid services. If
+   * there is an error, then the existing subscriptions will remain unchanged.
+   *
+   * Parameters
+   *
+   * subscriptions: Map<FlutterService, List<FilePath>>
+   *
+   *   A table mapping services to a list of the files being subscribed to the
+   *   service.
+   */
+  Future sendFlutterSetSubscriptions(
+      Map<FlutterService, List<String>> subscriptions) async {
+    var params = new FlutterSetSubscriptionsParams(subscriptions).toJson();
+    var result = await server.send("flutter.setSubscriptions", params);
+    outOfTestExpect(result, isNull);
+    return null;
+  }
+
+  /**
+   * Reports the Flutter outline associated with a single file.
+   *
+   * This notification is not subscribed to by default. Clients can subscribe
+   * by including the value "OUTLINE" in the list of services passed in an
+   * flutter.setSubscriptions request.
+   *
+   * Parameters
+   *
+   * file: FilePath
+   *
+   *   The file with which the outline is associated.
+   *
+   * outline: FlutterOutline
+   *
+   *   The outline associated with the file.
+   */
+  Stream<FlutterOutlineParams> onFlutterOutline;
+
+  /**
+   * Stream controller for [onFlutterOutline].
+   */
+  StreamController<FlutterOutlineParams> _onFlutterOutline;
+
+  /**
    * Initialize the fields in InttestMixin, and ensure that notifications will
    * be handled.
    */
@@ -2133,6 +2197,8 @@
     _onExecutionLaunchData =
         new StreamController<ExecutionLaunchDataParams>(sync: true);
     onExecutionLaunchData = _onExecutionLaunchData.stream.asBroadcastStream();
+    _onFlutterOutline = new StreamController<FlutterOutlineParams>(sync: true);
+    onFlutterOutline = _onFlutterOutline.stream.asBroadcastStream();
   }
 
   /**
@@ -2232,6 +2298,11 @@
         _onExecutionLaunchData.add(
             new ExecutionLaunchDataParams.fromJson(decoder, 'params', params));
         break;
+      case "flutter.outline":
+        outOfTestExpect(params, isFlutterOutlineParams);
+        _onFlutterOutline
+            .add(new FlutterOutlineParams.fromJson(decoder, 'params', params));
+        break;
       default:
         fail('Unexpected notification: $event');
         break;
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index 53e4f7c..f41e3d7 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -436,6 +436,88 @@
 final Matcher isFilePath = isString;
 
 /**
+ * FlutterOutline
+ *
+ * {
+ *   "kind": FlutterOutlineKind
+ *   "offset": int
+ *   "length": int
+ *   "label": optional String
+ *   "dartElement": optional Element
+ *   "attributes": optional List<FlutterOutlineAttribute>
+ *   "className": optional String
+ *   "parentAssociationLabel": optional String
+ *   "variableName": optional String
+ *   "children": optional List<FlutterOutline>
+ * }
+ */
+final Matcher isFlutterOutline =
+    new LazyMatcher(() => new MatchesJsonObject("FlutterOutline", {
+          "kind": isFlutterOutlineKind,
+          "offset": isInt,
+          "length": isInt
+        }, optionalFields: {
+          "label": isString,
+          "dartElement": isElement,
+          "attributes": isListOf(isFlutterOutlineAttribute),
+          "className": isString,
+          "parentAssociationLabel": isString,
+          "variableName": isString,
+          "children": isListOf(isFlutterOutline)
+        }));
+
+/**
+ * FlutterOutlineAttribute
+ *
+ * {
+ *   "name": String
+ *   "label": String
+ *   "literalValueBoolean": optional bool
+ *   "literalValueInteger": optional int
+ *   "literalValueString": optional String
+ * }
+ */
+final Matcher isFlutterOutlineAttribute =
+    new LazyMatcher(() => new MatchesJsonObject("FlutterOutlineAttribute", {
+          "name": isString,
+          "label": isString
+        }, optionalFields: {
+          "literalValueBoolean": isBool,
+          "literalValueInteger": isInt,
+          "literalValueString": isString
+        }));
+
+/**
+ * FlutterOutlineKind
+ *
+ * enum {
+ *   DART_ELEMENT
+ *   GENERIC
+ *   NEW_INSTANCE
+ *   INVOCATION
+ *   VARIABLE
+ *   PLACEHOLDER
+ * }
+ */
+final Matcher isFlutterOutlineKind = new MatchesEnum("FlutterOutlineKind", [
+  "DART_ELEMENT",
+  "GENERIC",
+  "NEW_INSTANCE",
+  "INVOCATION",
+  "VARIABLE",
+  "PLACEHOLDER"
+]);
+
+/**
+ * FlutterService
+ *
+ * enum {
+ *   OUTLINE
+ * }
+ */
+final Matcher isFlutterService = new MatchesEnum("FlutterService", ["OUTLINE"]);
+
+/**
  * FoldingKind
  *
  * enum {
@@ -2323,6 +2405,34 @@
         }));
 
 /**
+ * flutter.outline params
+ *
+ * {
+ *   "file": FilePath
+ *   "outline": FlutterOutline
+ * }
+ */
+final Matcher isFlutterOutlineParams = new LazyMatcher(() =>
+    new MatchesJsonObject("flutter.outline params",
+        {"file": isFilePath, "outline": isFlutterOutline}));
+
+/**
+ * flutter.setSubscriptions params
+ *
+ * {
+ *   "subscriptions": Map<FlutterService, List<FilePath>>
+ * }
+ */
+final Matcher isFlutterSetSubscriptionsParams = new LazyMatcher(() =>
+    new MatchesJsonObject("flutter.setSubscriptions params",
+        {"subscriptions": isMapOf(isFlutterService, isListOf(isFilePath))}));
+
+/**
+ * flutter.setSubscriptions result
+ */
+final Matcher isFlutterSetSubscriptionsResult = isNull;
+
+/**
  * inlineLocalVariable feedback
  *
  * {
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index c8a1dae..5a13acd 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -3409,6 +3409,7 @@
 ''');
   }
 
+  @failingTest // This is likely not going to be an error in dart 2.
   test_illegalAsyncReturnType_void() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE;
diff --git a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
index bbe6367..1803fa9 100644
--- a/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/import_elements_computer_test.dart
@@ -205,6 +205,20 @@
     assertNoChanges();
   }
 
+  test_createEdits_invalidUri() async {
+    Source fooSource = addPackageSource('pkg', 'foo.dart', '');
+    await createBuilder('''
+import 'pakage:pkg/foo.dart';
+''');
+    await computeChanges(<ImportedElements>[
+      new ImportedElements(fooSource.fullName, '', <String>['A'])
+    ]);
+    assertChanges('''
+import 'pakage:pkg/foo.dart';
+import 'package:pkg/foo.dart';
+''');
+  }
+
   test_createEdits_noElements() async {
     await createBuilder('');
     await computeChanges(<ImportedElements>[]);
diff --git a/pkg/analysis_server/test/src/computer/outline_computer_test.dart b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
index 8395805..c9fc5c6 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
@@ -37,7 +37,8 @@
     newFile(testPath, content: code);
     AnalysisResult analysisResult = await driver.getResult(testPath);
     return new DartUnitOutlineComputer(
-            testPath, analysisResult.lineInfo, analysisResult.unit)
+            testPath, analysisResult.lineInfo, analysisResult.unit,
+            withBasicFlutter: true)
         .compute();
   }
 }
diff --git a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
new file mode 100644
index 0000000..fb36548
--- /dev/null
+++ b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
@@ -0,0 +1,204 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/src/flutter/flutter_correction.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../abstract_single_unit.dart';
+import '../utilities/flutter_util.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FlutterCorrectionTest);
+  });
+}
+
+@reflectiveTest
+class FlutterCorrectionTest extends AbstractSingleUnitTest {
+  int offset;
+  int length;
+
+  int findOffset(String search) {
+    int offset = testCode.indexOf(search);
+    expect(offset, isNonNegative, reason: "Not found '$search' in\n$testCode");
+    return offset;
+  }
+
+  @override
+  void setUp() {
+    super.setUp();
+    packageMap['flutter'] = [configureFlutterPackage(resourceProvider)];
+  }
+
+  test_wrapWidget_OK_multiLine() async {
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    return /*start*/new Row(
+      children: [
+        new Text('aaa'),
+        new Text('bbb'),
+      ],
+    )/*end*/;
+  }
+}
+''');
+    _setStartEndSelection();
+
+    InterfaceType parentType = await _getContainerType();
+    SourceChange change = await _wrapWidget(parentType);
+
+    _assertChange(change, r'''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    return new Container(
+      child: /*start*/new Row(
+        children: [
+          new Text('aaa'),
+          new Text('bbb'),
+        ],
+      )/*end*/,
+    );
+  }
+}
+''');
+  }
+
+  test_wrapWidget_OK_multiLine_subChild() async {
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    return new Container(
+      child: /*start*/new Row(
+        children: [
+          new Text('aaa'),
+          new Text('bbb'),
+        ],
+      )/*end*/,
+    );
+  }
+}
+''');
+    _setStartEndSelection();
+
+    InterfaceType parentType = await _getContainerType();
+    SourceChange change = await _wrapWidget(parentType);
+
+    _assertChange(change, r'''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    return new Container(
+      child: new Container(
+        child: /*start*/new Row(
+          children: [
+            new Text('aaa'),
+            new Text('bbb'),
+          ],
+        )/*end*/,
+      ),
+    );
+  }
+}
+''');
+  }
+
+  test_wrapWidget_OK_oneLine_newInstance() async {
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    return /*start*/new Text('abc')/*end*/;
+  }
+}
+''');
+    _setStartEndSelection();
+
+    InterfaceType parentType = await _getContainerType();
+    SourceChange change = await _wrapWidget(parentType);
+
+    _assertChange(change, r'''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    return new Container(child: /*start*/new Text('abc')/*end*/);
+  }
+}
+''');
+  }
+
+  test_wrapWidget_OK_oneLine_variable() async {
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    var text = new Text('abc');
+    return /*start*/text/*end*/;
+  }
+}
+''');
+    _setStartEndSelection();
+
+    InterfaceType parentType = await _getContainerType();
+    SourceChange change = await _wrapWidget(parentType);
+
+    _assertChange(change, r'''
+import 'package:flutter/widgets.dart';
+class MyWidget extends StatelessWidget {
+  Widget build(BuildContext context) {
+    var text = new Text('abc');
+    return new Container(child: /*start*/text/*end*/);
+  }
+}
+''');
+  }
+
+  void _assertChange(SourceChange change, String expectedCode) {
+    expect(change, isNotNull);
+
+    List<SourceFileEdit> files = change.edits;
+    expect(files, hasLength(1));
+    expect(files[0].file, testFile);
+
+    List<SourceEdit> fileEdits = files[0].edits;
+    String resultCode = SourceEdit.applySequence(testCode, fileEdits);
+    if (resultCode != expectedCode) {
+      print(resultCode);
+    }
+    expect(resultCode, expectedCode);
+  }
+
+  Future<InterfaceType> _getContainerType() async {
+    LibraryElement widgetsLibrary = await testAnalysisResult.session
+        .getLibraryByUri('package:flutter/widgets.dart');
+    ClassElement containerElement =
+        widgetsLibrary.exportNamespace.get('Container');
+    return containerElement.type;
+  }
+
+  void _setStartEndSelection() {
+    offset = findOffset('/*start*/');
+    length = findOffset('/*end*/') + '/*end*/'.length - offset;
+  }
+
+  Future<SourceChange> _wrapWidget(InterfaceType parentType) async {
+    var corrections = new FlutterCorrections(
+        file: testFile,
+        fileContent: testCode,
+        selectionOffset: offset,
+        selectionLength: length,
+        session: testAnalysisResult.session,
+        unit: testUnit);
+    return await corrections.wrapWidget(parentType);
+  }
+}
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
new file mode 100644
index 0000000..53d69f8
--- /dev/null
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -0,0 +1,322 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/src/flutter/flutter_outline_computer.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:meta/meta.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../abstract_context.dart';
+import '../utilities/flutter_util.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FlutterOutlineComputerTest);
+  });
+}
+
+@reflectiveTest
+class FlutterOutlineComputerTest extends AbstractContextTest {
+  String testPath;
+  String testCode;
+
+  @override
+  void setUp() {
+    super.setUp();
+    testPath = resourceProvider.convertPath('/test.dart');
+    Folder libFolder = configureFlutterPackage(resourceProvider);
+    packageMap['flutter'] = [libFolder];
+  }
+
+  test_attribute_namedExpression() async {
+    newFile('/a.dart', content: r'''
+import 'package:flutter/widgets.dart';
+
+class WidgetA extends StatelessWidget {
+  WidgetA({int value});
+}
+''');
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+import 'a.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new WidgetA(
+      value: 42,
+    ); // WidgetA
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+
+    var a = build.children[0];
+    expect(a.attributes, hasLength(1));
+
+    var attribute = a.attributes[0];
+    expect(attribute.name, 'value');
+    expect(attribute.label, '42');
+  }
+
+  test_attributes_bool() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return const Text(true)
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+    var textOutline = build.children[0];
+
+    expect(textOutline.attributes, hasLength(1));
+
+    FlutterOutlineAttribute attribute = textOutline.attributes[0];
+    expect(attribute.name, 'data');
+    expect(attribute.label, 'true');
+    expect(attribute.literalValueBoolean, true);
+  }
+
+  test_attributes_int() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return const Text(42)
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+    var textOutline = build.children[0];
+
+    expect(textOutline.attributes, hasLength(1));
+
+    FlutterOutlineAttribute attribute = textOutline.attributes[0];
+    expect(attribute.name, 'data');
+    expect(attribute.label, '42');
+    expect(attribute.literalValueInteger, 42);
+  }
+
+  test_attributes_string_interpolation() async {
+    FlutterOutline unitOutline = await _computeOutline(r'''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    var name = 'Foo';
+    return const Text('Hello, $name!')
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+    var textOutline = build.children[0];
+
+    expect(textOutline.attributes, hasLength(1));
+
+    FlutterOutlineAttribute attribute = textOutline.attributes[0];
+    expect(attribute.name, 'data');
+    expect(attribute.label, r"'Hello, $name!'");
+    expect(attribute.literalValueString, isNull);
+  }
+
+  test_attributes_string_literal() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return const Text('my text')
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+    var textOutline = build.children[0];
+
+    expect(textOutline.attributes, hasLength(1));
+
+    FlutterOutlineAttribute attribute = textOutline.attributes[0];
+    expect(attribute.name, 'data');
+    expect(attribute.label, "'my text'");
+    expect(attribute.literalValueString, 'my text');
+  }
+
+  test_children() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new Column(children: [
+      const Text('aaa'),
+      const Text('bbb'),
+    ]); // Column
+  }
+}
+''');
+
+    expect(_toText(unitOutline), r'''
+(D) MyWidget
+  (D) build
+    Column
+      Text
+      Text
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+
+    var columnOutline = build.children[0];
+    {
+      int offset = testCode.indexOf('new Column');
+      int length = testCode.indexOf('; // Column') - offset;
+      _expect(columnOutline, offset: offset, length: length);
+    }
+
+    {
+      var textOutline = columnOutline.children[0];
+      String text = "const Text('aaa')";
+      int offset = testCode.indexOf(text);
+      _expect(textOutline, offset: offset, length: text.length);
+    }
+
+    {
+      var textOutline = columnOutline.children[1];
+      String text = "const Text('bbb')";
+      int offset = testCode.indexOf(text);
+      _expect(textOutline, offset: offset, length: text.length);
+    }
+  }
+
+  test_parentAssociationLabel() async {
+    newFile('/a.dart', content: r'''
+import 'package:flutter/widgets.dart';
+
+class WidgetA extends StatelessWidget {
+  final Widget top;
+  final Widget bottom;
+  
+  WidgetA({this.top, this.bottom});
+}
+''');
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+import 'a.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new WidgetA(
+      top: const Text('aaa'),
+      bottom: const Text('bbb'),
+    ); // WidgetA
+  }
+}
+''');
+    expect(_toText(unitOutline), r'''
+(D) MyWidget
+  (D) build
+    WidgetA
+      top: Text
+      bottom: Text
+''');
+  }
+
+  test_variableName() async {
+    FlutterOutline unitOutline = await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    var text = new Text('aaa');
+    return new Center(child: text); // Center
+  }
+}
+''');
+    var myWidget = unitOutline.children[0];
+    var build = myWidget.children[0];
+    expect(build.children, hasLength(2));
+
+    var textNew = build.children[0];
+    expect(textNew.kind, FlutterOutlineKind.NEW_INSTANCE);
+    expect(textNew.className, 'Text');
+
+    var center = build.children[1];
+    expect(center.kind, FlutterOutlineKind.NEW_INSTANCE);
+    expect(center.className, 'Center');
+    expect(center.children, hasLength(1));
+
+    var textRef = center.children[0];
+    expect(textRef.kind, FlutterOutlineKind.VARIABLE);
+    expect(textRef.className, 'Text');
+    expect(textRef.variableName, 'text');
+  }
+
+  Future<FlutterOutline> _computeOutline(String code) async {
+    testCode = code;
+    newFile(testPath, content: code);
+    AnalysisResult analysisResult = await driver.getResult(testPath);
+    return new FlutterOutlineComputer(
+            testPath, analysisResult.lineInfo, analysisResult.unit)
+        .compute();
+  }
+
+  void _expect(FlutterOutline outline,
+      {@required int offset, @required int length}) {
+    expect(outline.offset, offset);
+    expect(outline.length, length);
+  }
+
+  static String _toText(FlutterOutline outline) {
+    var buffer = new StringBuffer();
+
+    void writeOutline(FlutterOutline outline, String indent) {
+      buffer.write(indent);
+
+      if (outline.kind == FlutterOutlineKind.DART_ELEMENT) {
+        buffer.write('(D) ');
+        buffer.writeln(outline.dartElement.name);
+      } else {
+        if (outline.kind == FlutterOutlineKind.NEW_INSTANCE) {
+          if (outline.parentAssociationLabel != null) {
+            buffer.write(outline.parentAssociationLabel);
+            buffer.write(': ');
+          }
+          buffer.writeln(outline.className);
+        } else {
+          fail('Unknown kind: ${outline.kind}');
+        }
+      }
+
+      if (outline.children != null) {
+        for (var child in outline.children) {
+          writeOutline(child, '$indent  ');
+        }
+      }
+    }
+
+    for (var child in outline.children) {
+      writeOutline(child, '');
+    }
+    return buffer.toString();
+  }
+}
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
new file mode 100644
index 0000000..7a01015
--- /dev/null
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -0,0 +1,120 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_constants.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/flutter/flutter_domain.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../analysis_abstract.dart';
+import '../utilities/flutter_util.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FlutterNotificationOutlineTest);
+  });
+}
+
+@reflectiveTest
+class FlutterNotificationOutlineTest extends AbstractAnalysisTest {
+  Folder flutterFolder;
+
+  final Map<FlutterService, List<String>> flutterSubscriptions = {};
+
+  Completer _outlineReceived = new Completer();
+  FlutterOutline outline;
+
+  FlutterDomainHandler get flutterHandler =>
+      server.handlers.singleWhere((handler) => handler is FlutterDomainHandler);
+
+  void addFlutterSubscription(FlutterService service, String file) {
+    // add file to subscription
+    var files = analysisSubscriptions[service];
+    if (files == null) {
+      files = <String>[];
+      flutterSubscriptions[service] = files;
+    }
+    files.add(file);
+    // set subscriptions
+    Request request =
+        new FlutterSetSubscriptionsParams(flutterSubscriptions).toRequest('0');
+    handleSuccessfulRequest(request, handler: flutterHandler);
+  }
+
+  Future prepareOutline() {
+    addFlutterSubscription(FlutterService.OUTLINE, testFile);
+    return _outlineReceived.future;
+  }
+
+  void processNotification(Notification notification) {
+    if (notification.event == FLUTTER_NOTIFICATION_OUTLINE) {
+      var params = new FlutterOutlineParams.fromNotification(notification);
+      if (params.file == testFile) {
+        outline = params.outline;
+        _outlineReceived.complete(null);
+      }
+    }
+  }
+
+  @override
+  void setUp() {
+    super.setUp();
+    createProject();
+    flutterFolder = configureFlutterPackage(resourceProvider);
+  }
+
+  test_children() async {
+    newFile('$projectPath/.packages', content: '''
+flutter:${flutterFolder.toUri()}
+''');
+    newFile('$projectPath/analysis_options.yaml', content: '''
+analyzer:
+  strong-mode: true
+''');
+    var code = '''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  @override
+  Widget build(BuildContext context) {
+    return new Column(children: [
+      const Text('aaa'),
+      const Text('bbb'),
+    ]);
+  }
+}
+''';
+    addTestFile(code);
+    await prepareOutline();
+    FlutterOutline unitOutline = outline;
+
+    FlutterOutline myWidgetOutline = unitOutline.children[0];
+    expect(myWidgetOutline.kind, FlutterOutlineKind.DART_ELEMENT);
+    expect(myWidgetOutline.dartElement.name, 'MyWidget');
+
+    FlutterOutline buildOutline = myWidgetOutline.children[0];
+    expect(buildOutline.kind, FlutterOutlineKind.DART_ELEMENT);
+    expect(buildOutline.dartElement.name, 'build');
+
+    FlutterOutline columnOutline = buildOutline.children[0];
+    expect(columnOutline.kind, FlutterOutlineKind.NEW_INSTANCE);
+    expect(columnOutline.className, 'Column');
+    expect(columnOutline.children, hasLength(2));
+
+    FlutterOutline textOutlineA = columnOutline.children[0];
+    expect(textOutlineA.kind, FlutterOutlineKind.NEW_INSTANCE);
+    expect(textOutlineA.className, 'Text');
+    expect(textOutlineA.offset, code.indexOf("const Text('aaa')"));
+
+    FlutterOutline textOutlineB = columnOutline.children[1];
+    expect(textOutlineB.kind, FlutterOutlineKind.NEW_INSTANCE);
+    expect(textOutlineB.className, 'Text');
+    expect(textOutlineB.offset, code.indexOf("const Text('bbb')"));
+  }
+}
diff --git a/pkg/analysis_server/test/src/flutter/test_all.dart b/pkg/analysis_server/test/src/flutter/test_all.dart
new file mode 100644
index 0000000..102ad80
--- /dev/null
+++ b/pkg/analysis_server/test/src/flutter/test_all.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.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'flutter_outline_computer_test.dart' as outline_computer_test;
+import 'flutter_outline_notification_test.dart' as outline_notification_test;
+
+main() {
+  defineReflectiveSuite(() {
+    outline_computer_test.main();
+    outline_notification_test.main();
+  });
+}
diff --git a/pkg/analysis_server/test/src/test_all.dart b/pkg/analysis_server/test/src/test_all.dart
index 70858b0..c25b65a 100644
--- a/pkg/analysis_server/test/src/test_all.dart
+++ b/pkg/analysis_server/test/src/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'computer/test_all.dart' as computer_all;
 import 'domain_abstract_test.dart' as domain_abstract_test;
+import 'flutter/test_all.dart' as flutter_all;
 import 'plugin/test_all.dart' as plugin_all;
 import 'utilities/test_all.dart' as utilities_all;
 import 'watch_manager_test.dart' as watch_manager_test;
@@ -17,6 +18,7 @@
   defineReflectiveSuite(() {
     computer_all.main();
     domain_abstract_test.main();
+    flutter_all.main();
     plugin_all.main();
     utilities_all.main();
     watch_manager_test.main();
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index e1b9320..776eecd 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -133,6 +133,47 @@
     expect(isWidgetCreation(b), isTrue);
   }
 
+  test_isWidgetExpression() async {
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+
+main() {
+  var text = new Text('abc');
+  text;
+  createEmptyText();
+  var intVariable = 42;
+  intVariable;
+}
+
+Text createEmptyText() => new Text('');
+''');
+    {
+      Expression expression = findNodeAtString("new Text('abc')");
+      expect(isWidgetExpression(expression), isTrue);
+    }
+
+    {
+      Expression expression = findNodeAtString("text;");
+      expect(isWidgetExpression(expression), isTrue);
+    }
+
+    {
+      Expression expression = findNodeAtString(
+          "createEmptyText();", (node) => node is MethodInvocation);
+      expect(isWidgetExpression(expression), isTrue);
+    }
+
+    {
+      Expression expression = findNodeAtString("42;");
+      expect(isWidgetExpression(expression), isFalse);
+    }
+
+    {
+      Expression expression = findNodeAtString("intVariable;");
+      expect(isWidgetExpression(expression), isFalse);
+    }
+  }
+
   VariableDeclaration _getTopVariable(String name, [CompilationUnit unit]) {
     unit ??= testUnit;
     for (var topDeclaration in unit.declarations) {
diff --git a/pkg/analysis_server/test/src/utilities/flutter_util.dart b/pkg/analysis_server/test/src/utilities/flutter_util.dart
index 5ff909a..6d1cd55 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_util.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_util.dart
@@ -44,6 +44,7 @@
 
   newFile('/flutter/lib/widgets.dart', r'''
 export 'src/widgets/basic.dart';
+export 'src/widgets/center.dart';
 export 'src/widgets/container.dart';
 export 'src/widgets/framework.dart';
 export 'src/widgets/icon.dart';
@@ -196,6 +197,14 @@
       : super(key: key);
 }
 ''');
+
+    newFile('/flutter/lib/src/widgets/center.dart', r'''
+import 'framework.dart';
+
+class Center extends StatelessWidget {
+  const Center({Widget child, Key key});
+}
+''');
   }
 
   createSrcMaterial();
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index 24ff37d..7b4f441 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
@@ -627,6 +619,35 @@
   public void execution_setSubscriptions(List<String> subscriptions);
 
   /**
+   * {@code flutter.setSubscriptions}
+   *
+   * Subscribe for services that are specific to individual files. All previous subscriptions are
+   * replaced by the current set of subscriptions. If a given service is not included as a key in the
+   * map then no files will be subscribed to the service, exactly as if the service had been included
+   * in the map with an explicit empty list of files.
+   *
+   * Note that this request determines the set of requested subscriptions. The actual set of
+   * subscriptions at any given time is the intersection of this set with the set of files currently
+   * subject to analysis. The files currently subject to analysis are the set of files contained
+   * within an actual analysis root but not excluded, plus all of the files transitively reachable
+   * from those files via import, export and part directives. (See analysis.setAnalysisRoots for an
+   * explanation of how the actual analysis roots are determined.) When the actual analysis roots
+   * change, the actual set of subscriptions is automatically updated, but the set of requested
+   * subscriptions is unchanged.
+   *
+   * If a requested subscription is a directory it is ignored, but remains in the set of requested
+   * subscriptions so that if it later becomes a file it can be included in the set of actual
+   * subscriptions.
+   *
+   * It is an error if any of the keys in the map are not valid services. If there is an error, then
+   * the existing subscriptions will remain unchanged.
+   *
+   * @param subscriptions A table mapping services to a list of the files being subscribed to the
+   *         service.
+   */
+  public void flutter_setSubscriptions(Map<String, List<String>> subscriptions);
+
+  /**
    * Return {@code true} if the socket is open.
    */
   public boolean isSocketOpen();
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java b/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java
index 74249ca..f41ac9a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AddContentOverlay.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java
index 00c4495..c65d0c9 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisError.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java
index a45caa1..b6aef1f 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorFixes.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java
index e07df40..79ae62f 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorSeverity.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java
index db6fe76..eb45bf9 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisErrorType.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java
index 12f2cbc..1b706fc 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
index bd85791..275ecc0 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java
index 1a0cb7f..35b8fb6 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisStatus.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java b/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java
index e7b4062..935bc89 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ChangeContentOverlay.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ClosingLabel.java b/pkg/analysis_server/tool/spec/generated/java/types/ClosingLabel.java
index 4cf5979..2ac083a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ClosingLabel.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ClosingLabel.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
index 125322c..7a8ebc3 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestion.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java
index 8216ce9..32a42db 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/CompletionSuggestionKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ContextData.java b/pkg/analysis_server/tool/spec/generated/java/types/ContextData.java
index ab4020c..b868e49 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ContextData.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ContextData.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Element.java b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
index 579ef3f..97dbd1e 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Element.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Element.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java b/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
index 0b9f4389..f572d75 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java
index 52f0c95..21d9c77 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableFile.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java
index 407f368..d81f953 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExecutableKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java b/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java
index 0e1b005..4e988ac 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExecutionService.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java
index 8058954..3fb0861 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableFeedback.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java
index c0b9756..9358b99 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractLocalVariableOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java
index 6bb32fe..0fb1cab 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodFeedback.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java
index 1e71e43..c2e1673 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ExtractMethodOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FileKind.java b/pkg/analysis_server/tool/spec/generated/java/types/FileKind.java
index 8275310..4d944ad 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/FileKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FileKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutline.java b/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutline.java
new file mode 100644
index 0000000..9a18b64
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutline.java
@@ -0,0 +1,314 @@
+/*
+ * 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.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An node in the Flutter specific outline structure of a file.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class FlutterOutline {
+
+  public static final FlutterOutline[] EMPTY_ARRAY = new FlutterOutline[0];
+
+  public static final List<FlutterOutline> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The kind of the node.
+   */
+  private final String kind;
+
+  /**
+   * The offset of the first character of the element. This is different than the offset in the
+   * Element, which is the offset of the name of the element. It can be used, for example, to map
+   * locations in the file back to an outline.
+   */
+  private final int offset;
+
+  /**
+   * The length of the element.
+   */
+  private final int length;
+
+  /**
+   * The text label of the node children of the node. It is provided for any
+   * FlutterOutlineKind.GENERIC node, where better information is not available.
+   */
+  private final String label;
+
+  /**
+   * If this node is a Dart element, the description of it; omitted otherwise.
+   */
+  private final Element dartElement;
+
+  /**
+   * Additional attributes for this node, which might be interesting to display on the client. These
+   * attributes are usually arguments for the instance creation or the invocation that created the
+   * widget.
+   */
+  private final List<FlutterOutlineAttribute> attributes;
+
+  /**
+   * If the node creates a new class instance, or a reference to an instance, this field has the name
+   * of the class.
+   */
+  private final String className;
+
+  /**
+   * A short text description how this node is associated with the parent node. For example "appBar"
+   * or "body" in Scaffold.
+   */
+  private final String parentAssociationLabel;
+
+  /**
+   * If FlutterOutlineKind.VARIABLE, the name of the variable.
+   */
+  private final String variableName;
+
+  /**
+   * The children of the node. The field will be omitted if the node has no children.
+   */
+  private final List<FlutterOutline> children;
+
+  /**
+   * Constructor for {@link FlutterOutline}.
+   */
+  public FlutterOutline(String kind, int offset, int length, String label, Element dartElement, List<FlutterOutlineAttribute> attributes, String className, String parentAssociationLabel, String variableName, List<FlutterOutline> children) {
+    this.kind = kind;
+    this.offset = offset;
+    this.length = length;
+    this.label = label;
+    this.dartElement = dartElement;
+    this.attributes = attributes;
+    this.className = className;
+    this.parentAssociationLabel = parentAssociationLabel;
+    this.variableName = variableName;
+    this.children = children;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof FlutterOutline) {
+      FlutterOutline other = (FlutterOutline) obj;
+      return
+        ObjectUtilities.equals(other.kind, kind) &&
+        other.offset == offset &&
+        other.length == length &&
+        ObjectUtilities.equals(other.label, label) &&
+        ObjectUtilities.equals(other.dartElement, dartElement) &&
+        ObjectUtilities.equals(other.attributes, attributes) &&
+        ObjectUtilities.equals(other.className, className) &&
+        ObjectUtilities.equals(other.parentAssociationLabel, parentAssociationLabel) &&
+        ObjectUtilities.equals(other.variableName, variableName) &&
+        ObjectUtilities.equals(other.children, children);
+    }
+    return false;
+  }
+
+  public static FlutterOutline fromJson(JsonObject jsonObject) {
+    String kind = jsonObject.get("kind").getAsString();
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    String label = jsonObject.get("label") == null ? null : jsonObject.get("label").getAsString();
+    Element dartElement = jsonObject.get("dartElement") == null ? null : Element.fromJson(jsonObject.get("dartElement").getAsJsonObject());
+    List<FlutterOutlineAttribute> attributes = jsonObject.get("attributes") == null ? null : FlutterOutlineAttribute.fromJsonArray(jsonObject.get("attributes").getAsJsonArray());
+    String className = jsonObject.get("className") == null ? null : jsonObject.get("className").getAsString();
+    String parentAssociationLabel = jsonObject.get("parentAssociationLabel") == null ? null : jsonObject.get("parentAssociationLabel").getAsString();
+    String variableName = jsonObject.get("variableName") == null ? null : jsonObject.get("variableName").getAsString();
+    List<FlutterOutline> children = jsonObject.get("children") == null ? null : FlutterOutline.fromJsonArray(jsonObject.get("children").getAsJsonArray());
+    return new FlutterOutline(kind, offset, length, label, dartElement, attributes, className, parentAssociationLabel, variableName, children);
+  }
+
+  public static List<FlutterOutline> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<FlutterOutline> list = new ArrayList<FlutterOutline>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * Additional attributes for this node, which might be interesting to display on the client. These
+   * attributes are usually arguments for the instance creation or the invocation that created the
+   * widget.
+   */
+  public List<FlutterOutlineAttribute> getAttributes() {
+    return attributes;
+  }
+
+  /**
+   * The children of the node. The field will be omitted if the node has no children.
+   */
+  public List<FlutterOutline> getChildren() {
+    return children;
+  }
+
+  /**
+   * If the node creates a new class instance, or a reference to an instance, this field has the name
+   * of the class.
+   */
+  public String getClassName() {
+    return className;
+  }
+
+  /**
+   * If this node is a Dart element, the description of it; omitted otherwise.
+   */
+  public Element getDartElement() {
+    return dartElement;
+  }
+
+  /**
+   * The kind of the node.
+   */
+  public String getKind() {
+    return kind;
+  }
+
+  /**
+   * The text label of the node children of the node. It is provided for any
+   * FlutterOutlineKind.GENERIC node, where better information is not available.
+   */
+  public String getLabel() {
+    return label;
+  }
+
+  /**
+   * The length of the element.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the first character of the element. This is different than the offset in the
+   * Element, which is the offset of the name of the element. It can be used, for example, to map
+   * locations in the file back to an outline.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  /**
+   * A short text description how this node is associated with the parent node. For example "appBar"
+   * or "body" in Scaffold.
+   */
+  public String getParentAssociationLabel() {
+    return parentAssociationLabel;
+  }
+
+  /**
+   * If FlutterOutlineKind.VARIABLE, the name of the variable.
+   */
+  public String getVariableName() {
+    return variableName;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(kind);
+    builder.append(offset);
+    builder.append(length);
+    builder.append(label);
+    builder.append(dartElement);
+    builder.append(attributes);
+    builder.append(className);
+    builder.append(parentAssociationLabel);
+    builder.append(variableName);
+    builder.append(children);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("kind", kind);
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    if (label != null) {
+      jsonObject.addProperty("label", label);
+    }
+    if (dartElement != null) {
+      jsonObject.add("dartElement", dartElement.toJson());
+    }
+    if (attributes != null) {
+      JsonArray jsonArrayAttributes = new JsonArray();
+      for (FlutterOutlineAttribute elt : attributes) {
+        jsonArrayAttributes.add(elt.toJson());
+      }
+      jsonObject.add("attributes", jsonArrayAttributes);
+    }
+    if (className != null) {
+      jsonObject.addProperty("className", className);
+    }
+    if (parentAssociationLabel != null) {
+      jsonObject.addProperty("parentAssociationLabel", parentAssociationLabel);
+    }
+    if (variableName != null) {
+      jsonObject.addProperty("variableName", variableName);
+    }
+    if (children != null) {
+      JsonArray jsonArrayChildren = new JsonArray();
+      for (FlutterOutline elt : children) {
+        jsonArrayChildren.add(elt.toJson());
+      }
+      jsonObject.add("children", jsonArrayChildren);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("kind=");
+    builder.append(kind + ", ");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length + ", ");
+    builder.append("label=");
+    builder.append(label + ", ");
+    builder.append("dartElement=");
+    builder.append(dartElement + ", ");
+    builder.append("attributes=");
+    builder.append(StringUtils.join(attributes, ", ") + ", ");
+    builder.append("className=");
+    builder.append(className + ", ");
+    builder.append("parentAssociationLabel=");
+    builder.append(parentAssociationLabel + ", ");
+    builder.append("variableName=");
+    builder.append(variableName + ", ");
+    builder.append("children=");
+    builder.append(StringUtils.join(children, ", "));
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutlineAttribute.java b/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutlineAttribute.java
new file mode 100644
index 0000000..b0dd387
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutlineAttribute.java
@@ -0,0 +1,197 @@
+/*
+ * 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.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * An attribute for a FlutterOutline.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class FlutterOutlineAttribute {
+
+  public static final FlutterOutlineAttribute[] EMPTY_ARRAY = new FlutterOutlineAttribute[0];
+
+  public static final List<FlutterOutlineAttribute> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The name of the attribute.
+   */
+  private final String name;
+
+  /**
+   * The label of the attribute value, usually the Dart code. It might be quite long, the client
+   * should abbreviate as needed.
+   */
+  private final String label;
+
+  /**
+   * The boolean literal value of the attribute. This field is absent if the value is not a boolean
+   * literal.
+   */
+  private final Boolean literalValueBoolean;
+
+  /**
+   * The integer literal value of the attribute. This field is absent if the value is not an integer
+   * literal.
+   */
+  private final Integer literalValueInteger;
+
+  /**
+   * The string literal value of the attribute. This field is absent if the value is not a string
+   * literal.
+   */
+  private final String literalValueString;
+
+  /**
+   * Constructor for {@link FlutterOutlineAttribute}.
+   */
+  public FlutterOutlineAttribute(String name, String label, Boolean literalValueBoolean, Integer literalValueInteger, String literalValueString) {
+    this.name = name;
+    this.label = label;
+    this.literalValueBoolean = literalValueBoolean;
+    this.literalValueInteger = literalValueInteger;
+    this.literalValueString = literalValueString;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof FlutterOutlineAttribute) {
+      FlutterOutlineAttribute other = (FlutterOutlineAttribute) obj;
+      return
+        ObjectUtilities.equals(other.name, name) &&
+        ObjectUtilities.equals(other.label, label) &&
+        ObjectUtilities.equals(other.literalValueBoolean, literalValueBoolean) &&
+        ObjectUtilities.equals(other.literalValueInteger, literalValueInteger) &&
+        ObjectUtilities.equals(other.literalValueString, literalValueString);
+    }
+    return false;
+  }
+
+  public static FlutterOutlineAttribute fromJson(JsonObject jsonObject) {
+    String name = jsonObject.get("name").getAsString();
+    String label = jsonObject.get("label").getAsString();
+    Boolean literalValueBoolean = jsonObject.get("literalValueBoolean") == null ? null : jsonObject.get("literalValueBoolean").getAsBoolean();
+    Integer literalValueInteger = jsonObject.get("literalValueInteger") == null ? null : jsonObject.get("literalValueInteger").getAsInt();
+    String literalValueString = jsonObject.get("literalValueString") == null ? null : jsonObject.get("literalValueString").getAsString();
+    return new FlutterOutlineAttribute(name, label, literalValueBoolean, literalValueInteger, literalValueString);
+  }
+
+  public static List<FlutterOutlineAttribute> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<FlutterOutlineAttribute> list = new ArrayList<FlutterOutlineAttribute>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The label of the attribute value, usually the Dart code. It might be quite long, the client
+   * should abbreviate as needed.
+   */
+  public String getLabel() {
+    return label;
+  }
+
+  /**
+   * The boolean literal value of the attribute. This field is absent if the value is not a boolean
+   * literal.
+   */
+  public Boolean getLiteralValueBoolean() {
+    return literalValueBoolean;
+  }
+
+  /**
+   * The integer literal value of the attribute. This field is absent if the value is not an integer
+   * literal.
+   */
+  public Integer getLiteralValueInteger() {
+    return literalValueInteger;
+  }
+
+  /**
+   * The string literal value of the attribute. This field is absent if the value is not a string
+   * literal.
+   */
+  public String getLiteralValueString() {
+    return literalValueString;
+  }
+
+  /**
+   * The name of the attribute.
+   */
+  public String getName() {
+    return name;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(name);
+    builder.append(label);
+    builder.append(literalValueBoolean);
+    builder.append(literalValueInteger);
+    builder.append(literalValueString);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("name", name);
+    jsonObject.addProperty("label", label);
+    if (literalValueBoolean != null) {
+      jsonObject.addProperty("literalValueBoolean", literalValueBoolean);
+    }
+    if (literalValueInteger != null) {
+      jsonObject.addProperty("literalValueInteger", literalValueInteger);
+    }
+    if (literalValueString != null) {
+      jsonObject.addProperty("literalValueString", literalValueString);
+    }
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("name=");
+    builder.append(name + ", ");
+    builder.append("label=");
+    builder.append(label + ", ");
+    builder.append("literalValueBoolean=");
+    builder.append(literalValueBoolean + ", ");
+    builder.append("literalValueInteger=");
+    builder.append(literalValueInteger + ", ");
+    builder.append("literalValueString=");
+    builder.append(literalValueString);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutlineKind.java b/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutlineKind.java
new file mode 100644
index 0000000..787dde2
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FlutterOutlineKind.java
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+/**
+ * An enumeration of the kinds of FlutterOutline elements. The list of kinds might be expanded with
+ * time, clients must be able to handle new kinds in some general way.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class FlutterOutlineKind {
+
+  /**
+   * A dart element declaration.
+   */
+  public static final String DART_ELEMENT = "DART_ELEMENT";
+
+  /**
+   * A generic Flutter element, without additional information.
+   */
+  public static final String GENERIC = "GENERIC";
+
+  /**
+   * A new instance creation.
+   */
+  public static final String NEW_INSTANCE = "NEW_INSTANCE";
+
+  /**
+   * An invocation of a method, a top-level function, a function expression, etc.
+   */
+  public static final String INVOCATION = "INVOCATION";
+
+  /**
+   * A reference to a local variable, or a field.
+   */
+  public static final String VARIABLE = "VARIABLE";
+
+  /**
+   * The parent node has a required Widget. The node works as a placeholder child to drop a new
+   * Widget to.
+   */
+  public static final String PLACEHOLDER = "PLACEHOLDER";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FlutterService.java b/pkg/analysis_server/tool/spec/generated/java/types/FlutterService.java
new file mode 100644
index 0000000..1420831
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FlutterService.java
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+/**
+ * An enumeration of the services provided by the flutter domain that are related to a specific
+ * list of files.
+ *
+ * @coverage dart.server.generated.types
+ */
+public class FlutterService {
+
+  public static final String OUTLINE = "OUTLINE";
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java b/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java
index 4a281de..f1d947b 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FoldingKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java b/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java
index ebad0e7..974a91e 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/FoldingRegion.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java b/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java
index 80975fa..d7574d7 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/GeneralAnalysisService.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java
index ebbd410..5c0148a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegion.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
index 15d1373..283cc1c 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HighlightRegionType.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java b/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java
index b9ca981..005de45 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/HoverInformation.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java
index 5c08f6b..d94fe3d 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java
index a18d6a4..9a6be8a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ImportedElements.java b/pkg/analysis_server/tool/spec/generated/java/types/ImportedElements.java
index 7f5b0e7..09352e6 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ImportedElements.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ImportedElements.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java
index 65e4a86..58dc75d 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/InlineLocalVariableFeedback.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java
index 6d80cfa..01a6506 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodFeedback.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java
index c13daa7..6601e8a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/InlineMethodOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/KytheEntry.java b/pkg/analysis_server/tool/spec/generated/java/types/KytheEntry.java
index 92fabff..1665860 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/KytheEntry.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/KytheEntry.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/KytheVName.java b/pkg/analysis_server/tool/spec/generated/java/types/KytheVName.java
index 2c56a72..b9180a1 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/KytheVName.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/KytheVName.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
index b83f304..736679f 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditGroup.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java
index 2537bc5..1cad088 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestion.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java
index be193e0..32ab8c9 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/LinkedEditSuggestionKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Location.java b/pkg/analysis_server/tool/spec/generated/java/types/Location.java
index d9f8ae0..96316ce 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Location.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Location.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java
index 4f04962..47dc947 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/MoveFileOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java b/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java
index 80565a9..7f8bf03 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/NavigationRegion.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java b/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java
index d1ef09f..383427e 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/NavigationTarget.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java b/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java
index 2f84e55..b0e4e3d 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Occurrences.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Outline.java b/pkg/analysis_server/tool/spec/generated/java/types/Outline.java
index 142671f..11083d5 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Outline.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Outline.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java b/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java
index 6054c55..73f9a60 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/OverriddenMember.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java b/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java
index 6f5936e..b4700c8 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/OverrideMember.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/Position.java b/pkg/analysis_server/tool/spec/generated/java/types/Position.java
index d9e3636..8e20368 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/Position.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/Position.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/PostfixTemplateDescriptor.java b/pkg/analysis_server/tool/spec/generated/java/types/PostfixTemplateDescriptor.java
index 8358f36..2cd8bca 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/PostfixTemplateDescriptor.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/PostfixTemplateDescriptor.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java b/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java
index 9d45a19..5eef429 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/PubStatus.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java
index d3cfa25..d826a54 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringFeedback.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java
index b4eb166..8ea691e 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java
index ddad032..0766bf8 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameter.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java
index c71d8bb..707cb36 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringMethodParameterKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java
index 67abd4b..8a6ab7a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java
index 1b82e4a..efdd0d2 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblem.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java
index 6befcd6..8366b6d 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RefactoringProblemSeverity.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java b/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java
index c9e14a4..4930a8c 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RemoveContentOverlay.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java b/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java
index c10021f..c1a54ee 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RenameFeedback.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java b/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java
index 18b80e0..dbd110e 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RenameOptions.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java b/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java
index 34c6b31..c25c38a 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RequestError.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java b/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java
index a389b5b..2d25c34 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/RequestErrorCode.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java b/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java
index 299aba0..ac4641f 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SearchResult.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java b/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java
index e556272..fdb3d41 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SearchResultKind.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java b/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
index 6846e6e..5c5a823 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ServerService.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
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 6842e2f..2d5f494 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceChange.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java b/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java
index 1d54802..dd052d2 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceEdit.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java b/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java
index 18fab9b..7792fe5 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/SourceFileEdit.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java b/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java
index b6420a2..3a7a821 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/TypeHierarchyItem.java
@@ -1,15 +1,7 @@
 /*
- * Copyright (c) 2015, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * 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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 29b17e6..17bd6ac 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -2580,6 +2580,89 @@
     </result>
   </request>
 </domain>
+<domain name="flutter" experimental="true">
+  <p>
+    The analysis domain contains API’s related to Flutter support.
+  </p>
+  <request method="setSubscriptions">
+    <p>
+      Subscribe for services that are specific to individual files.
+      All previous subscriptions are replaced by the current set of
+      subscriptions. If a given service is not included as a key in the map
+      then no files will be subscribed to the service, exactly as if the
+      service had been included in the map with an explicit empty list of
+      files.
+    </p>
+    <p>
+      Note that this request determines the set of requested
+      subscriptions. The actual set of subscriptions at any given
+      time is the intersection of this set with the set of files
+      currently subject to analysis. The files currently subject
+      to analysis are the set of files contained within an actual
+      analysis root but not excluded, plus all of the files
+      transitively reachable from those files via import, export
+      and part directives. (See analysis.setAnalysisRoots for an
+      explanation of how the actual analysis roots are
+      determined.) When the actual analysis roots change, the
+      actual set of subscriptions is automatically updated, but
+      the set of requested subscriptions is unchanged.
+    </p>
+    <p>
+      If a requested subscription is a directory it is ignored,
+      but remains in the set of requested subscriptions so that if
+      it later becomes a file it can be included in the set of
+      actual subscriptions.
+    </p>
+    <p>
+      It is an error if any of the keys in the map are not valid
+      services. If there is an error, then the existing
+      subscriptions will remain unchanged.
+    </p>
+    <params>
+      <field name="subscriptions">
+        <map>
+          <key>
+            <ref>FlutterService</ref>
+          </key>
+          <value>
+            <list>
+              <ref>FilePath</ref>
+            </list>
+          </value>
+        </map>
+        <p>
+          A table mapping services to a list of the files being
+          subscribed to the service.
+        </p>
+      </field>
+    </params>
+  </request>
+  <notification event="outline" experimental="true">
+    <p>
+      Reports the Flutter outline associated with a single file.
+    </p>
+    <p>
+      This notification is not subscribed to by default. Clients
+      can subscribe by including the value <tt>"OUTLINE"</tt> in
+      the list of services passed in an flutter.setSubscriptions
+      request.
+    </p>
+    <params>
+      <field name="file">
+        <ref>FilePath</ref>
+        <p>
+          The file with which the outline is associated.
+        </p>
+      </field>
+      <field name="outline">
+        <ref>FlutterOutline</ref>
+        <p>
+          The outline associated with the file.
+        </p>
+      </field>
+    </params>
+  </notification>
+</domain>
 <types>
   <h2 class="domain"><a name="types">Types</a></h2>
   <p>
@@ -2851,6 +2934,171 @@
       <value><code>PART</code></value>
     </enum>
   </type>
+  <type name="FlutterService" experimental="true">
+    <p>
+      An enumeration of the services provided by the flutter domain that
+      are related to a specific list of files.
+    </p>
+    <enum>
+      <value><code>OUTLINE</code></value>
+    </enum>
+  </type>
+  <type name="FlutterOutline" experimental="true">
+    <p>
+      An node in the Flutter specific outline structure of a file.
+    </p>
+    <object>
+      <field name="kind">
+        <ref>FlutterOutlineKind</ref>
+        <p>The kind of the node.</p>
+      </field>
+      <field name="offset">
+        <ref>int</ref>
+        <p>
+          The offset of the first character of the element. This is different
+          than the offset in the Element, which is the offset of the name of the
+          element. It can be used, for example, to map locations in the file
+          back to an outline.
+        </p>
+      </field>
+      <field name="length">
+        <ref>int</ref>
+        <p>
+          The length of the element.
+        </p>
+      </field>
+      <field name="label" optional="true">
+        <ref>String</ref>
+        <p>
+          The text label of the node children of the node.
+          It is provided for any FlutterOutlineKind.GENERIC node,
+          where better information is not available.
+        </p>
+      </field>
+      <field name="dartElement" optional="true">
+        <ref>Element</ref>
+        <p>
+          If this node is a Dart element, the description of it; omitted
+          otherwise.
+        </p>
+      </field>
+      <field name="attributes" optional="true">
+        <list>
+          <ref>FlutterOutlineAttribute</ref>
+        </list>
+        <p>
+          Additional attributes for this node, which might be interesting
+          to display on the client. These attributes are usually arguments
+          for the instance creation or the invocation that created the widget.
+        </p>
+      </field>
+      <field name="className" optional="true">
+        <ref>String</ref>
+        <p>
+          If the node creates a new class instance, or a reference to an
+          instance, this field has the name of the class.
+        </p>
+      </field>
+      <field name="parentAssociationLabel" optional="true">
+        <ref>String</ref>
+        <p>
+          A short text description how this node is associated with the parent
+          node. For example "appBar" or "body" in Scaffold.
+        </p>
+      </field>
+      <field name="variableName" optional="true">
+        <ref>String</ref>
+        <p>
+          If FlutterOutlineKind.VARIABLE, the name of the variable.
+        </p>
+      </field>
+      <field name="children" optional="true">
+        <list>
+          <ref>FlutterOutline</ref>
+        </list>
+        <p>
+          The children of the node. The field will be omitted if the node has no
+          children.
+        </p>
+      </field>
+    </object>
+  </type>
+  <type name="FlutterOutlineAttribute" experimental="true">
+    <p>
+      An attribute for a FlutterOutline.
+    </p>
+    <object>
+      <field name="name">
+        <ref>String</ref>
+        <p>
+          The name of the attribute.
+        </p>
+      </field>
+      <field name="label">
+        <ref>String</ref>
+        <p>
+          The label of the attribute value, usually the Dart code.
+          It might be quite long, the client should abbreviate as needed.
+        </p>
+      </field>
+      <field name="literalValueBoolean" optional="true">
+        <ref>bool</ref>
+        <p>
+          The boolean literal value of the attribute.
+          This field is absent if the value is not a boolean literal.
+        </p>
+      </field>
+      <field name="literalValueInteger" optional="true">
+        <ref>int</ref>
+        <p>
+          The integer literal value of the attribute.
+          This field is absent if the value is not an integer literal.
+        </p>
+      </field>
+      <field name="literalValueString" optional="true">
+        <ref>String</ref>
+        <p>
+          The string literal value of the attribute.
+          This field is absent if the value is not a string literal.
+        </p>
+      </field>
+    </object>
+  </type>
+  <type name="FlutterOutlineKind" experimental="true">
+    <p>
+      An enumeration of the kinds of FlutterOutline elements. The list of kinds
+      might be expanded with time, clients must be able to handle new kinds
+      in some general way.
+    </p>
+    <enum>
+      <value>
+        <code>DART_ELEMENT</code>
+        <p>A dart element declaration.</p>
+      </value>
+      <value>
+        <code>GENERIC</code>
+        <p>A generic Flutter element, without additional information.</p>
+      </value>
+      <value>
+        <code>NEW_INSTANCE</code>
+        <p>A new instance creation.</p>
+      </value>
+      <value>
+        <code>INVOCATION</code>
+        <p>An invocation of a method, a top-level function, a function
+          expression, etc.</p>
+      </value>
+      <value>
+        <code>VARIABLE</code>
+        <p>A reference to a local variable, or a field.</p>
+      </value>
+      <value>
+        <code>PLACEHOLDER</code>
+        <p>The parent node has a required Widget. The node works as a
+          placeholder child to drop a new Widget to.</p>
+      </value>
+    </enum>
+  </type>
   <type name="GeneralAnalysisService">
     <p>
       An enumeration of the services provided by the analysis domain that are
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 19df163..4ccf24f 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -297,6 +297,7 @@
   HintCode.UNUSED_ELEMENT,
   HintCode.UNUSED_FIELD,
   HintCode.UNUSED_IMPORT,
+  HintCode.UNUSED_LABEL,
   HintCode.UNUSED_LOCAL_VARIABLE,
   HintCode.UNUSED_SHOWN_NAME,
   HintCode.USE_OF_VOID_RESULT,
@@ -666,6 +667,7 @@
   StrongModeCode.TOP_LEVEL_FUNCTION_LITERAL_PARAMETER,
   StrongModeCode.TOP_LEVEL_IDENTIFIER_NO_TYPE,
   StrongModeCode.TOP_LEVEL_INSTANCE_GETTER,
+  StrongModeCode.TOP_LEVEL_INSTANCE_METHOD,
   StrongModeCode.TOP_LEVEL_TYPE_ARGUMENTS,
   StrongModeCode.TOP_LEVEL_UNSUPPORTED,
   StrongModeCode.USES_DYNAMIC_AS_BOTTOM,
diff --git a/pkg/analyzer/lib/src/codegen/tools.dart b/pkg/analyzer/lib/src/codegen/tools.dart
index a12ac35..34b2cc9 100644
--- a/pkg/analyzer/lib/src/codegen/tools.dart
+++ b/pkg/analyzer/lib/src/codegen/tools.dart
@@ -145,17 +145,9 @@
     if (codeGeneratorSettings.languageName == 'java') {
       header = '''
 /*
- * Copyright (c) ${year ?? '2015'}, the Dart project authors.
- *
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+ * Copyright (c) ${year ?? '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.
  *
  * This file has been automatically generated.  Please do not edit it manually.
  * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index c2315b3..6a73509 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -752,13 +752,15 @@
   }
 
   /**
-   * Return `true` if the class has a `noSuchMethod()` method distinct from the
-   * one declared in class `Object`, as per the Dart Language Specification
-   * (section 10.4).
+   * Return `true` if the class has a concrete `noSuchMethod()` method distinct
+   * from the one declared in class `Object`, as per the Dart Language
+   * Specification (section 10.4).
    */
   bool get hasNoSuchMethod {
-    MethodElement method =
-        lookUpMethod(FunctionElement.NO_SUCH_METHOD_METHOD_NAME, library);
+    MethodElement method = context.analysisOptions.strongMode
+        ? lookUpConcreteMethod(
+            FunctionElement.NO_SUCH_METHOD_METHOD_NAME, library)
+        : lookUpMethod(FunctionElement.NO_SUCH_METHOD_METHOD_NAME, library);
     ClassElement definingClass = method?.enclosingElement;
     return definingClass != null && !definingClass.type.isObject;
   }
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 54ad677..51f7726 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -629,12 +629,25 @@
 
   /**
    * Unused imports are imports which are never used.
+   *
+   * Parameters:
+   * 0: The content of the unused import's uri
    */
-  static const HintCode UNUSED_IMPORT = const HintCode(
-      'UNUSED_IMPORT', "Unused import.", "Try removing the import directive.");
+  static const HintCode UNUSED_IMPORT = const HintCode('UNUSED_IMPORT',
+      "Unused import: '{0}'.", "Try removing the import directive.");
 
   /**
-   * Unused local variables are local variables which are never read.
+   * Unused labels are labels that are never referenced in either a 'break' or
+   * 'continue' statement.
+   */
+  static const HintCode UNUSED_LABEL = const HintCode(
+      'UNUSED_LABEL',
+      "The label '{0}' isn't used.",
+      "Try removing the label, or "
+      "using it in either a 'break' or 'continue' statement.");
+
+  /**
+   * Unused local variables are local variables that are never read.
    */
   static const HintCode UNUSED_LOCAL_VARIABLE = const HintCode(
       'UNUSED_LOCAL_VARIABLE',
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 381296e..29d2e48 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -5058,6 +5058,13 @@
       "getter, '{1}', which has an implicit type.",
       "Add an explicit type for either '{0}' or '{1}'.");
 
+  static const StrongModeCode TOP_LEVEL_INSTANCE_METHOD = const StrongModeCode(
+      ErrorType.STATIC_WARNING,
+      'TOP_LEVEL_INSTANCE_METHOD',
+      "The type of '{0}' can't be inferred because it refers to an instance "
+      "method, '{1}', which has an implicit type.",
+      "Add an explicit type for either '{0}' or '{1}'.");
+
   static const StrongModeCode TOP_LEVEL_TYPE_ARGUMENTS = const StrongModeCode(
       ErrorType.HINT,
       'TOP_LEVEL_TYPE_ARGUMENTS',
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
index 397dc49..8416c84 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
@@ -241,12 +241,11 @@
   }
 
   @override
-  bool constructorInvocationEnter(InvocationExpression expression,
+  void constructorInvocationEnter(InvocationExpression expression,
       String prefixName, DartType typeContext) {
     _recordImportPrefix(prefixName);
     _deferReference(expression.fileOffset);
     _deferType(expression.fileOffset);
-    return true;
   }
 
   @override
@@ -310,10 +309,10 @@
   }
 
   @override
-  bool functionExpressionEnter(
+  void functionExpressionEnter(
       FunctionExpression expression, DartType typeContext) {
     _recordDeclaration(expression, expression.fileOffset);
-    return super.functionExpressionEnter(expression, typeContext);
+    super.functionExpressionEnter(expression, typeContext);
   }
 
   @override
@@ -324,10 +323,9 @@
   }
 
   @override
-  bool genericExpressionEnter(
+  void genericExpressionEnter(
       String expressionType, Expression expression, DartType typeContext) {
     super.genericExpressionEnter(expressionType, expression, typeContext);
-    return true;
   }
 
   @override
@@ -459,11 +457,11 @@
   }
 
   @override
-  bool propertyAssignEnter(
+  void propertyAssignEnter(
       Expression expression, Expression write, DartType typeContext) {
     _deferReference(write.fileOffset);
     _deferType(write.fileOffset);
-    return super.propertyAssignEnter(expression, write, typeContext);
+    super.propertyAssignEnter(expression, write, typeContext);
   }
 
   @override
@@ -501,7 +499,7 @@
   }
 
   @override
-  bool staticAssignEnter(
+  void staticAssignEnter(
       Expression expression,
       String prefixName,
       int targetOffset,
@@ -518,7 +516,7 @@
 
     _deferReference(write.fileOffset);
     _deferType(write.fileOffset);
-    return super.staticAssignEnter(
+    super.staticAssignEnter(
         expression, prefixName, targetOffset, targetClass, write, typeContext);
   }
 
@@ -538,7 +536,7 @@
   }
 
   @override
-  bool staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
+  void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
       Class targetClass, DartType typeContext) {
     // if there was an import prefix, record it.
     _recordImportPrefix(prefixName);
@@ -547,7 +545,7 @@
       _recordReference(targetClass, targetOffset);
       _recordType(targetClass.rawType, targetOffset);
     }
-    return super.staticGetEnter(
+    super.staticGetEnter(
         expression, prefixName, targetOffset, targetClass, typeContext);
   }
 
@@ -559,7 +557,7 @@
   }
 
   @override
-  bool staticInvocationEnter(StaticInvocation expression, String prefixName,
+  void staticInvocationEnter(StaticInvocation expression, String prefixName,
       int targetOffset, Class targetClass, DartType typeContext) {
     // if there was an import prefix, record it.
     _recordImportPrefix(prefixName);
@@ -587,7 +585,7 @@
     _deferType(expression.arguments.fileOffset); // invoke type
     _deferType(expression.arguments.fileOffset); // type arguments
     _deferType(expression.arguments.fileOffset); // result type
-    return super.staticInvocationEnter(
+    super.staticInvocationEnter(
         expression, prefixName, targetOffset, targetClass, typeContext);
   }
 
@@ -618,11 +616,11 @@
   @override
   void thisExpressionExit(ThisExpression expression, DartType inferredType) {}
 
-  bool typeLiteralEnter(@override TypeLiteral expression, String prefixName,
+  void typeLiteralEnter(@override TypeLiteral expression, String prefixName,
       DartType typeContext) {
     // if there was an import prefix, record it.
     _recordImportPrefix(prefixName);
-    return super.typeLiteralEnter(expression, prefixName, typeContext);
+    super.typeLiteralEnter(expression, prefixName, typeContext);
   }
 
   void typeLiteralExit(TypeLiteral expression, DartType inferredType) {
@@ -631,11 +629,11 @@
   }
 
   @override
-  bool variableAssignEnter(
+  void variableAssignEnter(
       Expression expression, DartType typeContext, Expression write) {
     _deferReference(write.fileOffset);
     _deferType(write.fileOffset);
-    return super.variableAssignEnter(expression, typeContext, write);
+    super.variableAssignEnter(expression, typeContext, write);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index b28b557..4158b0d 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -5661,8 +5661,13 @@
       }
       return;
     }
-    if (_expressionIsAssignableAtType(
-        returnExpression, staticReturnType, expectedReturnType)) {
+
+    // TODO(mfairhurst) Make this stricter once codebases are compliant.
+    final invalidVoidReturn = staticReturnType.isVoid &&
+        !(expectedReturnType.isVoid || expectedReturnType.isDynamic);
+    if (!invalidVoidReturn &&
+        _expressionIsAssignableAtType(
+            returnExpression, staticReturnType, expectedReturnType)) {
       return;
     }
     if (displayName.isEmpty) {
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index b11e946..29b0f99 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2071,8 +2071,7 @@
 }
 
 /**
- * Instances of the class `DeadCodeVerifier` traverse an AST structure looking for cases of
- * [HintCode.DEAD_CODE].
+ * A visitor that finds dead code and unused labels.
  */
 class DeadCodeVerifier extends RecursiveAstVisitor<Object> {
   /**
@@ -2086,9 +2085,14 @@
   final TypeSystem _typeSystem;
 
   /**
-   * Create a new instance of the [DeadCodeVerifier].
-   *
-   * @param errorReporter the error reporter
+   * The object used to track the usage of labels within a given label scope.
+   */
+  _LabelTracker labelTracker;
+
+  /**
+   * Initialize a newly created dead code verifier that will report dead code to
+   * the given [errorReporter] and will use the given [typeSystem] if one is
+   * provided.
    */
   DeadCodeVerifier(this._errorReporter, {TypeSystem typeSystem})
       : this._typeSystem = typeSystem ?? new TypeSystemImpl(null);
@@ -2145,10 +2149,9 @@
   }
 
   /**
-   * For each [Block], this method reports and error on all statements between the end of the
-   * block and the first return statement (assuming there it is not at the end of the block.)
-   *
-   * @param node the block to evaluate
+   * For each block, this method reports and error on all statements between the
+   * end of the block and the first return statement (assuming there it is not
+   * at the end of the block.)
    */
   @override
   Object visitBlock(Block node) {
@@ -2158,6 +2161,12 @@
   }
 
   @override
+  Object visitBreakStatement(BreakStatement node) {
+    labelTracker?.recordUsage(node.label?.name);
+    return null;
+  }
+
+  @override
   Object visitConditionalExpression(ConditionalExpression node) {
     Expression conditionExpression = node.condition;
     conditionExpression?.accept(this);
@@ -2184,6 +2193,12 @@
   }
 
   @override
+  Object visitContinueStatement(ContinueStatement node) {
+    labelTracker?.recordUsage(node.label?.name);
+    return null;
+  }
+
+  @override
   Object visitExportDirective(ExportDirective node) {
     ExportElement exportElement = node.element;
     if (exportElement != null) {
@@ -2244,6 +2259,17 @@
   }
 
   @override
+  Object visitLabeledStatement(LabeledStatement node) {
+    _pushLabels(node.labels);
+    try {
+      super.visitLabeledStatement(node);
+    } finally {
+      _popLabels();
+    }
+    return null;
+  }
+
+  @override
   Object visitSwitchCase(SwitchCase node) {
     _checkForDeadStatementsInNodeList(node.statements, allowMandated: true);
     return super.visitSwitchCase(node);
@@ -2256,6 +2282,21 @@
   }
 
   @override
+  Object visitSwitchStatement(SwitchStatement node) {
+    List<Label> labels = <Label>[];
+    for (SwitchMember member in node.members) {
+      labels.addAll(member.labels);
+    }
+    _pushLabels(labels);
+    try {
+      super.visitSwitchStatement(node);
+    } finally {
+      _popLabels();
+    }
+    return null;
+  }
+
+  @override
   Object visitTryStatement(TryStatement node) {
     node.body?.accept(this);
     node.finallyBlock?.accept(this);
@@ -2373,13 +2414,11 @@
   }
 
   /**
-   * Given some [NodeList] of [Statement]s, from either a [Block] or
-   * [SwitchMember], this loops through the list searching for dead statements.
-   *
-   * @param statements some ordered list of statements in a [Block] or [SwitchMember]
-   * @param allowMandated allow dead statements mandated by the language spec.
-   *            This allows for a final break, continue, return, or throw statement
-   *            at the end of a switch case, that are mandated by the language spec.
+   * Given some list of [statements], loop through the list searching for dead
+   * statements. If [allowMandated] is true, then allow dead statements that are
+   * mandated by the language spec. This allows for a final break, continue,
+   * return, or throw statement at the end of a switch case, that are mandated
+   * by the language spec.
    */
   void _checkForDeadStatementsInNodeList(NodeList<Statement> statements,
       {bool allowMandated: false}) {
@@ -2415,14 +2454,9 @@
   }
 
   /**
-   * Given some [Expression], this method returns [ValidResult.RESULT_TRUE] if it is
-   * `true`, [ValidResult.RESULT_FALSE] if it is `false`, or `null` if the
-   * expression is not a constant boolean value.
-   *
-   * @param expression the expression to evaluate
-   * @return [ValidResult.RESULT_TRUE] if it is `true`, [ValidResult.RESULT_FALSE]
-   *         if it is `false`, or `null` if the expression is not a constant boolean
-   *         value
+   * Given some [expression], return [ValidResult.RESULT_TRUE] if it is `true`,
+   * [ValidResult.RESULT_FALSE] if it is `false`, or `null` if the expression is
+   * not a constant boolean value.
    */
   EvaluationResultImpl _getConstantBooleanValue(Expression expression) {
     if (expression is BooleanLiteral) {
@@ -2449,10 +2483,7 @@
   }
 
   /**
-   * Return `true` if and only if the passed expression is resolved to a constant variable.
-   *
-   * @param expression some conditional expression
-   * @return `true` if and only if the passed expression is resolved to a constant variable
+   * Return `true` if the given [expression] is resolved to a constant variable.
    */
   bool _isDebugConstant(Expression expression) {
     Element element = null;
@@ -2467,6 +2498,25 @@
     }
     return false;
   }
+
+  /**
+   * Exit the most recently entered label scope after reporting any labels that
+   * were not referenced within that scope.
+   */
+  void _popLabels() {
+    for (Label label in labelTracker.unusedLabels()) {
+      _errorReporter
+          .reportErrorForNode(HintCode.UNUSED_LABEL, label, [label.label.name]);
+    }
+    labelTracker = labelTracker.outerTracker;
+  }
+
+  /**
+   * Enter a new label scope in which the given [labels] are defined.
+   */
+  void _pushLabels(List<Label> labels) {
+    labelTracker = new _LabelTracker(labelTracker, labels);
+  }
 }
 
 /**
@@ -3984,8 +4034,9 @@
           continue;
         }
       }
-      errorReporter.reportErrorForNode(
-          HintCode.UNUSED_IMPORT, unusedImport.uri);
+      StringLiteral uri = unusedImport.uri;
+      errorReporter
+          .reportErrorForNode(HintCode.UNUSED_IMPORT, uri, [uri.stringValue]);
     }
   }
 
@@ -6972,10 +7023,6 @@
  * The abstract class `ScopedVisitor` maintains name and label scopes as an AST structure is
  * being visited.
  */
-/**
- * The abstract class `ScopedVisitor` maintains name and label scopes as an AST structure is
- * being visited.
- */
 abstract class ScopedVisitor extends UnifyingAstVisitor<Object> {
   /**
    * The element for the library containing the compilation unit being visited.
@@ -10696,6 +10743,67 @@
   }
 }
 
+/**
+ * An object used to track the usage of labels within a single label scope.
+ */
+class _LabelTracker {
+  /**
+   * The tracker for the outer label scope.
+   */
+  final _LabelTracker outerTracker;
+
+  /**
+   * The labels whose usage is being tracked.
+   */
+  final List<Label> labels;
+
+  /**
+   * A list of flags corresponding to the list of [labels] indicating whether
+   * the corresponding label has been used.
+   */
+  List<bool> used;
+
+  /**
+   * A map from the names of labels to the index of the label in [labels].
+   */
+  final Map<String, int> labelMap = <String, int>{};
+
+  /**
+   * Initialize a newly created label tracker.
+   */
+  _LabelTracker(this.outerTracker, this.labels) {
+    used = new List.filled(labels.length, false);
+    for (int i = 0; i < labels.length; i++) {
+      labelMap[labels[i].label.name] = i;
+    }
+  }
+
+  /**
+   * Record that the label with the given [labelName] has been used.
+   */
+  void recordUsage(String labelName) {
+    if (labelName != null) {
+      int index = labelMap[labelName];
+      if (index != null) {
+        used[index] = true;
+      } else if (outerTracker != null) {
+        outerTracker.recordUsage(labelName);
+      }
+    }
+  }
+
+  /**
+   * Return the unused labels.
+   */
+  Iterable<Label> unusedLabels() sync* {
+    for (int i = 0; i < labels.length; i++) {
+      if (!used[i]) {
+        yield labels[i];
+      }
+    }
+  }
+}
+
 class _ResolverVisitor_isVariableAccessedInClosure
     extends RecursiveAstVisitor<Object> {
   final Element variable;
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index e8b7614..cf55a77 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -35,6 +35,7 @@
   }
   return (t.isDynamic && !dynamicIsBottom) ||
       t.isObject ||
+      t.isVoid ||
       identical(t, UnknownInferredType.instance);
 }
 
@@ -51,10 +52,11 @@
   assert(_isTop(t), 'only Top types have a topiness');
 
   // Highest top
-  if (t.isDynamic) return 2;
-  if (t.isObject) return 1;
+  if (t.isDynamic) return 3;
+  if (t.isObject) return 2;
+  if (t.isVoid) return 1;
   if (t.isDartAsyncFutureOr)
-    return -2 + _getTopiness((t as InterfaceType).typeArguments[0]);
+    return -3 + _getTopiness((t as InterfaceType).typeArguments[0]);
   // Lowest top
 
   assert(false, 'a Top type without a defined topiness');
@@ -173,10 +175,11 @@
       return type1;
     }
 
-    // If both are top, we have a preferred "greatest" top to return.
+    // For the purpose of GLB, we say some Tops are subtypes (less toppy) than
+    // the others. Return the least toppy.
     if (_isTop(type1, dynamicIsBottom: dynamicIsBottom) &&
         _isTop(type2, dynamicIsBottom: dynamicIsBottom)) {
-      return _getTopiness(type1) > _getTopiness(type2) ? type1 : type2;
+      return _getTopiness(type1) < _getTopiness(type2) ? type1 : type2;
     }
 
     // The GLB of top and any type is just that type.
@@ -190,17 +193,6 @@
       return type1;
     }
 
-    // Treat void as top-like for GLB. This only comes into play with the
-    // return types of two functions whose GLB is being taken. We allow a
-    // non-void-returning function to subtype a void-returning one, so match
-    // that logic here by treating the non-void arm as the subtype for GLB.
-    if (type1.isVoid) {
-      return type2;
-    }
-    if (type2.isVoid) {
-      return type1;
-    }
-
     // Function types have structural GLB.
     if (type1 is FunctionType && type2 is FunctionType) {
       return _functionGreatestLowerBound(type1, type2);
@@ -968,16 +960,6 @@
       return false;
     }
 
-    // Void only appears as the return type of a function, and we handle it
-    // directly in the function subtype rules. We should not get to a point
-    // where we're doing a subtype test on a "bare" void, but just in case we
-    // do, handle it safely.
-    // TODO(rnystrom): Determine how this can ever be reached. If it can't,
-    // remove it.
-    if (t1.isVoid || t2.isVoid) {
-      return t1.isVoid && t2.isVoid;
-    }
-
     // We've eliminated void, dynamic, bottom, type parameters, and FutureOr.
     // The only cases are the combinations of interface type and function type.
 
@@ -1194,10 +1176,11 @@
       return type1;
     }
 
-    // If both are top, we have a preferred "least" top to return.
+    // For the purpose of LUB, we say some Tops are subtypes (less toppy) than
+    // the others. Return the most toppy.
     if (_isTop(type1, dynamicIsBottom: dynamicIsBottom) &&
         _isTop(type2, dynamicIsBottom: dynamicIsBottom)) {
-      return _getTopiness(type1) < _getTopiness(type2) ? type1 : type2;
+      return _getTopiness(type1) > _getTopiness(type2) ? type1 : type2;
     }
 
     // The least upper bound of top and any type T is top.
@@ -1210,13 +1193,6 @@
         _isBottom(type1, dynamicIsBottom: dynamicIsBottom)) {
       return type2;
     }
-    // The least upper bound of void and any type T != dynamic is void.
-    if (type1.isVoid) {
-      return type1;
-    }
-    if (type2.isVoid) {
-      return type2;
-    }
 
     if (type1 is TypeParameterType || type2 is TypeParameterType) {
       return _typeParameterLeastUpperBound(type1, type2);
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index 445e54a..d5bfc2e 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -1291,123 +1291,7 @@
   }
 
   void _validateTopLevelInitializer(String name, Expression n) {
-    void validateHasType(PropertyAccessorElement e) {
-      if (e.hasImplicitReturnType) {
-        var variable = e.variable as VariableElementImpl;
-        TopLevelInferenceError error = variable.typeInferenceError;
-        if (error != null) {
-          if (error.kind == TopLevelInferenceErrorKind.dependencyCycle) {
-            _recordMessage(
-                n, StrongModeCode.TOP_LEVEL_CYCLE, [name, error.arguments]);
-          } else {
-            _recordMessage(
-                n, StrongModeCode.TOP_LEVEL_IDENTIFIER_NO_TYPE, [name, e.name]);
-          }
-        }
-      }
-    }
-
-    void validateIdentifierElement(AstNode n, Element e) {
-      if (e == null) {
-        return;
-      }
-
-      Element enclosing = e.enclosingElement;
-      if (enclosing is CompilationUnitElement) {
-        if (e is PropertyAccessorElement) {
-          validateHasType(e);
-        }
-      } else if (enclosing is ClassElement) {
-        if (e is PropertyAccessorElement) {
-          if (e.isStatic) {
-            validateHasType(e);
-          } else if (e.hasImplicitReturnType) {
-            _recordMessage(
-                n, StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, [name, e.name]);
-          }
-        }
-      }
-    }
-
-    if (n == null ||
-        n is NullLiteral ||
-        n is BooleanLiteral ||
-        n is DoubleLiteral ||
-        n is IntegerLiteral ||
-        n is StringLiteral ||
-        n is SymbolLiteral ||
-        n is IndexExpression) {
-      // Nothing to validate.
-    } else if (n is AwaitExpression) {
-      _validateTopLevelInitializer(name, n.expression);
-    } else if (n is ThrowExpression) {
-      // Nothing to validate.
-    } else if (n is ParenthesizedExpression) {
-      _validateTopLevelInitializer(name, n.expression);
-    } else if (n is ConditionalExpression) {
-      _validateTopLevelInitializer(name, n.thenExpression);
-      _validateTopLevelInitializer(name, n.elseExpression);
-    } else if (n is BinaryExpression) {
-      TokenType operator = n.operator.type;
-      if (operator == TokenType.AMPERSAND_AMPERSAND ||
-          operator == TokenType.BAR_BAR ||
-          operator == TokenType.EQ_EQ ||
-          operator == TokenType.BANG_EQ) {
-        // These operators give 'bool', no need to validate operands.
-      } else if (operator == TokenType.QUESTION_QUESTION) {
-        _validateTopLevelInitializer(name, n.leftOperand);
-        _validateTopLevelInitializer(name, n.rightOperand);
-      } else {
-        _validateTopLevelInitializer(name, n.leftOperand);
-      }
-    } else if (n is PrefixExpression) {
-      TokenType operator = n.operator.type;
-      if (operator == TokenType.BANG) {
-        // This operator gives 'bool', no need to validate operands.
-      } else {
-        _validateTopLevelInitializer(name, n.operand);
-      }
-    } else if (n is PostfixExpression) {
-      _validateTopLevelInitializer(name, n.operand);
-    } else if (n is ListLiteral) {
-      if (n.typeArguments == null) {
-        for (Expression element in n.elements) {
-          _validateTopLevelInitializer(name, element);
-        }
-      }
-    } else if (n is MapLiteral) {
-      if (n.typeArguments == null) {
-        for (MapLiteralEntry entry in n.entries) {
-          _validateTopLevelInitializer(name, entry.key);
-          _validateTopLevelInitializer(name, entry.value);
-        }
-      }
-    } else if (n is FunctionExpression) {
-      FunctionBody body = n.body;
-      if (body is ExpressionFunctionBody) {
-        _validateTopLevelInitializer(name, body.expression);
-      } else {
-        _recordMessage(n, StrongModeCode.TOP_LEVEL_FUNCTION_LITERAL_BLOCK, []);
-      }
-    } else if (n is InstanceCreationExpression) {
-      // Nothing to validate.
-    } else if (n is AsExpression) {
-      // Nothing to validate.
-    } else if (n is IsExpression) {
-      // Nothing to validate.
-    } else if (n is Identifier) {
-      validateIdentifierElement(n, n.staticElement);
-    } else if (n is PropertyAccess) {
-      Element element = n.propertyName.staticElement;
-      validateIdentifierElement(n.propertyName, element);
-    } else if (n is FunctionExpressionInvocation) {
-      _validateTopLevelInitializer(name, n.function);
-    } else if (n is MethodInvocation) {
-      _validateTopLevelInitializer(name, n.methodName);
-      _validateTopLevelInitializer(name, n.target);
-    } else if (n is CascadeExpression) {
-      _validateTopLevelInitializer(name, n.target);
-    }
+    n.accept(new _TopLevelInitializerValidator(this, name));
   }
 }
 
@@ -2069,3 +1953,201 @@
         : (node as ClassTypeAlias).withClause;
   }
 }
+
+class _TopLevelInitializerValidator extends RecursiveAstVisitor<Null> {
+  final CodeChecker _codeChecker;
+  final String _name;
+
+  _TopLevelInitializerValidator(this._codeChecker, this._name);
+
+  void validateHasType(AstNode n, PropertyAccessorElement e) {
+    if (e.hasImplicitReturnType) {
+      var variable = e.variable as VariableElementImpl;
+      TopLevelInferenceError error = variable.typeInferenceError;
+      if (error != null) {
+        if (error.kind == TopLevelInferenceErrorKind.dependencyCycle) {
+          _codeChecker._recordMessage(
+              n, StrongModeCode.TOP_LEVEL_CYCLE, [_name, error.arguments]);
+        } else {
+          _codeChecker._recordMessage(
+              n, StrongModeCode.TOP_LEVEL_IDENTIFIER_NO_TYPE, [_name, e.name]);
+        }
+      }
+    }
+  }
+
+  void validateIdentifierElement(AstNode n, Element e,
+      {bool isMethodCall: false}) {
+    if (e == null) {
+      return;
+    }
+
+    Element enclosing = e.enclosingElement;
+    if (enclosing is CompilationUnitElement) {
+      if (e is PropertyAccessorElement) {
+        validateHasType(n, e);
+      }
+    } else if (enclosing is ClassElement) {
+      if (e is PropertyAccessorElement) {
+        if (e.isStatic) {
+          validateHasType(n, e);
+        } else if (e.hasImplicitReturnType) {
+          _codeChecker._recordMessage(
+              n, StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, [_name, e.name]);
+        }
+      } else if (!isMethodCall &&
+          e is ExecutableElement &&
+          e.kind == ElementKind.METHOD &&
+          !e.isStatic) {
+        if (_hasAnyImplicitType(e)) {
+          _codeChecker._recordMessage(
+              n, StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, [_name, e.name]);
+        }
+      }
+    }
+  }
+
+  @override
+  visitAsExpression(AsExpression node) {
+    // Nothing to validate.
+  }
+
+  @override
+  visitBinaryExpression(BinaryExpression node) {
+    TokenType operator = node.operator.type;
+    if (operator == TokenType.AMPERSAND_AMPERSAND ||
+        operator == TokenType.BAR_BAR ||
+        operator == TokenType.EQ_EQ ||
+        operator == TokenType.BANG_EQ) {
+      // These operators give 'bool', no need to validate operands.
+    } else {
+      node.leftOperand.accept(this);
+    }
+  }
+
+  @override
+  visitCascadeExpression(CascadeExpression node) {
+    node.target.accept(this);
+  }
+
+  @override
+  visitConditionalExpression(ConditionalExpression node) {
+    // No need to validate the condition, since it can't affect type inference.
+    node.thenExpression.accept(this);
+    node.elseExpression.accept(this);
+  }
+
+  @override
+  visitFunctionExpression(FunctionExpression node) {
+    FunctionBody body = node.body;
+    if (body is ExpressionFunctionBody) {
+      body.expression.accept(this);
+    } else {
+      _codeChecker._recordMessage(
+          node, StrongModeCode.TOP_LEVEL_FUNCTION_LITERAL_BLOCK, []);
+    }
+  }
+
+  @override
+  visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
+    var functionType = node.function.staticType;
+    if (node.typeArguments == null &&
+        functionType is FunctionType &&
+        functionType.typeFormals.isNotEmpty) {
+      // Type inference might depend on the parameters
+      super.visitFunctionExpressionInvocation(node);
+    }
+  }
+
+  @override
+  visitIndexExpression(IndexExpression node) {
+    // Nothing to validate.
+  }
+
+  @override
+  visitInstanceCreationExpression(InstanceCreationExpression node) {
+    var constructor = node.staticElement;
+    ClassElement class_ = constructor?.enclosingElement;
+    if (node.constructorName.type.typeArguments == null &&
+        class_ != null &&
+        class_.typeParameters.isNotEmpty) {
+      // Type inference might depend on the parameters
+      super.visitInstanceCreationExpression(node);
+    }
+  }
+
+  @override
+  visitIsExpression(IsExpression node) {
+    // Nothing to validate.
+  }
+
+  @override
+  visitListLiteral(ListLiteral node) {
+    if (node.typeArguments == null) {
+      super.visitListLiteral(node);
+    }
+  }
+
+  @override
+  visitMapLiteral(MapLiteral node) {
+    if (node.typeArguments == null) {
+      super.visitMapLiteral(node);
+    }
+  }
+
+  @override
+  visitMethodInvocation(MethodInvocation node) {
+    node.target?.accept(this);
+    var method = node.methodName.staticElement;
+    validateIdentifierElement(node, method, isMethodCall: true);
+    if (method is ExecutableElement) {
+      if (method.kind == ElementKind.METHOD &&
+          !method.isStatic &&
+          method.hasImplicitReturnType) {
+        _codeChecker._recordMessage(node,
+            StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, [_name, method.name]);
+      }
+      if (node.typeArguments == null && method.typeParameters.isNotEmpty) {
+        if (method.kind == ElementKind.METHOD &&
+            !method.isStatic &&
+            _anyParameterHasImplicitType(method)) {
+          _codeChecker._recordMessage(node,
+              StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, [_name, method.name]);
+        }
+        // Type inference might depend on the parameters
+        node.argumentList?.accept(this);
+      }
+    }
+  }
+
+  @override
+  visitPrefixExpression(PrefixExpression node) {
+    if (node.operator.type == TokenType.BANG) {
+      // This operator gives 'bool', no need to validate operands.
+    } else {
+      node.operand.accept(this);
+    }
+  }
+
+  @override
+  visitSimpleIdentifier(SimpleIdentifier node) {
+    validateIdentifierElement(node, node.staticElement);
+  }
+
+  @override
+  visitThrowExpression(ThrowExpression node) {
+    // Nothing to validate.
+  }
+
+  bool _anyParameterHasImplicitType(ExecutableElement e) {
+    for (var parameter in e.parameters) {
+      if (parameter.hasImplicitType) return true;
+    }
+    return false;
+  }
+
+  bool _hasAnyImplicitType(ExecutableElement e) {
+    if (e.hasImplicitReturnType) return true;
+    return _anyParameterHasImplicitType(e);
+  }
+}
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 cd35af5..42274d3 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
@@ -835,11 +835,7 @@
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_extendsDisallowedClass_class_Null() async {
-    // Expected 1 errors of type CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS, found 0;
-    //          1 errors of type CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, found 0
     await super.test_extendsDisallowedClass_class_Null();
   }
 
@@ -1078,18 +1074,12 @@
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_implementsDisallowedClass_class_Null() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
     await super.test_implementsDisallowedClass_class_Null();
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_implementsDisallowedClass_classTypeAlias_Null() async {
-    // Expected 1 errors of type CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS, found 0
     await super.test_implementsDisallowedClass_classTypeAlias_Null();
   }
 
@@ -1734,18 +1724,12 @@
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_mixinOfDisallowedClass_class_Null() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
     await super.test_mixinOfDisallowedClass_class_Null();
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31817')
   test_mixinOfDisallowedClass_classTypeAlias_Null() async {
-    // Expected 1 errors of type CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS, found 0
     await super.test_mixinOfDisallowedClass_classTypeAlias_Null();
   }
 
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index 89b011f..8551fdc 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -400,7 +400,10 @@
 g() {}
 ''');
     await computeAnalysisResult(source);
-    assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
+    assertErrors(source, [
+      ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
+      HintCode.UNUSED_LABEL
+    ]);
     verify([source]);
   }
 
@@ -441,7 +444,10 @@
 }
 ''');
     await computeAnalysisResult(source);
-    assertErrors(source, [ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER]);
+    assertErrors(source, [
+      ParserErrorCode.ASYNC_KEYWORD_USED_AS_IDENTIFIER,
+      HintCode.UNUSED_LABEL
+    ]);
     verify([source]);
   }
 
@@ -1064,7 +1070,7 @@
     Source source = addSource(r'''
 class A {
   const A();
-  m() {}
+  int m() => 0;
 }
 final a = const A();
 const C = a.m;''');
@@ -2888,7 +2894,7 @@
     Source source = addSource(r'''
 class A {
   static var F = m();
-  m() {}
+  int m() => 0;
 }''');
     await computeAnalysisResult(source);
     assertErrors(
@@ -3707,7 +3713,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.LABEL_UNDEFINED]);
+    assertErrors(
+        source, [CompileTimeErrorCode.LABEL_UNDEFINED, HintCode.UNUSED_LABEL]);
     // We cannot verify resolution with undefined labels
   }
 
@@ -3719,7 +3726,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.LABEL_UNDEFINED]);
+    assertErrors(
+        source, [CompileTimeErrorCode.LABEL_UNDEFINED, HintCode.UNUSED_LABEL]);
     // We cannot verify resolution with undefined labels
   }
 
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
index 9662e18..530eb78 100644
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
@@ -365,6 +365,20 @@
     return super.test_strongMode_downCastCompositeWarn();
   }
 
+  @override
+  @failingTest
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke() {
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke();
+  }
+
+  @override
+  @failingTest
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke_explicit_type_params() {
+    return super
+        .test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke_explicit_type_params();
+  }
+
   @failingTest
   @override
   test_undefinedGetter() async {
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index 40f3c65..dae6056 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -2014,6 +2014,22 @@
     verify([source, source2, source3]);
   }
 
+  test_invalidUseOfVisibleForTestingMember_OK_export() async {
+    Source source = addNamedSource('/lib1.dart', r'''
+import 'package:meta/meta.dart';
+
+@visibleForTesting
+int fn0() => 1;
+''');
+    Source source2 = addNamedSource('/lib2.dart', r'''
+export 'lib1.dart' show fn0;
+''');
+    await computeAnalysisResult(source);
+    await computeAnalysisResult(source2);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
   test_invalidUseOfVisibleForTestingMember_propertyAccess() async {
     Source source = addNamedSource('/lib1.dart', r'''
 import 'package:meta/meta.dart';
@@ -2062,22 +2078,6 @@
     verify([source, source2]);
   }
 
-  test_invalidUseOfVisibleForTestingMember_OK_export() async {
-    Source source = addNamedSource('/lib1.dart', r'''
-import 'package:meta/meta.dart';
-
-@visibleForTesting
-int fn0() => 1;
-''');
-    Source source2 = addNamedSource('/lib2.dart', r'''
-export 'lib1.dart' show fn0;
-''');
-    await computeAnalysisResult(source);
-    await computeAnalysisResult(source2);
-    assertNoErrors(source2);
-    verify([source, source2]);
-  }
-
   test_invalidUseProtectedAndForTesting_asProtected_OK() async {
     Source source = addNamedSource('/lib1.dart', r'''
 import 'package:meta/meta.dart';
@@ -3065,6 +3065,377 @@
     verify([source]);
   }
 
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_fn() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+int f<T>(x) => 0;
+var a = new A();
+var b = f(a.x);
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because f is
+    // generic, so the type of a.x might affect the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_fn_explicit_type_params() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+int f<T>(x) => 0;
+var a = new A();
+var b = f<int>(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_fn_not_generic() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+int f(x) => 0;
+var a = new A();
+var b = f(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_indexExpression() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+  int operator[](int value) => 0;
+}
+var a = new A();
+var b = a[a.x];
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+var a = new A();
+var b = (<T>(y) => 0)(a.x);
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because the
+    // closure is generic, so the type of a.x might affect the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke_explicit_type_params() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+var a = new A();
+var b = (<T>(y) => 0)<int>(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_invoke_not_generic() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+var a = new A();
+var b = ((y) => 0)(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_method() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+  int f<T>(int x) => 0;
+}
+var a = new A();
+var b = a.f(a.x);
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because f is
+    // generic, so the type of a.x might affect the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_method_explicit_type_params() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+  int f<T>(x) => 0;
+}
+var a = new A();
+var b = a.f<int>(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_method_not_generic() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+  int f(x) => 0;
+}
+var a = new A();
+var b = a.f(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+class B<T> {
+  B(x);
+}
+var a = new A();
+var b = new B(a.x);
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because B is
+    // generic, so the type of a.x might affect the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_explicit_type_params() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+class B<T> {
+  B(x);
+}
+var a = new A();
+var b = new B<int>(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_explicit_type_params_named() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+class B<T> {
+  B.named(x);
+}
+var a = new A();
+var b = new B<int>.named(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_explicit_type_params_prefixed() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    addNamedSource('/lib1.dart', '''
+class B<T> {
+  B(x);
+}
+''');
+    Source source = addSource('''
+import 'lib1.dart' as foo;
+class A {
+  var x = 0;
+}
+var a = new A();
+var b = new foo.B<int>(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_named() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+class B<T> {
+  B.named(x);
+}
+var a = new A();
+var b = new B.named(a.x);
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because B is
+    // generic, so the type of a.x might affect the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_not_generic() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+class B {
+  B(x);
+}
+var a = new A();
+var b = new B(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_not_generic_named() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = 0;
+}
+class B {
+  B.named(x);
+}
+var a = new A();
+var b = new B.named(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_not_generic_prefixed() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    addNamedSource('/lib1.dart', '''
+class B {
+  B(x);
+}
+''');
+    Source source = addSource('''
+import 'lib1.dart' as foo;
+class A {
+  var x = 0;
+}
+var a = new A();
+var b = new foo.B(a.x);
+''');
+    // The reference to a.x does not trigger TOP_LEVEL_INSTANCE_GETTER because
+    // it can't possibly affect the type of b.
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_new_prefixed() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    addNamedSource('/lib1.dart', '''
+class B<T> {
+  B(x);
+}
+''');
+    Source source = addSource('''
+import 'lib1.dart' as foo;
+class A {
+  var x = 0;
+}
+var a = new A();
+var b = new foo.B(a.x);
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because B is
+    // generic, so the type of a.x might affect the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
   test_strongMode_topLevelInstanceGetter_implicitlyTyped_prefixedIdentifier() async {
     resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
     Source source = addSource('''
@@ -3083,6 +3454,30 @@
     verify([source]);
   }
 
+  test_strongMode_topLevelInstanceGetter_implicitlyTyped_propertyAccessLhs() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  var x = new B();
+  int operator[](int value) => 0;
+}
+class B {
+  int y;
+}
+var a = new A();
+var b = (a.x).y;
+''');
+    // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because the type
+    // of a.x affects the lookup of y, which in turn affects the type of b.
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+    }
+    verify([source]);
+  }
+
   test_strongMode_topLevelInstanceGetter_prefixedIdentifier() async {
     resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
     Source source = addSource('''
@@ -3099,6 +3494,126 @@
     verify([source]);
   }
 
+  test_strongMode_topLevelInstanceMethod() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  f() => 0;
+}
+var x = new A().f();
+''');
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_parameter() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  int f(v) => 0;
+}
+var x = new A().f(0);
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_parameter_generic() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  int f<T>(v) => 0;
+}
+var x = new A().f(0);
+''');
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_parameter_generic_explicit() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  int f<T>(v) => 0;
+}
+var x = new A().f<int>(0);
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_static() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  static f() => 0;
+}
+var x = A.f();
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_tearoff() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  f() => 0;
+}
+var x = new A().f;
+''');
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_tearoff_parameter() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  int f(v) => 0;
+}
+var x = new A().f;
+''');
+    await computeAnalysisResult(source);
+    if (enableKernelDriver) {
+      assertNoErrors(source);
+    } else {
+      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+    }
+    verify([source]);
+  }
+
+  test_strongMode_topLevelInstanceMethod_tearoff_static() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource('''
+class A {
+  static f() => 0;
+}
+var x = A.f;
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_typeCheck_type_is_Null() async {
     Source source = addSource(r'''
 m(i) {
@@ -4456,6 +4971,33 @@
     verify([source, source2]);
   }
 
+  test_unusedLabel_inSwitch() async {
+    Source source = addSource(r'''
+f(x) {
+  switch (x) {
+    label: case 0:
+      break;
+    default:
+      break;
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [HintCode.UNUSED_LABEL]);
+    verify([source]);
+  }
+
+  test_unusedLabel_onWhile() async {
+    Source source = addSource(r'''
+f(condition()) {
+  label: while (condition()) {
+    break;
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [HintCode.UNUSED_LABEL]);
+    verify([source]);
+  }
+
   test_unusedLocalVariable_inCatch_exception() async {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
index 596d2c3..9c424a9 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
@@ -253,15 +253,11 @@
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
   test_nativeConstConstructor() async {
     return super.test_nativeConstConstructor();
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
   test_nativeFunctionBodyInNonSDKCode_function() async {
     return super.test_nativeFunctionBodyInNonSDKCode_function();
   }
@@ -311,6 +307,13 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
+  test_sharedDeferredPrefix() async {
+    return super.test_sharedDeferredPrefix();
+  }
+
+  @override
+  @failingTest
+  @potentialAnalyzerProblem
   test_staticAccessToInstanceMember_annotation() async {
     return super.test_staticAccessToInstanceMember_annotation();
   }
@@ -337,22 +340,16 @@
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
   test_uriDoesNotExist_dll() async {
     return super.test_uriDoesNotExist_dll();
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
   test_uriDoesNotExist_dylib() async {
     return super.test_uriDoesNotExist_dylib();
   }
 
   @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31801')
   test_uriDoesNotExist_so() async {
     return super.test_uriDoesNotExist_so();
   }
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index 677da10..05be2c7 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -1245,6 +1245,33 @@
     verify([source]);
   }
 
+  test_unusedLabel_inSwitch() async {
+    Source source = addSource(r'''
+f(x) {
+  switch (x) {
+    label: case 0:
+      break;
+    default:
+      continue label;
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_unusedLabel_onWhile() async {
+    Source source = addSource(r'''
+f(condition()) {
+  label: while (condition()) {
+    break label;
+  }
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   test_useOfVoidResult_implicitReturnValue() async {
     Source source = addSource(r'''
 f() {}
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 7a0139a..5d5b522 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -206,8 +206,8 @@
   }
 
   @override
-  void beginFactoryMethod(Token token) {
-    super.beginFactoryMethod(token);
+  void beginFactoryMethod(Token lastConsumed) {
+    super.beginFactoryMethod(lastConsumed);
     begin('FactoryMethod');
   }
 
@@ -356,9 +356,9 @@
   }
 
   @override
-  void beginMember(Token token) {
+  void beginMember() {
     expectIn('ClassBody');
-    super.beginMember(token);
+    super.beginMember();
     begin('Member');
   }
 
@@ -376,8 +376,8 @@
   }
 
   @override
-  void beginMethod(Token token, Token name) {
-    super.beginMethod(token, name);
+  void beginMethod() {
+    super.beginMethod();
     begin('Method');
   }
 
@@ -478,8 +478,8 @@
   }
 
   @override
-  void beginTopLevelMethod(Token token, Token name) {
-    super.beginTopLevelMethod(token, name);
+  void beginTopLevelMethod(Token lastConsumed) {
+    super.beginTopLevelMethod(lastConsumed);
     begin('TopLevelMethod');
   }
 
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 8cbebc2..4a8c1d4b 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -426,6 +426,35 @@
     expect(variable.name, isNotNull);
   }
 
+  void test_parseClassMember_field_generic() {
+    createParser('List<List<N>> _allComponents = new List<List<N>>();');
+    ClassMember member = parser.parseClassMember('C');
+    expect(member, isNotNull);
+    assertNoErrors();
+    expect(member, new isInstanceOf<FieldDeclaration>());
+    FieldDeclaration field = member;
+    expect(field.covariantKeyword, isNull);
+    expect(field.documentationComment, isNull);
+    expect(field.metadata, hasLength(0));
+    expect(field.staticKeyword, isNull);
+    VariableDeclarationList list = field.fields;
+    expect(list, isNotNull);
+    TypeName type = list.type;
+    expect(type.name.name, 'List');
+    NodeList typeArguments = type.typeArguments.arguments;
+    expect(typeArguments, hasLength(1));
+    TypeName type2 = typeArguments[0];
+    expect(type2.name.name, 'List');
+    NodeList typeArguments2 = type2.typeArguments.arguments;
+    expect(typeArguments2, hasLength(1));
+    TypeName type3 = typeArguments2[0];
+    expect(type3.name.name, 'N');
+    NodeList<VariableDeclaration> variables = list.variables;
+    expect(variables, hasLength(1));
+    VariableDeclaration variable = variables[0];
+    expect(variable.name, isNotNull);
+  }
+
   void test_parseClassMember_field_gftType_gftReturnType() {
     createParser('''
 Function(int) Function(String) v;
@@ -2461,12 +2490,17 @@
 
   void test_classInClass_abstract() {
     parseCompilationUnit("class C { abstract class B {} }",
-        errors: [expectedError(ParserErrorCode.CLASS_IN_CLASS, 25, 1)]);
+        errors: usingFastaParser
+            ? [
+                expectedError(ParserErrorCode.ABSTRACT_CLASS_MEMBER, 10, 8),
+                expectedError(ParserErrorCode.CLASS_IN_CLASS, 19, 5)
+              ]
+            : [expectedError(ParserErrorCode.CLASS_IN_CLASS, 19, 5)]);
   }
 
   void test_classInClass_nonAbstract() {
     parseCompilationUnit("class C { class B {} }",
-        errors: [expectedError(ParserErrorCode.CLASS_IN_CLASS, 16, 1)]);
+        errors: [expectedError(ParserErrorCode.CLASS_IN_CLASS, 10, 5)]);
   }
 
   void test_classTypeAlias_abstractAfterEq() {
@@ -2642,26 +2676,7 @@
     createParser('covariant final f = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrorsWithCodes(usingFastaParser
-        ? [
-            ParserErrorCode.FINAL_AND_COVARIANT,
-            // TODO(danrubel): Fasta
-            // 1) reports an error on the `final` modifier then skips over it,
-            // 2) expects a type because `final` was ignored
-            // 3) reports missing type even though final was specified.
-            //
-            // It would be better to omit this second error, but that may
-            // be problematic as `covariant` will have
-            // already been reported to listeners by the time `final` is
-            // encountered and listeners might get get confused if we
-            // report `final` in addition,
-            // or report `covariant` with no type.
-            //
-            // This issue does not exist if `final` is encountered first.
-            // See test_finalAndCovariant().
-            ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
-          ]
-        : [ParserErrorCode.FINAL_AND_COVARIANT]);
+    listener.assertErrorsWithCodes([ParserErrorCode.FINAL_AND_COVARIANT]);
   }
 
   void test_covariantAndStatic() {
@@ -2699,16 +2714,18 @@
     createParser('static covariant get x => 0;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.COVARIANT_MEMBER, 7, 9)]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.COVARIANT_AND_STATIC, 7, 9)]
+        : [expectedError(ParserErrorCode.COVARIANT_MEMBER, 7, 9)]);
   }
 
   void test_covariantMember_getter_returnType() {
     createParser('static covariant int get x => 0;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener
-        .assertErrors([expectedError(ParserErrorCode.COVARIANT_MEMBER, 7, 9)]);
+    listener.assertErrors(usingFastaParser
+        ? [expectedError(ParserErrorCode.COVARIANT_AND_STATIC, 7, 9)]
+        : [expectedError(ParserErrorCode.COVARIANT_MEMBER, 7, 9)]);
   }
 
   void test_covariantMember_method() {
@@ -2937,8 +2954,9 @@
             ? [
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 5),
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
-                expectedError(ParserErrorCode.MISSING_IDENTIFIER, 13, 0),
-                expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 0)
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 8, 5),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 13, 0),
               ]
             : [
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
@@ -2955,8 +2973,7 @@
             ? [
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 4),
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 5, 1),
-                expectedError(ParserErrorCode.MISSING_IDENTIFIER, 11, 0),
-                expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 0)
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 7, 4),
               ]
             : [
                 expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 6, 1),
@@ -2976,15 +2993,14 @@
   }
 
   void test_expectedExecutable_topLevel_eof() {
-    createParser('x');
-    CompilationUnitMember member = parseFullCompilationUnitMember();
-    expectNotNullIfNoErrors(member);
-    listener.assertErrors(usingFastaParser
-        ? [
-            expectedError(ParserErrorCode.MISSING_IDENTIFIER, 1, 0),
-            expectedError(ParserErrorCode.EXPECTED_TOKEN, 1, 0)
-          ]
-        : [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1)]);
+    parseCompilationUnit('x',
+        errors: usingFastaParser
+            ? [
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 0, 1),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 1, 0)
+              ]
+            : [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 1)]);
   }
 
   void test_expectedInterpolationIdentifier() {
@@ -3426,8 +3442,12 @@
     createParser('final covariant f = null;');
     ClassMember member = parser.parseClassMember('C');
     expectNotNullIfNoErrors(member);
-    listener.assertErrors(
-        [expectedError(ParserErrorCode.FINAL_AND_COVARIANT, 6, 9)]);
+    listener.assertErrors(usingFastaParser
+        ? [
+            expectedError(ParserErrorCode.COVARIANT_AFTER_FINAL, 6, 9),
+            expectedError(ParserErrorCode.FINAL_AND_COVARIANT, 6, 9)
+          ]
+        : [expectedError(ParserErrorCode.FINAL_AND_COVARIANT, 6, 9)]);
   }
 
   void test_finalAndVar() {
@@ -3805,6 +3825,18 @@
     ]);
   }
 
+  void test_invalidTopLevelSetter() {
+    parseCompilationUnit("var set foo; main(){}",
+        errors: usingFastaParser
+            ? [expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 4, 3)]
+            : [
+                expectedError(ParserErrorCode.VAR_RETURN_TYPE, 0, 3),
+                expectedError(
+                    ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 11, 1),
+                expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 11, 1)
+              ]);
+  }
+
   void test_invalidTypedef() {
     parseCompilationUnit("typedef var Function(var arg);",
         errors: usingFastaParser
@@ -4958,6 +4990,21 @@
     expect(function.functionExpression.parameters, isNull);
   }
 
+  void test_topLevelOperator_withFunction() {
+    createParser('operator Function() x = null;');
+    CompilationUnitMember member = parseFullCompilationUnitMember();
+    expectNotNullIfNoErrors(member);
+    if (usingFastaParser) {
+      listener.assertErrors([
+        expectedError(ParserErrorCode.TOP_LEVEL_OPERATOR, 0, 8),
+        expectedError(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 20, 1)
+      ]);
+    } else {
+      // Should be generating an error here.
+      listener.assertErrorsWithCodes([]);
+    }
+  }
+
   void test_topLevelOperator_withoutOperator() {
     createParser('+(bool x, bool y) => x | y;');
     CompilationUnitMember member = parseFullCompilationUnitMember();
@@ -4987,14 +5034,8 @@
     createParser('bool operator +(bool x, bool y) => x | y;');
     CompilationUnitMember member = parseFullCompilationUnitMember();
     expectNotNullIfNoErrors(member);
-    if (usingFastaParser) {
-      listener.assertErrors([
-        expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 0, 4),
-        expectedError(ParserErrorCode.TOP_LEVEL_OPERATOR, 5, 8)
-      ]);
-    } else {
-      listener.assertErrorsWithCodes([ParserErrorCode.TOP_LEVEL_OPERATOR]);
-    }
+    listener.assertErrors(
+        [expectedError(ParserErrorCode.TOP_LEVEL_OPERATOR, 5, 8)]);
   }
 
   void test_topLevelOperator_withVoid() {
@@ -5003,10 +5044,7 @@
     expectNotNullIfNoErrors(member);
     if (usingFastaParser) {
       listener.assertErrors(usingFastaParser
-          ? [
-              expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 0, 4),
-              expectedError(ParserErrorCode.TOP_LEVEL_OPERATOR, 5, 8)
-            ]
+          ? [expectedError(ParserErrorCode.TOP_LEVEL_OPERATOR, 5, 8)]
           : [
               expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 0, 0),
               expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 0),
@@ -10523,12 +10561,13 @@
 
   void test_incomplete_topLevelVariable() {
     CompilationUnit unit = parseCompilationUnit("String",
-        codes: usingFastaParser
+        errors: usingFastaParser
             ? [
-                ParserErrorCode.MISSING_IDENTIFIER,
-                ParserErrorCode.EXPECTED_TOKEN
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 0, 6),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 0)
               ]
-            : [ParserErrorCode.EXPECTED_EXECUTABLE]);
+            : [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 0, 6)]);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
     expect(declarations, hasLength(1));
     CompilationUnitMember member = declarations[0];
@@ -10538,7 +10577,9 @@
         (member as TopLevelVariableDeclaration).variables.variables;
     expect(variables, hasLength(1));
     SimpleIdentifier name = variables[0].name;
-    expect(name.isSynthetic, isTrue);
+    // Analyzer considers 'String' to be the type
+    // while fasta considers it to be the name.
+    expect(name.isSynthetic, usingFastaParser ? isFalse : isTrue);
   }
 
   void test_incomplete_topLevelVariable_const() {
@@ -10672,7 +10713,11 @@
 class C {
   static c
 }''', codes: [
-      ParserErrorCode.MISSING_IDENTIFIER,
+      // Fasta considers the `c` to be the type
+      // whereas analyzer considers it to be the identifier.
+      usingFastaParser
+          ? ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+          : ParserErrorCode.MISSING_IDENTIFIER,
       ParserErrorCode.EXPECTED_TOKEN
     ]);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
@@ -10692,7 +10737,7 @@
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isTrue);
+    expect(field.name.isSynthetic, usingFastaParser ? isFalse : isTrue);
   }
 
   void test_incompleteField_static2() {
@@ -10725,7 +10770,11 @@
 class C {
   A
 }''', codes: [
-      ParserErrorCode.MISSING_IDENTIFIER,
+      // Fasta considers the `c` to be the type
+      // whereas analyzer considers it to be the identifier.
+      usingFastaParser
+          ? ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE
+          : ParserErrorCode.MISSING_IDENTIFIER,
       ParserErrorCode.EXPECTED_TOKEN
     ]);
     NodeList<CompilationUnitMember> declarations = unit.declarations;
@@ -10741,11 +10790,16 @@
     VariableDeclarationList fieldList =
         (classMember as FieldDeclaration).fields;
     TypeName type = fieldList.type;
-    expect(type.name.name, 'A');
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isTrue);
+    if (usingFastaParser) {
+      expect(type, isNull);
+      expect(field.name.name, 'A');
+    } else {
+      expect(type.name.name, 'A');
+      expect(field.name.isSynthetic, isTrue);
+    }
   }
 
   void test_incompleteField_var() {
@@ -10916,10 +10970,7 @@
   G<int double> g;
 }''',
         errors: usingFastaParser
-            ? [
-                expectedError(ParserErrorCode.EXPECTED_TOKEN, 18, 6),
-                expectedError(ParserErrorCode.EXTRANEOUS_MODIFIER, 18, 6)
-              ]
+            ? [expectedError(ParserErrorCode.EXPECTED_TOKEN, 18, 6)]
             : [
                 expectedError(ParserErrorCode.EXPECTED_TOKEN, 18, 6),
                 expectedError(ParserErrorCode.EXPECTED_TOKEN, 18, 6),
@@ -10969,7 +11020,7 @@
     // TODO(brianwilkerson) We could do better with this.
     parseCompilationUnit("do() {}",
         codes: usingFastaParser
-            ? [ParserErrorCode.MISSING_IDENTIFIER]
+            ? [ParserErrorCode.UNEXPECTED_TOKEN]
             : [
                 ParserErrorCode.EXPECTED_EXECUTABLE,
                 ParserErrorCode.UNEXPECTED_TOKEN
@@ -13335,6 +13386,21 @@
     expect(clause.implementsKeyword, isNotNull);
   }
 
+  void test_parseLibraryIdentifier_invalid() {
+    parseCompilationUnit('library <myLibId>;',
+        errors: usingFastaParser
+            ? [
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 0, 7),
+                expectedError(ParserErrorCode.EXPECTED_TOKEN, 8, 1),
+                expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 1),
+                expectedError(
+                    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, 9, 7),
+                expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 16, 1),
+              ]
+            : [expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 8, 1)]);
+  }
+
   void test_parseLibraryIdentifier_multiple() {
     String name = "a.b.c";
     LibraryIdentifier identifier = parseLibraryIdentifier(name);
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 2066b768e..8aeb8ba 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -1337,6 +1337,20 @@
 
   @override
   @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31791')
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_abstractNSM() =>
+      super
+          .test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_abstractNSM();
+
+  @override
+  @failingTest
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/31791')
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_ifcNSM() =>
+      super
+          .test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_ifcNSM();
+
+  @override
+  @failingTest
   @potentialAnalyzerProblem
   test_nonAbstractClassInheritsAbstractMemberOne_method_fromSuperclass() async {
     return super
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index 5454994..ec5d8eb 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -2658,6 +2658,53 @@
     verify([source]);
   }
 
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_abstractNSM() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource(r'''
+class I {
+  m(p) {}
+}
+class C implements I {
+  noSuchMethod(v);
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+    verify([source]);
+  }
+
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_abstractOverrideNSM() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource(r'''
+class I {
+  m(p) {}
+}
+class B {
+  noSuchMethod(v) => null;
+}
+class C extends B implements I {
+  noSuchMethod(v);
+}''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface_ifcNSM() async {
+    resetWith(options: new AnalysisOptionsImpl()..strongMode = true);
+    Source source = addSource(r'''
+class I {
+  m(p) {}
+  noSuchMethod(v) => null;
+}
+class C implements I {
+}''');
+    await computeAnalysisResult(source);
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
+    verify([source]);
+  }
+
   test_nonAbstractClassInheritsAbstractMemberOne_method_fromSuperclass() async {
     Source source = addSource(r'''
 abstract class A {
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
index 2d3a194..7f4695e 100644
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
@@ -212,14 +212,6 @@
 
   @override
   @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31759')
-  test_inference_simplePolymorphicRecursion_function() async {
-    // Expected 0 errors of type StaticTypeWarningCode.INVALID_ASSIGNMENT, found 2 (114, 99)
-    await super.test_inference_simplePolymorphicRecursion_function();
-  }
-
-  @override
-  @failingTest
   test_inferGenericInstantiation2() async {
     // Expected 1 errors of type StrongModeCode.STRONG_MODE_COULD_NOT_INFER, found 0;
     //          1 errors of type StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, found 0
@@ -446,6 +438,12 @@
     // Expected 2 errors of type StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, found 0
     await super.test_setterWithOtherTypeIsError();
   }
+
+  @override
+  @failingTest
+  test_returnOfInvalidType_object_void() async {
+    await super.test_returnOfInvalidType_object_void();
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 7e1db80..38ec9be 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -4036,6 +4036,23 @@
     expectInitializerType('foo', 'int', isNull);
   }
 
+  test_generalizedVoid_assignToVoidOk() async {
+    Source source = addSource(r'''
+void main() {
+  void x;
+  x = 42;
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
+  test_returnOfInvalidType_object_void() async {
+    await assertErrorsInCode(
+        "Object f() { void voidFn() => null; return voidFn(); }",
+        [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+  }
+
   Future<Null> _objectMethodOnFunctions_helper2(String code) async {
     await resolveTestUnit(code);
     expectIdentifierType('t0', "String");
diff --git a/pkg/analyzer/test/generated/type_system_test.dart b/pkg/analyzer/test/generated/type_system_test.dart
index ef803c9..c77c065 100644
--- a/pkg/analyzer/test/generated/type_system_test.dart
+++ b/pkg/analyzer/test/generated/type_system_test.dart
@@ -277,6 +277,7 @@
   }
 
   void test_dynamic_void() {
+    // Note: _checkLeastUpperBound tests `LUB(x, y)` as well as `LUB(y, x)`
     _checkLeastUpperBound(dynamicType, voidType, dynamicType);
   }
 
@@ -1235,6 +1236,7 @@
   }
 
   void test_dynamic_void() {
+    // Note: _checkGreatestLowerBound tests `GLB(x, y)` as well as `GLB(y, x)`
     _checkGreatestLowerBound(dynamicType, voidType, voidType);
   }
 
@@ -1244,11 +1246,13 @@
         futureOrType.instantiate([futureOrDynamicType]);
 
     // Sanity check specific cases of top for GLB/LUB.
-    _checkGreatestLowerBound(objectType, dynamicType, dynamicType);
-    _checkLeastUpperBound(objectType, dynamicType, objectType);
-    _checkGreatestLowerBound(futureOrDynamicType, dynamicType, dynamicType);
-    _checkLeastUpperBound(futureOrDynamicType, objectType, futureOrDynamicType);
-    _checkLeastUpperBound(futureOrDynamicType, futureOrFutureOrDynamicType,
+    _checkLeastUpperBound(objectType, dynamicType, dynamicType);
+    _checkGreatestLowerBound(objectType, dynamicType, objectType);
+    _checkLeastUpperBound(objectType, voidType, objectType);
+    _checkLeastUpperBound(futureOrDynamicType, dynamicType, dynamicType);
+    _checkGreatestLowerBound(
+        futureOrDynamicType, objectType, futureOrDynamicType);
+    _checkGreatestLowerBound(futureOrDynamicType, futureOrFutureOrDynamicType,
         futureOrFutureOrDynamicType);
   }
 
@@ -1256,19 +1260,25 @@
     // Test every combination of a subset of Tops programatically.
     final futureOrDynamicType = futureOrType.instantiate([dynamicType]);
     final futureOrObjectType = futureOrType.instantiate([objectType]);
+    final futureOrVoidType = futureOrType.instantiate([voidType]);
     final futureOrFutureOrDynamicType =
         futureOrType.instantiate([futureOrDynamicType]);
     final futureOrFutureOrObjectType =
         futureOrType.instantiate([futureOrObjectType]);
+    final futureOrFutureOrVoidType =
+        futureOrType.instantiate([futureOrVoidType]);
 
     final orderedTops = [
       // Lower index, so lower Top
-      futureOrFutureOrObjectType,
-      futureOrFutureOrDynamicType,
-      futureOrObjectType,
-      futureOrDynamicType,
-      objectType,
       dynamicType,
+      objectType,
+      voidType,
+      futureOrDynamicType,
+      futureOrObjectType,
+      futureOrVoidType,
+      futureOrFutureOrDynamicType,
+      futureOrFutureOrObjectType,
+      futureOrFutureOrVoidType,
       // Higher index, higher Top
     ];
 
@@ -1664,7 +1674,7 @@
 
   void test_dynamic_isTop() {
     DartType interfaceType = ElementFactory.classElement2('A', []).type;
-    List<DartType> equivalents = <DartType>[dynamicType, objectType];
+    List<DartType> equivalents = <DartType>[dynamicType, objectType, voidType];
     List<DartType> subtypes = <DartType>[
       intType,
       doubleType,
@@ -1677,6 +1687,21 @@
     _checkGroups(dynamicType, equivalents: equivalents, subtypes: subtypes);
   }
 
+  void test_void_isTop() {
+    DartType interfaceType = ElementFactory.classElement2('A', []).type;
+    List<DartType> equivalents = <DartType>[dynamicType, objectType, voidType];
+    List<DartType> subtypes = <DartType>[
+      intType,
+      doubleType,
+      numType,
+      stringType,
+      functionType,
+      interfaceType,
+      bottomType
+    ];
+    _checkGroups(voidType, equivalents: equivalents, subtypes: subtypes);
+  }
+
   void test_fuzzy_arrows() {
     FunctionType top = TypeBuilder
         .function(required: <DartType>[dynamicType], result: objectType);
diff --git a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
index 6f29b7a..6e470b7 100644
--- a/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/extra_code_test.dart
@@ -11,6 +11,7 @@
   defineReflectiveSuite(() {
     defineReflectiveTests(MiscellaneousTest);
     defineReflectiveTests(ModifiersTest);
+    defineReflectiveTests(MultipleTypeTest);
     defineReflectiveTests(PunctuationTest);
   });
 }
@@ -72,11 +73,44 @@
   }
 }
 
+@reflectiveTest
+class MultipleTypeTest extends AbstractRecoveryTest {
+  @failingTest
+  void test_topLevelVariable() {
+    // https://github.com/dart-lang/sdk/issues/25875
+    // Recovers with 'void bar() {}', which seems wrong. Seems like we should
+    // keep the first type, not the second.
+    testRecovery('''
+String void bar() { }
+''', [ParserErrorCode.UNEXPECTED_TOKEN], '''
+String bar() { }
+''');
+  }
+}
+
 /**
  * Test how well the parser recovers when there is extra punctuation.
  */
 @reflectiveTest
 class PunctuationTest extends AbstractRecoveryTest {
+  @failingTest
+  void test_extraComma_extendsClause() {
+    // https://github.com/dart-lang/sdk/issues/22313
+    testRecovery('''
+class A { }
+class B { }
+class Foo extends A, B {
+  Foo() { }
+}
+''', [ParserErrorCode.UNEXPECTED_TOKEN, ParserErrorCode.UNEXPECTED_TOKEN], '''
+class A { }
+class B { }
+class Foo extends A {
+  Foo() { }
+}
+''');
+  }
+
   void test_extraSemicolon_afterLastClassMember() {
     testRecovery('''
 class C {
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
index 861b52d..f49fba3 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/field_declaration_test.dart
@@ -64,7 +64,7 @@
               failing: allExceptEof),
           new TestDescriptor('final_name', 'final f',
               [ParserErrorCode.EXPECTED_TOKEN], 'final f;',
-              allFailing: true),
+              failing: allExceptEof),
           new TestDescriptor(
               'final_equals',
               'final f =',
@@ -90,7 +90,7 @@
               failing: allExceptEof),
           new TestDescriptor(
               'var_name', 'var f', [ParserErrorCode.EXPECTED_TOKEN], 'var f;',
-              allFailing: true),
+              failing: allExceptEof),
           new TestDescriptor(
               'var_equals',
               'var f =',
@@ -109,11 +109,11 @@
               'type_noName',
               'A',
               [
-                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
                 ParserErrorCode.EXPECTED_TOKEN
               ],
               'A _s_;',
-              failing: allExceptEof),
+              allFailing: true),
           new TestDescriptor(
               'type_name', 'A f', [ParserErrorCode.EXPECTED_TOKEN], 'A f;',
               failing: allExceptEof),
@@ -168,7 +168,7 @@
               failing: allExceptEof),
           new TestDescriptor('static_final_name', 'static final f',
               [ParserErrorCode.EXPECTED_TOKEN], 'static final f;',
-              allFailing: true),
+              failing: allExceptEof),
           new TestDescriptor(
               'static_final_equals',
               'static final f =',
@@ -194,7 +194,7 @@
               failing: allExceptEof),
           new TestDescriptor('static_var_name', 'static var f',
               [ParserErrorCode.EXPECTED_TOKEN], 'static var f;',
-              allFailing: true),
+              failing: allExceptEof),
           new TestDescriptor(
               'static_var_equals',
               'static var f =',
@@ -213,11 +213,11 @@
               'static_type_noName',
               'static A',
               [
-                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
                 ParserErrorCode.EXPECTED_TOKEN
               ],
               'static A _s_;',
-              failing: allExceptEof),
+              allFailing: true),
           new TestDescriptor('static_type_name', 'static A f',
               [ParserErrorCode.EXPECTED_TOKEN], 'static A f;',
               failing: allExceptEof),
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
index 1a4eddf..dc432ec 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
@@ -84,11 +84,11 @@
               'type',
               'int',
               [
-                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE,
                 ParserErrorCode.EXPECTED_TOKEN
               ],
               "int _s_;",
-              failing: allExceptEof),
+              allFailing: true),
           new TestDescriptor(
               'typeName', 'int a', [ParserErrorCode.EXPECTED_TOKEN], "int a;",
               allFailing: true),
@@ -103,7 +103,7 @@
               failing: allExceptEof),
           new TestDescriptor(
               'varName', 'var a', [ParserErrorCode.EXPECTED_TOKEN], "var a;",
-              allFailing: true),
+              failing: allExceptEof),
           new TestDescriptor(
               'varNameEquals',
               'var a =',
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index fa4342b..7141785 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -268,6 +268,7 @@
         removeCode(StrongModeCode.TOP_LEVEL_FUNCTION_LITERAL_PARAMETER);
         removeCode(StrongModeCode.TOP_LEVEL_IDENTIFIER_NO_TYPE);
         removeCode(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER);
+        removeCode(StrongModeCode.TOP_LEVEL_INSTANCE_METHOD);
         removeCode(StrongModeCode.TOP_LEVEL_TYPE_ARGUMENTS);
         removeCode(StrongModeCode.TOP_LEVEL_UNSUPPORTED);
         removeCode(StrongModeCode.USES_DYNAMIC_AS_BOTTOM);
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 7b914d9..9a53d86 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -3750,8 +3750,8 @@
   void set c(y) => 4;
   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*/voidFn();
+  /*warning:NON_VOID_RETURN_FOR_SETTER*/int set f(y) => 
+    /*error:RETURN_OF_INVALID_TYPE, info:DOWN_CAST_IMPLICIT*/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 = /*error:INVALID_ASSIGNMENT,info:USE_OF_VOID_RESULT*/foo();
+  Foo x = /*info:USE_OF_VOID_RESULT, info:DOWN_CAST_COMPOSITE*/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 506f323..1204587 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -1551,7 +1551,7 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  dynamic noSuchMethod(invocation);
+  dynamic noSuchMethod(invocation) => super.noSuchMethod(invocation);
   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
 }
 
@@ -1591,7 +1591,7 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  dynamic noSuchMethod(invocation);
+  dynamic noSuchMethod(invocation) => super.noSuchMethod(invocation);
   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
 }
 
@@ -1659,7 +1659,7 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(T x) {}
-  dynamic noSuchMethod(invocation);
+  dynamic noSuchMethod(invocation) => super.noSuchMethod(invocation);
   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
 }
 
@@ -1707,7 +1707,7 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value(x) {}
-  dynamic noSuchMethod(invocation);
+  dynamic noSuchMethod(invocation) => super.noSuchMethod(invocation);
   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
 }
 
@@ -1738,7 +1738,7 @@
 class MyFuture<T> implements Future<T> {
   MyFuture() {}
   MyFuture.value([x]) {}
-  dynamic noSuchMethod(invocation);
+  dynamic noSuchMethod(invocation) => super.noSuchMethod(invocation);
   MyFuture<S> then<S>(FutureOr<S> f(T x), {Function onError}) => null;
 }
 
@@ -2429,7 +2429,7 @@
 class C extends B {
   f() {}
 }
-var x = new C()./*info:USE_OF_VOID_RESULT*/f();
+var x = /*error:TOP_LEVEL_INSTANCE_METHOD*/new C()./*info:USE_OF_VOID_RESULT*/f();
 ''');
   }
 
@@ -4297,7 +4297,7 @@
     expect(v.type.toString(), 'double');
   }
 
-  test_voidReturnTypeSubtypesDynamic() async {
+  test_voidReturnTypeEquivalentToDynamic() async {
     var unit = await checkFileElement(r'''
 T run<T>(T f()) {
   print("running");
@@ -4317,8 +4317,8 @@
   var y = /*info:USE_OF_VOID_RESULT*/run(printRunning);
   x = 123;
   x = 'hi';
-  y = /*error:INVALID_ASSIGNMENT*/123;
-  y = /*error:INVALID_ASSIGNMENT*/'hi';
+  y = 123;
+  y = 'hi';
 }
   ''');
 
@@ -4381,7 +4381,7 @@
 
   @failingTest
   @override
-  test_voidReturnTypeSubtypesDynamic() async {
-    await super.test_voidReturnTypeSubtypesDynamic();
+  test_voidReturnTypeEquivalentToDynamic() async {
+    await super.test_voidReturnTypeEquivalentToDynamic();
   }
 }
diff --git a/pkg/compiler/lib/src/elements/entities.dart b/pkg/compiler/lib/src/elements/entities.dart
index 8d68752..d882154 100644
--- a/pkg/compiler/lib/src/elements/entities.dart
+++ b/pkg/compiler/lib/src/elements/entities.dart
@@ -11,6 +11,7 @@
 import '../universe/call_structure.dart' show CallStructure;
 import '../util/util.dart';
 import 'names.dart';
+import 'types.dart';
 
 /// Abstract interface for entities.
 ///
@@ -270,6 +271,14 @@
 
   const ParameterStructure.setter() : this(1, 1, const <String>[], 0);
 
+  factory ParameterStructure.fromType(FunctionType type) {
+    return new ParameterStructure(
+        type.parameterTypes.length,
+        type.parameterTypes.length + type.optionalParameterTypes.length,
+        type.namedParameters,
+        type.typeVariables.length);
+  }
+
   /// The number of optional parameters (positional or named).
   int get optionalParameters =>
       positionalParameters - requiredParameters + namedParameters.length;
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 48f1182..147a35e 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -753,7 +753,6 @@
             nativeBasicData,
             interceptorDataBuilder,
             _backendUsageBuilder,
-            rtiNeedBuilder,
             mirrorsDataBuilder,
             noSuchMethodRegistry,
             customElementsResolutionAnalysis,
@@ -990,7 +989,9 @@
           new TrivialRuntimeTypesChecksBuilder(closedWorld, _rtiSubstitutions);
     } else {
       RuntimeTypesImpl runtimeTypesImpl = new RuntimeTypesImpl(
-          closedWorld.elementEnvironment, closedWorld.dartTypes);
+          closedWorld.commonElements,
+          closedWorld.elementEnvironment,
+          closedWorld.dartTypes);
       _rtiChecksBuilder = runtimeTypesImpl;
       _rtiSubstitutions = runtimeTypesImpl;
     }
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 7a7dec6..28360bc 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -66,7 +66,7 @@
     }
     for (Selector selector in dynamicUses) {
       assert(selector != null);
-      worldImpactBuilder.registerDynamicUse(new DynamicUse(selector, null));
+      worldImpactBuilder.registerDynamicUse(new DynamicUse(selector));
     }
     for (InterfaceType instantiatedType in instantiatedTypes) {
       worldImpactBuilder
diff --git a/pkg/compiler/lib/src/js_backend/codegen_listener.dart b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
index dd98494..77e39a4 100644
--- a/pkg/compiler/lib/src/js_backend/codegen_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen_listener.dart
@@ -197,7 +197,7 @@
       DartType type, WorldImpactBuilder impactBuilder) {
     if (type is InterfaceType) {
       impactBuilder.registerTypeUse(new TypeUse.instantiation(type));
-      if (_rtiNeed.classNeedsRtiField(type.element)) {
+      if (_rtiNeed.classNeedsTypeArguments(type.element)) {
         impactBuilder.registerStaticUse(new StaticUse.staticInvoke(
             // TODO(johnniwinther): Find the right [CallStructure].
             _commonElements.setRuntimeTypeInfo,
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 1ca83e4..2f56a2d 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -261,7 +261,7 @@
           "Compiler and ${className} disagree on number of fields.");
     }
 
-    if (_rtiNeed.classNeedsRtiField(classElement)) {
+    if (_rtiNeed.classNeedsTypeArguments(classElement)) {
       arguments.add(_reifiedTypeArguments(constant.type));
     }
 
@@ -326,7 +326,7 @@
     _worldBuilder.forEachInstanceField(element, (_, FieldEntity field) {
       fields.add(constantReferenceGenerator(constant.fields[field]));
     });
-    if (_rtiNeed.classNeedsRtiField(constant.type.element)) {
+    if (_rtiNeed.classNeedsTypeArguments(constant.type.element)) {
       fields.add(_reifiedTypeArguments(constant.type));
     }
     jsAst.New instantiation = new jsAst.New(constructor, fields);
diff --git a/pkg/compiler/lib/src/js_backend/impact_transformer.dart b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
index 985fe4a..c69f15e 100644
--- a/pkg/compiler/lib/src/js_backend/impact_transformer.dart
+++ b/pkg/compiler/lib/src/js_backend/impact_transformer.dart
@@ -158,7 +158,6 @@
         case TypeUseKind.INSTANTIATION:
         case TypeUseKind.MIRROR_INSTANTIATION:
         case TypeUseKind.NATIVE_INSTANTIATION:
-          registerRequiredType(type);
           break;
         case TypeUseKind.IS_CHECK:
           onIsCheck(type, transformed);
@@ -216,7 +215,6 @@
         transformed
             .registerTypeUse(new TypeUse.instantiation(mapLiteralUse.type));
       }
-      registerRequiredType(mapLiteralUse.type);
     }
 
     for (ListLiteralUse listLiteralUse in worldImpact.listLiterals) {
@@ -224,7 +222,6 @@
       // factory constructors are registered directly.
       transformed
           .registerTypeUse(new TypeUse.instantiation(listLiteralUse.type));
-      registerRequiredType(listLiteralUse.type);
     }
 
     if (worldImpact.constSymbolNames.isNotEmpty) {
@@ -244,10 +241,6 @@
             registerImpact(_impacts.computeSignature);
           }
           break;
-        case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
-        case StaticUseKind.CONSTRUCTOR_INVOKE:
-          registerRequiredType(staticUse.type);
-          break;
         default:
       }
     }
@@ -289,22 +282,6 @@
     return transformed;
   }
 
-  /// Register [type] as required for the runtime type information system.
-  void registerRequiredType(DartType type) {
-    if (!type.isInterfaceType) return;
-    InterfaceType interfaceType = type;
-    // If [argument] has type variables or is a type variable, this method
-    // registers a RTI dependency between the entity that introduced the type
-    // variable and the class of [type]. If the class of [type] requires type
-    // arguments at runtime, then the entity that introduced the type variable
-    // does too.
-    interfaceType.forEachTypeVariable((TypeVariableType typeVariable) {
-      Entity typeDeclaration = typeVariable.element.typeDeclaration;
-      _rtiNeedBuilder.registerTypeArgumentDependency(
-          interfaceType.element, typeDeclaration);
-    });
-  }
-
   // TODO(johnniwinther): Maybe split this into [onAssertType] and [onTestType].
   void onIsCheck(DartType type, TransformedWorldImpact transformed) {
     void registerImpact(BackendImpact impact) {
@@ -312,7 +289,6 @@
       _backendUsageBuider.processBackendImpact(impact);
     }
 
-    registerRequiredType(type);
     type = _elementEnvironment.getUnaliasedType(type);
     registerImpact(_impacts.typeCheck);
 
diff --git a/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart b/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart
index 72e6e10..8682242 100644
--- a/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/mirrors_analysis.dart
@@ -349,11 +349,11 @@
         // well.
         // TODO(herhut): Use TypedSelector.subtype for enqueueing
         DynamicUse dynamicUse =
-            new DynamicUse(new Selector.fromElement(element), null);
+            new DynamicUse(new Selector.fromElement(element));
         impactBuilder.registerDynamicUse(dynamicUse);
         if (element.isField) {
-          DynamicUse dynamicUse = new DynamicUse(
-              new Selector.setter(element.memberName.setter), null);
+          DynamicUse dynamicUse =
+              new DynamicUse(new Selector.setter(element.memberName.setter));
           impactBuilder.registerDynamicUse(dynamicUse);
         }
       }
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index d47916d..dbfb64a 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -28,7 +28,6 @@
 import 'native_data.dart' show NativeBasicData;
 import 'no_such_method_registry.dart';
 import 'type_variable_handler.dart';
-import 'runtime_types.dart';
 
 class ResolutionEnqueuerListener extends EnqueuerListener {
   // TODO(johnniwinther): Avoid the need for this.
@@ -42,7 +41,6 @@
   final NativeBasicData _nativeData;
   final InterceptorDataBuilder _interceptorData;
   final BackendUsageBuilder _backendUsage;
-  final RuntimeTypesNeedBuilder _rtiNeedBuilder;
   final MirrorsDataBuilder _mirrorsDataBuilder;
 
   final NoSuchMethodRegistry _noSuchMethodRegistry;
@@ -63,7 +61,6 @@
       this._nativeData,
       this._interceptorData,
       this._backendUsage,
-      this._rtiNeedBuilder,
       this._mirrorsDataBuilder,
       this._noSuchMethodRegistry,
       this._customElementsAnalysis,
@@ -373,10 +370,6 @@
       _registerBackendImpact(impactBuilder, _impacts.functionClass);
     } else if (cls == _commonElements.mapClass) {
       _registerBackendImpact(impactBuilder, _impacts.mapClass);
-      // For map literals, the dependency between the implementation class
-      // and [Map] is not visible, so we have to add it manually.
-      _rtiNeedBuilder.registerTypeArgumentDependency(
-          _commonElements.mapLiteralClass, cls);
     } else if (cls == _commonElements.boundClosureClass) {
       _registerBackendImpact(impactBuilder, _impacts.boundClosureClass);
     } else if (_nativeData.isNativeOrExtendsNative(cls)) {
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 16d9d9e..3702cd3 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -7,6 +7,7 @@
 import '../common_elements.dart' show CommonElements, ElementEnvironment;
 import '../elements/elements.dart' show ClassElement;
 import '../elements/entities.dart';
+import '../elements/names.dart';
 import '../elements/resolution_types.dart'
     show
         MalformedType,
@@ -17,6 +18,7 @@
 import '../js/js.dart' as jsAst;
 import '../js/js.dart' show js;
 import '../js_emitter/js_emitter.dart' show Emitter;
+import '../universe/selector.dart';
 import '../universe/world_builder.dart';
 import '../world.dart' show ClosedWorld;
 import 'backend_usage.dart';
@@ -50,7 +52,7 @@
 
   /// Returns `true` if [method] needs type arguments at runtime type.
   ///
-  /// This is for instance the case for generic methods that uses type tests:
+  /// This is for instance the case for generic methods that use type tests:
   ///
   ///   method<T>(T t) => t is T;
   ///   main() {
@@ -60,8 +62,6 @@
   ///
   bool methodNeedsTypeArguments(FunctionEntity method);
 
-  bool classNeedsRtiField(ClassEntity cls);
-
   /// Returns `true` if a signature is needed for [method].
   ///
   /// A signature is a runtime method type descriptor function that creates
@@ -114,9 +114,6 @@
   bool methodNeedsSignature(FunctionEntity method) => true;
 
   @override
-  bool classNeedsRtiField(ClassEntity cls) => true;
-
-  @override
   bool methodNeedsTypeArguments(FunctionEntity method) =>
       // TODO(johnniwinther): Align handling of type arguments passed to factory
       // constructors with type arguments passed the regular generic methods.
@@ -135,31 +132,6 @@
   /// literal.
   void registerLocalFunctionUsingTypeVariableLiteral(Local localFunction);
 
-  /// Registers that if [element] needs type arguments at runtime then so does
-  /// [dependency].
-  ///
-  /// For instance:
-  ///
-  ///     class A<T> {
-  ///       m() => new B<T>();
-  ///     }
-  ///     class B<T> {}
-  ///     main() => new A<String>().m() is B<int>;
-  ///
-  /// Here `A` need type arguments at runtime because `B` needs it in order to
-  /// generate the check against `B<int>`.
-  ///
-  /// This can also involve generic methods:
-  ///
-  ///    class A<T> {}
-  ///    method<T>() => new A<T>();
-  ///    main() => method<int>() is A<int>();
-  ///
-  /// Here `method` need type arguments at runtime because `A` needs it in order
-  /// to generate the check against `A<int>`.
-  ///
-  void registerTypeArgumentDependency(Entity element, Entity dependency);
-
   /// Computes the [RuntimeTypesNeed] for the data registered with this builder.
   RuntimeTypesNeed computeRuntimeTypesNeed(
       ResolutionWorldBuilder resolutionWorldBuilder, ClosedWorld closedWorld,
@@ -184,9 +156,6 @@
       {bool enableTypeAssertions}) {
     return const TrivialRuntimeTypesNeed();
   }
-
-  @override
-  void registerTypeArgumentDependency(Entity element, Entity dependency) {}
 }
 
 /// Interface for the needed runtime type checks.
@@ -196,10 +165,30 @@
 
   /// Return all classes that are referenced in the type of the function, i.e.,
   /// in the return type or the argument types.
-  Set<ClassEntity> getReferencedClasses(FunctionType type);
+  Iterable<ClassEntity> getReferencedClasses(FunctionType type);
 
   /// Return all classes that use type arguments.
-  Set<ClassEntity> getRequiredArgumentClasses();
+  Iterable<ClassEntity> getRequiredArgumentClasses();
+
+  /// Return all classes immediately used in explicit or implicit is-tests.
+  ///
+  /// An is-test of `o is List<String>` will add `List`, but _not_ `String` to
+  /// the [checkedClasses] set.
+  Iterable<ClassEntity> get checkedClasses;
+
+  // Returns all function types immediately used in explicit or implicit
+  // is-tests.
+  //
+  // An is-test of `of is Function(Function())` will add `Function(Function())`
+  // but _not_ `Function()` to the [checkedFunctionTypes] set. An is-test
+  // against a typedef will add its alias to the [checkedFunctionTypes] set.
+  Iterable<FunctionType> get checkedFunctionTypes;
+
+  /// Classes whose type variables are explicitly or implicitly used in
+  /// is-tests.
+  ///
+  /// See [TypeVariableTests.classTests].
+  Iterable<ClassEntity> get classesUsingTypeVariableTests;
 }
 
 class TrivialTypesChecks implements RuntimeTypesChecks {
@@ -213,10 +202,19 @@
   TypeChecks get requiredChecks => _typeChecks;
 
   @override
-  Set<ClassEntity> getRequiredArgumentClasses() => _allClasses;
+  Iterable<ClassEntity> getRequiredArgumentClasses() => _allClasses;
 
   @override
-  Set<ClassEntity> getReferencedClasses(FunctionType type) => _allClasses;
+  Iterable<ClassEntity> getReferencedClasses(FunctionType type) => _allClasses;
+
+  @override
+  Iterable<ClassEntity> get checkedClasses => _allClasses;
+
+  @override
+  Iterable<FunctionType> get checkedFunctionTypes => const <FunctionType>[];
+
+  @override
+  Iterable<ClassEntity> get classesUsingTypeVariableTests => _allClasses;
 }
 
 /// Interface for computing the needed runtime type checks.
@@ -226,14 +224,7 @@
 
   /// Computes the [RuntimeTypesChecks] for the data in this builder.
   RuntimeTypesChecks computeRequiredChecks(
-      CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks);
-
-  /// Compute type arguments of classes that use one of their type variables in
-  /// is-checks and add the is-checks that they imply.
-  ///
-  /// This function must be called after all is-checks have been registered.
-  void registerImplicitChecks(Set<InterfaceType> instantiatedTypes,
-      Iterable<ClassEntity> classesUsingChecks, Set<DartType> implicitIsChecks);
+      CodegenWorldBuilder codegenWorldBuilder);
 
   bool get rtiChecksBuilderClosed;
 }
@@ -252,23 +243,30 @@
       DartType typeArgument, DartType bound) {}
 
   @override
-  void registerImplicitChecks(
-      Set<InterfaceType> instantiatedTypes,
-      Iterable<ClassEntity> classesUsingChecks,
-      Set<DartType> implicitIsChecks) {}
-
-  @override
   RuntimeTypesChecks computeRequiredChecks(
-      CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
+      CodegenWorldBuilder codegenWorldBuilder) {
     Set<ClassEntity> classes = _closedWorld
         .getClassSet(_closedWorld.commonElements.objectClass)
         .subtypes()
         .toSet();
     rtiChecksBuilderClosed = true;
-    TypeChecks typeChecks = _substitutions._requiredChecks = _substitutions
-        ._computeChecks(/*collector.*/ classes, /*collector.*/ classes);
+    TypeChecks typeChecks = _substitutions._requiredChecks =
+        _substitutions._computeChecks(classes, classes);
     return new TrivialTypesChecks(typeChecks);
   }
+
+  Set<ClassEntity> computeCheckedClasses(
+      CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
+    return _closedWorld
+        .getClassSet(_closedWorld.commonElements.objectClass)
+        .subtypes()
+        .toSet();
+  }
+
+  Set<FunctionType> computeCheckedFunctions(
+      CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
+    return new Set<FunctionType>();
+  }
 }
 
 class ClassCollector extends ArgumentCollector {
@@ -292,7 +290,7 @@
   TypeChecks get _requiredChecks;
 
   TypeChecks _computeChecks(
-      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
+      Iterable<ClassEntity> instantiated, Iterable<ClassEntity> checked) {
     // Run through the combination of instantiated and checked
     // arguments and record all combination where the element of a checked
     // argument is a superclass of the element of an instantiated type.
@@ -410,7 +408,7 @@
 
   @override
   TypeChecks computeChecks(
-      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
+      Iterable<ClassEntity> instantiated, Iterable<ClassEntity> checked) {
     return _requiredChecks;
   }
 }
@@ -424,7 +422,7 @@
   /// Compute the required type checks and substitutions for the given
   /// instantiated and checked classes.
   TypeChecks computeChecks(
-      Set<ClassEntity> instantiated, Set<ClassEntity> checked);
+      Iterable<ClassEntity> instantiated, Iterable<ClassEntity> checked);
 
   Set<ClassEntity> getClassesUsedInSubstitutions(TypeChecks checks);
 
@@ -467,11 +465,6 @@
 abstract class _RuntimeTypesBase {
   final DartTypes _types;
 
-  // TODO(21969): remove this and analyze instantiated types and factory calls
-  // instead to find out which types are instantiated, if finitely many, or if
-  // we have to use the more imprecise generic algorithm.
-  bool get cannotDetermineInstantiatedTypesPrecisely => true;
-
   _RuntimeTypesBase(this._types);
 
   /**
@@ -490,40 +483,19 @@
     // If there are no classes that use their variables in checks, there is
     // nothing to do.
     if (classesUsingChecks.isEmpty) return;
-    if (cannotDetermineInstantiatedTypesPrecisely) {
-      for (InterfaceType type in instantiatedTypes) {
-        do {
-          for (DartType argument in type.typeArguments) {
+    // Find all instantiated types that are a subtype of a class that uses
+    // one of its type arguments in an is-check and add the arguments to the
+    // set of is-checks.
+    for (InterfaceType type in instantiatedTypes) {
+      for (ClassEntity cls in classesUsingChecks) {
+        // We need the type as instance of its superclass anyway, so we just
+        // try to compute the substitution; if the result is [:null:], the
+        // classes are not related.
+        InterfaceType instance = _types.asInstanceOf(type, cls);
+        if (instance != null) {
+          for (DartType argument in instance.typeArguments) {
             implicitIsChecks.add(argument.unaliased);
           }
-          // TODO(johnniwinther): This seems wrong; the type arguments of [type]
-          // are not substituted - `List<int>` yields `Iterable<E>` and not
-          // `Iterable<int>`.
-          type = _types.getSupertype(type.element);
-        } while (type != null && !instantiatedTypes.contains(type));
-      }
-    } else {
-      // Find all instantiated types that are a subtype of a class that uses
-      // one of its type arguments in an is-check and add the arguments to the
-      // set of is-checks.
-      // TODO(karlklose): replace this with code that uses a subtype lookup
-      // datastructure in the world.
-      for (InterfaceType type in instantiatedTypes) {
-        for (ClassEntity cls in classesUsingChecks) {
-          do {
-            // We need the type as instance of its superclass anyway, so we just
-            // try to compute the substitution; if the result is [:null:], the
-            // classes are not related.
-            InterfaceType instance = _types.asInstanceOf(type, cls);
-            if (instance == null) break;
-            for (DartType argument in instance.typeArguments) {
-              implicitIsChecks.add(argument.unaliased);
-            }
-            // TODO(johnniwinther): This seems wrong; the type arguments of
-            // [type] are not substituted - `List<int>` yields `Iterable<E>` and
-            // not `Iterable<int>`.
-            type = _types.getSupertype(type.element);
-          } while (type != null && !instantiatedTypes.contains(type));
         }
       }
     }
@@ -556,12 +528,6 @@
 
   bool classNeedsTypeArguments(ClassEntity cls) {
     assert(checkClass(cls));
-    if (_backendUsage.isRuntimeTypeUsed) return true;
-    return classesNeedingTypeArguments.contains(cls);
-  }
-
-  bool classNeedsRtiField(ClassEntity cls) {
-    assert(checkClass(cls));
     if (!_elementEnvironment.isGenericClass(cls)) return false;
     if (_backendUsage.isRuntimeTypeUsed) return true;
     return classesNeedingTypeArguments.contains(cls);
@@ -572,13 +538,9 @@
         methodsNeedingSignature.contains(function);
   }
 
-  // TODO(johnniwinther): Optimize to only include generic methods that really
-  // need the RTI.
   bool methodNeedsTypeArguments(FunctionEntity function) {
     if (function.parameterStructure.typeParameters == 0) return false;
     if (_backendUsage.isRuntimeTypeUsed) return true;
-    // TODO(johnniwinther): Include instance members in analysis.
-    if (function.isInstanceMember) return true;
     return methodsNeedingTypeArguments.contains(function);
   }
 
@@ -620,13 +582,385 @@
   bool checkClass(ClassElement cls) => cls.isDeclaration;
 }
 
+class TypeVariableTests {
+  List<RtiNode> _nodes = <RtiNode>[];
+  Map<ClassEntity, ClassNode> _classes = <ClassEntity, ClassNode>{};
+  Map<Entity, MethodNode> _methods = <Entity, MethodNode>{};
+
+  /// All explicit is-tests.
+  final Set<DartType> explicitIsChecks;
+
+  /// All implicit is-tests.
+  final Set<DartType> implicitIsChecks = new Set<DartType>();
+
+  /// Classes whose type variables are explicitly or implicitly used in
+  /// is-tests.
+  ///
+  /// For instance `A` and `B` in:
+  ///
+  ///     class A<T> {
+  ///       m(o) => o is T;
+  ///     }
+  ///     class B<S> {
+  ///       m(o) => new A<S>().m(o);
+  ///     }
+  ///     main() => new B<int>().m(0);
+  ///
+  Iterable<ClassEntity> get classTests =>
+      _classes.values.where((n) => n.hasTest).map((n) => n.cls).toSet();
+
+  /// Classes that explicitly use their type variables in is-tests.
+  ///
+  /// For instance `A` in:
+  ///
+  ///     class A<T> {
+  ///       m(o) => o is T;
+  ///     }
+  ///     main() => new A<int>().m(0);
+  ///
+  Iterable<ClassEntity> get directClassTests =>
+      _classes.values.where((n) => n.hasDirectTest).map((n) => n.cls).toSet();
+
+  /// Methods that explicitly or implicitly use their type variables in
+  /// is-tests.
+  ///
+  /// For instance `m1` and `m2`in:
+  ///
+  ///     m1<T>(o) => o is T;
+  ///     m2<S>(o) => m1<S>(o);
+  ///     main() => m2<int>(0);
+  ///
+  Iterable<Entity> get methodTests =>
+      _methods.values.where((n) => n.hasTest).map((n) => n.function).toSet();
+
+  /// Methods that explicitly use their type variables in is-tests.
+  ///
+  /// For instance `m` in:
+  ///
+  ///     m<T>(o) => o is T;
+  ///     main() => m<int>(0);
+  ///
+  Iterable<Entity> get directMethodTests => _methods.values
+      .where((n) => n.hasDirectTest)
+      .map((n) => n.function)
+      .toSet();
+
+  /// The entities that need type arguments at runtime if the 'key entity' needs
+  /// type arguments.
+  ///
+  /// For instance:
+  ///
+  ///     class A<T> {
+  ///       m() => new B<T>();
+  ///     }
+  ///     class B<T> {}
+  ///     main() => new A<String>().m() is B<int>;
+  ///
+  /// Here `A` need type arguments at runtime because the key entity `B` needs
+  /// it in order to generate the check against `B<int>`.
+  ///
+  /// This can also involve generic methods:
+  ///
+  ///    class A<T> {}
+  ///    method<T>() => new A<T>();
+  ///    main() => method<int>() is A<int>();
+  ///
+  /// Here `method` need type arguments at runtime because the key entity `A`
+  /// needs it in order to generate the check against `A<int>`.
+  ///
+  Iterable<Entity> getTypeArgumentDependencies(Entity entity) {
+    Iterable<RtiNode> dependencies;
+    if (entity is ClassEntity) {
+      dependencies = _classes[entity]?.dependencies;
+    } else {
+      dependencies = _methods[entity]?.dependencies;
+    }
+    if (dependencies == null) return const <Entity>[];
+    return dependencies.map((n) => n.entity).toSet();
+  }
+
+  TypeVariableTests(ElementEnvironment elementEnvironment,
+      CommonElements commonElements, DartTypes types, WorldBuilder worldBuilder)
+      : explicitIsChecks = new Set<DartType>.from(worldBuilder.isChecks) {
+    ClassNode getClassNode(ClassEntity cls) {
+      return _classes.putIfAbsent(cls, () {
+        ClassNode node = new ClassNode(cls);
+        _nodes.add(node);
+        return node;
+      });
+    }
+
+    MethodNode getMethodNode(Entity function) {
+      return _methods.putIfAbsent(function, () {
+        MethodNode node;
+        if (function is FunctionEntity) {
+          Name instanceName;
+          bool isCallTarget;
+          if (function.isInstanceMember) {
+            isCallTarget = worldBuilder.closurizedMembers.contains(function);
+            instanceName = function.memberName;
+          } else {
+            isCallTarget = worldBuilder.closurizedStatics.contains(function);
+          }
+          node = new MethodNode(function, function.parameterStructure,
+              isCallTarget: isCallTarget, instanceName: instanceName);
+        } else {
+          ParameterStructure parameterStructure =
+              new ParameterStructure.fromType(
+                  elementEnvironment.getLocalFunctionType(function));
+          node =
+              new MethodNode(function, parameterStructure, isCallTarget: true);
+        }
+        _nodes.add(node);
+        return node;
+      });
+    }
+
+    void registerDependencies(RtiNode node, DartType type) {
+      type.forEachTypeVariable((TypeVariableType typeVariable) {
+        Entity typeDeclaration = typeVariable.element.typeDeclaration;
+        if (typeDeclaration is ClassEntity) {
+          node.addDependency(getClassNode(typeDeclaration));
+        } else {
+          node.addDependency(getMethodNode(typeDeclaration));
+        }
+      });
+    }
+
+    // Add the rti dependencies that are implicit in the way the backend
+    // generates code: when we create a new [List], we actually create a
+    // [JSArray] in the backend and we need to add type arguments to the calls
+    // of the list constructor whenever we determine that [JSArray] needs type
+    // arguments.
+    //
+    // This is need for instance for:
+    //
+    //    var list = <int>[];
+    //    var set = list.toSet();
+    //    set is Set<String>;
+    //
+    // It also occurs for [Map] vs [JsLinkedHashMap] in:
+    //
+    //    var map = <int, double>{};
+    //    var set = map.keys.toSet();
+    //    set is Set<String>;
+    //
+    // TODO(johnniwinther): Make this dependency visible from code, possibly
+    // using generic methods.
+    if (commonElements.jsArrayClass != null) {
+      getClassNode(commonElements.jsArrayClass)
+          .addDependency(getClassNode(commonElements.listClass));
+    }
+    if (commonElements.mapLiteralClass != null) {
+      getClassNode(commonElements.mapLiteralClass)
+          .addDependency(getClassNode(commonElements.mapClass));
+    }
+
+    worldBuilder.isChecks.forEach((DartType type) {
+      if (type is InterfaceType) {
+        registerDependencies(getClassNode(type.element), type);
+      }
+    });
+    worldBuilder.instantiatedTypes.forEach((InterfaceType type) {
+      registerDependencies(getClassNode(type.element), type);
+    });
+
+    worldBuilder.forEachStaticTypeArgument(
+        (Entity entity, Iterable<DartType> typeArguments) {
+      for (DartType type in typeArguments) {
+        registerDependencies(getMethodNode(entity), type);
+      }
+    });
+
+    worldBuilder.forEachDynamicTypeArgument(
+        (Selector selector, Iterable<DartType> typeArguments) {
+      for (DartType type in typeArguments) {
+        // TODO(johnniwinther): Ensure that methods added here will be
+        // processed for matching selectors.
+        for (MethodNode method in _methods.values.toList()) {
+          if (method.selectorApplies(selector)) {
+            registerDependencies(method, type);
+          }
+        }
+      }
+    });
+
+    worldBuilder.isChecks.forEach((DartType type) {
+      if (type.isTypeVariable) {
+        TypeVariableType typeVariableType = type;
+        TypeVariableEntity variable = typeVariableType.element;
+        if (variable.typeDeclaration is ClassEntity) {
+          getClassNode(variable.typeDeclaration).markDirectTest();
+        } else {
+          getMethodNode(variable.typeDeclaration).markDirectTest();
+        }
+      }
+    });
+
+    // Compute type arguments of classes that use one of their type variables in
+    // is-checks and add the is-checks that they imply.
+    _classes.forEach((ClassEntity cls, ClassNode node) {
+      if (!node.hasTest) return;
+      // Find all instantiated types that are a subtype of a class that uses
+      // one of its type arguments in an is-check and add the arguments to the
+      // set of is-checks.
+      for (InterfaceType type in worldBuilder.instantiatedTypes) {
+        // We need the type as instance of its superclass anyway, so we just
+        // try to compute the substitution; if the result is [:null:], the
+        // classes are not related.
+        InterfaceType instance = types.asInstanceOf(type, cls);
+        if (instance != null) {
+          for (DartType argument in instance.typeArguments) {
+            implicitIsChecks.add(argument.unaliased);
+          }
+        }
+      }
+    });
+
+    worldBuilder.forEachStaticTypeArgument(
+        (Entity function, Iterable<DartType> typeArguments) {
+      if (!getMethodNode(function).hasTest) return;
+      implicitIsChecks.addAll(typeArguments);
+    });
+    worldBuilder.forEachDynamicTypeArgument(
+        (Selector selector, Iterable<DartType> typeArguments) {
+      for (MethodNode node in _methods.values) {
+        if (!node.hasTest) continue;
+        if (node.selectorApplies(selector)) {
+          implicitIsChecks.addAll(typeArguments);
+        }
+      }
+    });
+  }
+
+  String dump({bool verbose: false}) {
+    StringBuffer sb = new StringBuffer();
+
+    void addNode(RtiNode node) {
+      if (node._testState != 0 || node.dependencies.isNotEmpty || verbose) {
+        sb.write(' $node');
+        if (node._testState & 1 != 0) {
+          sb.write(' direct');
+        }
+        if (node._testState & 2 != 0) {
+          sb.write(' indirect');
+        }
+        if (node.dependencies.isNotEmpty || verbose) {
+          sb.writeln(':');
+          node.dependencies.forEach((n) => sb.writeln('  $n'));
+        } else {
+          sb.writeln();
+        }
+      }
+    }
+
+    void addType(DartType type) {
+      sb.writeln(' $type');
+    }
+
+    sb.writeln('classes:');
+    _classes.values.forEach(addNode);
+    sb.writeln('methods:');
+    _methods.values.forEach(addNode);
+    sb.writeln('explicit is-tests:');
+    explicitIsChecks.forEach(addType);
+    sb.writeln('implicit is-tests:');
+    implicitIsChecks.forEach(addType);
+
+    return sb.toString();
+  }
+}
+
+abstract class RtiNode {
+  Entity get entity;
+  Set<RtiNode> _dependencies;
+  int _testState = 0;
+
+  Iterable<RtiNode> get dependencies => _dependencies ?? const <RtiNode>[];
+
+  bool get hasDirectTest => _testState & 1 != 0;
+  bool get hasIndirectTest => _testState & 2 != 0;
+
+  bool get hasTest => _testState != 0;
+
+  bool addDependency(RtiNode node) {
+    if (entity == node.entity) {
+      // Skip trivial dependencies; if [entity] needs type arguments so does
+      // [entity]!
+      return false;
+    }
+    _dependencies ??= new Set<RtiNode>();
+    return _dependencies.add(node);
+  }
+
+  void markDirectTest() {
+    setTestState(1);
+  }
+
+  void markIndirectTest() {
+    setTestState(2);
+  }
+
+  void setTestState(int value) {
+    if (_testState != value) {
+      if (_testState == 0) {
+        _testState |= value;
+        if (_dependencies != null) {
+          for (RtiNode node in _dependencies) {
+            node.markIndirectTest();
+          }
+        }
+      } else {
+        _testState = value;
+      }
+    }
+  }
+
+  String get kind;
+
+  String toString() {
+    StringBuffer sb = new StringBuffer();
+    sb.write(kind);
+    sb.write(':');
+    sb.write(entity);
+    return sb.toString();
+  }
+}
+
+class ClassNode extends RtiNode {
+  final ClassEntity cls;
+
+  ClassNode(this.cls);
+
+  Entity get entity => cls;
+
+  String get kind => 'class';
+}
+
+class MethodNode extends RtiNode {
+  final Entity function;
+  final ParameterStructure parameterStructure;
+  final bool isCallTarget;
+  final Name instanceName;
+
+  MethodNode(this.function, this.parameterStructure,
+      {this.isCallTarget, this.instanceName});
+
+  Entity get entity => function;
+
+  bool selectorApplies(Selector selector) {
+    return (isCallTarget && selector.isClosureCall ||
+            instanceName == selector.memberName) &&
+        selector.callStructure.signatureApplies(parameterStructure);
+  }
+
+  String get kind => 'method';
+}
+
 class RuntimeTypesNeedBuilderImpl extends _RuntimeTypesBase
     implements RuntimeTypesNeedBuilder {
   final ElementEnvironment _elementEnvironment;
 
-  final Map<Entity, Set<Entity>> typeArgumentDependencies =
-      <Entity, Set<Entity>>{};
-
   final Set<ClassEntity> classesUsingTypeVariableLiterals =
       new Set<ClassEntity>();
 
@@ -635,11 +969,7 @@
 
   final Set<Local> localFunctionsUsingTypeVariableLiterals = new Set<Local>();
 
-  final Set<ClassEntity> classesUsingTypeVariableTests = new Set<ClassEntity>();
-
-  Set<DartType> isChecks;
-
-  final Set<DartType> implicitIsChecks = new Set<DartType>();
+  TypeVariableTests typeVariableTests;
 
   RuntimeTypesNeedBuilderImpl(this._elementEnvironment, DartTypes types)
       : super(types);
@@ -662,18 +992,14 @@
   }
 
   @override
-  void registerTypeArgumentDependency(Entity element, Entity dependency) {
-    assert(element != null);
-    Set<Entity> classes =
-        typeArgumentDependencies.putIfAbsent(element, () => new Set<Entity>());
-    classes.add(dependency);
-  }
-
-  @override
   RuntimeTypesNeed computeRuntimeTypesNeed(
       ResolutionWorldBuilder resolutionWorldBuilder, ClosedWorld closedWorld,
       {bool enableTypeAssertions}) {
-    isChecks = new Set<DartType>.from(resolutionWorldBuilder.isChecks);
+    typeVariableTests = new TypeVariableTests(
+        closedWorld.elementEnvironment,
+        closedWorld.commonElements,
+        closedWorld.dartTypes,
+        resolutionWorldBuilder);
     Set<ClassEntity> classesNeedingTypeArguments = new Set<ClassEntity>();
     Set<FunctionEntity> methodsNeedingSignature = new Set<FunctionEntity>();
     Set<FunctionEntity> methodsNeedingTypeArguments = new Set<FunctionEntity>();
@@ -703,39 +1029,11 @@
         localFunctionsNeedingTypeArguments.add(entity);
       }
 
-      Set<Entity> dependencies = typeArgumentDependencies[entity];
-      if (dependencies != null) {
-        dependencies.forEach((Entity other) {
-          potentiallyNeedTypeArguments(other);
-        });
-      }
-    }
-
-    isChecks.forEach((DartType type) {
-      if (type.isTypeVariable) {
-        TypeVariableType typeVariableType = type;
-        TypeVariableEntity variable = typeVariableType.element;
-        // GENERIC_METHODS: When generic method support is complete enough to
-        // include a runtime value for method type variables, this may need to
-        // be updated: It simply ignores method type arguments.
-        if (variable.typeDeclaration is ClassEntity) {
-          classesUsingTypeVariableTests.add(variable.typeDeclaration);
-        }
-      }
-    });
-    // Add is-checks that result from classes using type variables in checks.
-    registerImplicitChecks(resolutionWorldBuilder.instantiatedTypes,
-        classesUsingTypeVariableTests, implicitIsChecks);
-    // Add the rti dependencies that are implicit in the way the backend
-    // generates code: when we create a new [List], we actually create
-    // a JSArray in the backend and we need to add type arguments to
-    // the calls of the list constructor whenever we determine that
-    // JSArray needs type arguments.
-    // TODO(karlklose): make this dependency visible from code.
-    if (closedWorld.commonElements.jsArrayClass != null) {
-      ClassEntity listClass = closedWorld.commonElements.listClass;
-      registerTypeArgumentDependency(
-          closedWorld.commonElements.jsArrayClass, listClass);
+      Iterable<Entity> dependencies =
+          typeVariableTests.getTypeArgumentDependencies(entity);
+      dependencies.forEach((Entity other) {
+        potentiallyNeedTypeArguments(other);
+      });
     }
 
     // Check local functions and closurized members.
@@ -791,8 +1089,8 @@
       });
     }
 
-    processChecks(isChecks);
-    processChecks(implicitIsChecks);
+    processChecks(typeVariableTests.explicitIsChecks);
+    processChecks(typeVariableTests.implicitIsChecks);
 
     if (enableTypeAssertions) {
       checkClosures();
@@ -869,14 +1167,23 @@
 class _RuntimeTypesChecks implements RuntimeTypesChecks {
   final RuntimeTypesSubstitutions substitutions;
   final TypeChecks requiredChecks;
-  final Set<ClassEntity> directlyInstantiatedArguments;
-  final Set<ClassEntity> checkedArguments;
+  final Iterable<ClassEntity> directlyInstantiatedArguments;
+  final Iterable<ClassEntity> checkedArguments;
+  final Iterable<ClassEntity> checkedClasses;
+  final Iterable<FunctionType> checkedFunctionTypes;
+  final TypeVariableTests typeVariableTests;
 
-  _RuntimeTypesChecks(this.substitutions, this.requiredChecks,
-      this.directlyInstantiatedArguments, this.checkedArguments);
+  _RuntimeTypesChecks(
+      this.substitutions,
+      this.requiredChecks,
+      this.directlyInstantiatedArguments,
+      this.checkedArguments,
+      this.checkedClasses,
+      this.checkedFunctionTypes,
+      this.typeVariableTests);
 
   @override
-  Set<ClassEntity> getRequiredArgumentClasses() {
+  Iterable<ClassEntity> getRequiredArgumentClasses() {
     Set<ClassEntity> requiredArgumentClasses = new Set<ClassEntity>.from(
         substitutions.getClassesUsedInSubstitutions(requiredChecks));
     return requiredArgumentClasses
@@ -885,16 +1192,21 @@
   }
 
   @override
-  Set<ClassEntity> getReferencedClasses(FunctionType type) {
+  Iterable<ClassEntity> getReferencedClasses(FunctionType type) {
     FunctionArgumentCollector collector = new FunctionArgumentCollector();
     collector.collect(type);
     return collector.classes;
   }
+
+  @override
+  Iterable<ClassEntity> get classesUsingTypeVariableTests =>
+      typeVariableTests.classTests;
 }
 
 class RuntimeTypesImpl extends _RuntimeTypesBase
     with RuntimeTypesSubstitutionsMixin
     implements RuntimeTypesChecksBuilder {
+  final CommonElements _commentElements;
   final ElementEnvironment _elementEnvironment;
 
   // The set of type arguments tested against type variable bounds.
@@ -906,14 +1218,15 @@
 
   bool rtiChecksBuilderClosed = false;
 
-  RuntimeTypesImpl(this._elementEnvironment, DartTypes types) : super(types);
+  RuntimeTypesImpl(
+      this._commentElements, this._elementEnvironment, DartTypes types)
+      : super(types);
 
   @override
   TypeChecks get _requiredChecks => cachedRequiredChecks;
 
   Set<ClassEntity> directlyInstantiatedArguments;
   Set<ClassEntity> allInstantiatedArguments;
-  Set<ClassEntity> checkedArguments;
 
   @override
   void registerTypeVariableBoundsSubtypeCheck(
@@ -923,20 +1236,44 @@
   }
 
   RuntimeTypesChecks computeRequiredChecks(
-      CodegenWorldBuilder codegenWorldBuilder, Set<DartType> implicitIsChecks) {
-    Set<DartType> isChecks =
-        new Set<DartType>.from(codegenWorldBuilder.isChecks);
-    isChecks.addAll(implicitIsChecks);
+      CodegenWorldBuilder codegenWorldBuilder) {
+    TypeVariableTests typeVariableTests = new TypeVariableTests(
+        _elementEnvironment, _commentElements, _types, codegenWorldBuilder);
+    Set<DartType> explicitIsChecks = typeVariableTests.explicitIsChecks;
+    Set<DartType> implicitIsChecks = typeVariableTests.implicitIsChecks;
+
+    Set<ClassEntity> checkedClasses = new Set<ClassEntity>();
+    Set<FunctionType> checkedFunctionTypes = new Set<FunctionType>();
+
+    void processType(DartType t) {
+      if (t is FunctionType) {
+        checkedFunctionTypes.add(t);
+      } else if (t is InterfaceType) {
+        checkedClasses.add(t.element);
+      }
+    }
+
+    explicitIsChecks.forEach(processType);
+    implicitIsChecks.forEach(processType);
+
     // These types are needed for is-checks against function types.
     Set<DartType> instantiatedTypesAndClosures =
         computeInstantiatedTypesAndClosures(codegenWorldBuilder);
-    computeInstantiatedArguments(instantiatedTypesAndClosures, isChecks);
-    computeCheckedArguments(instantiatedTypesAndClosures, isChecks);
+    computeInstantiatedArguments(
+        instantiatedTypesAndClosures, explicitIsChecks, implicitIsChecks);
+    Set<ClassEntity> checkedArguments = computeCheckedArguments(
+        instantiatedTypesAndClosures, explicitIsChecks, implicitIsChecks);
     cachedRequiredChecks =
         computeChecks(allInstantiatedArguments, checkedArguments);
     rtiChecksBuilderClosed = true;
-    return new _RuntimeTypesChecks(this, cachedRequiredChecks,
-        directlyInstantiatedArguments, checkedArguments);
+    return new _RuntimeTypesChecks(
+        this,
+        cachedRequiredChecks,
+        directlyInstantiatedArguments,
+        checkedArguments,
+        checkedClasses,
+        checkedFunctionTypes,
+        typeVariableTests);
   }
 
   Set<DartType> computeInstantiatedTypesAndClosures(
@@ -968,8 +1305,8 @@
    * have a type check against this supertype that includes a check against
    * the type arguments.
    */
-  void computeInstantiatedArguments(
-      Set<DartType> instantiatedTypes, Set<DartType> isChecks) {
+  void computeInstantiatedArguments(Set<DartType> instantiatedTypes,
+      Set<DartType> isChecks, Set<DartType> implicitIsChecks) {
     ArgumentCollector superCollector = new ArgumentCollector();
     ArgumentCollector directCollector = new ArgumentCollector();
     FunctionArgumentCollector functionArgumentCollector =
@@ -984,6 +1321,7 @@
     }
 
     collectFunctionTypeArguments(isChecks);
+    collectFunctionTypeArguments(implicitIsChecks);
     collectFunctionTypeArguments(checkedBounds);
 
     void collectTypeArguments(Iterable<DartType> types,
@@ -1015,8 +1353,8 @@
   }
 
   /// Collects all type arguments used in is-checks.
-  void computeCheckedArguments(
-      Set<DartType> instantiatedTypes, Set<DartType> isChecks) {
+  Set<ClassEntity> computeCheckedArguments(Set<DartType> instantiatedTypes,
+      Set<DartType> isChecks, Set<DartType> implicitIsChecks) {
     ArgumentCollector collector = new ArgumentCollector();
     FunctionArgumentCollector functionArgumentCollector =
         new FunctionArgumentCollector();
@@ -1041,15 +1379,15 @@
     }
 
     collectTypeArguments(isChecks);
+    collectTypeArguments(implicitIsChecks);
     collectTypeArguments(checkedBounds, isTypeArgument: true);
 
-    checkedArguments = collector.classes
-      ..addAll(functionArgumentCollector.classes);
+    return collector.classes..addAll(functionArgumentCollector.classes);
   }
 
   @override
   TypeChecks computeChecks(
-      Set<ClassEntity> instantiated, Set<ClassEntity> checked) {
+      Iterable<ClassEntity> instantiated, Iterable<ClassEntity> checked) {
     return _computeChecks(instantiated, checked);
   }
 }
@@ -1557,15 +1895,12 @@
   }
 }
 
-/**
- * Representation of the substitution of type arguments
- * when going from the type of a class to one of its supertypes.
- *
- * For [:class B<T> extends A<List<T>, int>:], the substitution is
- * the representation of [: (T) => [<List, T>, int] :].  For more details
- * of the representation consult the documentation of
- * [getSupertypeSubstitution].
- */
+/// Representation of the substitution of type arguments when going from the
+/// type of a class to one of its supertypes.
+///
+/// For `class B<T> extends A<List<T>, int>`, the substitution is the
+/// representation of `(T) => [<List, T>, int]`. For more details of the
+/// representation consult the documentation of [getSupertypeSubstitution].
 //TODO(floitsch): Remove support for non-function substitutions.
 class Substitution {
   final bool isFunction;
@@ -1584,7 +1919,7 @@
 
 /**
  * A pair of a class that we need a check against and the type argument
- * substition for this check.
+ * substitution for this check.
  */
 class TypeCheck {
   final ClassEntity cls;
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 8edc01d..a6eb6fa 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -671,7 +671,7 @@
 
   Class _buildClass(ClassEntity cls) {
     bool onlyForRti = collector.classesOnlyNeededForRti.contains(cls);
-    bool hasRtiField = _rtiNeed.classNeedsRtiField(cls);
+    bool hasRtiField = _rtiNeed.classNeedsTypeArguments(cls);
     if (_nativeData.isJsInteropClass(cls)) {
       // TODO(jacobr): check whether the class has any active static fields
       // if it does not we can suppress it completely.
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index bc4ea30..2eccc93 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -140,13 +140,14 @@
 
   TypeTestRegistry get _typeTestRegistry => emitterTask.typeTestRegistry;
 
-  Set<ClassEntity> get checkedClasses => _typeTestRegistry.checkedClasses;
+  Iterable<ClassEntity> get checkedClasses =>
+      _typeTestRegistry.rtiChecks.checkedClasses;
 
   Iterable<ClassEntity> get classesUsingTypeVariableTests =>
-      _typeTestRegistry.classesUsingTypeVariableTests;
+      _typeTestRegistry.rtiChecks.classesUsingTypeVariableTests;
 
-  Set<FunctionType> get checkedFunctionTypes =>
-      _typeTestRegistry.checkedFunctionTypes;
+  Iterable<FunctionType> get checkedFunctionTypes =>
+      _typeTestRegistry.rtiChecks.checkedFunctionTypes;
 
   /// Generates all properties necessary for is-checks on the [classElement].
   ///
@@ -181,7 +182,7 @@
         FunctionEntity method, FunctionType type) {
       assert(!(method is MethodElement && !method.isImplementation));
       jsAst.Expression thisAccess = new jsAst.This();
-      if (!method.isAbstract) {
+      if (method.enclosingClass.isClosure) {
         ScopeInfo scopeInfo = _closureDataLookup.getScopeInfo(method);
         if (scopeInfo is ClosureRepresentationInfo) {
           FieldEntity thisLocal = scopeInfo.thisFieldEntity;
diff --git a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
index b6a3a8e..310092b 100644
--- a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
@@ -21,38 +21,17 @@
 class TypeTestRegistry {
   final ElementEnvironment _elementEnvironment;
 
-  /**
-   * Raw ClassElement symbols occurring in is-checks and type assertions.  If the
-   * program contains parameterized checks `x is Set<int>` and
-   * `x is Set<String>` then the ClassElement `Set` will occur once in
-   * [checkedClasses].
-   */
-  Set<ClassEntity> checkedClasses;
-
-  /**
-   * The set of function types that checked, both explicitly through tests of
-   * typedefs and implicitly through type annotations in checked mode.
-   */
-  Set<FunctionType> checkedFunctionTypes;
-
   /// After [computeNeededClasses] this set only contains classes that are only
   /// used for RTI.
   Set<ClassEntity> _rtiNeededClasses;
 
-  Iterable<ClassEntity> cachedClassesUsingTypeVariableTests;
-
-  Iterable<ClassEntity> get classesUsingTypeVariableTests {
-    if (cachedClassesUsingTypeVariableTests == null) {
-      cachedClassesUsingTypeVariableTests = _codegenWorldBuilder.isChecks
-          .where((DartType t) =>
-              t is TypeVariableType && t.element.typeDeclaration is ClassEntity)
-          .map<ClassEntity>((DartType _v) {
-        TypeVariableType v = _v;
-        return v.element.typeDeclaration;
-      }).toList();
-    }
-    return cachedClassesUsingTypeVariableTests;
-  }
+  /// The required checks on classes.
+  // TODO(johnniwinther): Currently this is wrongfully computed twice. Once
+  // in [computeRequiredTypeChecks] and once in [computeRtiNeededClasses]. The
+  // former is stored in [RuntimeTypeChecks] and used in the
+  // [TypeRepresentationGenerator] and the latter is used to compute the
+  // classes needed for RTI.
+  TypeChecks _requiredChecks;
 
   final CodegenWorldBuilder _codegenWorldBuilder;
   final ClosedWorld _closedWorld;
@@ -78,6 +57,14 @@
     return _rtiNeededClasses;
   }
 
+  TypeChecks get requiredChecks {
+    assert(
+        _requiredChecks != null,
+        failedAt(NO_LOCATION_SPANNABLE,
+            "requiredChecks has not been computed yet."));
+    return _requiredChecks;
+  }
+
   /**
    * Returns the classes with constructors used as a 'holder' in
    * [emitRuntimeTypeSupport].
@@ -123,15 +110,15 @@
 
     // 2.  Add classes that are referenced by substitutions in object checks and
     //     their superclasses.
-    TypeChecks requiredChecks =
-        rtiSubstitutions.computeChecks(rtiNeededClasses, checkedClasses);
+    _requiredChecks = rtiSubstitutions.computeChecks(
+        rtiNeededClasses, rtiChecks.checkedClasses);
     Set<ClassEntity> classesUsedInSubstitutions =
         rtiSubstitutions.getClassesUsedInSubstitutions(requiredChecks);
     addClassesWithSuperclasses(classesUsedInSubstitutions);
 
     // 3.  Add classes that contain checked generic function types. These are
     //     needed to store the signature encoding.
-    for (FunctionType type in checkedFunctionTypes) {
+    for (FunctionType type in rtiChecks.checkedFunctionTypes) {
       ClassEntity contextClass = DartTypes.getClassContext(type);
       if (contextClass != null) {
         _rtiNeededClasses.add(contextClass);
@@ -178,28 +165,6 @@
   }
 
   void computeRequiredTypeChecks(RuntimeTypesChecksBuilder rtiChecksBuilder) {
-    assert(checkedClasses == null && checkedFunctionTypes == null);
-
-    Set<DartType> implicitIsChecks = new Set<DartType>();
-    rtiChecksBuilder.registerImplicitChecks(
-        _codegenWorldBuilder.instantiatedTypes,
-        classesUsingTypeVariableTests,
-        implicitIsChecks);
-    _rtiChecks = rtiChecksBuilder.computeRequiredChecks(
-        _codegenWorldBuilder, implicitIsChecks);
-
-    checkedClasses = new Set<ClassEntity>();
-    checkedFunctionTypes = new Set<FunctionType>();
-
-    processType(DartType t) {
-      if (t is InterfaceType) {
-        checkedClasses.add(t.element);
-      } else if (t is FunctionType) {
-        checkedFunctionTypes.add(t);
-      }
-    }
-
-    _codegenWorldBuilder.isChecks.forEach(processType);
-    implicitIsChecks.forEach(processType);
+    _rtiChecks = rtiChecksBuilder.computeRequiredChecks(_codegenWorldBuilder);
   }
 }
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 4734f47..9e190de 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -1207,7 +1207,7 @@
 
   ResolutionImpact computeWorldImpact(KMember member) {
     return buildKernelImpact(
-        _members.getData(member).definition.node, this, reporter);
+        _members.getData(member).definition.node, this, reporter, options);
   }
 
   ScopeModel computeScopeModel(KMember member) {
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 8e99d15..bdcd32a 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -232,21 +232,18 @@
 /// Environment for fast lookup of class members.
 class ClassEnvImpl implements ClassEnv {
   final ir.Class cls;
-  final bool isUnnamedMixinApplication;
 
   Map<String, ir.Member> _constructorMap;
   Map<String, ir.Member> _memberMap;
   Map<String, ir.Member> _setterMap;
-  List<ir.Member> _members; // in declarartion order.
+  List<ir.Member> _members; // in declaration order.
 
   /// Constructor bodies created for this class.
   List<ConstructorBodyEntity> _constructorBodyList;
 
-  ClassEnvImpl(this.cls)
-      // TODO(johnniwinther): Change this to use a property on [cls] when such
-      // is added to kernel.
-      : isUnnamedMixinApplication =
-            cls.name.contains('+') || cls.name.contains('&');
+  ClassEnvImpl(this.cls);
+
+  bool get isUnnamedMixinApplication => cls.isSyntheticMixinImplementation;
 
   /// Copied from 'package:kernel/transformations/mixin_full_resolution.dart'.
   ir.Constructor _buildForwardingConstructor(
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart
index d3d9476..4a2634a 100644
--- a/pkg/compiler/lib/src/parser/element_listener.dart
+++ b/pkg/compiler/lib/src/parser/element_listener.dart
@@ -461,7 +461,7 @@
       Token token) {}
 
   @override
-  void handleNoType(Token token) {
+  void handleNoType(Token lastConsumed) {
     pushNode(null);
   }
 
@@ -960,13 +960,13 @@
   }
 
   @override
-  void beginMember(Token token) {
+  void beginMember() {
     memberErrors = memberErrors.prepend(false);
   }
 
   @override
   void beginTopLevelMember(Token token) {
-    beginMember(token);
+    beginMember();
   }
 
   @override
diff --git a/pkg/compiler/lib/src/parser/partial_elements.dart b/pkg/compiler/lib/src/parser/partial_elements.dart
index 1672ff3..f3b2551 100644
--- a/pkg/compiler/lib/src/parser/partial_elements.dart
+++ b/pkg/compiler/lib/src/parser/partial_elements.dart
@@ -93,9 +93,7 @@
   FunctionExpression parseNode(ParsingContext parsing) {
     if (cachedNode != null) return cachedNode;
     parseFunction(Parser p) {
-      if (isClassMember && modifiers.isFactory) {
-        p.parseFactoryMethod(p.syntheticPreviousToken(beginToken));
-      } else if (isClassMember) {
+      if (isClassMember) {
         p.parseMember(beginToken);
       } else {
         p.parseTopLevelMember(p.syntheticPreviousToken(beginToken));
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index 0cc75e9..c2d433a 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -462,7 +462,10 @@
       parameterNodes = parameterNodes.tail;
     });
     addDeferredAction(enclosingElement, () {
-      functionSignature.forEachOptionalParameter((_parameter) {
+      // Use function.functionSignature instead of functionSignature because
+      // the signature may have changed.
+      // TODO(het): Fix this so we can use just 'functionSignature' here.
+      function.functionSignature.forEachOptionalParameter((_parameter) {
         ParameterElementX parameter = _parameter;
         parameter.constant =
             resolver.constantCompiler.compileConstant(parameter);
@@ -1002,7 +1005,7 @@
       }
       // We still need to register the invocation, because we might
       // call [:super.noSuchMethod:] which calls [JSInvocationMirror._invokeOn].
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
       registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
     }
     return computeSuperAccessSemantics(node, target);
@@ -1071,12 +1074,12 @@
     if (getterError) {
       // We still need to register the invocation, because we might
       // call [:super.noSuchMethod:] which calls [JSInvocationMirror._invokeOn].
-      registry.registerDynamicUse(new DynamicUse(getterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(getterSelector));
     }
     if (setterError) {
       // We still need to register the invocation, because we might
       // call [:super.noSuchMethod:] which calls [JSInvocationMirror._invokeOn].
-      registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(setterSelector));
     }
     if (getterError || setterError) {
       registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
@@ -1207,7 +1210,7 @@
     } else {
       ResolutionResult expressionResult = visitExpression(expression);
       semantics = const DynamicAccess.expression();
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
 
       if (expressionResult.isConstant) {
         bool isValidConstant;
@@ -1326,7 +1329,7 @@
     visitExpression(left);
     visitExpression(right);
     registry.registerConstantLiteral(new NullConstantExpression());
-    registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.equals));
     registry.registerSendStructure(node, const IfNullStructure());
     return const NoneResult();
   }
@@ -1383,7 +1386,7 @@
     } else {
       ResolutionResult leftResult = visitExpression(left);
       ResolutionResult rightResult = visitExpression(right);
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
       semantics = const DynamicAccess.expression();
 
       if (leftResult.isConstant && rightResult.isConstant) {
@@ -1513,7 +1516,7 @@
     // TODO(23998): Remove this when all information goes through the
     // [SendStructure].
     registry.setSelector(node, selector);
-    registry.registerDynamicUse(new DynamicUse(selector, null));
+    registry.registerDynamicUse(new DynamicUse(selector));
     registry.registerSendStructure(
         node, new InvokeStructure(const DynamicAccess.expression(), selector));
     return const NoneResult();
@@ -1546,7 +1549,7 @@
       AccessSemantics accessSemantics = checkThisAccess(node);
       if (accessSemantics == null) {
         accessSemantics = const DynamicAccess.thisAccess();
-        registry.registerDynamicUse(new DynamicUse(selector, null));
+        registry.registerDynamicUse(new DynamicUse(selector));
       }
       registry.registerSendStructure(
           node, new InvokeStructure(accessSemantics, selector));
@@ -1585,7 +1588,7 @@
           superMethod.computeType(resolution);
           if (!callStructure.signatureApplies(superMethod.parameterStructure)) {
             registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-            registry.registerDynamicUse(new DynamicUse(selector, null));
+            registry.registerDynamicUse(new DynamicUse(selector));
             registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
             isIncompatibleInvoke = true;
           } else {
@@ -1599,7 +1602,7 @@
           MemberElement superMember = semantics.element;
           registry.registerStaticUse(new StaticUse.superGet(superMember));
           selector = callStructure.callSelector;
-          registry.registerDynamicUse(new DynamicUse(selector, null));
+          registry.registerDynamicUse(new DynamicUse(selector));
           break;
         case AccessKind.SUPER_SETTER:
         case AccessKind.UNRESOLVED_SUPER:
@@ -2306,12 +2309,12 @@
       CallStructure callStructure =
           resolveArguments(node.argumentsNode).callStructure;
       selector = new Selector.call(name, callStructure);
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
       sendStructure = new InvokeStructure(semantics, selector);
     } else {
       assert(node.isPropertyAccess, failedAt(node));
       selector = new Selector.getter(name);
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
       sendStructure = new GetStructure(semantics);
     }
     registry.registerSendStructure(node, sendStructure);
@@ -2326,9 +2329,9 @@
       SendSet node, Name name, Element element, AccessSemantics semantics) {
     Selector getterSelector = new Selector.getter(name);
     Selector setterSelector = new Selector.setter(name.setter);
-    registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+    registry.registerDynamicUse(new DynamicUse(setterSelector));
     if (node.isComplex) {
-      registry.registerDynamicUse(new DynamicUse(getterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(getterSelector));
     }
 
     // TODO(23998): Remove these when elements are only accessed through the
@@ -2385,7 +2388,7 @@
       return handlePrefixSend(node, name, result);
     } else if (node.isConditional) {
       registry.registerConstantLiteral(new NullConstantExpression());
-      registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
+      registry.registerDynamicUse(new DynamicUse(Selectors.equals));
       return handleDynamicAccessSemantics(
           node, name, new DynamicAccess.ifNotNullProperty(name));
     } else {
@@ -2420,7 +2423,7 @@
       return handlePrefixSendSet(node, name, result);
     } else if (node.isConditional) {
       registry.registerConstantLiteral(new NullConstantExpression());
-      registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
+      registry.registerDynamicUse(new DynamicUse(Selectors.equals));
       return handleDynamicUpdateSemantics(
           node, name, null, new DynamicAccess.ifNotNullProperty(name));
     } else {
@@ -2450,12 +2453,12 @@
       CallStructure callStructure =
           resolveArguments(node.argumentsNode).callStructure;
       selector = new Selector.call(name, callStructure);
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
       sendStructure = new InvokeStructure(semantics, selector);
     } else {
       assert(node.isPropertyAccess, failedAt(node));
       selector = new Selector.getter(name);
-      registry.registerDynamicUse(new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector));
       sendStructure = new GetStructure(semantics);
     }
     // TODO(23998): Remove this when all information goes through
@@ -2519,7 +2522,7 @@
           function.computeType(resolution);
           if (!callStructure.signatureApplies(function.parameterStructure)) {
             registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-            registry.registerDynamicUse(new DynamicUse(selector, null));
+            registry.registerDynamicUse(new DynamicUse(selector));
             isIncompatibleInvoke = true;
           }
           break;
@@ -2528,7 +2531,7 @@
         case AccessKind.LOCAL_VARIABLE:
         case AccessKind.FINAL_LOCAL_VARIABLE:
           selector = callStructure.callSelector;
-          registry.registerDynamicUse(new DynamicUse(selector, null));
+          registry.registerDynamicUse(new DynamicUse(selector));
           break;
         default:
           reporter.internalError(node, "Unexpected local access $semantics.");
@@ -2687,7 +2690,7 @@
           method.computeType(resolution);
           if (!callStructure.signatureApplies(method.parameterStructure)) {
             registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-            registry.registerDynamicUse(new DynamicUse(selector, null));
+            registry.registerDynamicUse(new DynamicUse(selector));
             isIncompatibleInvoke = true;
           } else {
             registry.registerStaticUse(
@@ -2712,7 +2715,7 @@
           MemberElement member = semantics.element;
           registry.registerStaticUse(new StaticUse.staticGet(member));
           selector = callStructure.callSelector;
-          registry.registerDynamicUse(new DynamicUse(selector, null));
+          registry.registerDynamicUse(new DynamicUse(selector));
           break;
         case AccessKind.STATIC_SETTER:
         case AccessKind.TOPLEVEL_SETTER:
@@ -3104,9 +3107,9 @@
       registry.setSelector(node, setterSelector);
       registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-      registry.registerDynamicUse(new DynamicUse(getterSelector, null));
-      registry.registerDynamicUse(new DynamicUse(setterSelector, null));
-      registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
+      registry.registerDynamicUse(new DynamicUse(getterSelector));
+      registry.registerDynamicUse(new DynamicUse(setterSelector));
+      registry.registerDynamicUse(new DynamicUse(operatorSelector));
 
       SendStructure sendStructure = node.isPrefix
           ? new IndexPrefixStructure(semantics, operator)
@@ -3125,7 +3128,7 @@
         // TODO(23998): Remove this when selectors are only accessed
         // through the send structure.
         registry.setSelector(node, setterSelector);
-        registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+        registry.registerDynamicUse(new DynamicUse(setterSelector));
 
         SendStructure sendStructure = new IndexSetStructure(semantics);
         registry.registerSendStructure(node, sendStructure);
@@ -3143,9 +3146,9 @@
         registry.setSelector(node, setterSelector);
         registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-        registry.registerDynamicUse(new DynamicUse(getterSelector, null));
-        registry.registerDynamicUse(new DynamicUse(setterSelector, null));
-        registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
+        registry.registerDynamicUse(new DynamicUse(getterSelector));
+        registry.registerDynamicUse(new DynamicUse(setterSelector));
+        registry.registerDynamicUse(new DynamicUse(operatorSelector));
 
         SendStructure sendStructure;
         if (operator.kind == AssignmentOperatorKind.IF_NULL) {
@@ -3203,7 +3206,7 @@
         registry.useElement(node, semantics.setter);
         registry.useElement(node.selector, semantics.getter);
       }
-      registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
+      registry.registerDynamicUse(new DynamicUse(operatorSelector));
 
       SendStructure sendStructure = node.isPrefix
           ? new IndexPrefixStructure(semantics, operator)
@@ -3273,7 +3276,7 @@
         registry.setSelector(node, setterSelector);
         registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-        registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
+        registry.registerDynamicUse(new DynamicUse(operatorSelector));
 
         SendStructure sendStructure;
         if (operator.kind == AssignmentOperatorKind.IF_NULL) {
@@ -3384,7 +3387,7 @@
                 'superclassName': semantics.setter.enclosingClass.name
               });
               // TODO(johnniwinther): This shouldn't be needed.
-              registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+              registry.registerDynamicUse(new DynamicUse(setterSelector));
               registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
               break;
             case AccessKind.SUPER_METHOD:
@@ -3394,7 +3397,7 @@
                 'superclassName': semantics.setter.enclosingClass.name
               });
               // TODO(johnniwinther): This shouldn't be needed.
-              registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+              registry.registerDynamicUse(new DynamicUse(setterSelector));
               registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
               break;
             case AccessKind.SUPER_FIELD:
@@ -3446,7 +3449,7 @@
       registry.useElement(node, semantics.setter);
       registry.useElement(node.selector, semantics.getter);
 
-      registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
+      registry.registerDynamicUse(new DynamicUse(operatorSelector));
 
       SendStructure sendStructure = node.isPrefix
           ? new PrefixStructure(semantics, operator)
@@ -3490,10 +3493,10 @@
         SendStructure sendStructure;
         if (operator.kind == AssignmentOperatorKind.IF_NULL) {
           registry.registerConstantLiteral(new NullConstantExpression());
-          registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
+          registry.registerDynamicUse(new DynamicUse(Selectors.equals));
           sendStructure = new SetIfNullStructure(semantics);
         } else {
-          registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
+          registry.registerDynamicUse(new DynamicUse(operatorSelector));
           sendStructure = new CompoundStructure(semantics, operator);
         }
         registry.registerSendStructure(node, sendStructure);
@@ -3918,23 +3921,25 @@
         break;
       case ConstructorResultKind.UNRESOLVED_CONSTRUCTOR:
         // TODO(johnniwinther): Unify codepaths to only have one return.
+        ResolutionInterfaceType interfaceType = type;
         registry.registerNewStructure(
             node,
             new NewInvokeStructure(
                 new ConstructorAccessSemantics(
                     ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR,
                     constructor,
-                    type),
+                    interfaceType),
                 selector));
         return new ResolutionResult.forElement(constructor);
       case ConstructorResultKind.NON_CONSTANT:
+        ResolutionInterfaceType interfaceType = type;
         registry.registerNewStructure(
             node,
             new NewInvokeStructure(
                 new ConstructorAccessSemantics(
                     ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR,
                     constructor,
-                    type),
+                    interfaceType),
                 selector));
         return new ResolutionResult.forElement(constructor);
     }
@@ -3944,13 +3949,13 @@
       // and only declaration elements may be registered.
       // TODO(johniwinther): Avoid registration of `type` in face of redirecting
       // factory constructors.
+      ResolutionInterfaceType interfaceType = type;
       ConstructorElement declaration = constructor.declaration;
       registry.registerStaticUse(node.isConst
           ? new StaticUse.constConstructorInvoke(
-              declaration, callStructure, type)
+              declaration, callStructure, interfaceType)
           : new StaticUse.typedConstructorInvoke(
-              constructor, callStructure, type));
-      ResolutionInterfaceType interfaceType = type;
+              constructor, callStructure, interfaceType));
       if (interfaceType.typeArguments
           .any((ResolutionDartType type) => !type.isDynamic)) {
         registry.registerFeature(Feature.TYPE_VARIABLE_BOUNDS_CHECK);
@@ -4326,8 +4331,8 @@
             MessageKind.INVALID_AWAIT_FOR_IN);
       }
       registry.registerFeature(Feature.ASYNC_FOR_IN);
-      registry.registerDynamicUse(new DynamicUse(Selectors.current, null));
-      registry.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
+      registry.registerDynamicUse(new DynamicUse(Selectors.current));
+      registry.registerDynamicUse(new DynamicUse(Selectors.moveNext));
     }
     visit(node.expression);
 
@@ -4339,9 +4344,9 @@
 
   ResolutionResult visitSyncForIn(SyncForIn node) {
     registry.registerFeature(Feature.SYNC_FOR_IN);
-    registry.registerDynamicUse(new DynamicUse(Selectors.iterator, null));
-    registry.registerDynamicUse(new DynamicUse(Selectors.current, null));
-    registry.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.iterator));
+    registry.registerDynamicUse(new DynamicUse(Selectors.current));
+    registry.registerDynamicUse(new DynamicUse(Selectors.moveNext));
 
     visit(node.expression);
 
@@ -4398,7 +4403,7 @@
     if (loopVariableSelector != null) {
       registry.setSelector(declaration, loopVariableSelector);
       if (loopVariable == null || loopVariable.isInstanceMember) {
-        registry.registerDynamicUse(new DynamicUse(loopVariableSelector, null));
+        registry.registerDynamicUse(new DynamicUse(loopVariableSelector));
       } else if (loopVariable.isStatic || loopVariable.isTopLevel) {
         MemberElement member = loopVariable.declaration;
         registry.registerStaticUse(new StaticUse.staticSet(member));
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index c036637..4762bc11 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -582,14 +582,26 @@
 
   // TODO(johnniwinther): Remove this queue when resolution has been split into
   // syntax and semantic resolution.
-  TypeDeclarationElement currentlyResolvedTypeDeclaration;
+  /// Whether or not we are currently resolving a type declaration.
+  ///
+  /// When we are resolving a type declaration, we want to avoid resolving
+  /// other type declarations that are encountered through type annotations
+  /// until after we finish resolving the current declaration.
+  bool isResolvingTypeDeclaration = false;
+
+  /// Classes found in type annotations while resolving a type declaration.
+  ///
+  /// These are stored here so that they may be resolved after the original
+  /// type annotation.
   Queue<ClassElement> pendingClassesToBeResolved = new Queue<ClassElement>();
+
+  /// Classes to be post-processed after the type declaration is resolved.
   Queue<ClassElement> pendingClassesToBePostProcessed =
       new Queue<ClassElement>();
 
   /// Resolve [element] using [resolveTypeDeclaration].
   ///
-  /// This methods ensure that class declarations encountered through type
+  /// This method ensures that class declarations encountered through type
   /// annotations during the resolution of [element] are resolved after
   /// [element] has been resolved.
   // TODO(johnniwinther): Encapsulate this functionality in a
@@ -598,23 +610,22 @@
       TypeDeclarationElement element, resolveTypeDeclaration()) {
     return reporter.withCurrentElement(element, () {
       return measure(() {
-        TypeDeclarationElement previousResolvedTypeDeclaration =
-            currentlyResolvedTypeDeclaration;
-        currentlyResolvedTypeDeclaration = element;
+        bool previouslyResolvingTypeDeclaration = isResolvingTypeDeclaration;
+        isResolvingTypeDeclaration = true;
         var result = resolveTypeDeclaration();
-        currentlyResolvedTypeDeclaration = previousResolvedTypeDeclaration;
-        if (currentlyResolvedTypeDeclaration == null) {
+        isResolvingTypeDeclaration = previouslyResolvingTypeDeclaration;
+        if (!isResolvingTypeDeclaration) {
           do {
-            while (!pendingClassesToBeResolved.isEmpty) {
+            while (pendingClassesToBeResolved.isNotEmpty) {
               pendingClassesToBeResolved
                   .removeFirst()
                   .ensureResolved(resolution);
             }
-            while (!pendingClassesToBePostProcessed.isEmpty) {
+            while (pendingClassesToBePostProcessed.isNotEmpty) {
               _postProcessClassElement(
                   pendingClassesToBePostProcessed.removeFirst());
             }
-          } while (!pendingClassesToBeResolved.isEmpty);
+          } while (pendingClassesToBeResolved.isNotEmpty);
           assert(pendingClassesToBeResolved.isEmpty);
           assert(pendingClassesToBePostProcessed.isEmpty);
         }
@@ -645,7 +656,7 @@
   }
 
   void ensureClassWillBeResolvedInternal(ClassElement element) {
-    if (currentlyResolvedTypeDeclaration == null) {
+    if (!isResolvingTypeDeclaration) {
       element.ensureResolved(resolution);
     } else {
       pendingClassesToBeResolved.add(element);
diff --git a/pkg/compiler/lib/src/serialization/impact_serialization.dart b/pkg/compiler/lib/src/serialization/impact_serialization.dart
index 1ebfae4..1d14bb7 100644
--- a/pkg/compiler/lib/src/serialization/impact_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/impact_serialization.dart
@@ -82,8 +82,9 @@
     object.setEnum(Key.KIND, staticUse.kind);
     serializeElementReference(
         element, Key.ELEMENT, Key.NAME, object, staticUse.element);
-    if (staticUse.type != null) {
-      object.setType(Key.TYPE, staticUse.type);
+    ResolutionInterfaceType type = staticUse.type;
+    if (type != null) {
+      object.setType(Key.TYPE, type);
     }
     if (staticUse.callStructure != null) {
       serializeCallStructure(
@@ -152,7 +153,7 @@
       StaticUseKind kind = object.getEnum(Key.KIND, StaticUseKind.values);
       Element usedElement =
           deserializeElementReference(element, Key.ELEMENT, Key.NAME, object);
-      ResolutionDartType type = object.getType(Key.TYPE, isOptional: true);
+      ResolutionInterfaceType type = object.getType(Key.TYPE, isOptional: true);
       ObjectDecoder callStructureObject =
           object.getObject(Key.CALL_STRUCTURE, isOptional: true);
       CallStructure callStructure;
@@ -168,7 +169,7 @@
     for (int index = 0; index < dynamicUseDecoder.length; index++) {
       ObjectDecoder object = dynamicUseDecoder.getObject(index);
       Selector selector = deserializeSelector(object);
-      dynamicUses.add(new DynamicUse(selector, null));
+      dynamicUses.add(new DynamicUse(selector));
     }
 
     ListDecoder typeUseDecoder = objectDecoder.getList(Key.TYPE_USES);
diff --git a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart
index 7731f74..760482f 100644
--- a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart
@@ -523,8 +523,7 @@
           return node;
         case AstKind.FACTORY:
           Token beginToken = readBeginToken();
-          return doParse((parser) => parser
-              .parseFactoryMethod(parser.syntheticPreviousToken(beginToken)));
+          return doParse((parser) => parser.parseMember(beginToken));
         case AstKind.FIELD:
           Token beginToken = readBeginToken();
           return doParse((parser) => parser.parseMember(beginToken));
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index bca2447..524fa98 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -41,7 +41,8 @@
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/selector.dart' show Selector;
 import '../universe/side_effects.dart' show SideEffects;
-import '../universe/use.dart' show ConstantUse, DynamicUse, StaticUse;
+import '../universe/use.dart'
+    show ConstantUse, ConstrainedDynamicUse, StaticUse;
 import '../util/util.dart';
 import '../world.dart' show ClosedWorld;
 
@@ -1316,7 +1317,7 @@
     if (!isNativeUpgradeFactory) {
       // Create the runtime type information, if needed.
       bool hasRtiInput = false;
-      if (rtiNeed.classNeedsRtiField(classElement.declaration)) {
+      if (rtiNeed.classNeedsTypeArguments(classElement.declaration)) {
         // Read the values of the type arguments and create a
         // HTypeInfoExpression to set on the newly create object.
         hasRtiInput = true;
@@ -1541,8 +1542,11 @@
       String name = "${n(element.library)}:${n(element.enclosingClass)}."
           "${n(element)}";
       HConstant nameConstant = addConstantString(name);
-      add(new HInvokeStatic(commonElements.traceHelper,
-          <HInstruction>[nameConstant], commonMasks.dynamicType));
+      add(new HInvokeStatic(
+          commonElements.traceHelper,
+          <HInstruction>[nameConstant],
+          commonMasks.dynamicType,
+          const <DartType>[]));
     }
   }
 
@@ -1553,8 +1557,11 @@
       HConstant idConstant =
           graph.addConstantInt(element.hashCode, closedWorld);
       HConstant nameConstant = addConstantString(element.name);
-      add(new HInvokeStatic(commonElements.traceHelper,
-          <HInstruction>[idConstant, nameConstant], commonMasks.dynamicType));
+      add(new HInvokeStatic(
+          commonElements.traceHelper,
+          <HInstruction>[idConstant, nameConstant],
+          commonMasks.dynamicType,
+          const <DartType>[]));
     }
   }
 
@@ -1572,8 +1579,8 @@
       supertypeInstruction,
       messageInstruction
     ];
-    HInstruction assertIsSubtype =
-        new HInvokeStatic(element, inputs, subtypeInstruction.instructionType);
+    HInstruction assertIsSubtype = new HInvokeStatic(element, inputs,
+        subtypeInstruction.instructionType, const <DartType>[]);
     registry?.registerTypeVariableBoundsSubtypeCheck(subtype, supertype);
     add(assertIsSubtype);
   }
@@ -3008,7 +3015,7 @@
       // closure.
       visit(link.tail.head);
       push(new HInvokeClosure(new Selector.callClosure(0),
-          <HInstruction>[pop()], commonMasks.dynamicType));
+          <HInstruction>[pop()], commonMasks.dynamicType, const <DartType>[]));
     } else {
       // Call a helper method from the isolate library.
       MethodElement element = commonElements.callInIsolate;
@@ -3131,7 +3138,8 @@
     String loadId =
         deferredLoadTask.getImportDeferName(node, prefixElement.deferredImport);
     var inputs = [graph.addConstantString(loadId, closedWorld)];
-    push(new HInvokeStatic(loadFunction, inputs, commonMasks.nonNullType,
+    push(new HInvokeStatic(
+        loadFunction, inputs, commonMasks.nonNullType, const <DartType>[],
         targetCanThrow: false)
       ..sourceInformation = sourceInformation);
   }
@@ -3152,7 +3160,8 @@
       // case the [noSuchMethod] implementation calls
       // [JSInvocationMirror._invokeOn].
       // TODO(johnniwinther): Register this more precisely.
-      registry?.registerDynamicUse(new DynamicUse(selector, null));
+      registry
+          ?.registerDynamicUse(new ConstrainedDynamicUse(selector, null, null));
     }
     String publicName = name;
     if (selector.isSetter) publicName += '=';
@@ -3947,8 +3956,8 @@
     Selector selector = elements.getSelector(node);
     List<HInstruction> inputs = <HInstruction>[target];
     addDynamicSendArgumentsToList(node, inputs);
-    push(new HInvokeClosure(
-        new Selector.callClosureFrom(selector), inputs, commonMasks.dynamicType)
+    push(new HInvokeClosure(new Selector.callClosureFrom(selector), inputs,
+        commonMasks.dynamicType, const <DartType>[])
       ..sourceInformation = sourceInformation);
   }
 
@@ -4156,7 +4165,8 @@
           selector, mask, null, inputs, type, sourceInformation));
     } else {
       push(new HInvokeDynamicMethod(
-          selector, mask, inputs, type, sourceInformation, isIntercepted));
+          selector, mask, inputs, type, const <DartType>[], sourceInformation,
+          isIntercepted: isIntercepted));
     }
   }
 
@@ -4284,7 +4294,8 @@
           invokeJsInteropFunction(element, arguments, sourceInformation);
     } else {
       // creating an [HInvokeStatic].
-      instruction = new HInvokeStatic(element, arguments, typeMask,
+      instruction = new HInvokeStatic(
+          element, arguments, typeMask, const <DartType>[],
           targetCanThrow: targetCanThrow)
         ..sourceInformation = sourceInformation;
       if (currentInlinedInstantiations.isNotEmpty) {
@@ -4327,7 +4338,7 @@
       type = closedWorld.commonMasks.dynamicType;
     }
     HInstruction instruction = new HInvokeSuper(element, currentNonClosureClass,
-        selector, inputs, type, sourceInformation,
+        selector, inputs, type, const <DartType>[], sourceInformation,
         isSetter: selector.isSetter || selector.isIndexSet);
     instruction.sideEffects =
         closedWorld.getSideEffectsOfSelector(selector, null);
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index ce0d531..8d18334 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -38,7 +38,8 @@
 import '../types/types.dart';
 import '../universe/selector.dart';
 import '../universe/side_effects.dart' show SideEffects;
-import '../universe/use.dart' show ConstantUse, DynamicUse, StaticUse;
+import '../universe/use.dart'
+    show ConstantUse, ConstrainedDynamicUse, StaticUse;
 import '../universe/world_builder.dart' show CodegenWorldBuilder;
 import '../world.dart';
 import 'graph_builder.dart';
@@ -497,8 +498,9 @@
       }
     } else {
       // Create the runtime type information, if needed.
-      bool hasRtiInput = closedWorld.rtiNeed.classNeedsRtiField(cls);
-      if (hasRtiInput) {
+      bool needsTypeArguments =
+          closedWorld.rtiNeed.classNeedsTypeArguments(cls);
+      if (needsTypeArguments) {
         // Read the values of the type arguments and create a
         // HTypeInfoExpression to set on the newly created object.
         List<HInstruction> typeArguments = <HInstruction>[];
@@ -521,7 +523,8 @@
 
       newObject = new HCreate(cls, constructorArguments,
           new TypeMask.nonNullExact(cls, closedWorld), sourceInformation,
-          instantiatedTypes: instantiatedTypes, hasRtiInput: hasRtiInput);
+          instantiatedTypes: instantiatedTypes,
+          hasRtiInput: needsTypeArguments);
 
       add(newObject);
     }
@@ -633,36 +636,38 @@
     });
   }
 
+  void _ensureTypeVariablesForInitializers(
+      ConstructorData constructorData, ClassEntity enclosingClass) {
+    if (!constructorData.includedClasses.add(enclosingClass)) return;
+    if (rtiNeed.classNeedsTypeArguments(enclosingClass)) {
+      // If [enclosingClass] needs RTI, we have to give a value to its type
+      // parameters. For a super constructor call, the type is the supertype
+      // of current class. For a redirecting constructor, the type is the
+      // current type. [LocalsHandler.substInContext] takes care of both.
+      InterfaceType thisType =
+          _elementMap.elementEnvironment.getThisType(enclosingClass);
+      InterfaceType type = localsHandler.substInContext(thisType);
+      List<DartType> arguments = type.typeArguments;
+      List<DartType> typeVariables = thisType.typeArguments;
+      assert(arguments.length == typeVariables.length);
+      Iterator<DartType> variables = typeVariables.iterator;
+      type.typeArguments.forEach((DartType argument) {
+        variables.moveNext();
+        TypeVariableType typeVariable = variables.current;
+        localsHandler.updateLocal(
+            localsHandler.getTypeVariableAsLocal(typeVariable),
+            typeBuilder.analyzeTypeArgument(argument, sourceElement));
+      });
+    }
+  }
+
   /// Collects the values for field initializers for the direct fields of
   /// [clazz].
   void _collectFieldValues(ir.Class clazz, ConstructorData constructorData) {
-    void ensureTypeVariablesForInitializers(ClassEntity enclosingClass) {
-      if (!constructorData.includedClasses.add(enclosingClass)) return;
-      if (rtiNeed.classNeedsTypeArguments(enclosingClass)) {
-        // If [enclosingClass] needs RTI, we have to give a value to its type
-        // parameters. For a super constructor call, the type is the supertype
-        // of current class. For a redirecting constructor, the type is the
-        // current type. [LocalsHandler.substInContext] takes care of both.
-        InterfaceType thisType =
-            _elementMap.elementEnvironment.getThisType(enclosingClass);
-        InterfaceType type = localsHandler.substInContext(thisType);
-        List<DartType> arguments = type.typeArguments;
-        List<DartType> typeVariables = thisType.typeArguments;
-        assert(arguments.length == typeVariables.length);
-        Iterator<DartType> variables = typeVariables.iterator;
-        type.typeArguments.forEach((DartType argument) {
-          variables.moveNext();
-          TypeVariableType typeVariable = variables.current;
-          localsHandler.updateLocal(
-              localsHandler.getTypeVariableAsLocal(typeVariable),
-              typeBuilder.analyzeTypeArgument(argument, sourceElement));
-        });
-      }
-    }
-
     ClassEntity cls = _elementMap.getClass(clazz);
     _worldBuilder.forEachDirectInstanceField(cls, (FieldEntity field) {
-      ensureTypeVariablesForInitializers(field.enclosingClass);
+      _ensureTypeVariablesForInitializers(
+          constructorData, field.enclosingClass);
 
       MemberDefinition definition = _elementMap.getMemberDefinition(field);
       ir.Field node;
@@ -861,6 +866,7 @@
 
     ConstructorEntity element = _elementMap.getConstructor(constructor);
     ScopeInfo oldScopeInfo = localsHandler.scopeInfo;
+
     inlinedFrom(element, () {
       void handleParameter(ir.VariableDeclaration node) {
         Local parameter = localsMap.getLocalVariable(node);
@@ -877,6 +883,9 @@
         ..sort(namedOrdering)
         ..forEach(handleParameter);
 
+      _ensureTypeVariablesForInitializers(
+          constructorData, element.enclosingClass);
+
       // Set the locals handler state as if we were inlining the constructor.
       ScopeInfo newScopeInfo = closureDataLookup.getScopeInfo(element);
       localsHandler.scopeInfo = newScopeInfo;
@@ -1020,7 +1029,8 @@
           _pushStaticInvocation(
               _commonElements.closureConverter,
               [argument, graph.addConstantInt(arity, closedWorld)],
-              commonMasks.dynamicType);
+              commonMasks.dynamicType,
+              const <DartType>[]);
           argument = pop();
         }
         inputs.add(argument);
@@ -1156,7 +1166,8 @@
         _commonElements.checkDeferredIsLoaded,
         [prefixConstant, uriConstant],
         _typeInferenceMap
-            .getReturnTypeOf(_commonElements.checkDeferredIsLoaded));
+            .getReturnTypeOf(_commonElements.checkDeferredIsLoaded),
+        const <DartType>[]);
   }
 
   @override
@@ -1165,8 +1176,11 @@
         _elementMap.getSpannable(targetElement, loadLibrary),
         _elementMap.getImport(loadLibrary.import));
     // TODO(efortuna): Source information!
-    push(new HInvokeStatic(commonElements.loadDeferredLibrary,
-        [graph.addConstantString(loadId, closedWorld)], commonMasks.nonNullType,
+    push(new HInvokeStatic(
+        commonElements.loadDeferredLibrary,
+        [graph.addConstantString(loadId, closedWorld)],
+        commonMasks.nonNullType,
+        const <DartType>[],
         targetCanThrow: false));
   }
 
@@ -1362,6 +1376,7 @@
           [pop(), array],
           _typeInferenceMap.getReturnTypeOf(
               _commonElements.checkConcurrentModificationError),
+          const <DartType>[],
           sourceInformation: sourceInformation);
       pop();
     }
@@ -1477,6 +1492,7 @@
           mask,
           Selectors.iterator,
           <HInstruction>[receiver],
+          const <DartType>[],
           _sourceInformationBuilder.buildForInIterator(node));
       iterator = pop();
     }
@@ -1488,6 +1504,7 @@
           mask,
           Selectors.moveNext,
           <HInstruction>[iterator],
+          const <DartType>[],
           _sourceInformationBuilder.buildForInMoveNext(node));
       return popBoolified();
     }
@@ -1496,8 +1513,8 @@
       SourceInformation sourceInformation =
           _sourceInformationBuilder.buildForInCurrent(node);
       TypeMask mask = _typeInferenceMap.typeOfIteratorCurrent(node);
-      _pushDynamicInvocation(
-          node, mask, Selectors.current, [iterator], sourceInformation);
+      _pushDynamicInvocation(node, mask, Selectors.current, [iterator],
+          const <DartType>[], sourceInformation);
 
       Local loopVariableLocal = localsMap.getLocalVariable(node.variable);
       HInstruction value = typeBuilder.potentiallyCheckOrTrustType(
@@ -1531,14 +1548,20 @@
         _commonElements.streamIteratorConstructor,
         [pop(), graph.addConstantNull(closedWorld)],
         _typeInferenceMap
-            .getReturnTypeOf(_commonElements.streamIteratorConstructor));
+            .getReturnTypeOf(_commonElements.streamIteratorConstructor),
+        const <DartType>[]);
     streamIterator = pop();
 
     void buildInitializer() {}
 
     HInstruction buildCondition() {
       TypeMask mask = _typeInferenceMap.typeOfIteratorMoveNext(node);
-      _pushDynamicInvocation(node, mask, Selectors.moveNext, [streamIterator],
+      _pushDynamicInvocation(
+          node,
+          mask,
+          Selectors.moveNext,
+          [streamIterator],
+          const <DartType>[],
           _sourceInformationBuilder.buildForInMoveNext(node));
       HInstruction future = pop();
       push(new HAwait(future, closedWorld.commonMasks.dynamicType));
@@ -1547,7 +1570,12 @@
 
     void buildBody() {
       TypeMask mask = _typeInferenceMap.typeOfIteratorCurrent(node);
-      _pushDynamicInvocation(node, mask, Selectors.current, [streamIterator],
+      _pushDynamicInvocation(
+          node,
+          mask,
+          Selectors.current,
+          [streamIterator],
+          const <DartType>[],
           _sourceInformationBuilder.buildForInIterator(node));
       localsHandler.updateLocal(
           localsMap.getLocalVariable(node.variable), pop());
@@ -1572,7 +1600,7 @@
 
     void finalizerFunction() {
       _pushDynamicInvocation(node, null, Selectors.cancel, [streamIterator],
-          _sourceInformationBuilder.buildGeneric(node));
+          const <DartType>[], _sourceInformationBuilder.buildGeneric(node));
       add(new HAwait(pop(), closedWorld.commonMasks.dynamicType));
     }
 
@@ -1588,7 +1616,7 @@
     FunctionEntity typeInfoSetterFn = _commonElements.setRuntimeTypeInfo;
     // TODO(efortuna): Insert source information in this static invocation.
     _pushStaticInvocation(typeInfoSetterFn, <HInstruction>[newObject, typeInfo],
-        commonMasks.dynamicType,
+        commonMasks.dynamicType, const <DartType>[],
         sourceInformation: sourceInformation);
 
     // The new object will now be referenced through the
@@ -1825,8 +1853,9 @@
   void generateError(FunctionEntity function, String message, TypeMask typeMask,
       SourceInformation sourceInformation) {
     HInstruction errorMessage = graph.addConstantString(message, closedWorld);
-    // TODO(sra): Associate source info from [node].
-    _pushStaticInvocation(function, [errorMessage], typeMask);
+    _pushStaticInvocation(
+        function, [errorMessage], typeMask, const <DartType>[],
+        sourceInformation: sourceInformation);
   }
 
   void generateTypeError(String message, SourceInformation sourceInformation) {
@@ -1852,8 +1881,11 @@
     if (!options.enableUserAssertions) return;
     if (node.message == null) {
       node.condition.accept(this);
-      _pushStaticInvocation(_commonElements.assertHelper, <HInstruction>[pop()],
-          _typeInferenceMap.getReturnTypeOf(_commonElements.assertHelper));
+      _pushStaticInvocation(
+          _commonElements.assertHelper,
+          <HInstruction>[pop()],
+          _typeInferenceMap.getReturnTypeOf(_commonElements.assertHelper),
+          const <DartType>[]);
       pop();
       return;
     }
@@ -1861,14 +1893,20 @@
     // if (assertTest(condition)) assertThrow(message);
     void buildCondition() {
       node.condition.accept(this);
-      _pushStaticInvocation(_commonElements.assertTest, <HInstruction>[pop()],
-          _typeInferenceMap.getReturnTypeOf(_commonElements.assertTest));
+      _pushStaticInvocation(
+          _commonElements.assertTest,
+          <HInstruction>[pop()],
+          _typeInferenceMap.getReturnTypeOf(_commonElements.assertTest),
+          const <DartType>[]);
     }
 
     void fail() {
       node.message.accept(this);
-      _pushStaticInvocation(_commonElements.assertThrow, <HInstruction>[pop()],
-          _typeInferenceMap.getReturnTypeOf(_commonElements.assertThrow));
+      _pushStaticInvocation(
+          _commonElements.assertThrow,
+          <HInstruction>[pop()],
+          _typeInferenceMap.getReturnTypeOf(_commonElements.assertThrow),
+          const <DartType>[]);
       pop();
     }
 
@@ -2544,7 +2582,8 @@
         mapType.intersection(returnTypeMask, closedWorld);
 
     addImplicitInstantiation(type);
-    _pushStaticInvocation(constructor, inputs, instructionType);
+    _pushStaticInvocation(
+        constructor, inputs, instructionType, const <DartType>[]);
     removeImplicitInstantiation(type);
   }
 
@@ -2584,12 +2623,13 @@
         dartType, sourceElement,
         sourceInformation: sourceInformation);
     _pushStaticInvocation(_commonElements.runtimeTypeToString,
-        <HInstruction>[value], commonMasks.stringType,
+        <HInstruction>[value], commonMasks.stringType, const <DartType>[],
         sourceInformation: sourceInformation);
     _pushStaticInvocation(
         _commonElements.createRuntimeType,
         <HInstruction>[pop()],
         _typeInferenceMap.getReturnTypeOf(_commonElements.createRuntimeType),
+        const <DartType>[],
         sourceInformation: sourceInformation);
   }
 
@@ -2603,7 +2643,7 @@
       FunctionEntity getter = _elementMap.getMember(staticTarget);
       // Invoke the getter
       _pushStaticInvocation(getter, const <HInstruction>[],
-          _typeInferenceMap.getReturnTypeOf(getter),
+          _typeInferenceMap.getReturnTypeOf(getter), const <DartType>[],
           sourceInformation: sourceInformation);
     } else if (staticTarget is ir.Field) {
       FieldEntity field = _elementMap.getField(staticTarget);
@@ -2648,7 +2688,7 @@
       FunctionEntity setter = _elementMap.getMember(staticTarget);
       // Invoke the setter
       _pushStaticInvocation(setter, <HInstruction>[value],
-          _typeInferenceMap.getReturnTypeOf(setter));
+          _typeInferenceMap.getReturnTypeOf(setter), const <DartType>[]);
       pop();
     } else {
       add(new HStaticStore(
@@ -2669,6 +2709,7 @@
         _typeInferenceMap.typeOfGet(node),
         new Selector.getter(_elementMap.getName(node.name)),
         <HInstruction>[receiver],
+        const <DartType>[],
         _sourceInformationBuilder.buildGet(node));
   }
 
@@ -2698,6 +2739,7 @@
         _typeInferenceMap.typeOfSet(node, closedWorld),
         new Selector.setter(_elementMap.getName(node.name)),
         <HInstruction>[receiver, value],
+        const <DartType>[],
         _sourceInformationBuilder.buildAssignment(node));
 
     pop();
@@ -2716,6 +2758,7 @@
         _typeInferenceMap.typeOfDirectGet(node),
         new Selector.getter(_elementMap.getMember(node.target).memberName),
         <HInstruction>[receiver],
+        const <DartType>[],
         _sourceInformationBuilder.buildGet(node));
   }
 
@@ -2738,13 +2781,14 @@
 
     if (node.interfaceTarget == null) {
       _generateSuperNoSuchMethod(node, _elementMap.getSelector(node).name + "=",
-          <HInstruction>[value], sourceInformation);
+          <HInstruction>[value], const <DartType>[], sourceInformation);
     } else {
       _buildInvokeSuper(
           _elementMap.getSelector(node),
           _elementMap.getClass(_containingClass(node)),
           _elementMap.getMember(node.interfaceTarget),
           <HInstruction>[value],
+          const <DartType>[],
           sourceInformation);
     }
     pop();
@@ -2819,7 +2863,7 @@
   /// defaulted arguments, so (unlike static targets) we do not add the default
   /// values.
   List<HInstruction> _visitArgumentsForDynamicTarget(
-      Selector selector, ir.Arguments arguments,
+      Selector selector, ir.Arguments arguments, List<DartType> typeArguments,
       [SourceInformation sourceInformation]) {
     List<HInstruction> values = _visitPositionalArguments(arguments);
 
@@ -2834,9 +2878,7 @@
       }
     }
 
-    if (selector.callStructure.typeArgumentCount > 0) {
-      _addTypeArguments(values, arguments, sourceInformation);
-    }
+    _addTypeArguments(values, typeArguments, sourceInformation);
 
     return values;
   }
@@ -2892,11 +2934,48 @@
     return values;
   }
 
+  List<DartType> _getDynamicTypeArguments(
+      Selector selector, ir.Arguments arguments) {
+    if (options.strongMode && arguments.types.isNotEmpty) {
+      // TODO(johnniwinther): Only pass type arguments to dynamic call where at
+      // least one potential target need them.
+      return arguments.types.map(_elementMap.getDartType).toList();
+    }
+    return const <DartType>[];
+  }
+
+  List<DartType> _getConstructorTypeArguments(
+      ConstructorEntity constructor, ir.Arguments arguments) {
+    // TODO(johnniwinther): Pass type arguments to constructors like calling
+    // a generic method.
+    return const <DartType>[];
+  }
+
+  // TODO(johnniwinther): Remove this when type arguments are passed to
+  // constructors like calling a generic method.
+  List<DartType> _getClassTypeArguments(
+      ClassEntity cls, ir.Arguments arguments) {
+    if (rtiNeed.classNeedsTypeArguments(cls)) {
+      return arguments.types.map(_elementMap.getDartType).toList();
+    }
+    return const <DartType>[];
+  }
+
+  List<DartType> _getStaticTypeArguments(
+      FunctionEntity function, ir.Arguments arguments) {
+    if (options.strongMode && rtiNeed.methodNeedsTypeArguments(function)) {
+      return arguments.types.map(_elementMap.getDartType).toList();
+    }
+    return const <DartType>[];
+  }
+
   /// Build argument list in canonical order for a static [target], including
   /// filling in the default argument value.
-  List<HInstruction> _visitArgumentsForStaticTarget(ir.FunctionNode target,
-      ir.Arguments arguments, SourceInformation sourceInformation,
-      {bool addFunctionTypeArguments: false}) {
+  List<HInstruction> _visitArgumentsForStaticTarget(
+      ir.FunctionNode target,
+      ir.Arguments arguments,
+      List<DartType> typeArguments,
+      SourceInformation sourceInformation) {
     // Visit arguments in source order, then re-order and fill in defaults.
     var values = _visitPositionalArguments(arguments);
 
@@ -2935,18 +3014,15 @@
       assert(arguments.named.isEmpty);
     }
 
-    if (options.strongMode && addFunctionTypeArguments) {
-      _addTypeArguments(values, arguments, sourceInformation);
-    }
+    _addTypeArguments(values, typeArguments, sourceInformation);
     return values;
   }
 
-  void _addTypeArguments(List<HInstruction> values, ir.Arguments arguments,
-      SourceInformation sourceInformation) {
-    // need to translate type to
-    for (ir.DartType type in arguments.types) {
-      values.add(typeBuilder.analyzeTypeArgument(
-          _elementMap.getDartType(type), sourceElement,
+  void _addTypeArguments(List<HInstruction> values,
+      List<DartType> typeArguments, SourceInformation sourceInformation) {
+    if (typeArguments.isEmpty) return;
+    for (DartType type in typeArguments) {
+      values.add(typeBuilder.analyzeTypeArgument(type, sourceElement,
           sourceInformation: sourceInformation));
     }
   }
@@ -2970,13 +3046,13 @@
     FunctionEntity function = _elementMap.getMember(target);
     TypeMask typeMask = _typeInferenceMap.getReturnTypeOf(function);
 
+    List<DartType> typeArguments =
+        _getStaticTypeArguments(function, node.arguments);
     List<HInstruction> arguments = closedWorld.nativeData
             .isJsInteropMember(function)
         ? _visitArgumentsForNativeStaticTarget(target.function, node.arguments)
         : _visitArgumentsForStaticTarget(
-            target.function, node.arguments, sourceInformation,
-            addFunctionTypeArguments:
-                rtiNeed.methodNeedsTypeArguments(function));
+            target.function, node.arguments, typeArguments, sourceInformation);
 
     // Error in the arguments provided. Do not process further.
     if (arguments == null) {
@@ -2991,7 +3067,7 @@
     }
 
     // Static methods currently ignore the type parameters.
-    _pushStaticInvocation(function, arguments, typeMask,
+    _pushStaticInvocation(function, arguments, typeMask, typeArguments,
         sourceInformation: sourceInformation);
   }
 
@@ -3120,20 +3196,30 @@
       // simply select the single argument.
       // Factory constructors take type parameters.
       if (closedWorld.rtiNeed
-          .classNeedsTypeArguments(function.enclosingClass)) {
-        _addTypeArguments(arguments, invocation.arguments, sourceInformation);
-      }
-      _pushStaticInvocation(function, arguments, typeMask,
+          .classNeedsTypeArguments(function.enclosingClass)) {}
+      List<DartType> typeArguments =
+          _getConstructorTypeArguments(function, invocation.arguments);
+      // TODO(johnniwinther): Remove this when type arguments are passed to
+      // constructors like calling a generic method.
+      _addTypeArguments(
+          arguments,
+          _getClassTypeArguments(function.enclosingClass, invocation.arguments),
+          sourceInformation);
+      _pushStaticInvocation(function, arguments, typeMask, typeArguments,
           sourceInformation: sourceInformation);
     } else {
       // Factory constructors take type parameters.
-      if (closedWorld.rtiNeed
-          .classNeedsTypeArguments(function.enclosingClass)) {
-        _addTypeArguments(arguments, invocation.arguments, sourceInformation);
-      }
+      List<DartType> typeArguments =
+          _getConstructorTypeArguments(function, invocation.arguments);
+      // TODO(johnniwinther): Remove this when type arguments are passed to
+      // constructors like calling a generic method.
+      _addTypeArguments(
+          arguments,
+          _getClassTypeArguments(function.enclosingClass, invocation.arguments),
+          sourceInformation);
       instanceType = localsHandler.substInContext(instanceType);
       addImplicitInstantiation(instanceType);
-      _pushStaticInvocation(function, arguments, typeMask,
+      _pushStaticInvocation(function, arguments, typeMask, typeArguments,
           sourceInformation: sourceInformation, instanceType: instanceType);
     }
 
@@ -3196,9 +3282,8 @@
     }
   }
 
-  bool _unexpectedForeignArguments(
-      ir.StaticInvocation invocation, int minPositional,
-      [int maxPositional, int typeArgumentCount = 0]) {
+  bool _unexpectedForeignArguments(ir.StaticInvocation invocation,
+      {int minPositional, int maxPositional, int typeArgumentCount = 0}) {
     String pluralizeArguments(int count, [String adjective = '']) {
       if (count == 0) return 'no ${adjective}arguments';
       if (count == 1) return 'one ${adjective}argument';
@@ -3273,7 +3358,8 @@
   }
 
   void handleForeignJsCurrentIsolateContext(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 0, 0)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 0, maxPositional: 0)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3296,12 +3382,14 @@
             _elementMap.getSpannable(targetElement, invocation),
             'Isolate library and compiler mismatch.');
       }
-      _pushStaticInvocation(target, <HInstruction>[], commonMasks.dynamicType);
+      _pushStaticInvocation(target, <HInstruction>[], commonMasks.dynamicType,
+          const <DartType>[]);
     }
   }
 
   void handleForeignJsCallInIsolate(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 2, 2)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 2, maxPositional: 2)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3312,8 +3400,11 @@
     if (!backendUsage.isIsolateInUse) {
       // If the isolate library is not used, we ignore the isolate argument and
       // just invoke the closure.
-      push(new HInvokeClosure(new Selector.callClosure(0),
-          <HInstruction>[inputs[1]], commonMasks.dynamicType));
+      push(new HInvokeClosure(
+          new Selector.callClosure(0),
+          <HInstruction>[inputs[1]],
+          commonMasks.dynamicType,
+          const <DartType>[]));
     } else {
       // Call a helper method from the isolate library.
       FunctionEntity callInIsolate = _commonElements.callInIsolate;
@@ -3322,7 +3413,8 @@
             _elementMap.getSpannable(targetElement, invocation),
             'Isolate library and compiler mismatch.');
       }
-      _pushStaticInvocation(callInIsolate, inputs, commonMasks.dynamicType);
+      _pushStaticInvocation(
+          callInIsolate, inputs, commonMasks.dynamicType, const <DartType>[]);
     }
   }
 
@@ -3335,7 +3427,8 @@
 
   void handleForeignRawFunctionRef(
       ir.StaticInvocation invocation, String name) {
-    if (_unexpectedForeignArguments(invocation, 1, 1)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 1, maxPositional: 1)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3375,7 +3468,8 @@
   }
 
   void handleForeignJsSetStaticState(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 1, 1)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 1, maxPositional: 1)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3393,7 +3487,8 @@
   }
 
   void handleForeignJsGetStaticState(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 0, 0)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 0, maxPositional: 0)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3405,7 +3500,8 @@
   }
 
   void handleForeignJsGetName(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 1, 1)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 1, maxPositional: 1)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3431,7 +3527,8 @@
   }
 
   void handleForeignJsEmbeddedGlobal(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 2, 2)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 2, maxPositional: 2)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3455,7 +3552,7 @@
   }
 
   void handleForeignJsBuiltin(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 2)) {
+    if (_unexpectedForeignArguments(invocation, minPositional: 2)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3502,7 +3599,8 @@
   }
 
   void handleForeignJsGetFlag(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 1, 1)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 1, maxPositional: 1)) {
       stack.add(
           // Result expected on stack.
           graph.addConstantBool(false, closedWorld));
@@ -3523,7 +3621,8 @@
   void handleJsInterceptorConstant(ir.StaticInvocation invocation) {
     // Single argument must be a TypeConstant which is converted into a
     // InterceptorConstant.
-    if (_unexpectedForeignArguments(invocation, 1, 1)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 1, maxPositional: 1)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3551,7 +3650,8 @@
   }
 
   void handleForeignJs(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 2, null, 1)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 2, maxPositional: null, typeArgumentCount: 1)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3625,7 +3725,8 @@
   }
 
   void handleJsStringConcat(ir.StaticInvocation invocation) {
-    if (_unexpectedForeignArguments(invocation, 2, 2)) {
+    if (_unexpectedForeignArguments(invocation,
+        minPositional: 2, maxPositional: 2)) {
       // Result expected on stack.
       stack.add(graph.addConstantNull(closedWorld));
       return;
@@ -3634,8 +3735,8 @@
     push(new HStringConcat(inputs[0], inputs[1], commonMasks.stringType));
   }
 
-  void _pushStaticInvocation(
-      MemberEntity target, List<HInstruction> arguments, TypeMask typeMask,
+  void _pushStaticInvocation(MemberEntity target, List<HInstruction> arguments,
+      TypeMask typeMask, List<DartType> typeArguments,
       {SourceInformation sourceInformation, InterfaceType instanceType}) {
     // TODO(redemption): Pass current node if needed.
     if (_tryInlineMethod(target, null, null, arguments, null, sourceInformation,
@@ -3647,7 +3748,8 @@
     if (closedWorld.nativeData.isJsInteropMember(target)) {
       instruction = _invokeJsInteropFunction(target, arguments);
     } else {
-      instruction = new HInvokeStatic(target, arguments, typeMask,
+      instruction = new HInvokeStatic(
+          target, arguments, typeMask, typeArguments,
           targetCanThrow: !closedWorld.getCannotThrow(target))
         ..sourceInformation = sourceInformation;
 
@@ -3660,8 +3762,13 @@
     push(instruction);
   }
 
-  void _pushDynamicInvocation(ir.Node node, TypeMask mask, Selector selector,
-      List<HInstruction> arguments, SourceInformation sourceInformation) {
+  void _pushDynamicInvocation(
+      ir.Node node,
+      TypeMask mask,
+      Selector selector,
+      List<HInstruction> arguments,
+      List<DartType> typeArguments,
+      SourceInformation sourceInformation) {
     // We prefer to not inline certain operations on indexables,
     // because the constant folder will handle them better and turn
     // them into simpler instructions that allow further
@@ -3731,7 +3838,8 @@
           selector, mask, null, inputs, type, sourceInformation));
     } else {
       push(new HInvokeDynamicMethod(
-          selector, mask, inputs, type, sourceInformation, isIntercepted));
+          selector, mask, inputs, type, typeArguments, sourceInformation,
+          isIntercepted: isIntercepted));
     }
   }
 
@@ -3883,21 +3991,24 @@
     Selector selector =
         new Selector.genericInstantiation(node.typeArguments.length);
     _pushDynamicInvocation(node, commonMasks.functionType, selector, arguments,
-        null /*_sourceInformationBuilder.?*/);
+        const <DartType>[], null /*_sourceInformationBuilder.?*/);
   }
 
   @override
-  void visitMethodInvocation(ir.MethodInvocation invocation) {
-    invocation.receiver.accept(this);
+  void visitMethodInvocation(ir.MethodInvocation node) {
+    node.receiver.accept(this);
     HInstruction receiver = pop();
-    Selector selector = _elementMap.getSelector(invocation);
+    Selector selector = _elementMap.getSelector(node);
+    List<DartType> typeArguments =
+        _getDynamicTypeArguments(selector, node.arguments);
     _pushDynamicInvocation(
-        invocation,
-        _typeInferenceMap.typeOfInvocation(invocation, closedWorld),
+        node,
+        _typeInferenceMap.typeOfInvocation(node, closedWorld),
         selector,
-        <HInstruction>[receiver]..addAll(
-            _visitArgumentsForDynamicTarget(selector, invocation.arguments)),
-        _sourceInformationBuilder.buildCall(invocation.receiver, invocation));
+        <HInstruction>[receiver]..addAll(_visitArgumentsForDynamicTarget(
+            selector, node.arguments, typeArguments)),
+        typeArguments,
+        _sourceInformationBuilder.buildCall(node.receiver, node));
   }
 
   HInterceptor _interceptorFor(
@@ -3917,8 +4028,12 @@
     return null;
   }
 
-  void _generateSuperNoSuchMethod(ir.Expression invocation, String publicName,
-      List<HInstruction> arguments, SourceInformation sourceInformation) {
+  void _generateSuperNoSuchMethod(
+      ir.Expression invocation,
+      String publicName,
+      List<HInstruction> arguments,
+      List<DartType> typeArguments,
+      SourceInformation sourceInformation) {
     Selector selector = _elementMap.getSelector(invocation);
     ClassEntity containingClass =
         _elementMap.getClass(_containingClass(invocation));
@@ -3932,7 +4047,8 @@
       // arguments), in case the [noSuchMethod] implementation calls
       // [JSInvocationMirror._invokeOn].
       // TODO(johnniwinther): Register this more precisely.
-      registry?.registerDynamicUse(new DynamicUse(selector, null));
+      registry
+          ?.registerDynamicUse(new ConstrainedDynamicUse(selector, null, null));
     }
 
     ConstantValue nameConstant = constantSystem.createString(publicName);
@@ -3963,10 +4079,11 @@
           argumentsInstruction,
           argumentNamesInstruction
         ],
-        commonMasks.dynamicType);
+        commonMasks.dynamicType,
+        typeArguments);
 
     _buildInvokeSuper(Selectors.noSuchMethod_, containingClass, noSuchMethod,
-        <HInstruction>[pop()], sourceInformation);
+        <HInstruction>[pop()], typeArguments, sourceInformation);
   }
 
   HInstruction _buildInvokeSuper(
@@ -3974,6 +4091,7 @@
       ClassEntity containingClass,
       MemberEntity target,
       List<HInstruction> arguments,
+      List<DartType> typeArguments,
       SourceInformation sourceInformation) {
     HInstruction receiver =
         localsHandler.readThis(sourceInformation: sourceInformation);
@@ -3991,8 +4109,8 @@
     } else {
       typeMask = closedWorld.commonMasks.dynamicType;
     }
-    HInstruction instruction = new HInvokeSuper(
-        target, containingClass, selector, inputs, typeMask, sourceInformation,
+    HInstruction instruction = new HInvokeSuper(target, containingClass,
+        selector, inputs, typeMask, typeArguments, sourceInformation,
         isSetter: selector.isSetter || selector.isIndexSet);
     instruction.sideEffects =
         closedWorld.getSideEffectsOfSelector(selector, null);
@@ -4006,13 +4124,14 @@
         _sourceInformationBuilder.buildGet(node);
     if (node.interfaceTarget == null) {
       _generateSuperNoSuchMethod(node, _elementMap.getSelector(node).name,
-          const <HInstruction>[], sourceInformation);
+          const <HInstruction>[], const <DartType>[], sourceInformation);
     } else {
       _buildInvokeSuper(
           _elementMap.getSelector(node),
           _elementMap.getClass(_containingClass(node)),
           _elementMap.getMember(node.interfaceTarget),
           const <HInstruction>[],
+          const <DartType>[],
           sourceInformation);
     }
   }
@@ -4022,19 +4141,29 @@
     SourceInformation sourceInformation =
         _sourceInformationBuilder.buildCall(node, node);
     if (node.interfaceTarget == null) {
-      var selector = _elementMap.getSelector(node);
-      var arguments = _visitArgumentsForDynamicTarget(selector, node.arguments);
+      Selector selector = _elementMap.getSelector(node);
+      List<DartType> typeArguments =
+          _getDynamicTypeArguments(selector, node.arguments);
+      List<HInstruction> arguments = _visitArgumentsForDynamicTarget(
+          selector, node.arguments, typeArguments);
       _generateSuperNoSuchMethod(
-          node, selector.name, arguments, sourceInformation);
+          node, selector.name, arguments, typeArguments, sourceInformation);
       return;
     }
+    FunctionEntity function = _elementMap.getMethod(node.interfaceTarget);
+    List<DartType> typeArguments =
+        _getStaticTypeArguments(function, node.arguments);
     List<HInstruction> arguments = _visitArgumentsForStaticTarget(
-        node.interfaceTarget.function, node.arguments, sourceInformation);
+        node.interfaceTarget.function,
+        node.arguments,
+        typeArguments,
+        sourceInformation);
     _buildInvokeSuper(
         _elementMap.getSelector(node),
         _elementMap.getClass(_containingClass(node)),
-        _elementMap.getMethod(node.interfaceTarget),
+        function,
         arguments,
+        typeArguments,
         sourceInformation);
   }
 
@@ -4115,8 +4244,8 @@
       supertypeInstruction,
       messageInstruction
     ];
-    HInstruction assertIsSubtype =
-        new HInvokeStatic(element, inputs, subtypeInstruction.instructionType);
+    HInstruction assertIsSubtype = new HInvokeStatic(element, inputs,
+        subtypeInstruction.instructionType, const <DartType>[]);
     registry?.registerTypeVariableBoundsSubtypeCheck(subtype, supertype);
     add(assertIsSubtype);
   }
@@ -4153,16 +4282,19 @@
       // Native class generative constructors take a pre-constructed object.
       arguments.add(graph.addConstantNull(closedWorld));
     }
+    List<DartType> typeArguments =
+        _getConstructorTypeArguments(constructor, node.arguments);
     arguments.addAll(_visitArgumentsForStaticTarget(
-        target.function, node.arguments, sourceInformation));
+        target.function, node.arguments, typeArguments, sourceInformation));
     if (commonElements.isSymbolConstructor(constructor)) {
       constructor = commonElements.symbolValidatedConstructor;
     }
-    if (closedWorld.rtiNeed.classNeedsTypeArguments(cls)) {
-      _addTypeArguments(arguments, node.arguments, sourceInformation);
-    }
+    // TODO(johnniwinther): Remove this when type arguments are passed to
+    // constructors like calling a generic method.
+    _addTypeArguments(arguments, _getClassTypeArguments(cls, node.arguments),
+        sourceInformation);
     addImplicitInstantiation(instanceType);
-    _pushStaticInvocation(constructor, arguments, typeMask,
+    _pushStaticInvocation(constructor, arguments, typeMask, typeArguments,
         sourceInformation: sourceInformation, instanceType: instanceType);
     removeImplicitInstantiation(instanceType);
   }
@@ -4203,8 +4335,8 @@
         expression,
         representation,
       ];
-      _pushStaticInvocation(
-          _commonElements.functionTypeTest, inputs, commonMasks.boolType,
+      _pushStaticInvocation(_commonElements.functionTypeTest, inputs,
+          commonMasks.boolType, const <DartType>[],
           sourceInformation: sourceInformation);
       HInstruction call = pop();
       push(new HIs.compound(typeValue, expression, call, commonMasks.boolType,
@@ -4215,8 +4347,11 @@
     if (typeValue is TypeVariableType) {
       HInstruction runtimeType =
           typeBuilder.addTypeVariableReference(typeValue, sourceElement);
-      _pushStaticInvocation(_commonElements.checkSubtypeOfRuntimeType,
-          <HInstruction>[expression, runtimeType], commonMasks.boolType,
+      _pushStaticInvocation(
+          _commonElements.checkSubtypeOfRuntimeType,
+          <HInstruction>[expression, runtimeType],
+          commonMasks.boolType,
+          const <DartType>[],
           sourceInformation: sourceInformation);
       push(new HIs.variable(typeValue, expression, pop(), commonMasks.boolType,
           sourceInformation));
@@ -4242,8 +4377,8 @@
         representations,
         asFieldName
       ];
-      _pushStaticInvocation(
-          _commonElements.checkSubtype, inputs, commonMasks.boolType,
+      _pushStaticInvocation(_commonElements.checkSubtype, inputs,
+          commonMasks.boolType, const <DartType>[],
           sourceInformation: sourceInformation);
       push(new HIs.compound(typeValue, expression, pop(), commonMasks.boolType,
           sourceInformation));
@@ -4497,9 +4632,6 @@
         return false;
       }
 
-      // TODO(redemption): Do we still need this?
-      //if (function.isSynthesized) return true;
-
       // Don't inline across deferred import to prevent leaking code. The only
       // exception is an empty function (which does not contain code).
       bool hasOnlyNonDeferredImportPaths = backend.outputUnitData
@@ -4772,7 +4904,7 @@
             localsHandler.getTypeVariableAsLocal(typeVariable), argument);
       });
     }
-    if (rtiNeed.methodNeedsTypeArguments(function) && options.strongMode) {
+    if (rtiNeed.methodNeedsTypeArguments(function)) {
       for (TypeVariableType typeVariable in _elementMap.elementEnvironment
           .getFunctionTypeVariables(function)) {
         HInstruction argument = compiledArguments[argumentIndex++];
@@ -4781,7 +4913,10 @@
       }
     }
     assert(
-        argumentIndex == compiledArguments.length,
+        argumentIndex == compiledArguments.length ||
+            !rtiNeed.methodNeedsTypeArguments(function) &&
+                compiledArguments.length - argumentIndex ==
+                    function.parameterStructure.typeParameters,
         failedAt(
             function,
             "Only ${argumentIndex} of ${compiledArguments.length} "
@@ -4894,8 +5029,11 @@
       String name = "${n(element.library)}:${n(element.enclosingClass)}."
           "${n(element)}";
       HConstant nameConstant = graph.addConstantString(name, closedWorld);
-      add(new HInvokeStatic(commonElements.traceHelper,
-          <HInstruction>[nameConstant], commonMasks.dynamicType));
+      add(new HInvokeStatic(
+          commonElements.traceHelper,
+          <HInstruction>[nameConstant],
+          commonMasks.dynamicType,
+          const <DartType>[]));
     }
   }
 
@@ -4907,8 +5045,11 @@
           graph.addConstantInt(element.hashCode, closedWorld);
       HConstant nameConstant =
           graph.addConstantString(element.name, closedWorld);
-      add(new HInvokeStatic(commonElements.traceHelper,
-          <HInstruction>[idConstant, nameConstant], commonMasks.dynamicType));
+      add(new HInvokeStatic(
+          commonElements.traceHelper,
+          <HInstruction>[idConstant, nameConstant],
+          commonMasks.dynamicType,
+          const <DartType>[]));
     }
   }
 }
@@ -4964,7 +5105,6 @@
   static String cannotBeInlinedReason(KernelToElementMapForBuilding elementMap,
       FunctionEntity function, int maxInliningNodes,
       {bool allowLoops: false, bool enableUserAssertions: null}) {
-    // TODO(redemption): Implement inlining heuristic.
     InlineWeeder visitor = new InlineWeeder(maxInliningNodes, allowLoops);
     ir.FunctionNode node = getFunctionNode(elementMap, function);
     node.accept(visitor);
@@ -5262,6 +5402,7 @@
         [exception],
         kernelBuilder._typeInferenceMap
             .getReturnTypeOf(kernelBuilder._commonElements.exceptionUnwrapper),
+        const <DartType>[],
         sourceInformation: trySourceInformation);
     HInvokeStatic unwrappedException = kernelBuilder.pop();
     tryInstruction.exception = exception;
@@ -5289,7 +5430,8 @@
             kernelBuilder._commonElements.traceFromException,
             [exception],
             kernelBuilder._typeInferenceMap.getReturnTypeOf(
-                kernelBuilder._commonElements.traceFromException));
+                kernelBuilder._commonElements.traceFromException),
+            const <DartType>[]);
         HInstruction traceInstruction = kernelBuilder.pop();
         Local traceVariable =
             kernelBuilder.localsMap.getLocalVariable(catchBlock.stackTrace);
@@ -5306,8 +5448,6 @@
             exception, exception.sourceInformation,
             isRethrow: true));
       } else {
-        // TODO(efortuna): Make SsaBranchBuilder handle kernel elements, and
-        // pass tryCatch in here as the "diagnosticNode".
         ir.Catch nextCatch = tryCatch.catches[catchesIndex];
         kernelBuilder.handleIf(
             visitCondition: () {
@@ -5321,8 +5461,6 @@
     }
 
     ir.Catch firstBlock = tryCatch.catches[catchesIndex];
-    // TODO(efortuna): Make SsaBranchBuilder handle kernel elements, and then
-    // pass tryCatch in here as the "diagnosticNode".
     kernelBuilder.handleIf(
         visitCondition: () {
           pushCondition(firstBlock);
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index c8cec3a..cbba76d 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -28,7 +28,8 @@
 import '../types/types.dart';
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/selector.dart' show Selector;
-import '../universe/use.dart' show ConstantUse, DynamicUse, StaticUse, TypeUse;
+import '../universe/use.dart'
+    show ConstantUse, ConstrainedDynamicUse, StaticUse, TypeUse;
 import '../util/util.dart';
 import '../world.dart' show ClosedWorld;
 import 'codegen_helpers.dart';
@@ -1828,7 +1829,8 @@
       // may know something about the types of closures that need
       // the specific closure call method.
       Selector call = new Selector.callClosureFrom(selector);
-      _registry.registerDynamicUse(new DynamicUse(call, null));
+      _registry.registerDynamicUse(
+          new ConstrainedDynamicUse(call, null, node.typeArguments));
     }
     if (target != null) {
       // This is a dynamic invocation which we have found to have a single
@@ -1841,7 +1843,8 @@
           new StaticUse.directInvoke(target, selector.callStructure));
     } else {
       TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
-      _registry.registerDynamicUse(new DynamicUse(selector, mask));
+      _registry.registerDynamicUse(
+          new ConstrainedDynamicUse(selector, mask, node.typeArguments));
     }
   }
 
@@ -1855,7 +1858,8 @@
     } else {
       Selector selector = node.selector;
       TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
-      _registry.registerDynamicUse(new DynamicUse(selector, mask));
+      _registry.registerDynamicUse(
+          new ConstrainedDynamicUse(selector, mask, node.typeArguments));
     }
   }
 
@@ -1871,7 +1875,8 @@
     } else {
       Selector selector = node.selector;
       TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
-      _registry.registerDynamicUse(new DynamicUse(selector, mask));
+      _registry.registerDynamicUse(
+          new ConstrainedDynamicUse(selector, mask, node.typeArguments));
     }
   }
 
@@ -1900,7 +1905,11 @@
         .propertyCall(
             pop(), _namer.invocationName(call), visitArguments(node.inputs))
         .withSourceInformation(node.sourceInformation));
-    _registry.registerDynamicUse(new DynamicUse(call, null));
+    // TODO(kasperl): If we have a typed selector for the call, we
+    // may know something about the types of closures that need
+    // the specific closure call method.
+    _registry.registerDynamicUse(
+        new ConstrainedDynamicUse(call, null, node.typeArguments));
   }
 
   visitInvokeStatic(HInvokeStatic node) {
@@ -1939,10 +1948,12 @@
       push(js.js('# || #', [arguments[0], right]).withSourceInformation(
           node.sourceInformation));
     } else {
-      CallStructure callStructure = new CallStructure.unnamed(arguments.length);
+      CallStructure callStructure = new CallStructure.unnamed(
+          arguments.length, node.typeArguments.length);
       _registry.registerStaticUse(element.isConstructor
           ? new StaticUse.constructorInvoke(element, callStructure)
-          : new StaticUse.staticInvoke(element, callStructure));
+          : new StaticUse.staticInvoke(
+              element, callStructure, node.typeArguments));
       push(_emitter.staticFunctionAccess(element));
       push(new js.Call(pop(), arguments,
           sourceInformation: node.sourceInformation));
@@ -1979,7 +1990,10 @@
           // dispatch to ensure the super method is invoked.
           FunctionEntity helper = _commonElements.closureFromTearOff;
           _registry.registerStaticUse(new StaticUse.staticInvoke(
-              helper, new CallStructure.unnamed(node.inputs.length)));
+              helper,
+              new CallStructure.unnamed(
+                  node.inputs.length, node.typeArguments.length),
+              node.typeArguments));
           _registry.registerStaticUse(new StaticUse.superTearOff(node.element));
           methodName = _namer.invocationName(selector);
         } else {
diff --git a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
index 7d22e8a..cc9b761 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
@@ -369,6 +369,7 @@
             user.mask,
             inputs,
             user.instructionType,
+            user.typeArguments,
             interceptedClasses);
         oneShotInterceptor.sourceInformation = user.sourceInformation;
         oneShotInterceptor.sourceElement = user.sourceElement;
@@ -424,7 +425,8 @@
       List<HInstruction> inputs = new List<HInstruction>.from(node.inputs);
       inputs[0] = constant;
       instruction = new HInvokeDynamicMethod(selector, mask, inputs,
-          node.instructionType, node.sourceInformation, true);
+          node.instructionType, node.typeArguments, node.sourceInformation,
+          isIntercepted: true);
     }
 
     HBasicBlock block = node.block;
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index 9f3166d..b191d7b 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -13,16 +13,20 @@
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../kernel/element_map.dart';
+import '../options.dart';
 import '../resolution/registry.dart' show ResolutionWorldImpactBuilder;
 import '../universe/call_structure.dart';
 import '../universe/feature.dart';
 import '../universe/selector.dart';
 import '../universe/use.dart';
 
-ResolutionImpact buildKernelImpact(ir.Member member,
-    KernelToElementMapForImpact elementMap, DiagnosticReporter reporter) {
+ResolutionImpact buildKernelImpact(
+    ir.Member member,
+    KernelToElementMapForImpact elementMap,
+    DiagnosticReporter reporter,
+    CompilerOptions options) {
   KernelImpactBuilder builder = new KernelImpactBuilder(
-      elementMap, elementMap.getMember(member), reporter);
+      elementMap, elementMap.getMember(member), reporter, options);
   if (member is ir.Procedure) {
     return builder.buildProcedure(member);
   } else if (member is ir.Constructor) {
@@ -37,10 +41,12 @@
   final ResolutionWorldImpactBuilder impactBuilder;
   final KernelToElementMapForImpact elementMap;
   final DiagnosticReporter reporter;
+  final CompilerOptions _options;
   final MemberEntity currentMember;
   _ClassEnsurer classEnsurer;
 
-  KernelImpactBuilder(this.elementMap, this.currentMember, this.reporter)
+  KernelImpactBuilder(
+      this.elementMap, this.currentMember, this.reporter, this._options)
       : this.impactBuilder =
             new ResolutionWorldImpactBuilder('${currentMember.name}') {
     this.classEnsurer = new _ClassEnsurer(this, this.elementMap.types);
@@ -244,9 +250,13 @@
     visitNode(entry.value);
   }
 
-  void _visitArguments(ir.Arguments arguments) {
+  List<DartType> _visitArguments(ir.Arguments arguments) {
     arguments.positional.forEach(visitNode);
     arguments.named.forEach(visitNode);
+    if (arguments.types.isEmpty) return null;
+    return _options.strongMode
+        ? arguments.types.map(elementMap.getDartType).toList()
+        : const <DartType>[];
   }
 
   @override
@@ -337,9 +347,9 @@
       handleNew(node, node.target, isConst: node.isConst);
     } else {
       FunctionEntity target = elementMap.getMethod(node.target);
-      _visitArguments(node.arguments);
+      List<DartType> typeArguments = _visitArguments(node.arguments);
       impactBuilder.registerStaticUse(new StaticUse.staticInvoke(
-          target, elementMap.getCallStructure(node.arguments)));
+          target, elementMap.getCallStructure(node.arguments), typeArguments));
     }
     switch (elementMap.getForeignKind(node)) {
       case ForeignKind.JS:
@@ -404,13 +414,13 @@
 
   @override
   void visitDirectMethodInvocation(ir.DirectMethodInvocation node) {
-    _visitArguments(node.arguments);
+    List<DartType> typeArguments = _visitArguments(node.arguments);
     // TODO(johnniwinther): Restrict the dynamic use to only match the known
     // target.
-    impactBuilder.registerDynamicUse(new DynamicUse(
+    impactBuilder.registerDynamicUse(new GenericDynamicUse(
         new Selector.call(elementMap.getMember(node.target).memberName,
             elementMap.getCallStructure(node.arguments)),
-        null));
+        typeArguments));
   }
 
   @override
@@ -442,8 +452,7 @@
     // TODO(johnniwinther): Restrict the dynamic use to only match the known
     // target.
     impactBuilder.registerDynamicUse(new DynamicUse(
-        new Selector.getter(elementMap.getMember(node.target).memberName),
-        null));
+        new Selector.getter(elementMap.getMember(node.target).memberName)));
   }
 
   @override
@@ -475,8 +484,7 @@
     // TODO(johnniwinther): Restrict the dynamic use to only match the known
     // target.
     impactBuilder.registerDynamicUse(new DynamicUse(
-        new Selector.setter(elementMap.getMember(node.target).memberName),
-        null));
+        new Selector.setter(elementMap.getMember(node.target).memberName)));
   }
 
   @override
@@ -486,32 +494,40 @@
 
   @override
   void visitMethodInvocation(ir.MethodInvocation invocation) {
+    Selector selector = elementMap.getSelector(invocation);
+    List<DartType> typeArguments = _visitArguments(invocation.arguments);
     var receiver = invocation.receiver;
     if (receiver is ir.VariableGet &&
         receiver.variable.isFinal &&
         receiver.variable.parent is ir.FunctionDeclaration) {
+      Local localFunction =
+          elementMap.getLocalFunction(receiver.variable.parent);
       // Invocation of a local function. No need for dynamic use.
+      if (_options.strongMode) {
+        // We need to track the type arguments.
+        impactBuilder.registerStaticUse(new StaticUse.closureCall(
+            localFunction, selector.callStructure, typeArguments));
+      }
     } else {
       visitNode(invocation.receiver);
-      impactBuilder.registerDynamicUse(
-          new DynamicUse(elementMap.getSelector(invocation), null));
+      impactBuilder
+          .registerDynamicUse(new GenericDynamicUse(selector, typeArguments));
     }
-    _visitArguments(invocation.arguments);
   }
 
   @override
   void visitPropertyGet(ir.PropertyGet node) {
     visitNode(node.receiver);
-    impactBuilder.registerDynamicUse(new DynamicUse(
-        new Selector.getter(elementMap.getName(node.name)), null));
+    impactBuilder.registerDynamicUse(
+        new DynamicUse(new Selector.getter(elementMap.getName(node.name))));
   }
 
   @override
   void visitPropertySet(ir.PropertySet node) {
     visitNode(node.receiver);
     visitNode(node.value);
-    impactBuilder.registerDynamicUse(new DynamicUse(
-        new Selector.setter(elementMap.getName(node.name)), null));
+    impactBuilder.registerDynamicUse(
+        new DynamicUse(new Selector.setter(elementMap.getName(node.name))));
   }
 
   @override
@@ -589,11 +605,10 @@
       impactBuilder.registerFeature(Feature.ASYNC_FOR_IN);
     } else {
       impactBuilder.registerFeature(Feature.SYNC_FOR_IN);
-      impactBuilder
-          .registerDynamicUse(new DynamicUse(Selectors.iterator, null));
+      impactBuilder.registerDynamicUse(new DynamicUse(Selectors.iterator));
     }
-    impactBuilder.registerDynamicUse(new DynamicUse(Selectors.current, null));
-    impactBuilder.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
+    impactBuilder.registerDynamicUse(new DynamicUse(Selectors.current));
+    impactBuilder.registerDynamicUse(new DynamicUse(Selectors.moveNext));
   }
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index bac6584..081642d 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -1697,6 +1697,9 @@
     return isCallOnInterceptor(closedWorld) ? inputs[1] : inputs[0];
   }
 
+  /// The type arguments passed in this dynamic invocation.
+  List<DartType> get typeArguments;
+
   /**
    * Returns whether this call is on an interceptor object.
    */
@@ -1716,23 +1719,31 @@
 }
 
 class HInvokeClosure extends HInvokeDynamic {
-  HInvokeClosure(Selector selector, List<HInstruction> inputs, TypeMask type)
+  final List<DartType> typeArguments;
+
+  HInvokeClosure(Selector selector, List<HInstruction> inputs, TypeMask type,
+      this.typeArguments)
       : super(selector, null, null, inputs, type) {
     assert(selector.isClosureCall);
+    assert(selector.callStructure.typeArgumentCount == typeArguments.length);
   }
   accept(HVisitor visitor) => visitor.visitInvokeClosure(this);
 }
 
 class HInvokeDynamicMethod extends HInvokeDynamic {
+  final List<DartType> typeArguments;
+
   HInvokeDynamicMethod(
       Selector selector,
       TypeMask mask,
       List<HInstruction> inputs,
       TypeMask type,
+      this.typeArguments,
       SourceInformation sourceInformation,
-      [bool isIntercepted = false])
+      {bool isIntercepted: false})
       : super(selector, mask, null, inputs, type, isIntercepted) {
     this.sourceInformation = sourceInformation;
+    assert(selector.callStructure.typeArgumentCount == typeArguments.length);
   }
 
   String toString() => 'invoke dynamic method: selector=$selector, mask=$mask';
@@ -1758,13 +1769,17 @@
       : super(selector, mask, element, inputs, type) {
     this.sourceInformation = sourceInformation;
   }
-  String toString() => 'invoke dynamic getter: selector=$selector, mask=$mask';
+
   accept(HVisitor visitor) => visitor.visitInvokeDynamicGetter(this);
 
   bool get isTearOff => element != null && element.isFunction;
 
+  List<DartType> get typeArguments => const <DartType>[];
+
   // There might be an interceptor input, so `inputs.last` is the dart receiver.
   bool canThrow() => isTearOff ? inputs.last.canBeNull() : super.canThrow();
+
+  String toString() => 'invoke dynamic getter: selector=$selector, mask=$mask';
 }
 
 class HInvokeDynamicSetter extends HInvokeDynamicField {
@@ -1778,13 +1793,20 @@
       : super(selector, mask, element, inputs, type) {
     this.sourceInformation = sourceInformation;
   }
-  String toString() => 'invoke dynamic setter: selector=$selector, mask=$mask';
+
   accept(HVisitor visitor) => visitor.visitInvokeDynamicSetter(this);
+
+  List<DartType> get typeArguments => const <DartType>[];
+
+  String toString() => 'invoke dynamic setter: selector=$selector, mask=$mask';
 }
 
 class HInvokeStatic extends HInvoke {
   final MemberEntity element;
 
+  /// The type arguments passed in this static invocation.
+  final List<DartType> typeArguments;
+
   final bool targetCanThrow;
 
   bool canThrow() => targetCanThrow;
@@ -1796,13 +1818,15 @@
   List<DartType> instantiatedTypes;
 
   /** The first input must be the target. */
-  HInvokeStatic(this.element, inputs, TypeMask type,
+  HInvokeStatic(this.element, inputs, TypeMask type, this.typeArguments,
       {this.targetCanThrow: true})
       : super(inputs, type);
 
-  String toString() => 'invoke static: $element';
   accept(HVisitor visitor) => visitor.visitInvokeStatic(this);
+
   int typeCode() => HInstruction.INVOKE_STATIC_TYPECODE;
+
+  String toString() => 'invoke static: $element';
 }
 
 class HInvokeSuper extends HInvokeStatic {
@@ -1811,10 +1835,16 @@
   final bool isSetter;
   final Selector selector;
 
-  HInvokeSuper(MemberEntity element, this.caller, this.selector, inputs, type,
+  HInvokeSuper(
+      MemberEntity element,
+      this.caller,
+      this.selector,
+      List<HInstruction> inputs,
+      TypeMask type,
+      List<DartType> typeArguments,
       SourceInformation sourceInformation,
       {this.isSetter})
-      : super(element, inputs, type) {
+      : super(element, inputs, type, typeArguments) {
     this.sourceInformation = sourceInformation;
   }
 
@@ -1849,7 +1879,7 @@
       List<HInstruction> inputs,
       TypeMask type,
       SourceInformation sourceInformation)
-      : super(element, inputs, type) {
+      : super(element, inputs, type, const <DartType>[]) {
     this.sourceInformation = sourceInformation;
   }
 
@@ -2787,12 +2817,19 @@
  * constant as the first input.
  */
 class HOneShotInterceptor extends HInvokeDynamic {
+  List<DartType> typeArguments;
   Set<ClassEntity> interceptedClasses;
-  HOneShotInterceptor(Selector selector, TypeMask mask,
-      List<HInstruction> inputs, TypeMask type, this.interceptedClasses)
+  HOneShotInterceptor(
+      Selector selector,
+      TypeMask mask,
+      List<HInstruction> inputs,
+      TypeMask type,
+      this.typeArguments,
+      this.interceptedClasses)
       : super(selector, mask, null, inputs, type, true) {
     assert(inputs[0] is HConstant);
     assert(inputs[0].isNull());
+    assert(selector.callStructure.typeArgumentCount == typeArguments.length);
   }
   bool isCallOnInterceptor(ClosedWorld closedWorld) => true;
 
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index f27483a..9d40fe0 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -449,6 +449,7 @@
             node.mask,
             node.inputs.sublist(1),
             node.instructionType,
+            node.typeArguments,
             node.sourceInformation);
         result.element = target;
         return result;
@@ -482,6 +483,7 @@
         node.mask,
         node.inputs.sublist(1),
         resultMask,
+        const <DartType>[],
         node.sourceInformation)
       ..element = commonElements.jsStringSplit
       ..isAllocation = true;
@@ -511,7 +513,8 @@
     HInvokeStatic tagInstruction = new HInvokeStatic(
         commonElements.setRuntimeTypeInfo,
         <HInstruction>[splitInstruction, typeInfo],
-        resultMask);
+        resultMask,
+        const <DartType>[]);
     // 'Linear typing' trick: [tagInstruction] is the only use of the
     // [splitInstruction], so it becomes the sole alias.
     // TODO(sra): Build this knowledge into alias analysis.
@@ -575,9 +578,9 @@
         Selector callSelector = new Selector.callClosureFrom(node.selector);
         List<HInstruction> inputs = <HInstruction>[load]
           ..addAll(node.inputs.skip(node.isInterceptedCall ? 2 : 1));
-        HInstruction closureCall =
-            new HInvokeClosure(callSelector, inputs, node.instructionType)
-              ..sourceInformation = node.sourceInformation;
+        HInstruction closureCall = new HInvokeClosure(
+            callSelector, inputs, node.instructionType, node.typeArguments)
+          ..sourceInformation = node.sourceInformation;
         node.block.addAfter(load, closureCall);
         return closureCall;
       }
@@ -641,7 +644,12 @@
     TypeMask returnType =
         TypeMaskFactory.fromNativeBehavior(nativeBehavior, _closedWorld);
     HInvokeDynamicMethod result = new HInvokeDynamicMethod(
-        node.selector, node.mask, inputs, returnType, node.sourceInformation);
+        node.selector,
+        node.mask,
+        inputs,
+        returnType,
+        node.typeArguments,
+        node.sourceInformation);
     result.element = method;
     return result;
   }
@@ -1114,8 +1122,8 @@
         if (parameterStructure.callStructure == node.selector.callStructure) {
           // TODO(sra): Handle adding optional arguments default values.
           assert(!node.isInterceptedCall);
-          return new HInvokeStatic(
-              target, node.inputs.skip(1).toList(), node.instructionType);
+          return new HInvokeStatic(target, node.inputs.skip(1).toList(),
+              node.instructionType, node.typeArguments);
         }
       }
     }
@@ -1251,6 +1259,7 @@
             input.instructionType, // receiver mask.
             inputs,
             toStringType,
+            const <DartType>[],
             node.sourceInformation);
         return result;
       }
diff --git a/pkg/compiler/lib/src/tree/nodes.dart b/pkg/compiler/lib/src/tree/nodes.dart
index 57b6d76..d83c8d4 100644
--- a/pkg/compiler/lib/src/tree/nodes.dart
+++ b/pkg/compiler/lib/src/tree/nodes.dart
@@ -1295,7 +1295,8 @@
       }
       return int.parse(valueToken.lexeme);
     } on FormatException catch (ex) {
-      throw handler(token, ex);
+      handler(token, ex);
+      throw new ArgumentError("handler didn't throw; aborting");
     }
   }
 
@@ -1318,7 +1319,8 @@
       }
       return double.parse(valueToken.lexeme);
     } on FormatException catch (ex) {
-      throw handler(token, ex);
+      handler(token, ex);
+      throw new ArgumentError("handler didn't throw; aborting");
     }
   }
 
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index 7335b12..bc4937e 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -79,7 +79,8 @@
       [Comparator<ConstantValue> preSortCompare]);
 }
 
-abstract class CodegenWorldBuilderImpl implements CodegenWorldBuilder {
+abstract class CodegenWorldBuilderImpl extends WorldBuilderBase
+    implements CodegenWorldBuilder {
   final ElementEnvironment _elementEnvironment;
   final NativeBasicData _nativeBasicData;
   final ClosedWorld _world;
@@ -158,9 +159,6 @@
 
   final Set<ConstantValue> _constantValues = new Set<ConstantValue>();
 
-  /// Set of methods in instantiated classes that are potentially closurized.
-  final Set<FunctionEntity> closurizedMembers = new Set<FunctionEntity>();
-
   CodegenWorldBuilderImpl(this._elementEnvironment, this._nativeBasicData,
       this._world, this.selectorConstraintsStrategy);
 
@@ -268,6 +266,7 @@
 
     switch (dynamicUse.kind) {
       case DynamicUseKind.INVOKE:
+        registerDynamicInvocation(dynamicUse);
         if (_registerNewSelector(dynamicUse, _invokedNames)) {
           _process(_instanceMembersByName, (m) => m.invoke());
           return true;
@@ -359,6 +358,7 @@
       case StaticUseKind.FIELD_SET:
       case StaticUseKind.DIRECT_USE:
       case StaticUseKind.CLOSURE:
+      case StaticUseKind.CLOSURE_CALL:
       case StaticUseKind.CALL_METHOD:
       case StaticUseKind.FIELD_GET:
       case StaticUseKind.CONSTRUCTOR_INVOKE:
@@ -390,20 +390,25 @@
     EnumSet<MemberUse> useSet = new EnumSet<MemberUse>();
     switch (staticUse.kind) {
       case StaticUseKind.STATIC_TEAR_OFF:
+        closurizedStatics.add(element);
         useSet.addAll(usage.tearOff());
         break;
       case StaticUseKind.FIELD_GET:
       case StaticUseKind.FIELD_SET:
       case StaticUseKind.CLOSURE:
+      case StaticUseKind.CLOSURE_CALL:
       case StaticUseKind.CALL_METHOD:
         // TODO(johnniwinther): Avoid this. Currently [FIELD_GET] and
         // [FIELD_SET] contains [BoxFieldElement]s which we cannot enqueue.
         // Also [CLOSURE] contains [LocalFunctionElement] which we cannot
         // enqueue.
         break;
+      case StaticUseKind.INVOKE:
+        registerStaticInvocation(staticUse);
+        useSet.addAll(usage.normalUse());
+        break;
       case StaticUseKind.SUPER_FIELD_SET:
       case StaticUseKind.SUPER_TEAR_OFF:
-      case StaticUseKind.INVOKE:
       case StaticUseKind.GET:
       case StaticUseKind.SET:
       case StaticUseKind.INIT:
diff --git a/pkg/compiler/lib/src/universe/resolution_world_builder.dart b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
index c6dabbe..0d599e7 100644
--- a/pkg/compiler/lib/src/universe/resolution_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/resolution_world_builder.dart
@@ -17,9 +17,6 @@
   /// A live function is one whose enclosing member function has been enqueued.
   Iterable<Local> get localFunctionsWithFreeTypeVariables;
 
-  /// Set of methods in instantiated classes that are potentially closurized.
-  Iterable<FunctionEntity> get closurizedMembers;
-
   /// Set of live closurized members whose signatures reference type variables.
   ///
   /// A closurized method is considered live if the enclosing class has been
@@ -264,7 +261,7 @@
 }
 
 /// Base implementation of [ResolutionEnqueuerWorldBuilder].
-abstract class ResolutionWorldBuilderBase
+abstract class ResolutionWorldBuilderBase extends WorldBuilderBase
     implements ResolutionEnqueuerWorldBuilder {
   /// Instantiation information for all classes with instantiated types.
   ///
@@ -348,9 +345,6 @@
   /// live.
   final Set<Local> localFunctionsWithFreeTypeVariables = new Set<Local>();
 
-  /// Set of methods in instantiated classes that are potentially closurized.
-  final Set<FunctionEntity> closurizedMembers = new Set<FunctionEntity>();
-
   /// Set of live closurized members whose signatures reference type variables.
   ///
   /// A closurized method is considered live if the enclosing class has been
@@ -577,6 +571,7 @@
 
     switch (dynamicUse.kind) {
       case DynamicUseKind.INVOKE:
+        registerDynamicInvocation(dynamicUse);
         if (_registerNewSelector(dynamicUse, _invokedNames)) {
           _process(_instanceMembersByName, (m) => m.invoke());
         }
@@ -627,6 +622,9 @@
       }
       localFunctions.add(staticUse.element);
       return;
+    } else if (staticUse.kind == StaticUseKind.CLOSURE_CALL) {
+      registerStaticInvocation(staticUse);
+      return;
     }
 
     MemberEntity element = staticUse.element;
@@ -651,6 +649,7 @@
         fieldSetters.add(staticUse.element);
         break;
       case StaticUseKind.CLOSURE:
+      case StaticUseKind.CLOSURE_CALL:
         // Already handled above.
         break;
       case StaticUseKind.SUPER_TEAR_OFF:
@@ -662,7 +661,10 @@
         useSet.addAll(usage.write());
         break;
       case StaticUseKind.GET:
+        useSet.addAll(usage.read());
+        break;
       case StaticUseKind.STATIC_TEAR_OFF:
+        closurizedStatics.add(element);
         useSet.addAll(usage.read());
         break;
       case StaticUseKind.SET:
@@ -676,6 +678,9 @@
         useSet.addAll(usage.init());
         break;
       case StaticUseKind.INVOKE:
+        registerStaticInvocation(staticUse);
+        useSet.addAll(usage.invoke());
+        break;
       case StaticUseKind.CONSTRUCTOR_INVOKE:
       case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
       case StaticUseKind.REDIRECTION:
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index 6d4b03b..1ed7da7 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -23,7 +23,7 @@
 import '../elements/elements.dart' show Element;
 import '../elements/entities.dart';
 import '../js_model/closure.dart';
-import '../util/util.dart' show Hashing;
+import '../util/util.dart' show equalElements, Hashing;
 import '../world.dart' show World;
 import 'call_structure.dart' show CallStructure;
 import 'selector.dart' show Selector;
@@ -40,15 +40,16 @@
 /// the property is accessed.
 class DynamicUse {
   final Selector selector;
-  final ReceiverConstraint mask;
 
-  DynamicUse(this.selector, this.mask);
+  DynamicUse(this.selector);
 
   bool appliesUnnamed(MemberEntity element, World world) {
     return selector.appliesUnnamed(element) &&
         (mask == null || mask.canHit(element, selector, world));
   }
 
+  ReceiverConstraint get mask => null;
+
   DynamicUseKind get kind {
     if (selector.isGetter) {
       return DynamicUseKind.GET;
@@ -59,17 +60,59 @@
     }
   }
 
-  int get hashCode => selector.hashCode * 13 + mask.hashCode * 17;
+  List<DartType> get typeArguments => const <DartType>[];
+
+  int get hashCode =>
+      Hashing.listHash(typeArguments, Hashing.objectsHash(selector, mask));
 
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! DynamicUse) return false;
-    return selector == other.selector && mask == other.mask;
+    return selector == other.selector &&
+        mask == other.mask &&
+        equalElements(typeArguments, other.typeArguments);
   }
 
   String toString() => '$selector,$mask';
 }
 
+class GenericDynamicUse extends DynamicUse {
+  final List<DartType> _typeArguments;
+
+  GenericDynamicUse(Selector selector, [this._typeArguments])
+      : super(selector) {
+    assert(
+        selector.callStructure.typeArgumentCount ==
+            (_typeArguments?.length ?? 0),
+        "Type argument count mismatch. Selector has "
+        "${selector.callStructure.typeArgumentCount} but "
+        "${typeArguments?.length ?? 0} were passed.");
+  }
+
+  List<DartType> get typeArguments => _typeArguments ?? const <DartType>[];
+}
+
+/// A dynamic use with a receiver constraint.
+///
+/// This is used in the codegen phase where receivers are constrained to a
+/// type mask or similar.
+class ConstrainedDynamicUse extends DynamicUse {
+  final ReceiverConstraint mask;
+  final List<DartType> _typeArguments;
+
+  ConstrainedDynamicUse(Selector selector, this.mask, this._typeArguments)
+      : super(selector) {
+    assert(
+        selector.callStructure.typeArgumentCount ==
+            (_typeArguments?.length ?? 0),
+        "Type argument count mismatch. Selector has "
+        "${selector.callStructure.typeArgumentCount} but "
+        "${_typeArguments?.length ?? 0} were passed.");
+  }
+
+  List<DartType> get typeArguments => _typeArguments ?? const <DartType>[];
+}
+
 enum StaticUseKind {
   STATIC_TEAR_OFF,
   SUPER_TEAR_OFF,
@@ -77,6 +120,7 @@
   FIELD_GET,
   FIELD_SET,
   CLOSURE,
+  CLOSURE_CALL,
   CALL_METHOD,
   CONSTRUCTOR_INVOKE,
   CONST_CONSTRUCTOR_INVOKE,
@@ -98,31 +142,35 @@
   final Entity element;
   final StaticUseKind kind;
   final int hashCode;
-  final DartType type;
+  final InterfaceType type;
   final CallStructure callStructure;
 
-  StaticUse.internal(Entity element, this.kind, {this.type, this.callStructure})
+  StaticUse.internal(Entity element, this.kind,
+      {this.type, this.callStructure, typeArgumentsHash: 0})
       : this.element = element,
-        this.hashCode =
-            Hashing.objectsHash(element, kind, type, callStructure) {
+        this.hashCode = Hashing.objectsHash(
+            element, kind, type, typeArgumentsHash, callStructure) {
     assert(
         !(element is Element && !element.isDeclaration),
         failedAt(element,
             "Static use element $element must be the declaration element."));
   }
 
+  List<DartType> get typeArguments => null;
+
   /// Invocation of a static or top-level [element] with the given
   /// [callStructure].
   factory StaticUse.staticInvoke(
-      FunctionEntity element, CallStructure callStructure) {
+      FunctionEntity element, CallStructure callStructure,
+      [List<DartType> typeArguments]) {
     assert(
         element.isStatic || element.isTopLevel,
         failedAt(
             element,
             "Static invoke element $element must be a top-level "
             "or static method."));
-    return new StaticUse.internal(element, StaticUseKind.INVOKE,
-        callStructure: callStructure);
+    return new GenericStaticUse(
+        element, StaticUseKind.INVOKE, callStructure, typeArguments);
   }
 
   /// Closurization of a static or top-level function [element].
@@ -307,8 +355,8 @@
 
   /// Constructor invocation of [element] with the given [callStructure] on
   /// [type].
-  factory StaticUse.typedConstructorInvoke(
-      ConstructorEntity element, CallStructure callStructure, DartType type) {
+  factory StaticUse.typedConstructorInvoke(ConstructorEntity element,
+      CallStructure callStructure, InterfaceType type) {
     assert(type != null,
         failedAt(element, "No type provided for constructor invocation."));
     assert(
@@ -323,8 +371,8 @@
 
   /// Constant constructor invocation of [element] with the given
   /// [callStructure] on [type].
-  factory StaticUse.constConstructorInvoke(
-      ConstructorEntity element, CallStructure callStructure, DartType type) {
+  factory StaticUse.constConstructorInvoke(ConstructorEntity element,
+      CallStructure callStructure, InterfaceType type) {
     assert(type != null,
         failedAt(element, "No type provided for constructor invocation."));
     assert(
@@ -387,6 +435,14 @@
     return new StaticUse.internal(element, StaticUseKind.CLOSURE);
   }
 
+  /// An invocation of a local function [element] with the provided
+  /// [callStructure] and [typeArguments].
+  factory StaticUse.closureCall(Local element, CallStructure callStructure,
+      List<DartType> typeArguments) {
+    return new GenericStaticUse(
+        element, StaticUseKind.CLOSURE_CALL, callStructure, typeArguments);
+  }
+
   /// Read of a call [method] on a closureClass.
   factory StaticUse.callMethod(FunctionEntity method) {
     return new StaticUse.internal(method, StaticUseKind.CALL_METHOD);
@@ -421,10 +477,30 @@
     return element == other.element &&
         kind == other.kind &&
         type == other.type &&
-        callStructure == other.callStructure;
+        callStructure == other.callStructure &&
+        equalElements(typeArguments, other.typeArguments);
   }
 
-  String toString() => 'StaticUse($element,$kind,$type,$callStructure)';
+  String toString() =>
+      'StaticUse($element,$kind,$type,' '$typeArguments,$callStructure)';
+}
+
+class GenericStaticUse extends StaticUse {
+  final List<DartType> typeArguments;
+
+  GenericStaticUse(Entity entity, StaticUseKind kind,
+      CallStructure callStructure, this.typeArguments)
+      : super.internal(entity, kind,
+            callStructure: callStructure,
+            typeArgumentsHash: Hashing.listHash(typeArguments)) {
+    assert(
+        (callStructure?.typeArgumentCount ?? 0) == (typeArguments?.length ?? 0),
+        failedAt(
+            element,
+            "Type argument count mismatch. Call structure has "
+            "${callStructure?.typeArgumentCount ?? 0} but "
+            "${typeArguments?.length ?? 0} were passed."));
+  }
 }
 
 enum TypeUseKind {
@@ -438,7 +514,7 @@
   NATIVE_INSTANTIATION,
 }
 
-/// Use of a [ResolutionDartType].
+/// Use of a [DartType].
 class TypeUse {
   final DartType type;
   final TypeUseKind kind;
diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart
index 8b1269f..92e4220 100644
--- a/pkg/compiler/lib/src/universe/world_builder.dart
+++ b/pkg/compiler/lib/src/universe/world_builder.dart
@@ -187,4 +187,72 @@
   /// instantiated classes.
   // TODO(johnniwinther): Improve semantic precision.
   Iterable<InterfaceType> get instantiatedTypes;
+
+  /// Set of methods in instantiated classes that are potentially closurized.
+  Iterable<FunctionEntity> get closurizedMembers;
+
+  /// Set of static or top level methods that are closurized.
+  Iterable<FunctionEntity> get closurizedStatics;
+
+  /// Call [f] for each generic [function] with the type arguments passed
+  /// through static calls to [function].
+  void forEachStaticTypeArgument(
+      void f(Entity function, Set<DartType> typeArguments));
+
+  /// Call [f] for each generic [selector] with the type arguments passed
+  /// through dynamic calls to [selector].
+  void forEachDynamicTypeArgument(
+      void f(Selector selector, Set<DartType> typeArguments));
+}
+
+abstract class WorldBuilderBase {
+  final Map<Entity, Set<DartType>> _staticTypeArgumentDependencies =
+      <Entity, Set<DartType>>{};
+
+  final Map<Selector, Set<DartType>> _dynamicTypeArgumentDependencies =
+      <Selector, Set<DartType>>{};
+
+  /// Set of methods in instantiated classes that are potentially closurized.
+  final Set<FunctionEntity> closurizedMembers = new Set<FunctionEntity>();
+
+  /// Set of static or top level methods that are closurized.
+  final Set<FunctionEntity> closurizedStatics = new Set<FunctionEntity>();
+
+  void _registerStaticTypeArgumentDependency(
+      Entity element, List<DartType> typeArguments) {
+    _staticTypeArgumentDependencies.putIfAbsent(
+        element, () => new Set<DartType>())
+      ..addAll(typeArguments);
+  }
+
+  void _registerDynamicTypeArgumentDependency(
+      Selector selector, List<DartType> typeArguments) {
+    _dynamicTypeArgumentDependencies.putIfAbsent(
+        selector, () => new Set<DartType>())
+      ..addAll(typeArguments);
+  }
+
+  void registerStaticInvocation(StaticUse staticUse) {
+    if (staticUse.typeArguments == null || staticUse.typeArguments.isEmpty) {
+      return;
+    }
+    _registerStaticTypeArgumentDependency(
+        staticUse.element, staticUse.typeArguments);
+  }
+
+  void registerDynamicInvocation(DynamicUse dynamicUse) {
+    if (dynamicUse.typeArguments.isEmpty) return;
+    _registerDynamicTypeArgumentDependency(
+        dynamicUse.selector, dynamicUse.typeArguments);
+  }
+
+  void forEachStaticTypeArgument(
+      void f(Entity function, Set<DartType> typeArguments)) {
+    _staticTypeArgumentDependencies.forEach(f);
+  }
+
+  void forEachDynamicTypeArgument(
+      void f(Selector selector, Set<DartType> typeArguments)) {
+    _dynamicTypeArgumentDependencies.forEach(f);
+  }
 }
diff --git a/pkg/compiler/lib/src/util/util.dart b/pkg/compiler/lib/src/util/util.dart
index 4bc30d3..d33e9e7 100644
--- a/pkg/compiler/lib/src/util/util.dart
+++ b/pkg/compiler/lib/src/util/util.dart
@@ -43,8 +43,10 @@
   }
 
   /// Mix the bits of `.hashCode` all non-null objects.
-  static int objectsHash(Object obj1, [Object obj2, Object obj3, Object obj4]) {
+  static int objectsHash(Object obj1,
+      [Object obj2, Object obj3, Object obj4, Object obj5]) {
     int hash = 0;
+    if (obj5 != null) hash = objectHash(obj5, hash);
     if (obj4 != null) hash = objectHash(obj4, hash);
     if (obj3 != null) hash = objectHash(obj3, hash);
     if (obj2 != null) hash = objectHash(obj2, hash);
@@ -54,9 +56,11 @@
   /// Mix the bits of the element hash codes of [list] with [existing].
   static int listHash(List list, [int existing = 0]) {
     int h = existing;
-    int length = list.length;
-    for (int i = 0; i < length; i++) {
-      h = mixHashCodeBits(h, list[i].hashCode);
+    if (list != null) {
+      int length = list.length;
+      for (int i = 0; i < length; i++) {
+        h = mixHashCodeBits(h, list[i].hashCode);
+      }
     }
     return h;
   }
@@ -82,7 +86,9 @@
   }
 }
 
-bool equalElements(List a, List b) {
+bool equalElements<E>(List<E> a, List<E> b) {
+  if (identical(a, b)) return true;
+  if (a == null || b == null) return false;
   if (a.length != b.length) return false;
   for (int index = 0; index < a.length; index++) {
     if (a[index] != b[index]) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index d8cf050..0259a5f 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -1217,8 +1217,9 @@
       List<TypeParameterElement> formals, JS.Statement body,
       [JS.Expression className, List<JS.Statement> deferredBaseClass]) {
     assert(formals.isNotEmpty);
+    var jsFormals = _emitTypeFormals(formals);
     var typeConstructor = js.call('(#) => { #; #; return #; }', [
-      _emitTypeFormals(formals),
+      jsFormals,
       _typeTable.discharge(formals),
       body,
       className ?? new JS.Identifier(element.name)
@@ -1226,7 +1227,7 @@
 
     var genericArgs = [typeConstructor];
     if (deferredBaseClass != null && deferredBaseClass.isNotEmpty) {
-      genericArgs.add(js.call('(#) => { #; }', [className, deferredBaseClass]));
+      genericArgs.add(js.call('(#) => { #; }', [jsFormals, deferredBaseClass]));
     }
 
     var genericCall = _callHelper('generic(#)', [genericArgs]);
@@ -1274,7 +1275,6 @@
 
     emitDeferredType(DartType t) {
       if (t is InterfaceType && t.typeArguments.isNotEmpty) {
-        if (t == classElem.type) return className;
         _declareBeforeUse(t.element);
         return _emitGenericClassType(
             t, t.typeArguments.map(emitDeferredType).toList());
@@ -1307,7 +1307,8 @@
       return _emitJSInterop(t.element) ?? _emitType(t, nameType: false);
     }
 
-    getBaseClass(JS.Expression base, int count) {
+    getBaseClass(int count) {
+      var base = emitDeferredType(classElem.type);
       while (--count >= 0) {
         base = js.call('#.__proto__', [base]);
       }
@@ -1352,7 +1353,7 @@
     var mixinLength = classElem.mixins.length;
     if (shouldDefer(supertype)) {
       deferredSupertypes.add(_callHelperStatement('setBaseClass(#, #)', [
-        getBaseClass(className, isMixinAliasClass(classElem) ? 0 : mixinLength),
+        getBaseClass(isMixinAliasClass(classElem) ? 0 : mixinLength),
         emitDeferredType(supertype),
       ]));
       supertype = fillDynamicTypeArgs(supertype);
@@ -1371,9 +1372,10 @@
       bool deferMixin = shouldDefer(m);
       var mixinBody = deferMixin ? deferredSupertypes : body;
       var mixinClass = deferMixin ? emitDeferredType(m) : emitClassRef(m);
+      var classExpr = deferMixin ? getBaseClass(0) : className;
 
       mixinBody.add(
-          _callHelperStatement('mixinMembers(#, #)', [className, mixinClass]));
+          _callHelperStatement('mixinMembers(#, #)', [classExpr, mixinClass]));
 
       _finishTopLevelCodeForClass(classElem);
 
@@ -1385,7 +1387,7 @@
         //
         //     mixinMembers(C, class C$ extends M { <methods>  });
         mixinBody.add(_callHelperStatement('mixinMembers(#, #)', [
-          className,
+          classExpr,
           new JS.ClassExpression(
               new JS.TemporaryId(classElem.name), mixinClass, methods)
         ]));
@@ -1417,7 +1419,7 @@
 
       if (shouldDefer(m)) {
         deferredSupertypes.add(_callHelperStatement('mixinMembers(#, #)',
-            [getBaseClass(className, mixinLength - i), emitDeferredType(m)]));
+            [getBaseClass(mixinLength - i), emitDeferredType(m)]));
       } else {
         body.add(_callHelperStatement(
             'mixinMembers(#, #)', [mixinId, emitClassRef(m)]));
@@ -1563,7 +1565,7 @@
             covariantParams.lookup(member.parameters[0]) as ParameterElement;
         methods.add(new JS.Method(
             name,
-            js.call('function(x) { return super.#(#._check(x)); }',
+            js.call('function(x) { return super.# = #._check(x); }',
                 [name, _emitType(param.type)]),
             isSetter: true));
         methods.add(new JS.Method(
@@ -2050,12 +2052,8 @@
       List<JS.Statement> body) {
     // Metadata
     if (options.emitMetadata && metadata.isNotEmpty) {
-      body.add(js.statement('#[#.metadata] = () => #;', [
-        className,
-        _runtimeModule,
-        new JS.ArrayInitializer(
-            new List<JS.Expression>.from(metadata.map(_instantiateAnnotation)))
-      ]));
+      body.add(js.statement('#[#.metadata] = () => [#];',
+          [className, _runtimeModule, metadata.map(_instantiateAnnotation)]));
     }
   }
 
@@ -2100,11 +2098,8 @@
   void _emitClassSignature(ClassElement classElem, JS.Expression className,
       Map<Element, Declaration> annotatedMembers, List<JS.Statement> body) {
     if (classElem.interfaces.isNotEmpty) {
-      body.add(js.statement('#[#.implements] = () => #;', [
-        className,
-        _runtimeModule,
-        new JS.ArrayInitializer(classElem.interfaces.map(_emitType).toList())
-      ]));
+      body.add(js.statement('#[#.implements] = () => [#];',
+          [className, _runtimeModule, classElem.interfaces.map(_emitType)]));
     }
 
     void emitSignature(String name, List<JS.Property> elements) {
@@ -3253,10 +3248,9 @@
 
       addTypeFormalsAsParameters(List<JS.Expression> elements) {
         var names = _typeTable.discharge(typeFormals);
-        var array = new JS.ArrayInitializer(elements);
         return names.isEmpty
-            ? js.call('(#) => #', [tf, array])
-            : js.call('(#) => {#; return #;}', [tf, names, array]);
+            ? js.call('(#) => [#]', [tf, elements])
+            : js.call('(#) => {#; return [#];}', [tf, names, elements]);
       }
 
       typeParts = [addTypeFormalsAsParameters(typeParts)];
@@ -3301,13 +3295,7 @@
 
   /// Emits a Dart [type] into code.
   ///
-  /// If [lowerTypedef] is set, a typedef will be expanded as if it were a
-  /// function type. Similarly if [lowerGeneric] is set, the `List$()` form
-  /// will be used instead of `List`. These flags are used when generating
-  /// the definitions for typedefs and generic types, respectively.
-  ///
-  /// If [nameType] is true, then the type will be named.  In addition,
-  /// if [hoistType] is true, then the named type will be hoisted.
+  /// If [nameType] is true, then the type will be named.
   JS.Expression _emitType(DartType type, {bool nameType: true}) {
     // The void and dynamic types are not defined in core.
     if (type.isVoid) {
@@ -3735,10 +3723,10 @@
     JS.Expression jsTarget = _emitTarget(target, element, isStatic);
     if (isDynamicInvoke(target) || isDynamicInvoke(node.methodName)) {
       if (typeArgs != null) {
-        return _callHelper('#(#, #, #, #)', [
+        return _callHelper('#(#, [#], #, #)', [
           _emitDynamicOperationName('dgsend'),
           jsTarget,
-          new JS.ArrayInitializer(typeArgs),
+          typeArgs,
           jsName,
           args
         ]);
@@ -3764,8 +3752,7 @@
       InvocationExpression node, JS.Expression fn, List<JS.Expression> args) {
     var typeArgs = _emitInvokeTypeArguments(node);
     if (typeArgs != null) {
-      return _callHelper(
-          'dgcall(#, #, #)', [fn, new JS.ArrayInitializer(typeArgs), args]);
+      return _callHelper('dgcall(#, [#], #)', [fn, typeArgs, args]);
     } else {
       return _callHelper('dcall(#, #)', [fn, args]);
     }
@@ -5619,8 +5606,7 @@
       DartType elementType, List<JS.Expression> elements) {
     // dart.constList helper internally depends on _interceptors.JSArray.
     _declareBeforeUse(_jsArray);
-    return _callHelper('constList(#, #)',
-        [new JS.ArrayInitializer(elements), _emitType(elementType)]);
+    return _callHelper('constList([#], #)', [elements, _emitType(elementType)]);
   }
 
   JS.Expression _emitList(DartType itemType, List<JS.Expression> items) {
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index 7fd8b2d..4a822f3 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -696,13 +696,18 @@
       (arguments) => new LiteralNull();
 
   Instantiator visitArrayInitializer(ArrayInitializer node) {
-    // TODO(sra): Implement splicing?
     List<Instantiator> elementMakers =
-        node.elements.map(visit).toList(growable: false);
+        node.elements.map(visitSplayableExpression).toList(growable: false);
     return (arguments) {
-      List<Expression> elements = elementMakers
-          .map((instantiator) => instantiator(arguments) as Expression)
-          .toList(growable: false);
+      var elements = <Expression>[];
+      for (var instantiator in elementMakers) {
+        var element = instantiator(arguments);
+        if (element is Iterable) {
+          elements.addAll(element);
+        } else {
+          elements.add(element);
+        }
+      }
       return new ArrayInitializer(elements);
     };
   }
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 6b7f851..42d51ee 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -564,8 +564,9 @@
       [JS.Expression className, List<JS.Statement> deferredBaseClass]) {
     assert(formals.isNotEmpty);
     var name = getTopLevelName(c);
+    var jsFormals = _emitTypeFormals(formals);
     var typeConstructor = js.call('(#) => { #; #; return #; }', [
-      _emitTypeFormals(formals),
+      jsFormals,
       _typeTable.discharge(formals),
       body,
       className ?? new JS.Identifier(name)
@@ -573,7 +574,7 @@
 
     var genericArgs = [typeConstructor];
     if (deferredBaseClass != null && deferredBaseClass.isNotEmpty) {
-      genericArgs.add(js.call('(#) => { #; }', [className, deferredBaseClass]));
+      genericArgs.add(js.call('(#) => { #; }', [jsFormals, deferredBaseClass]));
     }
 
     var genericCall = _callHelper('generic(#)', [genericArgs]);
@@ -608,7 +609,6 @@
 
     JS.Expression emitDeferredType(DartType t) {
       if (t is InterfaceType && t.typeArguments.isNotEmpty) {
-        if (t == c.thisType) return className;
         return _emitGenericClassType(t, t.typeArguments.map(emitDeferredType));
       }
       return _emitType(t);
@@ -647,13 +647,37 @@
       return _emitJSInterop(t.classNode) ?? visitInterfaceType(t);
     }
 
+    getBaseClass(int count) {
+      var base = emitDeferredType(c.thisType);
+      while (--count >= 0) {
+        base = js.call('#.__proto__', [base]);
+      }
+      return base;
+    }
+
+    var mixins = [];
+    var mixedInType = c.mixedInType;
+    var superclass = c.superclass;
     var supertype = c.supertype.asInterfaceType;
-    var hasUnnamedSuper = _hasUnnamedConstructor(c.superclass);
+    if (mixedInType != null) {
+      mixins.add(mixedInType.asInterfaceType);
+      for (;
+          superclass.isSyntheticMixinImplementation;
+          superclass = superclass.superclass) {
+        mixins.add(hierarchy
+            .getClassAsInstanceOf(c, superclass.mixedInClass)
+            .asInterfaceType);
+      }
+      if (mixins.length > 1) mixins = mixins.reversed.toList();
+      supertype = hierarchy.getClassAsInstanceOf(c, superclass).asInterfaceType;
+    }
+
+    var hasUnnamedSuper = _hasUnnamedConstructor(superclass);
     var isCallable = isCallableClass(c);
 
-    void emitMixinConstructors(JS.Expression className, [InterfaceType mixin]) {
+    void emitMixinConstructors(JS.Expression className, InterfaceType mixin) {
       JS.Statement mixinCtor;
-      if (mixin != null && _hasUnnamedConstructor(mixin.classNode)) {
+      if (_hasUnnamedConstructor(mixin.classNode)) {
         mixinCtor = js.statement('#.#.call(this);', [
           emitClassRef(mixin),
           _usesMixinNew(mixin.classNode)
@@ -662,17 +686,17 @@
         ]);
       }
 
-      for (var ctor in c.superclass.constructors) {
+      for (var ctor in superclass.constructors) {
         var jsParams = _emitFormalParameters(ctor.function);
         var ctorBody = <JS.Statement>[];
         if (mixinCtor != null) ctorBody.add(mixinCtor);
-        if (ctor.name.name != '' || hasUnnamedSuper) {
-          ctorBody.add(
-              _emitSuperConstructorCall(className, ctor.name.name, jsParams));
+        var name = ctor.name.name;
+        if (name != '' || hasUnnamedSuper) {
+          ctorBody.add(_emitSuperConstructorCall(className, name, jsParams));
         }
         body.add(_addConstructorToClass(
             className,
-            ctor.name.name,
+            name,
             _finishConstructorFunction(
                 jsParams, new JS.Block(ctorBody), isCallable)));
       }
@@ -684,28 +708,29 @@
     // Unroll mixins.
     if (shouldDefer(supertype)) {
       deferredSupertypes.add(_callHelperStatement('setBaseClass(#, #)', [
-        isMixinAliasClass(c) ? className : js.call('#.__proto__', className),
+        getBaseClass(isMixinAliasClass(c) ? 0 : mixins.length),
         emitDeferredType(supertype),
       ]));
       supertype = supertype.classNode.rawType;
     }
     var baseClass = emitClassRef(supertype);
 
-    // TODO(jmesserly): conceptually we could use isMixinApplication, however,
-    // avoiding the extra level of nesting is only required if the class itself
-    // is a valid mixin.
     if (isMixinAliasClass(c)) {
       // Given `class C = Object with M [implements I1, I2 ...];`
       // The resulting class C should work as a mixin.
+      //
+      // TODO(jmesserly): is there any way to merge this with the other mixin
+      // code paths, or will these always need special handling?
       body.add(_emitClassStatement(c, className, baseClass, []));
 
       var m = c.mixedInType.asInterfaceType;
       bool deferMixin = shouldDefer(m);
       var mixinBody = deferMixin ? deferredSupertypes : body;
       var mixinClass = deferMixin ? emitDeferredType(m) : emitClassRef(m);
+      var classExpr = deferMixin ? getBaseClass(0) : className;
 
       mixinBody.add(
-          _callHelperStatement('mixinMembers(#, #)', [className, mixinClass]));
+          _callHelperStatement('mixinMembers(#, #)', [classExpr, mixinClass]));
 
       _classEmittingTopLevel = savedTopLevelClass;
 
@@ -717,7 +742,7 @@
         //
         //     mixinMembers(C, class C$ extends M { <methods>  });
         mixinBody.add(_callHelperStatement('mixinMembers(#, #)', [
-          className,
+          classExpr,
           new JS.ClassExpression(
               new JS.TemporaryId(getLocalClassName(c)), mixinClass, methods)
         ]));
@@ -727,22 +752,30 @@
       return;
     }
 
-    if (c.isMixinApplication) {
-      var m = c.mixedInType.asInterfaceType;
-
-      var mixinId = new JS.TemporaryId(getLocalClassName(c.superclass) +
-          '_' +
-          getLocalClassName(c.mixedInClass));
-      body.add(new JS.ClassExpression(mixinId, baseClass, []).toStatement());
-      // Add constructors
+    // TODO(jmesserly): we need to unroll kernel mixins because the synthetic
+    // classes lack required synthetic members, such as constructors.
+    //
+    // Also, we need to generate one extra level of nesting for alias classes.
+    for (int i = 0; i < mixins.length; i++) {
+      var m = mixins[i];
+      var mixinName =
+          getLocalClassName(superclass) + '_' + getLocalClassName(m.classNode);
+      var mixinId = new JS.TemporaryId(mixinName + '\$');
+      // Bind the mixin class to a name to workaround a V8 bug with es6 classes
+      // and anonymous function names.
+      // TODO(leafp:) Eliminate this once the bug is fixed:
+      // https://bugs.chromium.org/p/v8/issues/detail?id=7069
+      body.add(js.statement("const # = #", [
+        mixinId,
+        new JS.ClassExpression(new JS.TemporaryId(mixinName), baseClass, [])
+      ]));
 
       emitMixinConstructors(mixinId, m);
-      hasUnnamedSuper =
-          hasUnnamedSuper || _hasUnnamedConstructor(c.mixedInClass);
+      hasUnnamedSuper = hasUnnamedSuper || _hasUnnamedConstructor(m.classNode);
 
       if (shouldDefer(m)) {
-        deferredSupertypes.add(_callHelperStatement(
-            'mixinMembers(#.__proto__, #)', [className, emitDeferredType(m)]));
+        deferredSupertypes.add(_callHelperStatement('mixinMembers(#, #)',
+            [getBaseClass(mixins.length - i), emitDeferredType(m)]));
       } else {
         body.add(_callHelperStatement(
             'mixinMembers(#, #)', [mixinId, emitClassRef(m)]));
@@ -754,8 +787,6 @@
     _classEmittingTopLevel = savedTopLevelClass;
 
     body.add(_emitClassStatement(c, className, baseClass, methods));
-
-    if (c.isMixinApplication) emitMixinConstructors(className);
   }
 
   /// Defines all constructors for this class as ES5 constructors.
@@ -771,7 +802,7 @@
           [className, _callHelper('_runtimeType'), className]));
     }
 
-    if (c.isMixinApplication) {
+    if (c.isSyntheticMixinImplementation || isMixinAliasClass(c)) {
       // We already handled this when we defined the class.
       return body;
     }
@@ -1058,10 +1089,8 @@
       body.add(js.statement('#[#.metadata] = #;', [
         className,
         _runtimeModule,
-        new JS.ArrowFun(
-            [],
-            _withLetScopeArrowFunction(() => new JS.ArrayInitializer(
-                new List.from(metadata.map(_instantiateAnnotation)))))
+        _arrowFunctionWithLetScope(() => new JS.ArrayInitializer(
+            metadata.map(_instantiateAnnotation).toList()))
       ]));
     }
   }
@@ -1104,12 +1133,10 @@
   void _emitClassSignature(
       Class c, JS.Expression className, List<JS.Statement> body) {
     if (c.implementedTypes.isNotEmpty) {
-      body.add(js.statement('#[#.implements] = () => #;', [
+      body.add(js.statement('#[#.implements] = () => [#];', [
         className,
         _runtimeModule,
-        new JS.ArrayInitializer(c.implementedTypes
-            .map((i) => _emitType(i.asInterfaceType))
-            .toList())
+        c.implementedTypes.map((i) => _emitType(i.asInterfaceType))
       ]));
     }
 
@@ -1254,11 +1281,6 @@
   }
 
   FunctionType _getMemberRuntimeType(Member member) {
-    // Check whether we have any covariant parameters.
-    // Usually we don't, so we can use the same type.
-    isCovariant(VariableDeclaration p) =>
-        p.isCovariant || p.isGenericCovariantImpl;
-
     var f = member.function;
     if (f == null) {
       assert(member is Field);
@@ -1323,21 +1345,18 @@
     // These are expanded into each non-redirecting constructor.
     // In the future we may want to create an initializer function if we have
     // multiple constructors, but it needs to be balanced against readability.
-    _addStatementToList(_initializeFields(fields, node), body);
-
-    var superCall = node.initializers.firstWhere((i) => i is SuperInitializer,
-        orElse: () => null) as SuperInitializer;
+    body.add(_initializeFields(fields, node));
 
     // If no superinitializer is provided, an implicit superinitializer of the
     // form `super()` is added at the end of the initializer list, unless the
     // enclosing class is class Object.
+    var superCall = node.initializers.firstWhere((i) => i is SuperInitializer,
+        orElse: () => null) as SuperInitializer;
     var jsSuper = _emitSuperConstructorCallIfNeeded(cls, className, superCall);
-    if (jsSuper != null) {
-      _addStatementToList(jsSuper..sourceInformation = superCall, body);
-    }
+    if (jsSuper != null) body.add(jsSuper..sourceInformation = superCall);
 
     var jsBody = _visitStatement(node.function.body);
-    if (jsBody != null) _addStatementToList(jsBody, body);
+    if (jsBody != null) body.add(jsBody);
     return body;
   }
 
@@ -1642,13 +1661,38 @@
   }
 
   List<JS.Method> _emitCovarianceCheckStub(Procedure member) {
+    // TODO(jmesserly): kernel stubs have a few problems:
+    // - they're generated even when there is no concrete super member
+    // - the stub parameter types don't match the types we need to check to
+    //   ensure soundness of the super member, so we must lookup the super
+    //   member and determine checks ourselves.
+    // - it generates getter stubs, but these are not used
+    if (member.isGetter) return [];
+
+    var enclosingClass = member.enclosingClass;
+    var superMember = (member.forwardingStubSuperTarget ??
+            member.forwardingStubInterfaceTarget)
+        ?.asMember;
+
+    if (superMember == null) return [];
+
+    var superSubstition = Substitution.fromSupertype(hierarchy
+        .getClassAsInstanceOf(enclosingClass, superMember.enclosingClass));
+
     var name = _declareMemberName(member);
     if (member.isSetter) {
+      if (superMember is Field && superMember.isGenericCovariantImpl ||
+          superMember is Procedure &&
+              isCovariant(superMember.function.positionalParameters[0])) {
+        return [];
+      }
       return [
         new JS.Method(
             name,
-            js.call('function(x) { return super.#(#._check(x)); }',
-                [name, _emitType(member.setterType)]),
+            js.call('function(x) { return super.# = #._check(x); }', [
+              name,
+              _emitType(superSubstition.substituteType(superMember.setterType))
+            ]),
             isSetter: true),
         new JS.Method(name, js.call('function() { return super.#; }', [name]),
             isGetter: true)
@@ -1656,10 +1700,12 @@
     }
     assert(!member.isAccessor);
 
+    var superMethodType = superSubstition
+        .substituteType(superMember.function.functionType) as FunctionType;
     var function = member.function;
 
     var body = <JS.Statement>[];
-    var typeParameters = function.typeParameters;
+    var typeParameters = superMethodType.typeParameters;
     _emitCovarianceBoundsCheck(typeParameters, body);
 
     var typeFormals = _emitTypeFormals(typeParameters);
@@ -1670,24 +1716,33 @@
       var jsParam = new JS.Identifier(param.name);
       jsParams.add(jsParam);
 
-      if (i >= function.requiredParameterCount) {
-        body.add(js.statement('if (# !== void 0) #._check(#);',
-            [jsParam, _emitType(param.type), jsParam]));
-      } else {
-        body.add(
-            js.statement('#._check(#);', [_emitType(param.type), jsParam]));
+      if (isCovariant(param) &&
+          !isCovariant(superMember.function.positionalParameters[i])) {
+        var check = js.call('#._check(#)',
+            [_emitType(superMethodType.positionalParameters[i]), jsParam]);
+        if (i >= function.requiredParameterCount) {
+          body.add(js.statement('if (# !== void 0) #;', [jsParam, check]));
+        } else {
+          body.add(check.toStatement());
+        }
       }
     }
     var namedParameters = function.namedParameters;
     for (var param in namedParameters) {
-      var name = _propertyName(param.name);
-      body.add(js.statement('if (# in #) #._check(#.#);', [
-        name,
-        namedArgumentTemp,
-        _emitType(param.type),
-        namedArgumentTemp,
-        name
-      ]));
+      if (isCovariant(param) &&
+          !isCovariant(superMember.function.namedParameters
+              .firstWhere((n) => n.name == param.name))) {
+        var name = _propertyName(param.name);
+        var paramType = superMethodType.namedParameters
+            .firstWhere((n) => n.name == param.name);
+        body.add(js.statement('if (# in #) #._check(#.#);', [
+          name,
+          namedArgumentTemp,
+          _emitType(paramType.type),
+          namedArgumentTemp,
+          name
+        ]));
+      }
     }
 
     if (namedParameters.isNotEmpty) jsParams.add(namedArgumentTemp);
@@ -2102,7 +2157,7 @@
     return body;
   }
 
-  JS.Node _withLetScopeArrowFunction(JS.Expression visitBody()) {
+  JS.ArrowFun _arrowFunctionWithLetScope(JS.Expression visitBody()) {
     var savedLetVariables = _letVariables;
     _letVariables = [];
 
@@ -2110,7 +2165,8 @@
     var letVars = _initLetVariables();
 
     _letVariables = savedLetVariables;
-    return letVars == null ? expr : new JS.Block([letVars, expr.toReturn()]);
+    return new JS.ArrowFun(
+        [], letVars == null ? expr : new JS.Block([letVars, expr.toReturn()]));
   }
 
   JS.PropertyAccess _emitTopLevelName(NamedNode n, {String suffix: ''}) {
@@ -2552,10 +2608,9 @@
 
       addTypeFormalsAsParameters(List<JS.Expression> elements) {
         var names = _typeTable.discharge(typeFormals);
-        var array = new JS.ArrayInitializer(elements);
         return names.isEmpty
-            ? js.call('(#) => #', [tf, array])
-            : js.call('(#) => {#; return #;}', [tf, names, array]);
+            ? js.call('(#) => [#]', [tf, elements])
+            : js.call('(#) => {#; return [#];}', [tf, names, elements]);
       }
 
       typeParts = [addTypeFormalsAsParameters(typeParts)];
@@ -2822,7 +2877,7 @@
     var block = _withCurrentFunction(f, () {
       var block = _emitArgumentInitializers(f);
       var jsBody = _visitStatement(f.body);
-      if (jsBody != null) _addStatementToList(jsBody, block);
+      if (jsBody != null) block.add(jsBody);
       return block;
     });
 
@@ -2873,7 +2928,7 @@
     _emitCovarianceBoundsCheck(f.typeParameters, body);
 
     initParameter(VariableDeclaration p, JS.Identifier jsParam) {
-      if (p.isCovariant || p.isGenericCovariantImpl) {
+      if (isCovariant(p)) {
         var castType = _emitType(p.type);
         body.add(js.statement('#._check(#);', [castType, jsParam]));
       }
@@ -3711,10 +3766,10 @@
     if (name == 'call') {
       if (isCallingDynamicField || isDynamicOrFunction(receiverType)) {
         if (typeArgs.isNotEmpty) {
-          return _callHelper('dgcall(#, #, #)', [
+          return _callHelper('dgcall(#, [#], #)', [
             jsReceiver,
-            new JS.ArrayInitializer(args.take(typeArgs.length).toList()),
-            args.skip(typeArgs.length).toList()
+            args.take(typeArgs.length),
+            args.skip(typeArgs.length)
           ]);
         } else {
           return _callHelper('dcall(#, #)', [jsReceiver, args]);
@@ -3729,12 +3784,12 @@
     var jsName = _emitMemberName(name, type: receiverType, member: target);
     if (target == null || isCallingDynamicField) {
       if (typeArgs.isNotEmpty) {
-        return _callHelper('#(#, #, #, #)', [
+        return _callHelper('#(#, [#], #, #)', [
           _emitDynamicOperationName('dgsend'),
           jsReceiver,
-          new JS.ArrayInitializer(args.take(typeArgs.length).toList()),
+          args.take(typeArgs.length),
           jsName,
-          args.skip(typeArgs.length).toList()
+          args.skip(typeArgs.length)
         ]);
       } else {
         return _callHelper('#(#, #, #)',
@@ -4676,8 +4731,7 @@
       DartType elementType, List<JS.Expression> elements) {
     // dart.constList helper internally depends on _interceptors.JSArray.
     _declareBeforeUse(_jsArrayClass);
-    return _callHelper('constList(#, #)',
-        [new JS.ArrayInitializer(elements), _emitType(elementType)]);
+    return _callHelper('constList([#], #)', [elements, _emitType(elementType)]);
   }
 
   JS.Expression _emitList(DartType itemType, List<JS.Expression> items) {
@@ -4937,13 +4991,3 @@
 
 bool _isObjectMethod(String name) =>
     name == 'toString' || name == 'noSuchMethod';
-
-void _addStatementToList(JS.Statement statement, List<JS.Statement> list) {
-  // If the statement is a nested block, flatten it into the list when
-  // possible.  If the statement is empty, discard it.
-  if (statement is JS.Block && (list.isEmpty || !statement.isScope)) {
-    list.addAll(statement.statements);
-  } else if (statement is! JS.EmptyStatement) {
-    list.add(statement);
-  }
-}
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 434170f..2571702 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -259,3 +259,8 @@
     e is Procedure &&
     e.name.name == 'JS' &&
     e.enclosingLibrary.importUri.toString() == 'dart:_foreign_helper';
+
+// Check whether we have any covariant parameters.
+// Usually we don't, so we can use the same type.
+bool isCovariant(VariableDeclaration p) =>
+    p.isCovariant || p.isGenericCovariantImpl;
diff --git a/pkg/dev_compiler/tool/ddc b/pkg/dev_compiler/tool/ddc
index 9fc08d7..cc8f410 100755
--- a/pkg/dev_compiler/tool/ddc
+++ b/pkg/dev_compiler/tool/ddc
@@ -8,7 +8,51 @@
 # inspection, modification or rerunning the code.
 set -e
 
-DDC_PATH=$( cd $( dirname "${BASH_SOURCE[0]}" )/.. && pwd )
+function follow_links() {
+  file="$1"
+  while [ -h "$file" ]; do
+    file="$(readlink "$file")"
+  done
+  echo "$file"
+}
+PROG_NAME="$(follow_links "$BASH_SOURCE")"
+SDK_DIR="$( cd "${PROG_NAME%/*}/../../.."; pwd -P)"
+
+if [[ `uname` == 'Darwin' ]];
+then
+  OUT_DIR="$SDK_DIR"/xcodebuild
+else
+  OUT_DIR="$SDK_DIR"/out
+fi
+
+if [ -z "$DART_CONFIGURATION" ];
+then
+  DIRS=$( ls "$OUT_DIR" )
+  # list of possible configurations in decreasing desirability
+  CONFIGS=("ReleaseX64" "ReleaseIA32" "DebugX64" "DebugIA32"
+    "ReleaseARM"    "ReleaseARM64"    "ReleaseARMV5TE"
+    "DebugARM"      "DebugARM64"      "DebugARMV5TE")
+  DART_CONFIGURATION="None"
+  for CONFIG in ${CONFIGS[*]}
+  do
+    for DIR in $DIRS;
+    do
+      if [ "$CONFIG" = "$DIR" ];
+      then
+        # choose most desirable configuration that is available and break
+        DART_CONFIGURATION="$DIR"
+        break 2
+      fi
+    done
+  done
+  if [ "$DART_CONFIGURATION" = "None" ]
+  then
+    echo "No valid dart configuration found in $OUT_DIR"
+    exit 1
+  fi
+fi
+
+GEN_DIR="$OUT_DIR"/"$DART_CONFIGURATION"/gen/utils/dartdevc
 
 KERNEL=false
 if [ "$1" = "-k" ]; then
@@ -19,21 +63,31 @@
 BASENAME=$( basename "${1%.*}")
 LIBROOT=$(cd $( dirname "${1%.*}") && pwd)
 
-# TODO(vsm): Change this to use the regular built version of the summaries
-# and the SDK.
-export NODE_PATH=$DDC_PATH/gen/sdk/common:$LIBROOT:$NODE_PATH
-
-# Build the SDK in a place where we can find it if it's not already there.
-if [ ! -e $DDC_PATH/gen/sdk/ddc_sdk.sum ]; then
-  $DDC_PATH/tool/build_sdk.sh
-fi
+export NODE_PATH=$GEN_DIR/js/common:$LIBROOT:$NODE_PATH
 
 if [ "$KERNEL" = true ]; then
-  dart -c $DDC_PATH/bin/dartdevk.dart --modules=node \
+
+  if [ ! -e $GEN_DIR/kernel/ddc_sdk.dill ]; then
+    echo "DDC SDK must be built first, please run:"
+    echo "    pushd $SDKDIR"
+    echo "    ./tools/build.py -m release dartdevc_sdk_kernel_summary"
+    exit 1
+  fi
+
+  dart -c $SDK_DIR/pkg/dev_compiler/bin/dartdevk.dart --modules=node \
+      --dart-sdk-summary=$GEN_DIR/kernel/ddc_sdk.dill \
       -o $LIBROOT/$BASENAME.js $*
 else
-  dart -c $DDC_PATH/bin/dartdevc.dart --modules=node --library-root=$LIBROOT \
-      --dart-sdk-summary=$DDC_PATH/gen/sdk/ddc_sdk.sum \
+
+  if [ ! -e $GEN_DIR/ddc_sdk.sum ]; then
+    echo "DDC SDK must be built first, please run:"
+    echo "    pushd $SDKDIR"
+    echo "    ./tools/build.py -m release dartdevc_sdk"
+    exit 1
+  fi
+
+  dart -c $SDK_DIR/pkg/dev_compiler/bin/dartdevc.dart --modules=node \
+      --library-root=$LIBROOT --dart-sdk-summary=$GEN_DIR/ddc_sdk.sum \
       -o $LIBROOT/$BASENAME.js $*
 fi
 
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart
index 8d4e002..853bed9 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/io_patch.dart
@@ -527,7 +527,7 @@
 @patch
 class _StdIOUtils {
   @patch
-  static Stdin _getStdioInputStream() {
+  static Stdin _getStdioInputStream(int fd) {
     throw new UnsupportedError("StdIOUtils._getStdioInputStream");
   }
 
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
index 2955ef8..43fc543 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart
@@ -107,7 +107,7 @@
             value[$_originalDeclaration] = makeGenericType;
           }
           map.set(arg, value);
-          if ($setBaseClass) $setBaseClass(value);
+          if ($setBaseClass != null) $setBaseClass.apply(null, args);
         } else {
           value = new Map();
           map.set(arg, value);
@@ -224,24 +224,26 @@
   return sigCtor[$name];
 })()''');
 
-setMethodSignature(f, sigF) => defineLazyGetter(f, _methodSig, sigF);
-setFieldSignature(f, sigF) => defineLazyGetter(f, _fieldSig, sigF);
-setGetterSignature(f, sigF) => defineLazyGetter(f, _getterSig, sigF);
-setSetterSignature(f, sigF) => defineLazyGetter(f, _setterSig, sigF);
+void setMethodSignature(f, sigF) => defineLazyGetter(f, _methodSig, sigF);
+void setFieldSignature(f, sigF) => defineLazyGetter(f, _fieldSig, sigF);
+void setGetterSignature(f, sigF) => defineLazyGetter(f, _getterSig, sigF);
+void setSetterSignature(f, sigF) => defineLazyGetter(f, _setterSig, sigF);
 
 // Set up the constructor signature field on the constructor
-setConstructorSignature(f, sigF) => defineLazyGetter(f, _constructorSig, sigF);
+void setConstructorSignature(f, sigF) =>
+    defineLazyGetter(f, _constructorSig, sigF);
 
 // Set up the static signature field on the constructor
-setStaticMethodSignature(f, sigF) =>
+void setStaticMethodSignature(f, sigF) =>
     defineLazyGetter(f, _staticMethodSig, sigF);
 
-setStaticFieldSignature(f, sigF) => defineLazyGetter(f, _staticFieldSig, sigF);
+void setStaticFieldSignature(f, sigF) =>
+    defineLazyGetter(f, _staticFieldSig, sigF);
 
-setStaticGetterSignature(f, sigF) =>
+void setStaticGetterSignature(f, sigF) =>
     defineLazyGetter(f, _staticGetterSig, sigF);
 
-setStaticSetterSignature(f, sigF) =>
+void setStaticSetterSignature(f, sigF) =>
     defineLazyGetter(f, _staticSetterSig, sigF);
 
 bool _hasSigEntry(type, kind, name) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
index 9ecddbe..edf399b 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/operations.dart
@@ -297,19 +297,13 @@
     if ($typeArgs == null) {
       $typeArgs = $ftype.instantiateDefaultBounds();
     } else if ($typeArgs.length != formalCount) {
-      // TODO(jmesserly): is this the right error?
-      $throwTypeError(
-          'incorrect number of arguments to generic function ' +
-          $typeName($ftype) + ', got <' + $typeArgs + '> expected ' +
-          formalCount + '.');
+      return callNSM();
     } else {
       $ftype.checkBounds($typeArgs);
     }
     $ftype = $ftype.instantiate($typeArgs);
   } else if ($typeArgs != null) {
-    $throwTypeError(
-        'got type arguments to non-generic function ' + $typeName($ftype) +
-        ', got <' + $typeArgs + '> expected none.');
+    return callNSM();
   }
 
   if ($_checkApply($ftype, $args)) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
index 7e04491..8274bdd 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types.dart
@@ -82,6 +82,8 @@
   check_T(object) => object;
 }
 
+bool _isJsObject(obj) => JS('bool', '# === #', getReifiedType(obj), jsobject);
+
 class LazyJSType extends TypeRep {
   final Function() _rawJSType;
   final String _dartName;
@@ -90,29 +92,36 @@
 
   toString() => typeName(_rawJSType());
 
-  rawJSTypeForCheck() {
+  _raw() {
     var raw = _rawJSType();
+    if (raw == null) {
+      _warn('Cannot find native JavaScript type ($_dartName) for type check');
+    }
+    return raw;
+  }
+
+  rawJSTypeForCheck() {
+    var raw = _raw();
     if (raw != null) return raw;
-    _warn('Cannot find native JavaScript type ($_dartName) for type check');
-    return JS('', '#.Object', global_);
+    // Treat as anonymous: return true for any JS object.
+    return jsobject;
+  }
+
+  bool isRawType(obj) {
+    var raw = _raw();
+    if (raw != null) return JS('bool', '# instanceof #', obj, raw);
+    // Treat as anonymous: return true for any JS object.
+    return _isJsObject(obj);
   }
 
   @JSExportName('is')
-  bool is_T(obj) {
-    return JS('bool', '# instanceof #', obj, rawJSTypeForCheck());
-  }
+  bool is_T(obj) => isRawType(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
-  as_T(obj) =>
-      JS('bool', '# instanceof #', obj, rawJSTypeForCheck()) || obj == null
-          ? obj
-          : castError(obj, this, false);
+  as_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, false);
 
   @JSExportName('_check')
-  check_T(obj) =>
-      JS('bool', '# instanceof #', obj, rawJSTypeForCheck()) || obj == null
-          ? obj
-          : castError(obj, this, true);
+  check_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, true);
 }
 
 /// An anonymous JS type
@@ -124,20 +133,13 @@
   toString() => _dartName;
 
   @JSExportName('is')
-  bool is_T(obj) => JS('bool', '# === # || #', getReifiedType(obj), jsobject,
-      instanceOf(obj, this));
+  bool is_T(obj) => _isJsObject(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
-  as_T(obj) =>
-      JS('bool', '# == null || # === #', obj, getReifiedType(obj), jsobject)
-          ? obj
-          : cast(obj, this, false);
+  as_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this, false);
 
   @JSExportName('_check')
-  check_T(obj) =>
-      JS('bool', '# == null || # === #', obj, getReifiedType(obj), jsobject)
-          ? obj
-          : cast(obj, this, true);
+  check_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this, true);
 }
 
 void _warn(arg) {
@@ -578,9 +580,9 @@
     for (int i = 0, n = typeFormals.length; i < n; i++) {
       if (i != 0) s += ", ";
       s += JS<String>('!', '#[#].name', typeFormals, i);
-      var typeBound = typeBounds[i];
-      if (!identical(typeBound, _dynamic)) {
-        s += " extends $typeBound";
+      var bound = typeBounds[i];
+      if (JS('bool', '# !== # && # !== #', bound, dynamic, bound, Object)) {
+        s += " extends $bound";
       }
     }
     s += ">" + instantiate(typeFormals).toString();
@@ -963,9 +965,6 @@
     // All JS types are subtypes of anonymous JS types.
     return $t1 === $jsobject;
   }
-  if ($t2 instanceof $LazyJSType) {
-    return $_isSubtype($t1, $t2.rawJSTypeForCheck(), isCovariant);
-  }
 
   // Function subtyping.
 
@@ -1036,6 +1035,12 @@
   // I.e., given T1, ..., Tn where at least one Ti != dynamic we disallow:
   // - S !<: S<T1, ..., Tn>
   // - S<dynamic, ..., dynamic> !<: S<T1, ..., Tn>
+  
+  // If we have lazy JS types, unwrap them.  This will effectively
+  // reduce to a prototype check below.
+  if ($t1 instanceof $LazyJSType) $t1 = $t1.rawJSTypeForCheck();
+  if ($t2 instanceof $LazyJSType) $t2 = $t2.rawJSTypeForCheck();
+
   if ($t1 == $t2) return true;
 
   if ($t1 == $Object) return false;
diff --git a/pkg/expect/lib/expect.dart b/pkg/expect/lib/expect.dart
index c04b1ce..c8e0013 100644
--- a/pkg/expect/lib/expect.dart
+++ b/pkg/expect/lib/expect.dart
@@ -290,7 +290,7 @@
   static void mapEquals(Map expected, Map actual, [String reason = null]) {
     String msg = _getMessage(reason);
 
-    // Make sure all of the values are present in both and match.
+    // Make sure all of the values are present in both, and they match.
     for (final key in expected.keys) {
       if (!actual.containsKey(key)) {
         _fail('Expect.mapEquals(missing expected key: <$key>$msg) fails');
@@ -484,8 +484,12 @@
    * the type of the exception you could write this:
    *
    *     Expect.throws(myThrowingFunction, (e) => e is MyException);
+   *
+   * If `f` fails an expectation (i.e., throws an [ExpectException]), that
+   * exception is not caught by [Expect.throws]. The test is still considered
+   * failing.
    */
-  static void throws(void f(), [_CheckExceptionFn check, String reason]) {
+  static void throws(void f(), [bool check(Object error), String reason]) {
     String msg = reason == null ? "" : "($reason)";
     if (f is! _Nullary) {
       // Only throws from executing the function body should count as throwing.
@@ -495,10 +499,10 @@
     try {
       f();
     } catch (e, s) {
-      if (check != null) {
-        if (!check(e)) {
-          _fail("Expect.throws$msg: Unexpected '$e'\n$s");
-        }
+      // A test failure doesn't count as throwing.
+      if (e is ExpectException) rethrow;
+      if (check != null && !check(e)) {
+        _fail("Expect.throws$msg: Unexpected '$e'\n$s");
       }
       return;
     }
@@ -566,7 +570,6 @@
 /// Used in [Expect] because [Expect.identical] shadows the real [identical].
 bool _identical(a, b) => identical(a, b);
 
-typedef bool _CheckExceptionFn(exception);
 typedef _Nullary(); // Expect.throws argument must be this type.
 
 class ExpectException implements Exception {
@@ -617,12 +620,9 @@
 
 /// Is true iff `assert` statements are enabled.
 final bool assertStatementsEnabled = (() {
-  try {
-    assert(false);
-  } on AssertionError {
-    return true;
-  }
-  return false;
+  bool result = false;
+  assert(result = true);
+  return result;
 })();
 
 /// Is true iff checked mode is enabled.
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 c90fb50..72eb2b1 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -419,6 +419,40 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(DartType _type)>
+    templateCantUseSuperBoundedTypeForInstanceCreation =
+    const Template<Message Function(DartType _type)>(
+        messageTemplate:
+            r"""Can't use a super-bounded type for instance creation. Got '#type'.""",
+        tipTemplate:
+            r"""Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.""",
+        withArguments:
+            _withArgumentsCantUseSuperBoundedTypeForInstanceCreation);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(DartType _type)>
+    codeCantUseSuperBoundedTypeForInstanceCreation =
+    const Code<Message Function(DartType _type)>(
+        "CantUseSuperBoundedTypeForInstanceCreation",
+        templateCantUseSuperBoundedTypeForInstanceCreation,
+        severity: Severity.error);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsCantUseSuperBoundedTypeForInstanceCreation(
+    DartType _type) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  return new Message(codeCantUseSuperBoundedTypeForInstanceCreation,
+      message:
+          """Can't use a super-bounded type for instance creation. Got '$type'.""",
+      tip: """Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference.""",
+      arguments: {'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeCatchSyntax = messageCatchSyntax;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/fasta/import.dart b/pkg/front_end/lib/src/fasta/import.dart
index 09ababc..f2c9ecc 100644
--- a/pkg/front_end/lib/src/fasta/import.dart
+++ b/pkg/front_end/lib/src/fasta/import.dart
@@ -37,6 +37,10 @@
 
   final int prefixCharOffset;
 
+  // The LibraryBuilder for the imported library ('imported') may be null when
+  // this field is set.
+  final Uri nativeImportUri;
+
   Import(
       this.importer,
       this.imported,
@@ -45,13 +49,15 @@
       this.combinators,
       this.configurations,
       this.charOffset,
-      this.prefixCharOffset)
+      this.prefixCharOffset,
+      {this.nativeImportUri})
       : prefixBuilder = createPrefixBuilder(prefix, importer, imported,
             combinators, deferred, charOffset, prefixCharOffset);
 
   Uri get fileUri => importer.fileUri;
 
   void finalizeImports(LibraryBuilder importer) {
+    if (nativeImportUri != null) return;
     AddToScope add;
     if (prefixBuilder == null) {
       add = (String name, Builder member) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index f9556b0..7a6968a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1736,13 +1736,9 @@
         typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
       }
     }
-    bool isConst = constKeyword != null;
-    if (constantExpressionRequired && !isConst) {
-      deprecated_addCompileTimeError(
-          offsetForToken(beginToken), "Not a constant expression.");
-    }
     push(new ShadowListLiteral(expressions,
-        typeArgument: typeArgument, isConst: isConst)
+        typeArgument: typeArgument,
+        isConst: constKeyword != null || constantExpressionRequired)
       ..fileOffset = offsetForToken(constKeyword ?? beginToken));
   }
 
@@ -1788,14 +1784,10 @@
       }
     }
 
-    bool isConst = constKeyword != null;
-
-    if (constantExpressionRequired && !isConst) {
-      deprecated_addCompileTimeError(
-          offsetForToken(beginToken), "Not a constant expression.");
-    }
     push(new ShadowMapLiteral(entries,
-        keyType: keyType, valueType: valueType, isConst: isConst)
+        keyType: keyType,
+        valueType: valueType,
+        isConst: constKeyword != null || constantExpressionRequired)
       ..fileOffset = constKeyword?.charOffset ?? offsetForToken(beginToken));
   }
 
@@ -1960,11 +1952,11 @@
   }
 
   @override
-  void beginConditionalExpression() {
+  void beginConditionalExpression(Token question) {
     Expression condition = popForValue();
     typePromoter.enterThen(condition);
     push(condition);
-    super.beginConditionalExpression();
+    super.beginConditionalExpression(question);
   }
 
   @override
@@ -2341,8 +2333,15 @@
         identifier = null;
       } else if (prefix is TypeDeclarationAccessor) {
         type = prefix;
+      } else if (prefix is FastaAccessor) {
+        String name = suffix == null
+            ? "${prefix.plainNameForRead}.${identifier.name}"
+            : "${prefix.plainNameForRead}.${identifier.name}.$suffix";
+        type = new UnresolvedAccessor(
+            this, new Name(name, library.library), prefix.token);
       } else {
-        type = new Identifier(start);
+        unhandled("${prefix.runtimeType}", "pushQualifiedReference",
+            start.charOffset, uri);
       }
     }
     String name;
@@ -2493,99 +2492,117 @@
     }
 
     bool savedConstantExpressionRequired = pop();
-    () {
-      if (arguments == null) {
-        push(deprecated_buildCompileTimeError(
-            "No arguments.", nameToken.charOffset));
-        return;
-      }
-
-      if (typeArguments != null) {
-        assert(arguments.types.isEmpty);
-        ShadowArguments.setExplicitArgumentTypes(arguments, typeArguments);
-      }
-
-      String errorName;
-      if (type is ClassBuilder) {
-        if (type is EnumBuilder) {
-          push(deprecated_buildCompileTimeError(
-              "An enum class can't be instantiated.", nameToken.charOffset));
-          return;
-        }
-        Builder b =
-            type.findConstructorOrFactory(name, token.charOffset, uri, library);
-        Member target;
-        Member initialTarget;
-        if (b == null) {
-          // Not found. Reported below.
-        } else if (b.isConstructor) {
-          initialTarget = b.target;
-          if (type.isAbstract) {
-            push(new ShadowSyntheticExpression(evaluateArgumentsBefore(
-                arguments,
-                buildAbstractClassInstantiationError(
-                    fasta.templateAbstractClassInstantiation
-                        .withArguments(type.name),
-                    type.name,
-                    nameToken.charOffset))));
-            return;
-          } else {
-            target = initialTarget;
-          }
-        } else if (b.isFactory) {
-          initialTarget = b.target;
-          target = getRedirectionTarget(initialTarget);
-          if (target == null) {
-            push(deprecated_buildCompileTimeError(
-                "Cyclic definition of factory '${name}'.",
-                nameToken.charOffset));
-            return;
-          }
-          if (target is Constructor && target.enclosingClass.isAbstract) {
-            push(new ShadowSyntheticExpression(evaluateArgumentsBefore(
-                arguments,
-                buildAbstractClassInstantiationError(
-                    fasta.templateAbstractRedirectedClassInstantiation
-                        .withArguments(target.enclosingClass.name),
-                    target.enclosingClass.name,
-                    nameToken.charOffset))));
-            return;
-          }
-          RedirectingFactoryBody body = getRedirectingFactoryBody(target);
-          if (body != null) {
-            // If the redirection target is itself a redirecting factory, it
-            // means that it is unresolved. So we set target to null so we
-            // can generate a no-such-method error below.
-            assert(body.isUnresolved);
-            target = null;
-            errorName = body.unresolvedName;
-          }
-        }
-        if (target is Constructor ||
-            (target is Procedure && target.kind == ProcedureKind.Factory)) {
-          push(buildStaticInvocation(target, arguments,
-              isConst: optional("const", token) || optional("@", token),
-              charOffset: nameToken.charOffset,
-              prefixName: prefixName,
-              initialTarget: initialTarget));
-          return;
-        } else {
-          errorName ??= debugName(type.name, name);
-        }
-      } else {
-        errorName = debugName(getNodeName(type), name);
-      }
-      errorName ??= name;
+    if (type is TypeDeclarationBuilder) {
+      push(buildConstructorInvocation(
+          type,
+          nameToken,
+          arguments,
+          name,
+          typeArguments,
+          token.charOffset,
+          optional("const", token) || optional("@", token),
+          prefixName: prefixName));
+    } else if (type is UnresolvedAccessor) {
+      push(type.buildError(arguments));
+    } else {
       push(throwNoSuchMethodError(
           new NullLiteral()..fileOffset = token.charOffset,
-          errorName,
+          debugName(getNodeName(type), name),
           arguments,
           nameToken.charOffset));
-    }();
+    }
     constantExpressionRequired = savedConstantExpressionRequired;
   }
 
   @override
+  Expression buildConstructorInvocation(
+      TypeDeclarationBuilder type,
+      Token nameToken,
+      Arguments arguments,
+      String name,
+      List<DartType> typeArguments,
+      int charOffset,
+      bool isConst,
+      {String prefixName}) {
+    if (arguments == null) {
+      return deprecated_buildCompileTimeError(
+          "No arguments.", nameToken.charOffset);
+    }
+
+    if (typeArguments != null) {
+      assert(arguments.types.isEmpty);
+      ShadowArguments.setExplicitArgumentTypes(arguments, typeArguments);
+    }
+
+    String errorName;
+    if (type is ClassBuilder) {
+      if (type is EnumBuilder) {
+        return deprecated_buildCompileTimeError(
+            "An enum class can't be instantiated.", nameToken.charOffset);
+      }
+      Builder b = type.findConstructorOrFactory(name, charOffset, uri, library);
+      Member target;
+      Member initialTarget;
+      if (b == null) {
+        // Not found. Reported below.
+      } else if (b.isConstructor) {
+        initialTarget = b.target;
+        if (type.isAbstract) {
+          return new ShadowSyntheticExpression(evaluateArgumentsBefore(
+              arguments,
+              buildAbstractClassInstantiationError(
+                  fasta.templateAbstractClassInstantiation
+                      .withArguments(type.name),
+                  type.name,
+                  nameToken.charOffset)));
+        } else {
+          target = initialTarget;
+        }
+      } else if (b.isFactory) {
+        initialTarget = b.target;
+        target = getRedirectionTarget(initialTarget);
+        if (target == null) {
+          return deprecated_buildCompileTimeError(
+              "Cyclic definition of factory '${name}'.", nameToken.charOffset);
+        }
+        if (target is Constructor && target.enclosingClass.isAbstract) {
+          return new ShadowSyntheticExpression(evaluateArgumentsBefore(
+              arguments,
+              buildAbstractClassInstantiationError(
+                  fasta.templateAbstractRedirectedClassInstantiation
+                      .withArguments(target.enclosingClass.name),
+                  target.enclosingClass.name,
+                  nameToken.charOffset)));
+        }
+        RedirectingFactoryBody body = getRedirectingFactoryBody(target);
+        if (body != null) {
+          // If the redirection target is itself a redirecting factory, it
+          // means that it is unresolved. So we set target to null so we
+          // can generate a no-such-method error below.
+          assert(body.isUnresolved);
+          target = null;
+          errorName = body.unresolvedName;
+        }
+      }
+      if (target is Constructor ||
+          (target is Procedure && target.kind == ProcedureKind.Factory)) {
+        return buildStaticInvocation(target, arguments,
+            isConst: isConst,
+            charOffset: nameToken.charOffset,
+            prefixName: prefixName,
+            initialTarget: initialTarget);
+      } else {
+        errorName ??= debugName(type.name, name);
+      }
+    } else {
+      errorName = debugName(getNodeName(type), name);
+    }
+    errorName ??= name;
+    return throwNoSuchMethodError(new NullLiteral()..fileOffset = charOffset,
+        errorName, arguments, nameToken.charOffset);
+  }
+
+  @override
   void endConstExpression(Token token) {
     debugEvent("endConstExpression");
     endNewExpression(token);
@@ -3641,7 +3658,7 @@
 
   @override
   Expression makeDeferredCheck(Expression expression, PrefixBuilder prefix) {
-    return new Let(
+    return new ShadowDeferredCheck(
         new VariableDeclaration.forValue(
             new CheckLibraryIsLoaded(prefix.dependency)),
         expression);
diff --git a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
index a5800d5..bebb020 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fasta_accessors.dart
@@ -153,6 +153,15 @@
       bool isSuper,
       Member interfaceTarget});
 
+  Expression buildConstructorInvocation(
+      TypeDeclarationBuilder type,
+      Token nameToken,
+      Arguments arguments,
+      String name,
+      List<DartType> typeArguments,
+      int charOffset,
+      bool isConst);
+
   DartType validatedTypeVariableUse(
       TypeParameterType type, int offset, bool nonInstanceAccessIsError);
 
@@ -1107,9 +1116,19 @@
 
       FastaAccessor accessor;
       if (builder == null) {
-        // If we find a setter, [builder] is an
-        // [AccessErrorBuilder], not null.
-        accessor = new UnresolvedAccessor(helper, name, send.token);
+        // If we find a setter, [builder] is an [AccessErrorBuilder], not null.
+        if (send is IncompletePropertyAccessor) {
+          accessor = new UnresolvedAccessor(helper, name, send.token);
+        } else {
+          return helper.buildConstructorInvocation(
+              declaration,
+              send.token,
+              arguments,
+              name.name,
+              null,
+              token.charOffset,
+              helper.constantExpressionRequired);
+        }
       } else {
         Builder setter;
         if (builder.isSetter) {
@@ -1231,6 +1250,12 @@
     }
     return type;
   }
+
+  @override
+  Expression doInvocation(int offset, Arguments arguments) {
+    return helper.buildConstructorInvocation(declaration, token, arguments, "",
+        null, token.charOffset, helper.constantExpressionRequired);
+  }
 }
 
 class UnresolvedAccessor extends FastaAccessor with ErrorAccessor {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index 22dcea1..5e3d25a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -810,6 +810,21 @@
     }
   }
 
+  void addNativeDependency(Uri nativeImportUri) {
+    Builder constructor = loader.getNativeAnnotation();
+    Arguments arguments =
+        new Arguments(<Expression>[new StringLiteral("$nativeImportUri")]);
+    Expression annotation;
+    if (constructor.isConstructor) {
+      annotation = new ConstructorInvocation(constructor.target, arguments)
+        ..isConst = true;
+    } else {
+      annotation = new StaticInvocation(constructor.target, arguments)
+        ..isConst = true;
+    }
+    library.addAnnotation(annotation);
+  }
+
   void addDependencies(Library library, Set<KernelLibraryBuilder> seen) {
     if (!seen.add(this)) {
       return;
@@ -826,6 +841,13 @@
                   exports[exportIndex].charOffset)) {
         // Add import
         Import import = imports[importIndex++];
+
+        // Rather than add a LibraryDependency, we attach an annotation.
+        if (import.nativeImportUri != null) {
+          addNativeDependency(import.nativeImportUri);
+          continue;
+        }
+
         if (import.deferred && import.prefixBuilder?.dependency != null) {
           library.addDependency(import.prefixBuilder.dependency);
         } else {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 74c1484..292034e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -22,6 +22,7 @@
 import 'dart:core' hide MapEntry;
 
 import 'package:front_end/src/base/instrumentation.dart';
+import 'package:front_end/src/fasta/fasta_codes.dart';
 import 'package:front_end/src/fasta/kernel/body_builder.dart';
 import 'package:front_end/src/fasta/kernel/fasta_accessors.dart';
 import 'package:front_end/src/fasta/source/source_class_builder.dart';
@@ -111,12 +112,10 @@
   ShadowAsExpression(Expression operand, DartType type) : super(operand, type);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.asExpressionEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.asExpressionEnter(this, typeContext);
     inferrer.inferExpression(operand, null, false);
-    var inferredType = typeNeeded ? type : null;
+    var inferredType = type;
     inferrer.listener.asExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -165,15 +164,12 @@
   ShadowAwaitExpression(Expression operand) : super(operand);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.awaitExpressionEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.awaitExpressionEnter(this, typeContext);
     if (!inferrer.typeSchemaEnvironment.isEmptyContext(typeContext)) {
       typeContext = inferrer.wrapFutureOrType(typeContext);
     }
-    var inferredType =
-        inferrer.inferExpression(operand, typeContext, typeNeeded);
+    var inferredType = inferrer.inferExpression(operand, typeContext, true);
     inferredType = inferrer.typeSchemaEnvironment.unfutureType(inferredType);
     inferrer.listener.awaitExpressionExit(this, inferredType);
     return inferredType;
@@ -199,11 +195,9 @@
   ShadowBoolLiteral(bool value) : super(value);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.boolLiteralEnter(this, typeContext) || typeNeeded;
-    var inferredType = typeNeeded ? inferrer.coreTypes.boolClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.boolLiteralEnter(this, typeContext);
+    var inferredType = inferrer.coreTypes.boolClass.rawType;
     inferrer.listener.boolLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -276,12 +270,10 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.cascadeExpressionEnter(this, typeContext) ||
-        typeNeeded;
-    var lhsType = inferrer.inferExpression(
-        variable.initializer, typeContext, typeNeeded || inferrer.strongMode);
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.cascadeExpressionEnter(this, typeContext);
+    var lhsType =
+        inferrer.inferExpression(variable.initializer, typeContext, true);
     if (inferrer.strongMode) {
       variable.type = lhsType;
     }
@@ -544,11 +536,8 @@
       : super(condition, then, otherwise, null);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.conditionalExpressionEnter(this, typeContext) ||
-            typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.conditionalExpressionEnter(this, typeContext);
     var expectedType = inferrer.coreTypes.boolClass.rawType;
     var conditionType =
         inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
@@ -565,7 +554,7 @@
     if (inferrer.strongMode) {
       staticType = type;
     }
-    var inferredType = typeNeeded ? type : null;
+    var inferredType = type;
     inferrer.listener.conditionalExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -586,19 +575,25 @@
       : super(target, arguments, isConst: isConst);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener
-            .constructorInvocationEnter(this, _prefixName, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener
+        .constructorInvocationEnter(this, _prefixName, typeContext);
     var inferredType = inferrer.inferInvocation(
         typeContext,
-        typeNeeded,
         fileOffset,
         _initialTarget.function.functionType,
         computeConstructorReturnType(_initialTarget),
         arguments,
         isConst: isConst);
+    if (inferrer.strongMode &&
+        !inferrer.isTopLevel &&
+        inferrer.typeSchemaEnvironment.isSuperBounded(inferredType)) {
+      inferrer.helper.deprecated_addCompileTimeError(
+          fileOffset,
+          templateCantUseSuperBoundedTypeForInstanceCreation
+              .withArguments(inferredType)
+              .message);
+    }
     inferrer.listener.constructorInvocationExit(this, inferredType);
     return inferredType;
   }
@@ -627,6 +622,22 @@
   }
 }
 
+/// Shadow object representing a deferred check in kernel form.
+class ShadowDeferredCheck extends Let implements ShadowExpression {
+  ShadowDeferredCheck(VariableDeclaration variable, Expression body)
+      : super(variable, body);
+
+  @override
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.deferredCheckEnter(this, typeContext);
+    // Since the variable is not used in the body we don't need to type infer
+    // it.  We can just type infer the body.
+    var inferredType = inferrer.inferExpression(body, typeContext, true);
+    inferrer.listener.deferredCheckExit(this, inferredType);
+    return inferredType;
+  }
+}
+
 /// Concrete shadow object representing a do loop in kernel form.
 class ShadowDoStatement extends DoStatement implements ShadowStatement {
   ShadowDoStatement(Statement body, Expression condition)
@@ -650,12 +661,9 @@
   ShadowDoubleLiteral(double value) : super(value);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.doubleLiteralEnter(this, typeContext) || typeNeeded;
-    var inferredType =
-        typeNeeded ? inferrer.coreTypes.doubleClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.doubleLiteralEnter(this, typeContext);
+    var inferredType = inferrer.coreTypes.doubleClass.rawType;
     inferrer.listener.doubleLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -666,8 +674,7 @@
 abstract class ShadowExpression implements Expression {
   /// Calls back to [inferrer] to perform type inference for whatever concrete
   /// type of [ShadowExpression] this is.
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded);
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext);
 }
 
 /// Concrete shadow object representing an expression statement in kernel form.
@@ -699,14 +706,11 @@
       : super(target, arguments, isConst: isConst);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener
-            .constructorInvocationEnter(this, _prefixName, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener
+        .constructorInvocationEnter(this, _prefixName, typeContext);
     var inferredType = inferrer.inferInvocation(
         typeContext,
-        typeNeeded,
         fileOffset,
         _initialTarget.function.functionType,
         computeConstructorReturnType(_initialTarget),
@@ -893,7 +897,6 @@
     inferrer.inferLocalFunction(
         function,
         null,
-        false,
         fileOffset,
         _hasImplicitReturnType
             ? (inferrer.strongMode ? null : const DynamicType())
@@ -914,12 +917,10 @@
   ShadowFunctionExpression(FunctionNode function) : super(function);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.functionExpressionEnter(this, typeContext) ||
-        typeNeeded;
-    var inferredType = inferrer.inferLocalFunction(
-        function, typeContext, typeNeeded, fileOffset, null);
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.functionExpressionEnter(this, typeContext);
+    var inferredType =
+        inferrer.inferLocalFunction(function, typeContext, fileOffset, null);
     inferrer.listener.functionExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -945,9 +946,8 @@
   Expression get _rhs => body.then;
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.ifNullEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.ifNullEnter(this, typeContext);
     // To infer `e0 ?? e1` in context K:
     // - Infer e0 in context K to get T0
     var lhsType = inferrer.inferExpression(_lhs, typeContext, true);
@@ -1004,13 +1004,12 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     if (write != null) {
       inferrer.inferExpression(write, null, false);
     }
     _replaceWithDesugared();
-    return typeNeeded ? const DynamicType() : null;
+    return const DynamicType();
   }
 }
 
@@ -1044,10 +1043,8 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.indexAssignEnter(desugared, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.indexAssignEnter(desugared, typeContext);
     var receiverType = _inferReceiver(inferrer);
     inferrer.listener.indexAssignAfterReceiver(write, typeContext);
     var writeMember = inferrer.findMethodInvocationMember(receiverType, write);
@@ -1123,11 +1120,9 @@
   ShadowIntLiteral(int value) : super(value);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.intLiteralEnter(this, typeContext) || typeNeeded;
-    var inferredType = typeNeeded ? inferrer.coreTypes.intClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.intLiteralEnter(this, typeContext);
+    var inferredType = inferrer.coreTypes.intClass.rawType;
     inferrer.listener.intLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -1151,12 +1146,10 @@
   ShadowIsExpression(Expression operand, DartType type) : super(operand, type);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.isExpressionEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.isExpressionEnter(this, typeContext);
     inferrer.inferExpression(operand, null, false);
-    var inferredType = typeNeeded ? inferrer.coreTypes.boolClass.rawType : null;
+    var inferredType = inferrer.coreTypes.boolClass.rawType;
     inferrer.listener.isExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -1168,13 +1161,12 @@
       : super(new IsExpression(operand, type)..fileOffset = charOffset);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     IsExpression isExpression = this.operand;
-    typeNeeded =
-        inferrer.listener.isNotExpressionEnter(this, typeContext) || typeNeeded;
+
+    inferrer.listener.isNotExpressionEnter(this, typeContext);
     inferrer.inferExpression(isExpression.operand, null, false);
-    var inferredType = typeNeeded ? inferrer.coreTypes.boolClass.rawType : null;
+    var inferredType = inferrer.coreTypes.boolClass.rawType;
     inferrer.listener
         .isNotExpressionExit(this, isExpression.type, inferredType);
     return inferredType;
@@ -1206,10 +1198,8 @@
             isConst: isConst);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.listLiteralEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.listLiteralEnter(this, typeContext);
     var listClass = inferrer.coreTypes.listClass;
     var listType = listClass.thisType;
     List<DartType> inferredTypes;
@@ -1260,9 +1250,7 @@
             expressions[i], expressions[i].fileOffset);
       }
     }
-    var inferredType = typeNeeded
-        ? new InterfaceType(listClass, [inferredTypeArgument])
-        : null;
+    var inferredType = new InterfaceType(listClass, [inferredTypeArgument]);
     inferrer.listener.listLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -1275,10 +1263,8 @@
       : super(left, operator, right);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.logicalExpressionEnter(this, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.logicalExpressionEnter(this, typeContext);
     var boolType = inferrer.coreTypes.boolClass.rawType;
     var leftType =
         inferrer.inferExpression(left, boolType, !inferrer.isTopLevel);
@@ -1287,7 +1273,7 @@
         inferrer.inferExpression(right, boolType, !inferrer.isTopLevel);
     inferrer.checkAssignability(boolType, leftType, left, left.fileOffset);
     inferrer.checkAssignability(boolType, rightType, right, right.fileOffset);
-    var inferredType = typeNeeded ? boolType : null;
+    var inferredType = boolType;
     inferrer.listener.logicalExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -1321,10 +1307,8 @@
             isConst: isConst);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.mapLiteralEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.mapLiteralEnter(this, typeContext);
     var mapClass = inferrer.coreTypes.mapClass;
     var mapType = mapClass.thisType;
     List<DartType> inferredTypes;
@@ -1393,9 +1377,8 @@
             valueType, actualTypes[2 * i + 1], value, value.fileOffset);
       }
     }
-    var inferredType = typeNeeded
-        ? new InterfaceType(mapClass, [inferredKeyType, inferredValueType])
-        : null;
+    var inferredType =
+        new InterfaceType(mapClass, [inferredKeyType, inferredValueType]);
     inferrer.listener.mapLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -1435,10 +1418,9 @@
         super(receiver, name, arguments, interfaceTarget);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     return inferrer.inferMethodInvocation(
-        this, receiver, fileOffset, _isImplicitCall, typeContext, typeNeeded,
+        this, receiver, fileOffset, _isImplicitCall, typeContext,
         desugaredInvocation: this);
   }
 }
@@ -1457,15 +1439,11 @@
       : super(variable, new VariableGet(variable));
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.namedFunctionExpressionEnter(this, typeContext) ||
-            typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.namedFunctionExpressionEnter(this, typeContext);
     var inferredType =
         inferrer.inferExpression(variable.initializer, typeContext, true);
     if (inferrer.strongMode) variable.type = inferredType;
-    if (!typeNeeded) inferredType = null;
     inferrer.listener.namedFunctionExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -1476,15 +1454,14 @@
   ShadowNot(Expression operand) : super(operand);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.notEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.notEnter(this, typeContext);
     // First infer the receiver so we can look up the method that was invoked.
     var boolType = inferrer.coreTypes.boolClass.rawType;
     var actualType =
         inferrer.inferExpression(operand, boolType, !inferrer.isTopLevel);
     inferrer.checkAssignability(boolType, actualType, operand, fileOffset);
-    DartType inferredType = typeNeeded ? boolType : null;
+    DartType inferredType = boolType;
     inferrer.listener.notExit(this, inferredType);
     return inferredType;
   }
@@ -1506,17 +1483,10 @@
   MethodInvocation get _desugaredInvocation => body.otherwise;
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     var inferredType = inferrer.inferMethodInvocation(
-        this,
-        variable.initializer,
-        fileOffset,
-        false,
-        typeContext,
-        typeNeeded || inferrer.strongMode,
-        receiverVariable: variable,
-        desugaredInvocation: _desugaredInvocation);
+        this, variable.initializer, fileOffset, false, typeContext,
+        receiverVariable: variable, desugaredInvocation: _desugaredInvocation);
     if (inferrer.strongMode) {
       body.staticType = inferredType;
     }
@@ -1541,10 +1511,9 @@
   PropertyGet get _desugaredGet => body.otherwise;
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    var inferredType = inferrer.inferPropertyGet(this, variable.initializer,
-        fileOffset, typeContext, typeNeeded || inferrer.strongMode,
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    var inferredType = inferrer.inferPropertyGet(
+        this, variable.initializer, fileOffset, typeContext,
         receiverVariable: variable, desugaredGet: _desugaredGet);
     if (inferrer.strongMode) {
       body.staticType = inferredType;
@@ -1556,11 +1525,9 @@
 /// Concrete shadow object representing a null literal in kernel form.
 class ShadowNullLiteral extends NullLiteral implements ShadowExpression {
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.nullLiteralEnter(this, typeContext) || typeNeeded;
-    var inferredType = typeNeeded ? inferrer.coreTypes.nullClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.nullLiteralEnter(this, typeContext);
+    var inferredType = inferrer.coreTypes.nullClass.rawType;
     inferrer.listener.nullLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -1631,12 +1598,10 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     var receiverType = _inferReceiver(inferrer);
-    typeNeeded =
-        inferrer.listener.propertyAssignEnter(desugared, write, typeContext) ||
-            typeNeeded;
+
+    inferrer.listener.propertyAssignEnter(desugared, write, typeContext);
     DartType readType;
     if (read != null) {
       var readMember =
@@ -1673,10 +1638,8 @@
       : super.byReference(receiver, name, interfaceTargetReference);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    return inferrer.inferPropertyGet(
-        this, receiver, fileOffset, typeContext, typeNeeded,
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    return inferrer.inferPropertyGet(this, receiver, fileOffset, typeContext,
         desugaredGet: this);
   }
 }
@@ -1691,8 +1654,8 @@
   @override
   _inferInitializer(ShadowTypeInferrer inferrer) {
     inferrer.listener.redirectingInitializerEnter(this);
-    inferrer.inferInvocation(null, false, fileOffset,
-        target.function.functionType, target.enclosingClass.thisType, arguments,
+    inferrer.inferInvocation(null, fileOffset, target.function.functionType,
+        target.enclosingClass.thisType, arguments,
         skipTypeArgumentInference: true);
     inferrer.listener.redirectingInitializerExit(this);
   }
@@ -1701,11 +1664,9 @@
 /// Shadow object for [Rethrow].
 class ShadowRethrow extends Rethrow implements ShadowExpression {
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.rethrowEnter(this, typeContext) || typeNeeded;
-    var inferredType = typeNeeded ? const BottomType() : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.rethrowEnter(this, typeContext);
+    var inferredType = const BottomType();
     inferrer.listener.rethrowExit(this, inferredType);
     return inferredType;
   }
@@ -1768,11 +1729,9 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.staticAssignEnter(desugared, _prefixName,
-            _targetOffset, _targetClass, this.write, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.staticAssignEnter(desugared, _prefixName, _targetOffset,
+        _targetClass, this.write, typeContext);
     DartType readType;
     var read = this.read;
     if (read is StaticGet) {
@@ -1818,11 +1777,9 @@
       : super(target);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.staticGetEnter(
-            this, _prefixName, _targetOffset, _targetClass, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.staticGetEnter(
+        this, _prefixName, _targetOffset, _targetClass, typeContext);
     var target = this.target;
     if (target is ShadowField && target._inferenceNode != null) {
       target._inferenceNode.resolve();
@@ -1832,7 +1789,7 @@
     if (target is Procedure && target.kind == ProcedureKind.Method) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    var inferredType = typeNeeded ? type : null;
+    var inferredType = type;
     inferrer.listener.staticGetExit(this, inferredType);
     return inferredType;
   }
@@ -1859,16 +1816,14 @@
       : super(target, arguments, isConst: isConst);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.staticInvocationEnter(
-            this, _prefixName, _targetOffset, _targetClass, typeContext) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.staticInvocationEnter(
+        this, _prefixName, _targetOffset, _targetClass, typeContext);
     var calleeType = target.function.functionType;
-    var inferredType = inferrer.inferInvocation(typeContext, typeNeeded,
-        fileOffset, calleeType, calleeType.returnType, arguments);
-    inferrer.listener.staticInvocationExit(
-        this, calleeType, inferrer.lastInferredSubstitution, inferredType);
+    var inferredType = inferrer.inferInvocation(
+        typeContext, fileOffset, calleeType, calleeType.returnType, arguments);
+    inferrer.listener.staticInvocationExit(this, inferrer.lastCalleeType,
+        inferrer.lastInferredSubstitution, inferredType);
     return inferredType;
   }
 }
@@ -1879,18 +1834,14 @@
   ShadowStringConcatenation(List<Expression> expressions) : super(expressions);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.stringConcatenationEnter(this, typeContext) ||
-            typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.stringConcatenationEnter(this, typeContext);
     if (!inferrer.isTopLevel) {
       for (Expression expression in expressions) {
         inferrer.inferExpression(expression, null, false);
       }
     }
-    var inferredType =
-        typeNeeded ? inferrer.coreTypes.stringClass.rawType : null;
+    var inferredType = inferrer.coreTypes.stringClass.rawType;
     inferrer.listener.stringConcatenationExit(this, inferredType);
     return inferredType;
   }
@@ -1901,12 +1852,9 @@
   ShadowStringLiteral(String value) : super(value);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.stringLiteralEnter(this, typeContext) || typeNeeded;
-    var inferredType =
-        typeNeeded ? inferrer.coreTypes.stringClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.stringLiteralEnter(this, typeContext);
+    var inferredType = inferrer.coreTypes.stringClass.rawType;
     inferrer.listener.stringLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -1926,7 +1874,6 @@
             inferrer.thisType.classNode, target.enclosingClass));
     inferrer.inferInvocation(
         null,
-        false,
         fileOffset,
         substitution
             .substituteType(target.function.functionType.withoutTypeParameters),
@@ -1945,14 +1892,13 @@
       : super(name, arguments, interfaceTarget);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     if (interfaceTarget != null) {
       inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'target',
           new InstrumentationValueForMember(interfaceTarget));
     }
     return inferrer.inferMethodInvocation(
-        this, null, fileOffset, false, typeContext, typeNeeded,
+        this, null, fileOffset, false, typeContext,
         interfaceMember: interfaceTarget,
         methodName: name,
         arguments: arguments);
@@ -1966,14 +1912,12 @@
       : super(name, interfaceTarget);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     if (interfaceTarget != null) {
       inferrer.instrumentation?.record(inferrer.uri, fileOffset, 'target',
           new InstrumentationValueForMember(interfaceTarget));
     }
-    return inferrer.inferPropertyGet(
-        this, null, fileOffset, typeContext, typeNeeded,
+    return inferrer.inferPropertyGet(this, null, fileOffset, typeContext,
         interfaceMember: interfaceTarget, propertyName: name);
   }
 }
@@ -2002,12 +1946,9 @@
   ShadowSymbolLiteral(String value) : super(value);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.symbolLiteralEnter(this, typeContext) || typeNeeded;
-    var inferredType =
-        typeNeeded ? inferrer.coreTypes.symbolClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.symbolLiteralEnter(this, typeContext);
+    var inferredType = inferrer.coreTypes.symbolClass.rawType;
     inferrer.listener.symbolLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -2032,10 +1973,9 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     _replaceWithDesugared();
-    return typeNeeded ? const DynamicType() : null;
+    return const DynamicType();
   }
 
   /// Removes this expression from the expression tree, replacing it with
@@ -2079,12 +2019,9 @@
 /// Shadow object for [ThisExpression].
 class ShadowThisExpression extends ThisExpression implements ShadowExpression {
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.thisExpressionEnter(this, typeContext) || typeNeeded;
-    var inferredType =
-        typeNeeded ? (inferrer.thisType ?? const DynamicType()) : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.thisExpressionEnter(this, typeContext);
+    var inferredType = (inferrer.thisType ?? const DynamicType());
     inferrer.listener.thisExpressionExit(this, inferredType);
     return inferredType;
   }
@@ -2095,11 +2032,10 @@
   ShadowThrow(Expression expression) : super(expression);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener.throwEnter(this, typeContext) || typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.throwEnter(this, typeContext);
     inferrer.inferExpression(expression, null, false);
-    var inferredType = typeNeeded ? const BottomType() : null;
+    var inferredType = const BottomType();
     inferrer.listener.throwExit(this, inferredType);
     return inferredType;
   }
@@ -2213,7 +2149,7 @@
       // TODO(paulberry): experiment to see if dynamic dispatch would be better,
       // so that the type hierarchy will be simpler (which may speed up "is"
       // checks).
-      return expression._inferExpression(this, typeContext, typeNeeded);
+      return expression._inferExpression(this, typeContext);
     } else {
       // Encountered an expression type for which type inference is not yet
       // implemented, so just infer dynamic for now.
@@ -2275,12 +2211,9 @@
   ShadowTypeLiteral(this.prefixName, DartType type) : super(type);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded =
-        inferrer.listener.typeLiteralEnter(this, prefixName, typeContext) ||
-            typeNeeded;
-    var inferredType = typeNeeded ? inferrer.coreTypes.typeClass.rawType : null;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.typeLiteralEnter(this, prefixName, typeContext);
+    var inferredType = inferrer.coreTypes.typeClass.rawType;
     inferrer.listener.typeLiteralExit(this, inferredType);
     return inferredType;
   }
@@ -2366,11 +2299,8 @@
   }
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
-    typeNeeded = inferrer.listener
-            .variableAssignEnter(desugared, typeContext, this.write) ||
-        typeNeeded;
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
+    inferrer.listener.variableAssignEnter(desugared, typeContext, this.write);
     DartType readType;
     var read = this.read;
     if (read is VariableGet) {
@@ -2490,13 +2420,12 @@
       : super(variable);
 
   @override
-  DartType _inferExpression(
-      ShadowTypeInferrer inferrer, DartType typeContext, bool typeNeeded) {
+  DartType _inferExpression(ShadowTypeInferrer inferrer, DartType typeContext) {
     var variable = this.variable as ShadowVariableDeclaration;
     bool mutatedInClosure = variable._mutatedInClosure;
     DartType declaredOrInferredType = variable.type;
-    typeNeeded =
-        inferrer.listener.variableGetEnter(this, typeContext) || typeNeeded;
+
+    inferrer.listener.variableGetEnter(this, typeContext);
     DartType promotedType = inferrer.typePromoter
         .computePromotedType(_fact, _scope, mutatedInClosure);
     if (promotedType != null) {
@@ -2508,7 +2437,7 @@
     if (variable._isLocalFunction) {
       type = inferrer.instantiateTearOff(type, typeContext, this);
     }
-    var inferredType = typeNeeded ? type : null;
+    var inferredType = type;
     inferrer.listener.variableGetExit(this, inferredType);
     return inferredType;
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index d59f8de..47bc3b4 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -511,7 +511,9 @@
     SuperInitializer initializer = new SuperInitializer(
         constructor, new Arguments(positional, named: named));
     return new Constructor(function,
-        name: constructor.name, initializers: <Initializer>[initializer]);
+        name: constructor.name,
+        initializers: <Initializer>[initializer],
+        isSynthetic: true);
   }
 
   Constructor makeDefaultConstructor() {
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index 27989e2..0dab4fc 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -140,8 +140,8 @@
   }
 
   @override
-  void beginFactoryMethod(Token token) {
-    listener?.beginFactoryMethod(token);
+  void beginFactoryMethod(Token lastConsumed) {
+    listener?.beginFactoryMethod(lastConsumed);
   }
 
   @override
@@ -265,8 +265,8 @@
   }
 
   @override
-  void beginMember(Token token) {
-    listener?.beginMember(token);
+  void beginMember() {
+    listener?.beginMember();
   }
 
   @override
@@ -280,8 +280,8 @@
   }
 
   @override
-  void beginMethod(Token token, Token name) {
-    listener?.beginMethod(token, name);
+  void beginMethod() {
+    listener?.beginMethod();
   }
 
   @override
@@ -365,8 +365,8 @@
   }
 
   @override
-  void beginTopLevelMethod(Token token, Token name) {
-    listener?.beginTopLevelMethod(token, name);
+  void beginTopLevelMethod(Token lastConsumed) {
+    listener?.beginTopLevelMethod(lastConsumed);
   }
 
   @override
@@ -911,8 +911,8 @@
   }
 
   @override
-  void beginConditionalExpression() {
-    listener?.beginConditionalExpression();
+  void beginConditionalExpression(Token question) {
+    listener?.beginConditionalExpression(question);
   }
 
   @override
@@ -1150,8 +1150,8 @@
   }
 
   @override
-  void handleNoType(Token token) {
-    listener?.handleNoType(token);
+  void handleNoType(Token lastConsumed) {
+    listener?.handleNoType(lastConsumed);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index 60f90dd..eebba73 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -219,7 +219,7 @@
     logEvent("ExpressionStatement");
   }
 
-  void beginFactoryMethod(Token token) {}
+  void beginFactoryMethod(Token lastConsumed) {}
 
   void endFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
@@ -612,7 +612,7 @@
     logEvent("StringJuxtaposition");
   }
 
-  void beginMember(Token token) {}
+  void beginMember() {}
 
   /// Handle an invalid member declaration. Substructures:
   /// - metadata
@@ -626,7 +626,7 @@
     logEvent("Member");
   }
 
-  void beginMethod(Token token, Token name) {}
+  void beginMethod() {}
 
   /// Handle the end of a method declaration.  Substructures:
   /// - metadata
@@ -809,7 +809,7 @@
     logEvent("TopLevelFields");
   }
 
-  void beginTopLevelMethod(Token token, Token name) {}
+  void beginTopLevelMethod(Token lastConsumed) {}
 
   /// Handle the end of a top level method.  Substructures:
   /// - metadata
@@ -939,7 +939,7 @@
 
   /// Called when the parser encounters a `?` operator and begins parsing a
   /// conditional expression.
-  void beginConditionalExpression() {}
+  void beginConditionalExpression(Token question) {}
 
   /// Called when the parser encounters a `:` operator in a conditional
   /// expression.
@@ -1071,7 +1071,7 @@
     logEvent("NoConstructorReferenceContinuationAfterTypeArguments");
   }
 
-  void handleNoType(Token token) {
+  void handleNoType(Token lastConsumed) {
     logEvent("NoType");
   }
 
diff --git a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
index cc9c060..8433560 100644
--- a/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/modifier_context.dart
@@ -2,10 +2,9 @@
 // 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 '../../scanner/token.dart' show SyntheticStringToken, Token, TokenType;
+import '../../scanner/token.dart' show Token;
 import '../messages.dart' as fasta;
 import 'formal_parameter_kind.dart' show FormalParameterKind;
-import 'forwarding_listener.dart' show ForwardingListener;
 import 'member_kind.dart' show MemberKind;
 import 'parser.dart' show Parser;
 import 'type_continuation.dart' show TypeContinuation;
@@ -31,49 +30,6 @@
   return true;
 }
 
-/// Parse modifiers in the token stream, and return a [ModifierContext]
-/// with information about what was parsed.
-ModifierContext parseModifiersOpt(
-    Parser parser,
-    Token start,
-    Token lastModifier,
-    MemberKind memberKind,
-    FormalParameterKind parameterKind,
-    bool isVarAllowed,
-    TypeContinuation typeContinuation) {
-  // Parse modifiers
-  ModifierContext context = new ModifierContext(parser, memberKind,
-      parameterKind, isVarAllowed, typeContinuation, lastModifier);
-  Token token = context.parseOpt(start);
-
-  // If the next token is a modifier,
-  // then it's probably out of order and we need to recover from that.
-  if (token != lastModifier) {
-    // Recovery
-    context = new ModifierRecoveryContext(parser, memberKind, parameterKind,
-        isVarAllowed, typeContinuation, lastModifier);
-    token = context.parseOpt(start);
-  }
-
-  parser.listener.handleModifiers(context.modifierCount);
-
-  context.typeContinuation ??=
-      typeContinuationFromMemberKind(isVarAllowed, context.memberKind);
-
-  return context;
-}
-
-/// Skip modifier tokens until the last modifier token is reached
-/// and return that token. If [token] is not a modifier, then return [token].
-Token skipToLastModifier(Token token) {
-  Token next = token.next;
-  while (isModifier(next)) {
-    token = next;
-    next = token.next;
-  }
-  return token;
-}
-
 TypeContinuation typeContinuationAfterVar(TypeContinuation typeContinuation) {
   switch (typeContinuation) {
     case TypeContinuation.NormalFormalParameter:
@@ -113,55 +69,13 @@
   int modifierCount = 0;
   Token varFinalOrConst;
 
-  /// The last token consumed by the [parseOpt] method, or the same token
-  /// that was passed into the [parseOpt] method if no tokens were consumed.
-  Token lastModifier;
-
   ModifierContext(this.parser, this.memberKind, this.parameterKind,
-      this.isVarAllowed, this.typeContinuation, this.lastModifier);
+      this.isVarAllowed, this.typeContinuation);
 
   bool get isCovariantFinalAllowed =>
       memberKind != MemberKind.StaticField &&
       memberKind != MemberKind.NonStaticField;
 
-  Token parseOpt(Token token) {
-    assert(lastModifier != null);
-    if (token != lastModifier) {
-      if (optional('external', token.next)) {
-        token = parseExternalOpt(token);
-      }
-
-      if (token != lastModifier) {
-        if (optional('static', token.next)) {
-          token = parseStaticOpt(token);
-        } else if (optional('covariant', token.next)) {
-          token = parseCovariantOpt(token);
-          if (token != lastModifier) {
-            if (optional('final', token.next)) {
-              if (isCovariantFinalAllowed) {
-                token = parseFinal(token);
-              }
-            } else if (optional('var', token.next)) {
-              token = parseVar(token);
-            }
-          }
-          return token;
-        }
-      }
-
-      if (token != lastModifier) {
-        if (optional('final', token.next)) {
-          token = parseFinal(token);
-        } else if (optional('var', token.next)) {
-          token = parseVar(token);
-        } else if (optional('const', token.next)) {
-          token = parseConst(token);
-        }
-      }
-    }
-    return token;
-  }
-
   Token parseConst(Token token) {
     Token next = token.next;
     assert(optional('const', next));
@@ -293,6 +207,369 @@
   }
 }
 
+/// This class parses modifiers in recovery situations,
+/// but does not call handleModifier or handleModifiers.
+class ModifierRecoveryContext2 {
+  final Parser parser;
+  TypeContinuation typeContinuation;
+  int modifierCount = 0;
+  Token abstractToken;
+  Token constToken;
+  Token covariantToken;
+  Token externalToken;
+  Token finalToken;
+  Token staticToken;
+  Token varFinalOrConst;
+  Token varToken;
+
+  // Set `true` when parsing modifiers after the `factory` token.
+  bool afterFactory = false;
+
+  // TODO(danrubel): Replace [ModifierRecoveryContext] and [ModifierContext]
+  // with this class.
+
+  ModifierRecoveryContext2(this.parser);
+
+  /// Parse modifiers for class methods and fields.
+  Token parseClassMemberModifiers(
+      Token token, TypeContinuation typeContinuation,
+      {Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token varFinalOrConst}) {
+    token = parseModifiers(token, typeContinuation,
+        externalToken: externalToken,
+        staticToken: staticToken,
+        covariantToken: covariantToken,
+        varFinalOrConst: varFinalOrConst);
+
+    if (abstractToken != null) {
+      parser.reportRecoverableError(
+          abstractToken, fasta.messageAbstractClassMember);
+    }
+    return token;
+  }
+
+  /// Parse modifiers after the `factory` token.
+  Token parseModifiersAfterFactory(Token token,
+      {Token externalToken, Token staticOrCovariant, Token varFinalOrConst}) {
+    afterFactory = true;
+    token = parseModifiers(token, null,
+        externalToken: externalToken,
+        staticOrCovariant: staticOrCovariant,
+        varFinalOrConst: varFinalOrConst);
+
+    if (abstractToken != null) {
+      parser.reportRecoverableError(
+          abstractToken, fasta.messageAbstractClassMember);
+    }
+    return token;
+  }
+
+  /// Parse modifiers for top level functions and fields.
+  Token parseTopLevelModifiers(Token token, TypeContinuation typeContinuation,
+      {Token externalToken, Token varFinalOrConst}) {
+    token = parseModifiers(token, typeContinuation,
+        externalToken: externalToken, varFinalOrConst: varFinalOrConst);
+
+    if (abstractToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          abstractToken, fasta.templateExtraneousModifier);
+    }
+    if (staticToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          staticToken, fasta.templateExtraneousModifier);
+      staticToken = null;
+      --modifierCount;
+    }
+    if (covariantToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          covariantToken, fasta.templateExtraneousModifier);
+      covariantToken = null;
+      --modifierCount;
+    }
+    return token;
+  }
+
+  /// Parse modifiers during recovery when modifiers are out of order
+  /// or invalid. Typically clients call methods like
+  /// [parseClassMemberModifiers] which in turn calls this method,
+  /// rather than calling this method directly.
+  ///
+  /// The various modifier token parameters represent tokens of modifiers
+  /// that have already been parsed prior to recovery. The [staticOrCovariant]
+  /// parameter is for convenience if caller has a token that may be either
+  /// `static` or `covariant`. The first non-null parameter of
+  /// [staticOrCovariant], [staticToken], or [covariantToken] will be used,
+  /// in that order, and the others ignored.
+  Token parseModifiers(Token token, TypeContinuation typeContinuation,
+      {Token externalToken,
+      Token staticToken,
+      Token staticOrCovariant,
+      Token covariantToken,
+      Token varFinalOrConst}) {
+    this.typeContinuation = typeContinuation;
+    if (externalToken != null) {
+      this.externalToken = externalToken;
+      ++modifierCount;
+    }
+    if (staticOrCovariant != null) {
+      if (optional('static', staticOrCovariant)) {
+        this.staticToken = staticOrCovariant;
+        ++modifierCount;
+      } else if (optional('covariant', staticOrCovariant)) {
+        this.covariantToken = staticOrCovariant;
+        ++modifierCount;
+      } else {
+        throw "Internal error: "
+            "Unexpected staticOrCovariant '$staticOrCovariant'.";
+      }
+    } else if (staticToken != null) {
+      this.staticToken = staticToken;
+      ++modifierCount;
+    } else if (covariantToken != null) {
+      this.covariantToken = covariantToken;
+      ++modifierCount;
+    }
+    if (varFinalOrConst != null) {
+      this.varFinalOrConst = varFinalOrConst;
+      ++modifierCount;
+      if (optional('var', varFinalOrConst)) {
+        varToken = varFinalOrConst;
+      } else if (optional('final', varFinalOrConst)) {
+        finalToken = varFinalOrConst;
+      } else if (optional('const', varFinalOrConst)) {
+        constToken = varFinalOrConst;
+      } else {
+        throw "Internal error: Unexpected varFinalOrConst '$varFinalOrConst'.";
+      }
+    }
+
+    // Process invalid and out-of-order modifiers
+    Token next = token.next;
+    while (true) {
+      final value = next.stringValue;
+      if (isModifier(next)) {
+        if (identical('abstract', value)) {
+          token = parseAbstract(token);
+        } else if (identical('const', value)) {
+          token = parseConst(token);
+        } else if (identical('covariant', value)) {
+          token = parseCovariant(token);
+        } else if (identical('external', value)) {
+          token = parseExternal(token);
+        } else if (identical('final', value)) {
+          token = parseFinal(token);
+        } else if (identical('static', value)) {
+          token = parseStatic(token);
+        } else if (identical('var', value)) {
+          token = parseVar(token);
+        } else {
+          throw 'Internal Error: Unhandled modifier: $value';
+        }
+      } else if (afterFactory && identical('factory', value)) {
+        parser.reportRecoverableErrorWithToken(
+            next, fasta.templateDuplicatedModifier);
+        token = next;
+      } else {
+        break;
+      }
+      next = token.next;
+    }
+
+    return token;
+  }
+
+  Token parseAbstract(Token token) {
+    Token next = token.next;
+    assert(optional('abstract', next));
+    if (abstractToken == null) {
+      abstractToken = next;
+      ++modifierCount;
+      return next;
+    }
+
+    // Recovery
+    parser.reportRecoverableErrorWithToken(
+        next, fasta.templateDuplicatedModifier);
+    return next;
+  }
+
+  Token parseConst(Token token) {
+    Token next = token.next;
+    assert(optional('const', next));
+    if (varFinalOrConst == null && covariantToken == null) {
+      typeContinuation ??= TypeContinuation.Optional;
+      varFinalOrConst = constToken = next;
+      ++modifierCount;
+
+      if (afterFactory) {
+        parser.reportRecoverableError(next, fasta.messageConstAfterFactory);
+      }
+      return next;
+    }
+
+    // Recovery
+    if (constToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateDuplicatedModifier);
+    } else if (covariantToken != null) {
+      parser.reportRecoverableError(next, fasta.messageConstAndCovariant);
+    } else if (finalToken != null) {
+      parser.reportRecoverableError(next, fasta.messageConstAndFinal);
+    } else if (varToken != null) {
+      parser.reportRecoverableError(next, fasta.messageConstAndVar);
+    } else {
+      throw 'Internal Error: Unexpected varFinalOrConst: $varFinalOrConst';
+    }
+    return next;
+  }
+
+  Token parseCovariant(Token token) {
+    Token next = token.next;
+    assert(optional('covariant', next));
+    if (constToken == null &&
+        covariantToken == null &&
+        staticToken == null &&
+        !afterFactory) {
+      covariantToken = next;
+      ++modifierCount;
+
+      if (varToken != null) {
+        parser.reportRecoverableError(next, fasta.messageCovariantAfterVar);
+      } else if (finalToken != null) {
+        parser.reportRecoverableError(next, fasta.messageCovariantAfterFinal);
+      }
+      return next;
+    }
+
+    // Recovery
+    if (covariantToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateDuplicatedModifier);
+    } else if (afterFactory) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateExtraneousModifier);
+    } else if (constToken != null) {
+      parser.reportRecoverableError(next, fasta.messageConstAndCovariant);
+    } else if (staticToken != null) {
+      parser.reportRecoverableError(next, fasta.messageCovariantAndStatic);
+    } else {
+      throw 'Internal Error: Unhandled recovery: $next';
+    }
+    return next;
+  }
+
+  Token parseExternal(Token token) {
+    Token next = token.next;
+    assert(optional('external', next));
+    if (externalToken == null) {
+      externalToken = next;
+      ++modifierCount;
+
+      if (afterFactory) {
+        parser.reportRecoverableError(next, fasta.messageExternalAfterFactory);
+      } else if (constToken != null) {
+        parser.reportRecoverableError(next, fasta.messageExternalAfterConst);
+      } else if (staticToken != null) {
+        parser.reportRecoverableError(next, fasta.messageExternalAfterStatic);
+      }
+      return next;
+    }
+
+    // Recovery
+    parser.reportRecoverableErrorWithToken(
+        next, fasta.templateDuplicatedModifier);
+    return next;
+  }
+
+  Token parseFinal(Token token) {
+    Token next = token.next;
+    assert(optional('final', next));
+    if (varFinalOrConst == null && !afterFactory) {
+      typeContinuation ??= TypeContinuation.Optional;
+      varFinalOrConst = finalToken = next;
+      ++modifierCount;
+      return next;
+    }
+
+    // Recovery
+    if (finalToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateDuplicatedModifier);
+    } else if (afterFactory) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateExtraneousModifier);
+    } else if (constToken != null) {
+      parser.reportRecoverableError(next, fasta.messageConstAndFinal);
+    } else if (varToken != null) {
+      parser.reportRecoverableError(next, fasta.messageFinalAndVar);
+    } else {
+      throw 'Internal Error: Unexpected varFinalOrConst: $varFinalOrConst';
+    }
+    return next;
+  }
+
+  Token parseStatic(Token token) {
+    Token next = token.next;
+    assert(optional('static', next));
+    if (covariantToken == null && staticToken == null && !afterFactory) {
+      staticToken = next;
+      ++modifierCount;
+
+      if (constToken != null) {
+        parser.reportRecoverableError(next, fasta.messageStaticAfterConst);
+      } else if (finalToken != null) {
+        parser.reportRecoverableError(next, fasta.messageStaticAfterFinal);
+      } else if (varToken != null) {
+        parser.reportRecoverableError(next, fasta.messageStaticAfterVar);
+      }
+      return next;
+    }
+
+    // Recovery
+    if (covariantToken != null) {
+      parser.reportRecoverableError(next, fasta.messageCovariantAndStatic);
+    } else if (staticToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateDuplicatedModifier);
+    } else if (afterFactory) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateExtraneousModifier);
+    } else {
+      throw 'Internal Error: Unhandled recovery: $next';
+    }
+    return next;
+  }
+
+  Token parseVar(Token token) {
+    Token next = token.next;
+    assert(optional('var', next));
+    if (varFinalOrConst == null && !afterFactory) {
+      typeContinuation = typeContinuationAfterVar(typeContinuation);
+      varFinalOrConst = varToken = next;
+      ++modifierCount;
+      return next;
+    }
+
+    // Recovery
+    if (varToken != null) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateDuplicatedModifier);
+    } else if (afterFactory) {
+      parser.reportRecoverableErrorWithToken(
+          next, fasta.templateExtraneousModifier);
+    } else if (constToken != null) {
+      parser.reportRecoverableError(next, fasta.messageConstAndVar);
+    } else if (finalToken != null) {
+      parser.reportRecoverableError(next, fasta.messageFinalAndVar);
+    } else {
+      throw 'Internal Error: Unexpected varFinalOrConst: $varFinalOrConst';
+    }
+    return next;
+  }
+}
+
 class ModifierRecoveryContext extends ModifierContext {
   Token constToken;
   Token covariantToken;
@@ -306,52 +583,22 @@
       MemberKind memberKind,
       FormalParameterKind parameterKind,
       bool isVarAllowed,
-      TypeContinuation typeContinuation,
-      [Token lastModifier])
-      : super(parser, memberKind, parameterKind, isVarAllowed, typeContinuation,
-            lastModifier);
-
-  @override
-  Token parseOpt(Token token) {
-    // Reparse to determine which modifiers have already been parsed
-    // but intercept the events so they are not sent to the primary listener.
-    final primaryListener = parser.listener;
-    parser.listener = new ForwardingListener();
-    token = super.parseOpt(token);
-    parser.listener = primaryListener;
-
-    // Process invalid and out-of-order modifiers
-    while (token != lastModifier) {
-      final value = token.next.stringValue;
-      if (identical('abstract', value)) {
-        token = parseAbstract(token);
-      } else if (identical('const', value)) {
-        token = parseConst(token);
-      } else if (identical('covariant', value)) {
-        token = parseCovariantOpt(token);
-      } else if (identical('external', value)) {
-        token = parseExternalOpt(token);
-      } else if (identical('final', value)) {
-        token = parseFinal(token);
-      } else if (identical('static', value)) {
-        token = parseStaticOpt(token);
-      } else if (identical('var', value)) {
-        token = parseVar(token);
-      } else {
-        token = parseExtraneousModifier(token);
-      }
-    }
-
-    return token;
-  }
+      TypeContinuation typeContinuation)
+      : super(
+            parser, memberKind, parameterKind, isVarAllowed, typeContinuation);
 
   Token parseRecovery(Token token,
-      {Token covariantToken, Token varFinalOrConst}) {
+      {Token covariantToken, Token staticToken, Token varFinalOrConst}) {
     if (covariantToken != null) {
       this.covariantToken = covariantToken;
       ++modifierCount;
     }
+    if (staticToken != null) {
+      this.staticToken = staticToken;
+      ++modifierCount;
+    }
     if (varFinalOrConst != null) {
+      this.varFinalOrConst = varFinalOrConst;
       ++modifierCount;
       if (optional('var', varFinalOrConst)) {
         varToken = varFinalOrConst;
@@ -560,391 +807,3 @@
     return super.parseVar(token);
   }
 }
-
-class ClassMethodModifierContext {
-  final Parser parser;
-  Token getOrSet;
-
-  int modifierCount;
-  Token constToken;
-  Token covariantToken;
-  Token externalToken;
-  Token staticToken;
-
-  /// If recovery finds an invalid class member declaration
-  /// (e.g. an enum declared inside a class),
-  /// then this is set to the last token in the invalid declaration.
-  Token endInvalidMemberToken;
-
-  ClassMethodModifierContext(this.parser);
-
-  Token parseRecovery(Token token, Token externalToken, Token staticToken,
-      Token getOrSet, Token lastModifier) {
-    modifierCount = 0;
-    this.getOrSet = getOrSet;
-    if (externalToken != null) {
-      this.externalToken = externalToken;
-      ++modifierCount;
-    }
-    if (staticToken != null) {
-      this.staticToken = staticToken;
-      ++modifierCount;
-    }
-    while (token.next != lastModifier.next) {
-      String value = token.next.stringValue;
-      if (identical(value, 'abstract')) {
-        token = parseAbstractRecovery(token);
-      } else if (identical(value, 'class')) {
-        token = parseClassRecovery(token);
-      } else if (identical(value, 'const')) {
-        token = parseConstRecovery(token);
-      } else if (identical(value, 'covariant')) {
-        token = parseCovariantRecovery(token);
-      } else if (identical(value, 'enum')) {
-        token = parseEnumRecovery(token);
-      } else if (identical(value, 'external')) {
-        token = parseExternalRecovery(token);
-      } else if (identical(value, 'static')) {
-        token = parseStaticRecovery(token);
-      } else if (identical(value, 'typedef')) {
-        token = parseTypedefRecovery(token);
-      } else if (identical(value, 'var')) {
-        token = parseVarRecovery(token);
-      } else if (token.next.isModifier) {
-        parser.reportRecoverableErrorWithToken(
-            token.next, fasta.templateExtraneousModifier);
-        token = token.next;
-      } else {
-        parser.reportRecoverableErrorWithToken(
-            token.next, fasta.templateUnexpectedToken);
-        // We found something that doesn't look like a modifier,
-        // so skip the rest of the tokens.
-        token = lastModifier.next;
-        break;
-      }
-      if (endInvalidMemberToken != null) {
-        return lastModifier.next;
-      }
-    }
-    return token.next;
-  }
-
-  Token parseAbstractRecovery(Token token) {
-    token = token.next;
-    assert(optional('abstract', token));
-    if (optional('class', token.next)) {
-      return parseClassRecovery(token);
-    }
-    parser.reportRecoverableError(token, fasta.messageAbstractClassMember);
-    return token;
-  }
-
-  Token parseClassRecovery(Token token) {
-    token = token.next;
-    assert(optional('class', token));
-    Token next = token.next;
-    parser.reportRecoverableError(next, fasta.messageClassInClass);
-    // If the declaration appears to be a valid class declaration
-    // then skip the entire declaration so that we only generate the one
-    // error (above) rather than a plethora of unhelpful errors.
-    if (next.isIdentifier) {
-      endInvalidMemberToken = next;
-      // skip class name
-      token = next;
-      next = token.next;
-      // TODO(danrubel): consider parsing (skipping) the class header
-      // with a recovery listener so that no events are generated
-      if (optional('{', next) && next.endGroup != null) {
-        // skip class body
-        token = endInvalidMemberToken = next.endGroup;
-      }
-    }
-    return token;
-  }
-
-  Token parseConstRecovery(Token token) {
-    Token next = token.next;
-    assert(optional('const', next));
-    if (constToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateDuplicatedModifier);
-    } else if (getOrSet != null) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateExtraneousModifier);
-    } else {
-      constToken = next;
-      parser.parseModifier(token);
-      ++modifierCount;
-    }
-    return next;
-  }
-
-  Token parseCovariantRecovery(Token token) {
-    Token next = token.next;
-    assert(optional('covariant', next));
-    if (covariantToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateDuplicatedModifier);
-    } else if (getOrSet == null || optional('get', getOrSet)) {
-      parser.reportRecoverableError(next, fasta.messageCovariantMember);
-    } else if (staticToken != null) {
-      parser.reportRecoverableError(next, fasta.messageCovariantAndStatic);
-    } else {
-      covariantToken = next;
-      parser.parseModifier(token);
-      ++modifierCount;
-    }
-    return next;
-  }
-
-  Token parseEnumRecovery(Token token) {
-    Token next = token.next;
-    assert(optional('enum', next));
-    parser.reportRecoverableError(next, fasta.messageEnumInClass);
-    token = next;
-    next = token.next;
-    // If the declaration appears to be a valid enum declaration
-    // then skip the entire declaration so that we only generate the one
-    // error (above) rather than a plethora of unhelpful errors.
-    if (next.isIdentifier) {
-      endInvalidMemberToken = next;
-      // skip enum name
-      token = next;
-      next = token.next;
-      if (optional('{', next) && next.endGroup != null) {
-        // TODO(danrubel): Consider replacing this `skip enum` functionality
-        // with something that can parse and resolve the declaration
-        // even though it is in a class context
-        token = endInvalidMemberToken = next.endGroup;
-      }
-    }
-    return token;
-  }
-
-  Token parseExternalRecovery(Token token) {
-    Token next = token.next;
-    assert(optional('external', next));
-    if (externalToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateDuplicatedModifier);
-    } else {
-      if (staticToken != null) {
-        parser.reportRecoverableError(next, fasta.messageExternalAfterStatic);
-        // Fall through to record token.
-      } else if (constToken != null) {
-        parser.reportRecoverableError(next, fasta.messageExternalAfterConst);
-        // Fall through to record token.
-      }
-      externalToken = next;
-      parser.parseModifier(token);
-      ++modifierCount;
-    }
-    return next;
-  }
-
-  Token parseStaticRecovery(Token token) {
-    Token next = token.next;
-    assert(optional('static', next));
-    if (staticToken != null) {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateDuplicatedModifier);
-    } else if (covariantToken != null) {
-      parser.reportRecoverableError(next, fasta.messageCovariantAndStatic);
-    } else {
-      if (constToken != null) {
-        parser.reportRecoverableError(next, fasta.messageStaticAfterConst);
-        // Fall through to record token.
-      }
-      staticToken = next;
-      parser.parseModifier(token);
-      ++modifierCount;
-    }
-    return next;
-  }
-
-  Token parseTypedefRecovery(Token token) {
-    token = token.next;
-    assert(optional('typedef', token));
-    parser.reportRecoverableError(token, fasta.messageTypedefInClass);
-    // TODO(brianwilkerson): If the declaration appears to be a valid typedef
-    // then skip the entire declaration so that we generate a single error
-    // (above) rather than many unhelpful errors.
-    return token;
-  }
-
-  Token parseVarRecovery(Token token) {
-    token = token.next;
-    if (token.next.isIdentifier && optional('(', token.next.next)) {
-      parser.reportRecoverableError(token, fasta.messageVarReturnType);
-    } else {
-      parser.reportRecoverableErrorWithToken(
-          token, fasta.templateExtraneousModifier);
-    }
-    return token;
-  }
-}
-
-class FactoryModifierContext {
-  final Parser parser;
-  int modifierCount;
-  Token constToken;
-  Token externalToken;
-  Token factoryKeyword;
-
-  FactoryModifierContext(
-      this.parser, this.modifierCount, this.externalToken, this.constToken);
-
-  Token parseRecovery(Token token) {
-    Token next = token.next;
-    while (true) {
-      final value = next.stringValue;
-      if (identical('const', value)) {
-        parseConst(token);
-      } else if (identical('external', value)) {
-        parseExternal(token);
-      } else if (identical('factory', value)) {
-        parseFactory(next);
-      } else if (isModifier(next)) {
-        parser.reportRecoverableErrorWithToken(
-            next, fasta.templateExtraneousModifier);
-      } else {
-        break;
-      }
-      token = next;
-      next = token.next;
-    }
-    while (isModifier(next)) {
-      final value = next.stringValue;
-      if (identical('const', value)) {
-        parseConst(token);
-      } else {
-        parser.reportRecoverableErrorWithToken(
-            next, fasta.templateExtraneousModifier);
-      }
-      token = next;
-      next = token.next;
-    }
-    return token;
-  }
-
-  void parseConst(Token token) {
-    Token next = token.next;
-    assert(optional('const', next));
-    if (constToken == null) {
-      if (factoryKeyword != null) {
-        parser.reportRecoverableError(next, fasta.messageConstAfterFactory);
-      }
-      constToken = next;
-      parser.parseModifier(token);
-      ++modifierCount;
-    } else {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateDuplicatedModifier);
-    }
-  }
-
-  void parseExternal(Token token) {
-    Token next = token.next;
-    assert(optional('external', next));
-    if (externalToken == null) {
-      if (constToken != null) {
-        parser.reportRecoverableError(next, fasta.messageExternalAfterConst);
-      } else if (factoryKeyword != null) {
-        parser.reportRecoverableError(next, fasta.messageExternalAfterFactory);
-      }
-      externalToken = next;
-      parser.parseModifier(token);
-      ++modifierCount;
-    } else {
-      parser.reportRecoverableErrorWithToken(
-          next, fasta.templateDuplicatedModifier);
-    }
-  }
-
-  void parseFactory(Token token) {
-    assert(optional('factory', token));
-    if (factoryKeyword == null) {
-      factoryKeyword = token;
-    } else {
-      parser.reportRecoverableErrorWithToken(
-          token, fasta.templateDuplicatedModifier);
-    }
-  }
-}
-
-class TopLevelMethodModifierContext {
-  final Parser parser;
-  Token beforeName;
-  Token externalToken;
-
-  /// If recovery finds the beginning of a new declaration,
-  /// then this is set to the last token in the prior declaration.
-  Token endInvalidTopLevelDeclarationToken;
-
-  TopLevelMethodModifierContext(this.parser, this.beforeName);
-
-  /// Parse modifiers from the token following [token] up to but not including
-  /// [afterModifiers]. If a new declaration start is found in the sequence of
-  /// tokens, then set [endInvalidTopLevelDeclarationToken] to be the last token
-  /// in the current declaration and return the token immediately preceding the
-  /// new declaration.
-  Token parseRecovery(Token token, Token afterModifiers) {
-    assert(token != afterModifiers && token.next != afterModifiers);
-
-    Token beforeToken = token;
-    while (token.next != afterModifiers) {
-      beforeToken = token;
-      token = token.next;
-      if (optional('external', token)) {
-        if (externalToken == null) {
-          externalToken = token;
-        } else {
-          parser.reportRecoverableErrorWithToken(
-              token, fasta.templateDuplicatedModifier);
-        }
-      } else if (optional('operator', token)) {
-        parser.reportRecoverableError(token, fasta.messageTopLevelOperator);
-        // If the next token is a top level keyword, then
-        // Indicate to the caller that the next token should be
-        // parsed as a new top level declaration.
-        Token next = token.next;
-        if (next.isTopLevelKeyword) {
-          endInvalidTopLevelDeclarationToken = token;
-          return beforeToken;
-        }
-        if (next.isOperator) {
-          // If the operator is not one of the modifiers, then skip it,
-          // and insert a synthetic modifier
-          // to be interpreted as the top level function's identifier.
-          if (identical(next, afterModifiers)) {
-            beforeName = next;
-            parser.rewriter.insertTokenAfter(
-                next,
-                new SyntheticStringToken(
-                    TokenType.IDENTIFIER,
-                    '#synthetic_function_${next.charOffset}',
-                    token.charOffset,
-                    0));
-            return next;
-          }
-          // If the next token is an operator, then skip it
-          // because the error message above says it all.
-          beforeToken = token;
-          token = token;
-        }
-      } else if (optional('factory', token)) {
-        parser.reportRecoverableError(
-            token, fasta.messageFactoryTopLevelDeclaration);
-        // Indicate to the caller that the next token should be
-        // parsed as a new top level declaration.
-        endInvalidTopLevelDeclarationToken = token;
-        return beforeToken;
-      } else {
-        // TODO(danrubel): report more specific analyzer error codes
-        parser.reportRecoverableErrorWithToken(
-            token, fasta.templateExtraneousModifier);
-      }
-    }
-    return beforeToken;
-  }
-}
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 8c558ac..7d83002 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -76,13 +76,9 @@
 
 import 'modifier_context.dart'
     show
-        ClassMethodModifierContext,
-        FactoryModifierContext,
-        ModifierContext,
         ModifierRecoveryContext,
-        TopLevelMethodModifierContext,
+        ModifierRecoveryContext2,
         isModifier,
-        parseModifiersOpt,
         typeContinuationAfterVar;
 
 import 'recovery_listeners.dart'
@@ -1191,10 +1187,13 @@
           token = modifierContext.parseRecovery(token,
               covariantToken: covariantToken, varFinalOrConst: varFinalOrConst);
 
+          modifierCount = modifierContext.modifierCount;
+          covariantToken = modifierContext.covariantToken;
+          varFinalOrConst = modifierContext.varFinalOrConst;
+
           memberKind = modifierContext.memberKind;
           typeContinuation = modifierContext.typeContinuation;
           varFinalOrConst = modifierContext.varFinalOrConst;
-          modifierCount = modifierContext.modifierCount;
           modifierContext = null;
         }
       }
@@ -1678,7 +1677,7 @@
       }
       listener.handleClassExtends(extendsKeyword);
     } else {
-      listener.handleNoType(next);
+      listener.handleNoType(token);
       listener.handleClassExtends(null);
     }
     return token;
@@ -1714,7 +1713,7 @@
     return token;
   }
 
-  /// Insert a synthetic identifier before the given [token] and create an error
+  /// Insert a synthetic identifier after the given [token] and create an error
   /// message based on the given [context]. Return the synthetic identifier that
   /// was inserted.
   Token insertSyntheticIdentifier(Token token, IdentifierContext context,
@@ -2046,7 +2045,7 @@
       extendsOrSuper = next;
       token = parseType(next);
     } else {
-      listener.handleNoType(next);
+      listener.handleNoType(token);
     }
     listener.endTypeVariable(token.next, extendsOrSuper);
     return token;
@@ -2225,9 +2224,9 @@
         // A function type without return type.
         // Push the non-existing return type first. The loop below will
         // generate the full type.
-        listener.handleNoType(begin);
+        listener.handleNoType(beforeBegin);
         token = beforeBegin;
-      } else if (functionTypes > 0 && voidToken != null) {
+      } else if (voidToken != null) {
         listener.handleVoidKeyword(voidToken);
         token = voidToken;
       } else {
@@ -2307,7 +2306,7 @@
               memberKind == MemberKind.StaticField) {
             reportRecoverableError(
                 begin, fasta.messageMissingConstFinalVarOrType);
-            listener.handleNoType(begin);
+            listener.handleNoType(beforeBegin);
             return beforeBegin;
           }
         }
@@ -2327,7 +2326,7 @@
             return commitType(); // Parse type.
           }
         }
-        listener.handleNoType(begin);
+        listener.handleNoType(beforeBegin);
         return beforeBegin;
 
       case TypeContinuation.OptionalAfterVar:
@@ -2488,7 +2487,7 @@
           reportRecoverableError(
               begin, fasta.messageReturnTypeFunctionExpression);
         } else {
-          listener.handleNoType(begin);
+          listener.handleNoType(formals);
         }
         if (beforeName.next != name)
           throw new StateError("beforeName.next != name");
@@ -2649,7 +2648,7 @@
               beforeNameToken = previousToken(beforeNameToken, nameToken);
             }
           } else {
-            listener.handleNoType(begin);
+            listener.handleNoType(beforeToken);
           }
           beforeToken = parseFormalParametersRequiredOpt(
               token, MemberKind.FunctionTypedParameter);
@@ -2664,7 +2663,7 @@
                 fasta.messageInvalidInlineFunctionType);
           }
         } else if (untyped) {
-          listener.handleNoType(begin);
+          listener.handleNoType(token);
         } else {
           Token saved = token;
           commitType();
@@ -2755,35 +2754,117 @@
 
   Token parseTopLevelMember(Token token) {
     Token beforeStart = token;
-    token = token.next;
-    listener.beginTopLevelMember(token);
+    Token next = token.next;
+    listener.beginTopLevelMember(next);
 
-    Link<Token> identifiers = findMemberName(beforeStart);
+    Token externalToken;
+    Token varFinalOrConst;
+    TypeContinuation typeContinuation;
+
+    if (isModifier(next)) {
+      if (optional('external', next)) {
+        externalToken = token = next;
+        next = token.next;
+      }
+      if (isModifier(next)) {
+        if (optional('final', next)) {
+          typeContinuation = TypeContinuation.Optional;
+          varFinalOrConst = token = next;
+          next = token.next;
+        } else if (optional('var', next)) {
+          typeContinuation = TypeContinuation.OptionalAfterVar;
+          varFinalOrConst = token = next;
+          next = token.next;
+        } else if (optional('const', next)) {
+          typeContinuation = TypeContinuation.Optional;
+          varFinalOrConst = token = next;
+          next = token.next;
+        }
+        if (isModifier(next)) {
+          ModifierRecoveryContext2 context = new ModifierRecoveryContext2(this);
+          token = context.parseTopLevelModifiers(token, typeContinuation,
+              externalToken: externalToken, varFinalOrConst: varFinalOrConst);
+          next = token.next;
+
+          typeContinuation = context.typeContinuation;
+          externalToken = context.externalToken;
+          varFinalOrConst = context.varFinalOrConst;
+          context = null;
+        }
+      }
+    }
+    typeContinuation ??= TypeContinuation.Required;
+
+    Link<Token> identifiers = findMemberName(token);
     if (identifiers.isEmpty) {
-      if ((isValidTypeReference(token) ||
-              optional('const', token) ||
-              optional('final', token) ||
-              optional('var', token)) &&
+      // Recovery
+      if ((varFinalOrConst != null) &&
           isPostIdentifierForRecovery(
-              token.next, IdentifierContext.topLevelVariableDeclaration)) {
-        // Recovery: Looks like a top level variable declaration
+              next.next, IdentifierContext.topLevelVariableDeclaration)) {
+        // Looks like a top level variable declaration
         // but missing a variable name.
-        insertSyntheticIdentifier(
-            token, IdentifierContext.topLevelVariableDeclaration);
         return parseFields(
-            beforeStart, token.isModifier ? token : beforeStart, token, true);
+            beforeStart,
+            externalToken,
+            null,
+            null,
+            varFinalOrConst,
+            null,
+            token,
+            MemberKind.TopLevelField,
+            typeContinuation);
+      } else if (next.isIdentifier &&
+          isPostIdentifierForRecovery(
+              next.next, IdentifierContext.topLevelVariableDeclaration)) {
+        // Looks like a top level variable declaration
+        // but missing a variable name.
+        return parseFields(
+            beforeStart,
+            externalToken,
+            null,
+            null,
+            varFinalOrConst,
+            null,
+            token,
+            MemberKind.TopLevelField,
+            typeContinuation);
       } else {
-        return reportInvalidTopLevelDeclaration(token);
+        return reportInvalidTopLevelDeclaration(beforeStart.next);
       }
     }
     Token afterName = identifiers.head.next;
     identifiers = identifiers.tail;
 
     if (identifiers.isEmpty) {
-      return reportInvalidTopLevelDeclaration(token);
+      return reportInvalidTopLevelDeclaration(beforeStart.next);
     }
     Token beforeName = identifiers.head;
     identifiers = identifiers.tail;
+    if (!beforeName.next.isIdentifier) {
+      // Recovery
+      if (identical(beforeName.stringValue, 'operator')) {
+        // If the token before the invalid name is `operator`
+        // then report the error on the `operator` keyword.
+        reportRecoverableError(beforeName, fasta.messageTopLevelOperator);
+        if (identifiers.isNotEmpty &&
+            identical(identifiers.head.next.stringValue, 'operator')) {
+          identifiers = identifiers.tail;
+        }
+      } else {
+        reportRecoverableErrorWithToken(
+            beforeName.next, fasta.templateUnexpectedToken);
+      }
+      // Insert a synthetic modifier
+      // to be interpreted as the top level function's identifier.
+      beforeName = beforeName.next;
+      rewriter.insertTokenAfter(
+          beforeName,
+          new SyntheticStringToken(
+              TokenType.IDENTIFIER,
+              '#synthetic_function_${beforeName.charOffset}',
+              beforeName.charOffset,
+              0));
+    }
     Token getOrSet;
     if (!identifiers.isEmpty) {
       String value = identifiers.head.next.stringValue;
@@ -2809,6 +2890,31 @@
       }
     }
 
+    // Recovery: Anything left in the identifiers list is unexpected.
+    if (identifiers.isNotEmpty) {
+      identifiers = identifiers.reverse();
+      while (identifiers.isNotEmpty) {
+        Token token = identifiers.head;
+        Token next = token.next;
+        identifiers = identifiers.tail;
+        // If we have find the start of a new top level declaration,
+        // then return to parse that new declaration.
+        if (next.isTopLevelKeyword) {
+          listener.handleInvalidTopLevelDeclaration(token);
+          return token;
+        }
+        // Report errors on any unexpected tokens.
+        String value = next.stringValue;
+        if (identical(value, 'operator')) {
+          reportRecoverableError(next, fasta.messageTopLevelOperator);
+        } else if (identical(value, 'factory')) {
+          reportRecoverableError(next, fasta.messageFactoryTopLevelDeclaration);
+        } else {
+          reportRecoverableErrorWithToken(next, fasta.templateUnexpectedToken);
+        }
+      }
+    }
+
     token = afterName;
     bool isField;
     while (true) {
@@ -2820,7 +2926,9 @@
           (identical(value, '=>'))) {
         isField = false;
         break;
-      } else if ((identical(value, '=')) || (identical(value, ','))) {
+      } else if (identical(value, '=') ||
+          identical(value, ',') ||
+          identical(value, '}')) {
         isField = true;
         break;
       } else if (identical(value, ';')) {
@@ -2838,46 +2946,89 @@
         if (identical(token.next.kind, EOF_TOKEN)) return token;
       }
     }
-    Token lastModifier =
-        identifiers.isNotEmpty ? identifiers.head.next : beforeStart;
-    return isField
-        ? parseFields(beforeStart, lastModifier, beforeName, true)
-        : parseTopLevelMethod(
-            beforeStart, lastModifier, beforeType, getOrSet, beforeName);
+    if (isField) {
+      if (externalToken != null) {
+        reportRecoverableError(externalToken, fasta.messageExternalField);
+      }
+      if (getOrSet != null) {
+        reportRecoverableErrorWithToken(
+            getOrSet, fasta.templateExtraneousModifier);
+      }
+      return parseFields(
+          beforeStart,
+          externalToken,
+          null,
+          null,
+          varFinalOrConst,
+          beforeType,
+          beforeName,
+          MemberKind.TopLevelField,
+          typeContinuation);
+    } else {
+      if (varFinalOrConst != null) {
+        reportRecoverableErrorWithToken(
+            varFinalOrConst, fasta.templateExtraneousModifier);
+      }
+      return parseTopLevelMethod(
+          beforeStart, externalToken, beforeType, getOrSet, beforeName);
+    }
   }
 
   Token parseFields(
-      Token start, Token lastModifier, Token beforeName, bool isTopLevel) {
-    ModifierContext modifierContext = parseModifiersOpt(
-        this,
-        start,
-        lastModifier,
-        isTopLevel ? MemberKind.TopLevelField : MemberKind.NonStaticField,
-        null,
-        true,
-        typeContinuationFromFormalParameterKind(null));
-    TypeContinuation typeContinuation = modifierContext.typeContinuation;
-    MemberKind memberKind = modifierContext.memberKind;
-    Token varFinalOrConst = modifierContext.varFinalOrConst;
-    Token token = modifierContext.lastModifier;
-    modifierContext = null;
+      Token beforeStart,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token varFinalOrConst,
+      Token beforeType,
+      Token beforeName,
+      MemberKind memberKind,
+      TypeContinuation typeContinuation) {
+    // TODO(danrubel): Consider passing modifiers via endTopLevelField
+    // rather than using handleModifier and handleModifiers.
+    int modifierCount = 0;
+    if (externalToken != null) {
+      reportRecoverableError(externalToken, fasta.messageExternalField);
+    }
+    if (staticToken != null) {
+      listener.handleModifier(staticToken);
+      ++modifierCount;
+    } else if (covariantToken != null) {
+      if (varFinalOrConst != null && optional('final', varFinalOrConst)) {
+        reportRecoverableError(covariantToken, fasta.messageFinalAndCovariant);
+        covariantToken = null;
+      } else {
+        listener.handleModifier(covariantToken);
+        ++modifierCount;
+      }
+    }
+    if (varFinalOrConst != null) {
+      listener.handleModifier(varFinalOrConst);
+      ++modifierCount;
+    }
+    listener.handleModifiers(modifierCount);
 
-    token = parseType(token, typeContinuation, null, memberKind);
-    token = token.next;
+    bool isTopLevel = memberKind == MemberKind.TopLevelField;
 
-    Token name = beforeName.next;
-    if (token != name) {
-      reportRecoverableErrorWithToken(token, fasta.templateExtraneousModifier);
-      token = name;
+    if (beforeType != null) {
+      parseType(beforeType, typeContinuation, null, memberKind);
+    } else if (varFinalOrConst != null) {
+      listener.handleNoType(beforeName);
+    } else {
+      // Recovery
+      reportRecoverableError(
+          beforeName.next, fasta.messageMissingConstFinalVarOrType);
+      listener.handleNoType(beforeName);
     }
 
     IdentifierContext context = isTopLevel
         ? IdentifierContext.topLevelVariableDeclaration
         : IdentifierContext.fieldDeclaration;
-    token = ensureIdentifier(beforeName, context);
+    Token name = ensureIdentifier(beforeName, context);
 
     int fieldCount = 1;
-    token = parseFieldInitializerOpt(token, name, varFinalOrConst, isTopLevel);
+    Token token =
+        parseFieldInitializerOpt(name, name, varFinalOrConst, isTopLevel);
     while (optional(',', token.next)) {
       name = ensureIdentifier(token.next, context);
       token = parseFieldInitializerOpt(name, name, varFinalOrConst, isTopLevel);
@@ -2885,72 +3036,35 @@
     }
     token = ensureSemicolon(token);
     if (isTopLevel) {
-      listener.endTopLevelFields(fieldCount, start.next, token);
+      listener.endTopLevelFields(fieldCount, beforeStart.next, token);
     } else {
-      listener.endFields(fieldCount, start.next, token);
+      listener.endFields(fieldCount, beforeStart.next, token);
     }
     return token;
   }
 
-  Token parseTopLevelMethod(Token start, Token lastModifier, Token beforeType,
-      Token getOrSet, Token beforeName) {
-    Token afterModifiers = lastModifier.next;
-    Token beforeToken = start;
-    Token token = start = start.next;
-    Token name = beforeName.next;
+  Token parseTopLevelMethod(Token beforeStart, Token externalToken,
+      Token beforeType, Token getOrSet, Token beforeName) {
+    listener.beginTopLevelMethod(beforeStart);
 
-    // Parse modifiers
-    Token beforeExternalToken;
-    Token externalToken;
-    if (token == afterModifiers) {
-      listener.beginTopLevelMethod(start, name);
-      listener.handleModifiers(0);
-    } else if (optional('external', token) && token.next == afterModifiers) {
-      listener.beginTopLevelMethod(start, name);
-      beforeExternalToken = beforeToken;
-      externalToken = token;
-      parseModifier(beforeToken);
+    // TODO(danrubel): Consider passing modifiers via endTopLevelMethod
+    // rather than handleModifier and handleModifiers
+    if (externalToken != null) {
+      listener.handleModifier(externalToken);
       listener.handleModifiers(1);
-      token = token.next;
     } else {
-      // If there are modifiers other than or in addition to `external`
-      // then we need to recover.
-      final context = new TopLevelMethodModifierContext(this, beforeName);
-      token = context.parseRecovery(beforeToken, afterModifiers);
-      beforeToken = token;
-      token = token.next;
-      beforeExternalToken = beforeToken;
-      externalToken = context.externalToken;
-      beforeName = context.beforeName;
-      name = beforeName.next;
-
-      // If the modifiers form a partial top level directive or declaration
-      // and we have found the start of a new top level declaration
-      // then return to parse that new declaration.
-      if (context.endInvalidTopLevelDeclarationToken != null) {
-        listener.handleInvalidTopLevelDeclaration(
-            context.endInvalidTopLevelDeclarationToken);
-        return token;
-      }
-
-      listener.beginTopLevelMethod(start, name);
-      if (externalToken == null) {
-        listener.handleModifiers(0);
-      } else {
-        parseModifier(beforeExternalToken);
-        listener.handleModifiers(1);
-      }
-      // Fall through to continue parsing the top level method.
+      listener.handleModifiers(0);
     }
 
     if (beforeType == null) {
-      listener.handleNoType(name);
+      listener.handleNoType(beforeName);
     } else {
       parseType(beforeType, TypeContinuation.Optional);
     }
-    name = ensureIdentifier(
+    Token name = ensureIdentifier(
         beforeName, IdentifierContext.topLevelFunctionDeclaration);
 
+    Token token;
     bool isGetter = false;
     if (getOrSet == null) {
       token = parseTypeVariablesOpt(name);
@@ -2969,7 +3083,7 @@
     }
     token = parseFunctionBody(token, false, externalToken != null);
     asyncState = savedAsyncModifier;
-    listener.endTopLevelMethod(start, getOrSet, token);
+    listener.endTopLevelMethod(beforeStart.next, getOrSet, token);
     return token;
   }
 
@@ -3025,6 +3139,7 @@
 
     Token previous = token;
     token = token.next;
+
     while (token.kind != EOF_TOKEN) {
       if (optional('get', token)) {
         isGetter = true;
@@ -3047,7 +3162,8 @@
         return identifiers;
       } else if (optional("=", token) ||
           optional(";", token) ||
-          optional(",", token)) {
+          optional(",", token) ||
+          optional("}", token)) {
         // A field or abstract getter.
         identifiers = identifiers.prepend(previous);
         return identifiers;
@@ -3497,13 +3613,6 @@
     return (identical(value, 'get')) || (identical(value, 'set'));
   }
 
-  bool isFactoryDeclaration(Token token) {
-    while (isModifier(token)) {
-      token = token.next;
-    }
-    return optional('factory', token);
-  }
-
   bool isModifierOrFactory(Token next) =>
       optional('factory', next) || isModifier(next);
 
@@ -3525,28 +3634,86 @@
   /// ;
   /// ```
   Token parseClassMember(Token token) {
-    Token start = parseMetadataStar(token);
-    token = start.next;
-    listener.beginMember(token);
-    // TODO(danrubel): isFactoryDeclaration scans forward over modifiers
-    // which findMemberName does as well. See if this can be done once
-    // instead of twice.
-    if (isFactoryDeclaration(token)) {
-      token = parseFactoryMethod(start);
+    Token beforeStart = token = parseMetadataStar(token);
+
+    TypeContinuation typeContinuation;
+    Token covariantToken;
+    Token externalToken;
+    Token staticToken;
+    Token varFinalOrConst;
+
+    Token next = token.next;
+    if (isModifier(next)) {
+      if (optional('external', next)) {
+        externalToken = token = next;
+        next = token.next;
+      }
+      if (isModifier(next)) {
+        if (optional('static', next)) {
+          staticToken = token = next;
+          next = token.next;
+        } else if (optional('covariant', next)) {
+          covariantToken = token = next;
+          next = token.next;
+        }
+        if (isModifier(next)) {
+          if (optional('final', next)) {
+            typeContinuation = TypeContinuation.Optional;
+            varFinalOrConst = token = next;
+            next = token.next;
+          } else if (optional('var', next)) {
+            typeContinuation = TypeContinuation.OptionalAfterVar;
+            varFinalOrConst = token = next;
+            next = token.next;
+          } else if (optional('const', next) && covariantToken == null) {
+            typeContinuation = TypeContinuation.Optional;
+            varFinalOrConst = token = next;
+            next = token.next;
+          }
+          if (isModifier(next)) {
+            ModifierRecoveryContext2 context =
+                new ModifierRecoveryContext2(this);
+            token = context.parseClassMemberModifiers(token, typeContinuation,
+                externalToken: externalToken,
+                staticToken: staticToken,
+                covariantToken: covariantToken,
+                varFinalOrConst: varFinalOrConst);
+            next = token.next;
+
+            covariantToken = context.covariantToken;
+            externalToken = context.externalToken;
+            staticToken = context.staticToken;
+            varFinalOrConst = context.varFinalOrConst;
+
+            typeContinuation = context.typeContinuation;
+            context = null;
+          }
+        }
+      }
+    }
+    typeContinuation ??= TypeContinuation.Required;
+
+    listener.beginMember();
+
+    if (optional('factory', next)) {
+      token = parseFactoryMethod(token, beforeStart, externalToken,
+          staticToken ?? covariantToken, varFinalOrConst);
       listener.endMember();
       assert(token.next != null);
       return token;
     }
 
-    Link<Token> identifiers = findMemberName(start);
+    Link<Token> identifiers = findMemberName(token);
     if (identifiers.isEmpty) {
-      return recoverFromInvalidClassMember(start);
+      return recoverFromInvalidClassMember(token, beforeStart, externalToken,
+          staticToken, covariantToken, varFinalOrConst, typeContinuation);
     }
     Token afterName = identifiers.head.next;
     identifiers = identifiers.tail;
 
     if (identifiers.isEmpty) {
-      return recoverFromInvalidClassMember(start);
+      return recoverFromInvalidClassMember(token, beforeStart, externalToken,
+          staticToken, covariantToken, varFinalOrConst, typeContinuation);
     }
     Token beforeName = identifiers.head;
     identifiers = identifiers.tail;
@@ -3580,6 +3747,25 @@
       }
     }
 
+    // Recovery: Anything left in the identifiers list is unexpected.
+    if (identifiers.isNotEmpty) {
+      identifiers = identifiers.reverse();
+      while (identifiers.isNotEmpty) {
+        token = identifiers.head.next;
+        identifiers = identifiers.tail;
+        String value = token.stringValue;
+        if (identical(value, 'class')) {
+          return reportAndSkipClassInClass(token);
+        } else if (identical(value, 'enum')) {
+          return reportAndSkipEnumInClass(token);
+        } else if (identical(value, 'typedef')) {
+          return reportAndSkipTypedefInClass(token);
+        } else {
+          reportRecoverableErrorWithToken(token, fasta.templateUnexpectedToken);
+        }
+      }
+    }
+
     token = afterName;
     bool isField;
     while (true) {
@@ -3603,14 +3789,16 @@
           isField = true;
         }
         break;
-      } else if ((identical(value, '=')) || (identical(value, ','))) {
+      } else if (identical(value, '=') ||
+          identical(value, ',') ||
+          identical(value, '}')) {
         isField = true;
         break;
       } else {
         token = reportUnexpectedToken(token);
         if (identical(token.next.kind, EOF_TOKEN)) {
           // TODO(ahe): This is a hack, see parseTopLevelMember.
-          listener.endFields(1, start.next, token.next);
+          listener.endFields(1, beforeStart.next, token.next);
           listener.endMember();
           return token;
         }
@@ -3618,97 +3806,95 @@
       }
     }
 
-    Token lastModifier = identifiers.isNotEmpty ? identifiers.head.next : start;
-    token = isField
-        ? parseFields(start, lastModifier, beforeName, false)
-        : parseMethod(start, lastModifier, beforeType, getOrSet, beforeName);
+    if (isField) {
+      if (getOrSet != null) {
+        reportRecoverableErrorWithToken(
+            getOrSet, fasta.templateExtraneousModifier);
+      }
+      token = parseFields(
+          beforeStart,
+          externalToken,
+          staticToken,
+          covariantToken,
+          varFinalOrConst,
+          beforeType,
+          beforeName,
+          staticToken != null
+              ? MemberKind.StaticField
+              : MemberKind.NonStaticField,
+          typeContinuation);
+    } else {
+      token = parseMethod(beforeStart, externalToken, staticToken,
+          covariantToken, varFinalOrConst, beforeType, getOrSet, beforeName);
+    }
     listener.endMember();
     return token;
   }
 
-  Token parseMethod(Token token, Token lastModifier, Token beforeType,
-      Token getOrSet, Token beforeName) {
-    Token beforeToken = token;
-    Token start = token = token.next;
-    Token name = beforeName.next;
+  Token parseMethod(
+      Token beforeStart,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token varFinalOrConst,
+      Token beforeType,
+      Token getOrSet,
+      Token beforeName) {
+    bool isOperator = getOrSet == null && optional('operator', beforeName.next);
 
-    Token externalModifier;
-    Token staticModifier;
-    if (token != lastModifier.next) {
-      int modifierCount = 0;
-      if (optional('external', token)) {
-        externalModifier = token;
-        parseModifier(beforeToken);
-        ++modifierCount;
-        beforeToken = token;
-        token = token.next;
-      }
-      if (token != lastModifier.next) {
-        if (optional('static', token)) {
-          staticModifier = token;
-          parseModifier(beforeToken);
-          ++modifierCount;
-          beforeToken = token;
-          token = token.next;
-        }
-        if (token != lastModifier.next) {
-          if (getOrSet == null) {
-            if (optional("const", token)) {
-              if (token.next == lastModifier.next) {
-                parseModifier(beforeToken);
-                ++modifierCount;
-                beforeToken = token;
-                token = token.next;
-              }
-            }
-          } else if (optional('set', getOrSet)) {
-            if (staticModifier == null && optional('covariant', token)) {
-              if (token.next == lastModifier.next) {
-                parseModifier(beforeToken);
-                ++modifierCount;
-                beforeToken = token;
-                token = token.next;
-              }
-            }
-          }
-          // If the next token is a modifier,
-          // then it's probably out of order and we need to recover from that.
-          if (token != lastModifier.next) {
-            final context = new ClassMethodModifierContext(this);
-            token = context.parseRecovery(beforeToken, externalModifier,
-                staticModifier, getOrSet, lastModifier);
-
-            // If the modifiers form a partial top level directive
-            // or declaration and we have found the start of a new top level
-            // declaration then return to parse that new declaration.
-            if (context.endInvalidMemberToken != null) {
-              listener.handleInvalidMember(context.endInvalidMemberToken);
-              return context.endInvalidMemberToken;
-            }
-
-            externalModifier = context.externalToken;
-            staticModifier = context.staticToken;
-            modifierCount = context.modifierCount;
-          }
-        }
-      }
-      listener.beginMethod(start, name);
-      listener.handleModifiers(modifierCount);
-    } else {
-      listener.beginMethod(start, name);
-      listener.handleModifiers(0);
+    int modifierCount = 0;
+    if (externalToken != null) {
+      listener.handleModifier(externalToken);
+      ++modifierCount;
     }
+    if (staticToken != null) {
+      if (!isOperator) {
+        listener.handleModifier(staticToken);
+        ++modifierCount;
+      } else {
+        reportRecoverableError(staticToken, fasta.messageStaticOperator);
+        staticToken = null;
+      }
+    } else if (covariantToken != null) {
+      if (getOrSet != null && !optional('get', getOrSet)) {
+        listener.handleModifier(covariantToken);
+        ++modifierCount;
+      } else {
+        reportRecoverableError(covariantToken, fasta.messageCovariantMember);
+        covariantToken = null;
+      }
+    }
+    if (varFinalOrConst != null) {
+      if (optional('const', varFinalOrConst)) {
+        if (getOrSet == null) {
+          listener.handleModifier(varFinalOrConst);
+          ++modifierCount;
+        } else {
+          reportRecoverableErrorWithToken(
+              varFinalOrConst, fasta.templateExtraneousModifier);
+          varFinalOrConst = null;
+        }
+      } else if (optional('var', varFinalOrConst)) {
+        reportRecoverableError(varFinalOrConst, fasta.messageVarReturnType);
+      } else {
+        assert(optional('final', varFinalOrConst));
+        reportRecoverableErrorWithToken(
+            varFinalOrConst, fasta.templateExtraneousModifier);
+      }
+    }
+    // TODO(danrubel): Move beginMethod event before handleModifier events
+    listener.beginMethod();
+    listener.handleModifiers(modifierCount);
 
     if (beforeType == null) {
-      listener.handleNoType(name);
+      listener.handleNoType(beforeName);
     } else {
       parseType(beforeType, TypeContinuation.Optional);
     }
-    if (getOrSet == null && optional('operator', name)) {
+
+    Token token;
+    if (isOperator) {
       token = parseOperatorName(beforeName);
-      if (staticModifier != null) {
-        reportRecoverableError(staticModifier, fasta.messageStaticOperator);
-      }
     } else {
       token = ensureIdentifier(beforeName, IdentifierContext.methodDeclaration);
       token = parseQualifiedRestOpt(
@@ -3722,14 +3908,14 @@
       isGetter = optional("get", getOrSet);
       listener.handleNoTypeVariables(token.next);
     }
-    MemberKind kind = staticModifier != null
+
+    MemberKind kind = staticToken != null
         ? MemberKind.StaticMethod
         : MemberKind.NonStaticMethod;
-    checkFormals(name, isGetter, token.next, kind);
+    checkFormals(beforeName.next, isGetter, token.next, kind);
     token = parseFormalParametersOpt(token, kind);
     token = parseInitializersOpt(token);
 
-    bool allowAbstract = staticModifier == null;
     AsyncModifier savedAsyncModifier = asyncState;
     Token asyncToken = token.next;
     token = parseAsyncModifierOpt(token);
@@ -3737,76 +3923,68 @@
       reportRecoverableError(asyncToken, fasta.messageSetterNotSync);
     }
     Token next = token.next;
-    if (externalModifier != null) {
+    if (externalToken != null) {
       if (!optional(';', next)) {
         reportRecoverableError(next, fasta.messageExternalMethodWithBody);
       }
-      allowAbstract = true;
     }
     if (optional('=', next)) {
       reportRecoverableError(next, fasta.messageRedirectionInNonFactory);
       token = parseRedirectingFactoryBody(token);
     } else {
-      token = parseFunctionBody(token, false, allowAbstract);
+      token = parseFunctionBody(
+          token, false, staticToken == null || externalToken != null);
     }
     asyncState = savedAsyncModifier;
-    listener.endMethod(getOrSet, start, token);
+    listener.endMethod(getOrSet, beforeStart.next, token);
     return token;
   }
 
-  Token parseFactoryMethod(Token token) {
-    Token next = token.next;
-    Token start = next;
-    assert(isFactoryDeclaration(start));
-    Token constToken;
-    Token externalToken;
-    Token factoryKeyword;
+  Token parseFactoryMethod(Token token, Token beforeStart, Token externalToken,
+      Token staticOrCovariant, Token varFinalOrConst) {
+    Token factoryKeyword = token = token.next;
+    assert(optional('factory', factoryKeyword));
 
-    if (optional('factory', next) && !isModifierOrFactory(next.next)) {
-      listener.handleModifiers(0);
-      factoryKeyword = next;
-      token = next;
-      next = token.next;
-    } else {
-      int modifierCount = 0;
-      if (optional('external', next)) {
-        externalToken = next;
-        parseModifier(token);
-        ++modifierCount;
-        token = next;
-        next = token.next;
-      }
-      if (optional('const', next)) {
-        constToken = next;
-        parseModifier(token);
-        ++modifierCount;
-        token = next;
-        next = token.next;
-      }
-      if (optional('factory', next) && !isModifierOrFactory(next.next)) {
-        factoryKeyword = next;
-        token = next;
-        next = token.next;
-      } else {
-        // Recovery
-        FactoryModifierContext context = new FactoryModifierContext(
-            this, modifierCount, externalToken, constToken);
-        token = context.parseRecovery(token);
-        next = token.next;
-        externalToken = context.externalToken;
-        constToken = context.constToken;
-        factoryKeyword = context.factoryKeyword;
-        modifierCount = context.modifierCount;
-      }
-      listener.handleModifiers(modifierCount);
+    if (!isValidTypeReference(token.next)) {
+      // Recovery
+      ModifierRecoveryContext2 context = new ModifierRecoveryContext2(this);
+      token = context.parseModifiersAfterFactory(token,
+          externalToken: externalToken,
+          staticOrCovariant: staticOrCovariant,
+          varFinalOrConst: varFinalOrConst);
+
+      externalToken = context.externalToken;
+      staticOrCovariant = context.staticToken ?? context.covariantToken;
+      varFinalOrConst = context.varFinalOrConst;
     }
 
-    listener.beginFactoryMethod(factoryKeyword);
+    int modifierCount = 0;
+    if (externalToken != null) {
+      listener.handleModifier(externalToken);
+      ++modifierCount;
+    }
+    if (staticOrCovariant != null) {
+      reportRecoverableErrorWithToken(
+          staticOrCovariant, fasta.templateExtraneousModifier);
+    }
+    if (varFinalOrConst != null) {
+      if (optional('const', varFinalOrConst)) {
+        listener.handleModifier(varFinalOrConst);
+        ++modifierCount;
+      } else {
+        reportRecoverableErrorWithToken(
+            varFinalOrConst, fasta.templateExtraneousModifier);
+        varFinalOrConst = null;
+      }
+    }
+    listener.handleModifiers(modifierCount);
+
+    listener.beginFactoryMethod(beforeStart);
     token = parseConstructorReference(token);
     token = parseFormalParametersRequiredOpt(token, MemberKind.Factory);
     Token asyncToken = token.next;
     token = parseAsyncModifierOpt(token);
-    next = token.next;
+    Token next = token.next;
     if (!inPlainSync) {
       reportRecoverableError(asyncToken, fasta.messageFactoryNotSync);
     }
@@ -3821,14 +3999,14 @@
       }
       token = parseFunctionBody(token, false, true);
     } else {
-      if (constToken != null && !optional('native', next)) {
+      if (varFinalOrConst != null && !optional('native', next)) {
         // TODO(danrubel): report error to fix
         // test_constFactory in parser_fasta_test.dart
         //reportRecoverableError(constToken, fasta.messageConstFactory);
       }
       token = parseFunctionBody(token, false, false);
     }
-    listener.endFactoryMethod(start, factoryKeyword, token);
+    listener.endFactoryMethod(beforeStart.next, factoryKeyword, token);
     return token;
   }
 
@@ -4442,7 +4620,7 @@
   Token parseConditionalExpressionRest(Token token) {
     Token question = token = token.next;
     assert(optional('?', question));
-    listener.beginConditionalExpression();
+    listener.beginConditionalExpression(token);
     token = parseExpressionWithoutCascade(token);
     Token colon = ensureColon(token);
     listener.handleConditionalExpressionColon();
@@ -5422,10 +5600,11 @@
         token = modifierContext.parseRecovery(token,
             varFinalOrConst: varFinalOrConst);
 
-        memberKind = modifierContext.memberKind;
-        typeContinuation = modifierContext.typeContinuation;
         varFinalOrConst = modifierContext.varFinalOrConst;
         listener.handleModifiers(modifierContext.modifierCount);
+
+        memberKind = modifierContext.memberKind;
+        typeContinuation = modifierContext.typeContinuation;
         modifierContext = null;
       } else {
         listener.handleModifiers(1);
@@ -6086,54 +6265,43 @@
   /// Recover from finding an invalid class member. The metadata for the member,
   /// if any, has already been parsed (and events have already been generated).
   /// The member was expected to start with the token after [token].
-  Token recoverFromInvalidClassMember(Token token) {
-    Token start = token;
+  Token recoverFromInvalidClassMember(
+      Token token,
+      Token beforeStart,
+      Token externalToken,
+      Token staticToken,
+      Token covariantToken,
+      Token varFinalOrConst,
+      TypeContinuation typeContinuation) {
     Token next = token.next;
+    if (staticToken != null ||
+        covariantToken != null ||
+        varFinalOrConst != null ||
+        next.isIdentifier) {
+      // Looks like a partial field declaration
+      token = parseFields(
+          beforeStart,
+          externalToken,
+          staticToken,
+          covariantToken,
+          varFinalOrConst,
+          null,
+          token,
+          MemberKind.NonStaticField,
+          typeContinuation);
+      listener.endMember();
+      return token;
+    }
     if (optional(';', next)) {
       // Report and skip extra semicolons that appear between members.
       // TODO(brianwilkerson): Provide a more specific error message.
-      reportRecoverableError(
-          next, fasta.templateExpectedClassMember.withArguments(next));
+      reportRecoverableErrorWithToken(next, fasta.templateExpectedClassMember);
       listener.handleInvalidMember(next);
       listener.endMember();
       return next;
     }
-
-    // Skip modifiers
-    while (isModifier(next)) {
-      token = next;
-      next = token.next;
-    }
-    Token lastModifier = token;
-
-    if (isValidTypeReference(next) || optional('var', next)) {
-      if (isPostIdentifierForRecovery(
-          next.next, IdentifierContext.fieldDeclaration)) {
-        // Looks like a field declaration but missing a field name.
-        insertSyntheticIdentifier(next, IdentifierContext.fieldDeclaration);
-        token = parseFields(start, lastModifier, next, false);
-        listener.endMember();
-        return token;
-      } else if (next.next.isKeywordOrIdentifier &&
-          isPostIdentifierForRecovery(
-              next.next.next, IdentifierContext.fieldDeclaration)) {
-        // Looks like a field declaration but missing a semicolon
-        // which parseFields will insert.
-        token = parseFields(start, lastModifier, next, false);
-        listener.endMember();
-        return token;
-      }
-    } else if (token != start &&
-        isPostIdentifierForRecovery(next, IdentifierContext.fieldDeclaration)) {
-      // If there is at least one modifier, then
-      // looks like the start of a field but missing field name.
-      insertSyntheticIdentifier(token, IdentifierContext.fieldDeclaration);
-      token = parseFields(start, lastModifier, token, false);
-      listener.endMember();
-      return token;
-    }
     return reportUnrecoverableErrorWithToken(
-        start, fasta.templateExpectedClassMember);
+        next, fasta.templateExpectedClassMember);
   }
 
   /// Report that the nesting depth of the code being parsed is too large for
@@ -6231,6 +6399,60 @@
         token, fasta.templateUnexpectedToken);
   }
 
+  Token reportAndSkipClassInClass(Token token) {
+    assert(optional('class', token));
+    reportRecoverableError(token, fasta.messageClassInClass);
+    listener.handleInvalidMember(token);
+    Token next = token.next;
+    // If the declaration appears to be a valid class declaration
+    // then skip the entire declaration so that we only generate the one
+    // error (above) rather than a plethora of unhelpful errors.
+    if (next.isIdentifier) {
+      // skip class name
+      token = next;
+      next = token.next;
+      // TODO(danrubel): consider parsing (skipping) the class header
+      // with a recovery listener so that no events are generated
+      if (optional('{', next) && next.endGroup != null) {
+        // skip class body
+        token = next.endGroup;
+      }
+    }
+    return token;
+  }
+
+  Token reportAndSkipEnumInClass(Token token) {
+    assert(optional('enum', token));
+    reportRecoverableError(token, fasta.messageEnumInClass);
+    listener.handleInvalidMember(token);
+    Token next = token.next;
+    // If the declaration appears to be a valid enum declaration
+    // then skip the entire declaration so that we only generate the one
+    // error (above) rather than a plethora of unhelpful errors.
+    if (next.isIdentifier) {
+      // skip enum name
+      token = next;
+      next = token.next;
+      if (optional('{', next) && next.endGroup != null) {
+        // TODO(danrubel): Consider replacing this `skip enum` functionality
+        // with something that can parse and resolve the declaration
+        // even though it is in a class context
+        token = next.endGroup;
+      }
+    }
+    return token;
+  }
+
+  Token reportAndSkipTypedefInClass(Token token) {
+    assert(optional('typedef', token));
+    reportRecoverableError(token, fasta.messageTypedefInClass);
+    listener.handleInvalidMember(token);
+    // TODO(brianwilkerson): If the declaration appears to be a valid typedef
+    // then skip the entire declaration so that we generate a single error
+    // (above) rather than many unhelpful errors.
+    return token;
+  }
+
   /// Create a short token chain from the [beginToken] and [endToken] and return
   /// the [beginToken].
   Token link(BeginToken beginToken, Token endToken) {
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 68e94df..2582768 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -38,6 +38,8 @@
 
 import 'stack_listener.dart' show NullValue, StackListener;
 
+import '../quote.dart' show unescapeString;
+
 class DietListener extends StackListener {
   final SourceLibraryBuilder library;
 
@@ -127,7 +129,7 @@
   }
 
   @override
-  void handleNoType(Token token) {
+  void handleNoType(Token lastConsumed) {
     debugEvent("NoType");
   }
 
@@ -389,6 +391,13 @@
     pop(NullValue.Prefix);
 
     Token metadata = pop();
+
+    // Native imports must be skipped because they aren't assigned corresponding
+    // LibraryDependency nodes.
+    Token importUriToken = importKeyword.next;
+    String importUri = unescapeString(importUriToken.lexeme);
+    if (importUri.startsWith("dart-ext:")) return;
+
     Library libraryNode = library.target;
     LibraryDependency dependency =
         libraryNode.dependencies[importExportDirectiveIndex++];
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index c96b248..7963f3e 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -416,7 +416,7 @@
   }
 
   @override
-  void beginTopLevelMethod(Token token, Token name) {
+  void beginTopLevelMethod(Token lastConsumed) {
     library.beginNestedDeclaration("#method", hasMembers: false);
   }
 
@@ -499,7 +499,7 @@
   }
 
   @override
-  void beginMethod(Token token, Token name) {
+  void beginMethod() {
     library.beginNestedDeclaration("#method", hasMembers: false);
   }
 
@@ -937,7 +937,7 @@
   }
 
   @override
-  void beginFactoryMethod(Token token) {
+  void beginFactoryMethod(Token lastConsumed) {
     library.beginNestedDeclaration("#factory_method", hasMembers: false);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index fac3d9b..7835088 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -234,16 +234,27 @@
       }
     }
 
-    imports.add(new Import(
-        this,
-        loader.read(resolve(this.uri, uri, uriOffset), charOffset,
-            accessor: this),
-        deferred,
-        prefix,
-        combinators,
-        configurations,
-        charOffset,
-        prefixCharOffset));
+    const String nativeExtensionScheme = "dart-ext:";
+    bool isExternal = uri.startsWith(nativeExtensionScheme);
+    if (isExternal) {
+      uri = uri.substring(nativeExtensionScheme.length);
+      uriOffset += nativeExtensionScheme.length;
+    }
+
+    Uri resolvedUri = resolve(this.uri, uri, uriOffset);
+
+    LibraryBuilder builder = null;
+    if (isExternal) {
+      if (resolvedUri.scheme == "package") {
+        resolvedUri = loader.target.translateUri(resolvedUri);
+      }
+    } else {
+      builder = loader.read(resolvedUri, charOffset, accessor: this);
+    }
+
+    imports.add(new Import(this, builder, deferred, prefix, combinators,
+        configurations, charOffset, prefixCharOffset,
+        nativeImportUri: builder == null ? resolvedUri : null));
   }
 
   void addPart(List<MetadataBuilder> metadata, String uri, int charOffset) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 9c361ef..c615c57 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -490,6 +490,7 @@
       coreLibrary["num"],
       coreLibrary["double"],
       coreLibrary["String"],
+      coreLibrary["Null"],
     ]);
     for (ClassBuilder cls in classes) {
       if (cls.library.loader != this) continue;
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener.dart b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
index 1c0c539..8545689 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -224,7 +224,7 @@
   }
 
   @override
-  void handleNoType(Token token) {
+  void handleNoType(Token lastConsumed) {
     debugEvent("NoType");
     push(NullValue.Type);
   }
diff --git a/pkg/front_end/lib/src/fasta/target_implementation.dart b/pkg/front_end/lib/src/fasta/target_implementation.dart
index 938f7cae..5abbd00 100644
--- a/pkg/front_end/lib/src/fasta/target_implementation.dart
+++ b/pkg/front_end/lib/src/fasta/target_implementation.dart
@@ -31,6 +31,7 @@
   Builder cachedDuplicatedFieldInitializerError;
   Builder cachedFallThroughError;
   Builder cachedNativeAnnotation;
+  Builder cachedNativeExtensionAnnotation;
 
   TargetImplementation(Ticker ticker, this.uriTranslator, this.backendTarget)
       : super(ticker);
diff --git a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
index 54dd9e5..caa6991 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/interface_resolver.dart
@@ -6,6 +6,7 @@
 import 'package:front_end/src/fasta/builder/library_builder.dart';
 import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
 import 'package:front_end/src/fasta/messages.dart';
+import 'package:front_end/src/fasta/names.dart';
 import 'package:front_end/src/fasta/problems.dart';
 import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
 import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
@@ -1159,7 +1160,8 @@
   void resolveInternal() {
     var declaredMethod = _declaredMethod;
     var overriddenTypes = _computeMethodOverriddenTypes();
-    if (ShadowProcedure.hasImplicitReturnType(declaredMethod)) {
+    if (ShadowProcedure.hasImplicitReturnType(declaredMethod) &&
+        _declaredMethod.name != indexSetName) {
       declaredMethod.function.returnType = _matchTypes(
           overriddenTypes.map((type) => type.returnType),
           declaredMethod.name.name,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
index 1de0b4d..df2cd7f 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
@@ -10,10 +10,8 @@
 /// By default no debug info is printed.  To enable debug printing, mix in
 /// [TypeInferenceDebugging].
 class TypeInferenceBase {
-  bool genericExpressionEnter(
-      String expressionType, Expression expression, DartType typeContext) {
-    return false;
-  }
+  void genericExpressionEnter(
+      String expressionType, Expression expression, DartType typeContext) {}
 
   void genericExpressionExit(
       String expressionType, Expression expression, DartType inferredType) {}
@@ -91,10 +89,8 @@
 /// The interface is structured as a set of enter/exit methods.  The enter
 /// methods are called as the inferrer recurses down through the AST, and the
 /// exit methods are called on the way back up.  The enter methods take a
-/// [DartType] argument representing the downwards inference context, and return
-/// a bool indicating whether the TypeInferenceListener needs to know the final
-/// inferred type; the exit methods take [DartType] argument representing the
-/// final inferred type.
+/// [DartType] argument representing the downwards inference context; the exit
+/// methods take [DartType] argument representing the final inferred type.
 ///
 /// The default implementation (in this base class) does nothing, however it can
 /// be used to debug type inference by uncommenting the
@@ -102,7 +98,7 @@
 class TypeInferenceListener
     extends TypeInferenceBase // with TypeInferenceDebugging
 {
-  bool asExpressionEnter(AsExpression expression, DartType typeContext) =>
+  void asExpressionEnter(AsExpression expression, DartType typeContext) =>
       genericExpressionEnter("asExpression", expression, typeContext);
 
   void asExpressionExit(AsExpression expression, DartType inferredType) =>
@@ -120,7 +116,7 @@
   void assertStatementExit(AssertStatement statement) =>
       genericStatementExit('assertStatement', statement);
 
-  bool awaitExpressionEnter(AwaitExpression expression, DartType typeContext) =>
+  void awaitExpressionEnter(AwaitExpression expression, DartType typeContext) =>
       genericExpressionEnter("awaitExpression", expression, typeContext);
 
   void awaitExpressionExit(AwaitExpression expression, DartType inferredType) =>
@@ -130,7 +126,7 @@
 
   void blockExit(Block statement) => genericStatementExit('block', statement);
 
-  bool boolLiteralEnter(BoolLiteral expression, DartType typeContext) =>
+  void boolLiteralEnter(BoolLiteral expression, DartType typeContext) =>
       genericExpressionEnter("boolLiteral", expression, typeContext);
 
   void boolLiteralExit(BoolLiteral expression, DartType inferredType) =>
@@ -142,7 +138,7 @@
   void breakStatementExit(BreakStatement statement) =>
       genericStatementExit('breakStatement', statement);
 
-  bool cascadeExpressionEnter(Let expression, DartType typeContext) =>
+  void cascadeExpressionEnter(Let expression, DartType typeContext) =>
       genericExpressionEnter("cascade", expression, typeContext);
 
   void cascadeExpressionExit(Let expression, DartType inferredType) =>
@@ -152,7 +148,7 @@
 
   void catchStatementExit(Catch statement) {}
 
-  bool conditionalExpressionEnter(
+  void conditionalExpressionEnter(
           ConditionalExpression expression, DartType typeContext) =>
       genericExpressionEnter("conditionalExpression", expression, typeContext);
 
@@ -160,7 +156,7 @@
           ConditionalExpression expression, DartType inferredType) =>
       genericExpressionExit("conditionalExpression", expression, inferredType);
 
-  bool constructorInvocationEnter(InvocationExpression expression,
+  void constructorInvocationEnter(InvocationExpression expression,
           String prefixName, DartType typeContext) =>
       genericExpressionEnter("constructorInvocation", expression, typeContext);
 
@@ -174,13 +170,19 @@
   void continueSwitchStatementExit(ContinueSwitchStatement statement) =>
       genericStatementExit('continueSwitchStatement', statement);
 
+  void deferredCheckEnter(Let expression, DartType typeContext) =>
+      genericExpressionEnter("deferredCheck", expression, typeContext);
+
+  void deferredCheckExit(Let expression, DartType inferredType) =>
+      genericExpressionExit("deferredCheck", expression, inferredType);
+
   void doStatementEnter(DoStatement statement) =>
       genericStatementEnter("doStatement", statement);
 
   void doStatementExit(DoStatement statement) =>
       genericStatementExit("doStatement", statement);
 
-  bool doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) =>
+  void doubleLiteralEnter(DoubleLiteral expression, DartType typeContext) =>
       genericExpressionEnter("doubleLiteral", expression, typeContext);
 
   void doubleLiteralExit(DoubleLiteral expression, DartType inferredType) =>
@@ -224,7 +226,7 @@
   void functionDeclarationExit(FunctionDeclaration statement) =>
       genericStatementExit('functionDeclaration', statement);
 
-  bool functionExpressionEnter(
+  void functionExpressionEnter(
           FunctionExpression expression, DartType typeContext) =>
       genericExpressionEnter("functionExpression", expression, typeContext);
 
@@ -234,7 +236,7 @@
 
   void ifNullBeforeRhs(Expression expression) {}
 
-  bool ifNullEnter(Expression expression, DartType typeContext) =>
+  void ifNullEnter(Expression expression, DartType typeContext) =>
       genericExpressionEnter('ifNull', expression, typeContext);
 
   void ifNullExit(Expression expression, DartType inferredType) =>
@@ -248,14 +250,14 @@
 
   void indexAssignAfterReceiver(Expression expression, DartType typeContext) {}
 
-  bool indexAssignEnter(Expression expression, DartType typeContext) =>
+  void indexAssignEnter(Expression expression, DartType typeContext) =>
       genericExpressionEnter("indexAssign", expression, typeContext);
 
   void indexAssignExit(Expression expression, Expression write,
           Member writeMember, Procedure combiner, DartType inferredType) =>
       genericExpressionExit("indexAssign", expression, inferredType);
 
-  bool intLiteralEnter(IntLiteral expression, DartType typeContext) =>
+  void intLiteralEnter(IntLiteral expression, DartType typeContext) =>
       genericExpressionEnter("intLiteral", expression, typeContext);
 
   void intLiteralExit(IntLiteral expression, DartType inferredType) =>
@@ -267,13 +269,13 @@
   void invalidInitializerExit(LocalInitializer initializer) =>
       genericInitializerExit("invalidInitializer", initializer);
 
-  bool isExpressionEnter(IsExpression expression, DartType typeContext) =>
+  void isExpressionEnter(IsExpression expression, DartType typeContext) =>
       genericExpressionEnter("isExpression", expression, typeContext);
 
   void isExpressionExit(IsExpression expression, DartType inferredType) =>
       genericExpressionExit("isExpression", expression, inferredType);
 
-  bool isNotExpressionEnter(Not expression, DartType typeContext) =>
+  void isNotExpressionEnter(Not expression, DartType typeContext) =>
       genericExpressionEnter("isNotExpression", expression, typeContext);
 
   void isNotExpressionExit(
@@ -286,7 +288,7 @@
   void labeledStatementExit(LabeledStatement statement) =>
       genericStatementExit('labeledStatement', statement);
 
-  bool listLiteralEnter(ListLiteral expression, DartType typeContext) =>
+  void listLiteralEnter(ListLiteral expression, DartType typeContext) =>
       genericExpressionEnter("listLiteral", expression, typeContext);
 
   void listLiteralExit(ListLiteral expression, DartType inferredType) =>
@@ -294,7 +296,7 @@
 
   void logicalExpressionBeforeRhs(LogicalExpression expression) {}
 
-  bool logicalExpressionEnter(
+  void logicalExpressionEnter(
           LogicalExpression expression, DartType typeContext) =>
       genericExpressionEnter("logicalExpression", expression, typeContext);
 
@@ -302,7 +304,7 @@
           LogicalExpression expression, DartType inferredType) =>
       genericExpressionExit("logicalExpression", expression, inferredType);
 
-  bool mapLiteralEnter(MapLiteral expression, DartType typeContext) =>
+  void mapLiteralEnter(MapLiteral expression, DartType typeContext) =>
       genericExpressionEnter("mapLiteral", expression, typeContext);
 
   void mapLiteralExit(MapLiteral expression, DartType typeContext) =>
@@ -310,7 +312,7 @@
 
   void methodInvocationBeforeArgs(Expression expression, bool isImplicitCall) {}
 
-  bool methodInvocationEnter(Expression expression, DartType typeContext) =>
+  void methodInvocationEnter(Expression expression, DartType typeContext) =>
       genericExpressionEnter("methodInvocation", expression, typeContext);
 
   void methodInvocationExit(
@@ -332,7 +334,7 @@
           DartType inferredType) =>
       genericExpressionExit("methodInvocation", expression, inferredType);
 
-  bool namedFunctionExpressionEnter(Let expression, DartType typeContext) =>
+  void namedFunctionExpressionEnter(Let expression, DartType typeContext) =>
       genericExpressionEnter(
           "namedFunctionExpression", expression, typeContext);
 
@@ -340,19 +342,19 @@
       genericExpressionExit(
           "namedFunctionExpression", expression, inferredType);
 
-  bool notEnter(Not expression, DartType typeContext) =>
+  void notEnter(Not expression, DartType typeContext) =>
       genericExpressionEnter("not", expression, typeContext);
 
   void notExit(Not expression, DartType inferredType) =>
       genericExpressionExit("not", expression, inferredType);
 
-  bool nullLiteralEnter(NullLiteral expression, DartType typeContext) =>
+  void nullLiteralEnter(NullLiteral expression, DartType typeContext) =>
       genericExpressionEnter("nullLiteral", expression, typeContext);
 
   void nullLiteralExit(NullLiteral expression, DartType inferredType) =>
       genericExpressionExit("nullLiteral", expression, inferredType);
 
-  bool propertyAssignEnter(
+  void propertyAssignEnter(
           Expression expression, Expression write, DartType typeContext) =>
       genericExpressionEnter("propertyAssign", expression, typeContext);
 
@@ -365,7 +367,7 @@
           DartType inferredType) =>
       genericExpressionExit("propertyAssign", expression, inferredType);
 
-  bool propertyGetEnter(Expression expression, DartType typeContext) =>
+  void propertyGetEnter(Expression expression, DartType typeContext) =>
       genericExpressionEnter("propertyGet", expression, typeContext);
 
   void propertyGetExit(
@@ -375,7 +377,7 @@
   void propertyGetExitCall(Expression expression, DartType inferredType) =>
       genericExpressionExit("propertyGet", expression, inferredType);
 
-  bool propertySetEnter(PropertySet expression, DartType typeContext) =>
+  void propertySetEnter(PropertySet expression, DartType typeContext) =>
       genericExpressionEnter("propertySet", expression, typeContext);
 
   void propertySetExit(PropertySet expression, DartType inferredType) =>
@@ -387,7 +389,7 @@
   void redirectingInitializerExit(RedirectingInitializer initializer) =>
       genericInitializerExit("redirectingInitializer", initializer);
 
-  bool rethrowEnter(Rethrow expression, DartType typeContext) =>
+  void rethrowEnter(Rethrow expression, DartType typeContext) =>
       genericExpressionEnter('rethrow', expression, typeContext);
 
   void rethrowExit(Rethrow expression, DartType inferredType) =>
@@ -399,7 +401,7 @@
   void returnStatementExit(ReturnStatement statement) =>
       genericStatementExit('returnStatement', statement);
 
-  bool staticAssignEnter(
+  void staticAssignEnter(
           Expression expression,
           String prefixName,
           int targetOffset,
@@ -417,14 +419,14 @@
           DartType inferredType) =>
       genericExpressionExit("staticAssign", expression, inferredType);
 
-  bool staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
+  void staticGetEnter(StaticGet expression, String prefixName, int targetOffset,
           Class targetClass, DartType typeContext) =>
       genericExpressionEnter("staticGet", expression, typeContext);
 
   void staticGetExit(StaticGet expression, DartType inferredType) =>
       genericExpressionExit("staticGet", expression, inferredType);
 
-  bool staticInvocationEnter(StaticInvocation expression, String prefixName,
+  void staticInvocationEnter(StaticInvocation expression, String prefixName,
           int targetOffset, Class targetClass, DartType typeContext) =>
       genericExpressionEnter("staticInvocation", expression, typeContext);
 
@@ -435,7 +437,7 @@
           DartType inferredType) =>
       genericExpressionExit("staticInvocation", expression, inferredType);
 
-  bool stringConcatenationEnter(
+  void stringConcatenationEnter(
           StringConcatenation expression, DartType typeContext) =>
       genericExpressionEnter("stringConcatenation", expression, typeContext);
 
@@ -443,7 +445,7 @@
           StringConcatenation expression, DartType inferredType) =>
       genericExpressionExit("stringConcatenation", expression, inferredType);
 
-  bool stringLiteralEnter(StringLiteral expression, DartType typeContext) =>
+  void stringLiteralEnter(StringLiteral expression, DartType typeContext) =>
       genericExpressionEnter("StringLiteral", expression, typeContext);
 
   void stringLiteralExit(StringLiteral expression, DartType inferredType) =>
@@ -461,19 +463,19 @@
   void switchStatementExit(SwitchStatement statement) =>
       genericStatementExit('switchStatement', statement);
 
-  bool symbolLiteralEnter(SymbolLiteral expression, DartType typeContext) =>
+  void symbolLiteralEnter(SymbolLiteral expression, DartType typeContext) =>
       genericExpressionEnter("symbolLiteral", expression, typeContext);
 
   void symbolLiteralExit(SymbolLiteral expression, DartType inferredType) =>
       genericExpressionExit("symbolLiteral", expression, inferredType);
 
-  bool thisExpressionEnter(ThisExpression expression, DartType typeContext) =>
+  void thisExpressionEnter(ThisExpression expression, DartType typeContext) =>
       genericExpressionEnter("thisExpression", expression, typeContext);
 
   void thisExpressionExit(ThisExpression expression, DartType inferredType) =>
       genericExpressionExit("thisExpression", expression, inferredType);
 
-  bool throwEnter(Throw expression, DartType typeContext) =>
+  void throwEnter(Throw expression, DartType typeContext) =>
       genericExpressionEnter('throw', expression, typeContext);
 
   void throwExit(Throw expression, DartType inferredType) =>
@@ -491,14 +493,14 @@
   void tryFinallyExit(TryFinally statement) =>
       genericStatementExit('tryFinally', statement);
 
-  bool typeLiteralEnter(
+  void typeLiteralEnter(
           TypeLiteral expression, String prefixName, DartType typeContext) =>
       genericExpressionEnter("typeLiteral", expression, typeContext);
 
   void typeLiteralExit(TypeLiteral expression, DartType inferredType) =>
       genericExpressionExit("typeLiteral", expression, inferredType);
 
-  bool variableAssignEnter(
+  void variableAssignEnter(
           Expression expression, DartType typeContext, Expression write) =>
       genericExpressionEnter("variableAssign", expression, typeContext);
 
@@ -513,13 +515,13 @@
           VariableDeclaration statement, DartType inferredType) =>
       genericStatementExit('variableDeclaration', statement);
 
-  bool variableGetEnter(VariableGet expression, DartType typeContext) =>
+  void variableGetEnter(VariableGet expression, DartType typeContext) =>
       genericExpressionEnter("variableGet", expression, typeContext);
 
   void variableGetExit(VariableGet expression, DartType inferredType) =>
       genericExpressionExit("variableGet", expression, inferredType);
 
-  bool variableSetEnter(VariableSet expression, DartType typeContext) =>
+  void variableSetEnter(VariableSet expression, DartType typeContext) =>
       genericExpressionEnter("variableSet", expression, typeContext);
 
   void variableSetExit(VariableSet expression, DartType inferredType) =>
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 42119d5..74fc526 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -356,6 +356,10 @@
   /// the last invocation didn't require any inference.
   Substitution lastInferredSubstitution;
 
+  /// The [FunctionType] of the callee in the last [inferInvocation], or `null`
+  /// if the last invocation didn't require any inference.
+  FunctionType lastCalleeType;
+
   TypeInferrerImpl(this.engine, this.uri, this.listener, bool topLevel,
       this.thisType, this.library)
       : coreTypes = engine.coreTypes,
@@ -876,14 +880,30 @@
 
   /// Performs the type inference steps that are shared by all kinds of
   /// invocations (constructors, instance methods, and static methods).
-  DartType inferInvocation(DartType typeContext, bool typeNeeded, int offset,
+  DartType inferInvocation(DartType typeContext, int offset,
       FunctionType calleeType, DartType returnType, Arguments arguments,
       {bool isOverloadedArithmeticOperator: false,
       DartType receiverType,
       bool skipTypeArgumentInference: false,
       bool isConst: false}) {
     lastInferredSubstitution = null;
+    lastCalleeType = null;
     var calleeTypeParameters = calleeType.typeParameters;
+    if (calleeTypeParameters.isNotEmpty) {
+      // It's possible that one of the callee type parameters might match a type
+      // that already exists as part of inference (e.g. the type of an
+      // argument).  This might happen, for instance, in the case where a
+      // function or method makes a recursive call to itself.  To avoid the
+      // callee type parameters accidentally matching a type that already
+      // exists, and creating invalid inference results, we need to create fresh
+      // type parameters for the callee (see dartbug.com/31759).
+      // TODO(paulberry): is it possible to find a narrower set of circumstances
+      // in which me must do this, to avoid a performance regression?
+      var fresh = getFreshTypeParameters(calleeTypeParameters);
+      calleeType = fresh.applyToFunctionType(calleeType);
+      returnType = fresh.substitute(returnType);
+      calleeTypeParameters = fresh.freshTypeParameters;
+    }
     List<DartType> explicitTypeArguments = getExplicitTypeArguments(arguments);
     bool inferenceNeeded = !skipTypeArgumentInference &&
         explicitTypeArguments == null &&
@@ -975,17 +995,16 @@
       }
     }
     DartType inferredType;
-    if (typeNeeded) {
-      lastInferredSubstitution = substitution;
-      inferredType = substitution == null
-          ? returnType
-          : substitution.substituteType(returnType);
-    }
+    lastInferredSubstitution = substitution;
+    lastCalleeType = calleeType;
+    inferredType = substitution == null
+        ? returnType
+        : substitution.substituteType(returnType);
     return inferredType;
   }
 
   DartType inferLocalFunction(FunctionNode function, DartType typeContext,
-      bool typeNeeded, int fileOffset, DartType returnContext) {
+      int fileOffset, DartType returnContext) {
     bool hasImplicitReturnType = returnContext == null;
     if (!isTopLevel) {
       var positionalParameters = function.positionalParameters;
@@ -1125,7 +1144,7 @@
           closureContext._wrapAsyncOrGenerator(this, const DynamicType());
     }
     this.closureContext = oldClosureContext;
-    return typeNeeded ? function.functionType : null;
+    return function.functionType;
   }
 
   @override
@@ -1145,20 +1164,14 @@
 
   /// Performs the core type inference algorithm for method invocations (this
   /// handles both null-aware and non-null-aware method invocations).
-  DartType inferMethodInvocation(
-      Expression expression,
-      Expression receiver,
-      int fileOffset,
-      bool isImplicitCall,
-      DartType typeContext,
-      bool typeNeeded,
+  DartType inferMethodInvocation(Expression expression, Expression receiver,
+      int fileOffset, bool isImplicitCall, DartType typeContext,
       {VariableDeclaration receiverVariable,
       MethodInvocation desugaredInvocation,
       Object interfaceMember,
       Name methodName,
       Arguments arguments}) {
-    typeNeeded =
-        listener.methodInvocationEnter(expression, typeContext) || typeNeeded;
+    listener.methodInvocationEnter(expression, typeContext);
     // First infer the receiver so we can look up the method that was invoked.
     var receiverType =
         receiver == null ? thisType : inferExpression(receiver, null, true);
@@ -1182,22 +1195,23 @@
     var checkKind = preCheckInvocationContravariance(receiver, receiverType,
         interfaceMember, desugaredInvocation, arguments, expression);
     var inferredType = inferInvocation(
-        typeContext,
-        typeNeeded || checkKind != MethodContravarianceCheckKind.none,
-        fileOffset,
-        calleeType,
-        calleeType.returnType,
-        arguments,
+        typeContext, fileOffset, calleeType, calleeType.returnType, arguments,
         isOverloadedArithmeticOperator: isOverloadedArithmeticOperator,
         receiverType: receiverType);
     handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
         expression, inferredType, calleeType, fileOffset);
     if (identical(interfaceMember, 'call')) {
       listener.methodInvocationExitCall(expression, arguments, isImplicitCall,
-          calleeType, lastInferredSubstitution, inferredType);
+          lastCalleeType, lastInferredSubstitution, inferredType);
     } else {
-      listener.methodInvocationExit(expression, arguments, isImplicitCall,
-          interfaceMember, calleeType, lastInferredSubstitution, inferredType);
+      listener.methodInvocationExit(
+          expression,
+          arguments,
+          isImplicitCall,
+          interfaceMember,
+          lastCalleeType,
+          lastInferredSubstitution,
+          inferredType);
     }
     return inferredType;
   }
@@ -1217,13 +1231,12 @@
   /// Performs the core type inference algorithm for property gets (this handles
   /// both null-aware and non-null-aware property gets).
   DartType inferPropertyGet(Expression expression, Expression receiver,
-      int fileOffset, DartType typeContext, bool typeNeeded,
+      int fileOffset, DartType typeContext,
       {VariableDeclaration receiverVariable,
       PropertyGet desugaredGet,
       Object interfaceMember,
       Name propertyName}) {
-    typeNeeded =
-        listener.propertyGetEnter(expression, typeContext) || typeNeeded;
+    listener.propertyGetEnter(expression, typeContext);
     // First infer the receiver so we can look up the getter that was invoked.
     var receiverType =
         receiver == null ? thisType : inferExpression(receiver, null, true);
@@ -1254,7 +1267,7 @@
     } else {
       listener.propertyGetExit(expression, interfaceMember, inferredType);
     }
-    return typeNeeded ? inferredType : null;
+    return inferredType;
   }
 
   /// Modifies a type as appropriate when inferring a closure return type.
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart b/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart
index 1ebb9ae..d40ee3d 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart
@@ -222,7 +222,7 @@
     // appropriate facts for the case where the expression gets short-cut.
     bool isAnd = identical(operator, '&&');
     _currentScope =
-        new _LogicalScope(_currentScope, isAnd ? falseFacts : trueFacts);
+        new _LogicalScope(_currentScope, isAnd, isAnd ? falseFacts : trueFacts);
     // While processing the RHS, assume the condition was false or true,
     // depending on the type of logical expression.
     _currentFacts = isAnd ? trueFacts : falseFacts;
@@ -254,8 +254,15 @@
     debugEvent('exitLogicalExpression');
     _LogicalScope scope = _currentScope;
     _currentScope = _currentScope._enclosing;
-    _recordPromotionExpression(logicalExpression, _factsWhenTrue(rhs),
-        _mergeFacts(scope.shortcutFacts, _currentFacts));
+    if (scope.isAnd) {
+      _recordPromotionExpression(logicalExpression, _factsWhenTrue(rhs),
+          _mergeFacts(scope.shortcutFacts, _currentFacts));
+    } else {
+      _recordPromotionExpression(
+          logicalExpression,
+          _mergeFacts(scope.shortcutFacts, _currentFacts),
+          _factsWhenFalse(rhs));
+    }
   }
 
   @override
@@ -680,10 +687,13 @@
 
 /// [TypePromotionScope] representing the RHS of a logical expression.
 class _LogicalScope extends TypePromotionScope {
+  /// Indicates whether the logical operation is an `&&` or an `||`.
+  final bool isAnd;
+
   /// The fact state in effect if the logical expression gets short-cut.
   final TypePromotionFact shortcutFacts;
 
-  _LogicalScope(TypePromotionScope enclosing, this.shortcutFacts)
+  _LogicalScope(TypePromotionScope enclosing, this.isAnd, this.shortcutFacts)
       : super(enclosing);
 }
 
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 885b361..2fd52f9 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1827,3 +1827,8 @@
 AmbiguousSupertypes:
   template: "'#name' can't implement both '#type' and '#type2'"
   severity: ERROR
+
+CantUseSuperBoundedTypeForInstanceCreation:
+  template: "Can't use a super-bounded type for instance creation. Got '#type'."
+  tip: "Specify a regular-bounded type instead of the super-bounded type. Note that the latter may be due to type inference."
+  severity: ERROR
diff --git a/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart b/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
index eede59b..76dd52c 100644
--- a/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/interface_resolver_test.dart
@@ -123,10 +123,10 @@
       } else if (expression is SuperPropertySet) {
         return expression.interfaceTarget;
       } else {
-        throw fail('Unexpected expression type: ${expression.runtimeType}');
+        fail('Unexpected expression type: ${expression.runtimeType}');
       }
     } else {
-      throw fail('Unexpected body type: ${body.runtimeType}');
+      fail('Unexpected body type: ${body.runtimeType}');
     }
   }
 
diff --git a/pkg/front_end/test/src/incremental/kernel_driver_test.dart b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
index 94252e4..28554bd 100644
--- a/pkg/front_end/test/src/incremental/kernel_driver_test.dart
+++ b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
@@ -1020,14 +1020,14 @@
         if (result.library.importUri == uri) return result.library;
       }
     }
-    throw fail('No library found with URI "$uri"');
+    fail('No library found with URI "$uri"');
   }
 
   Library _getLibraryFromProgram(Program program, Uri uri) {
     for (var library in program.libraries) {
       if (library.importUri == uri) return library;
     }
-    throw fail('No library found with URI "$uri"');
+    fail('No library found with URI "$uri"');
   }
 
   String _getLibraryText(Library library) {
diff --git a/pkg/front_end/testcases/DeltaBlue.dart.direct.expect b/pkg/front_end/testcases/DeltaBlue.dart.direct.expect
index 5fe6554..a4c7894 100644
--- a/pkg/front_end/testcases/DeltaBlue.dart.direct.expect
+++ b/pkg/front_end/testcases/DeltaBlue.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class DeltaBlue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method run() → void {
@@ -256,7 +256,7 @@
 }
 class Planner extends core::Object {
   field core::int currentMark = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method incrementalAdd(self::Constraint c) → void {
@@ -353,7 +353,7 @@
 }
 class Plan extends core::Object {
   field core::List<self::Constraint> list = <self::Constraint>[];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method addConstraint(self::Constraint c) → void {
diff --git a/pkg/front_end/testcases/DeltaBlue.dart.outline.expect b/pkg/front_end/testcases/DeltaBlue.dart.outline.expect
index c668666..38bd492 100644
--- a/pkg/front_end/testcases/DeltaBlue.dart.outline.expect
+++ b/pkg/front_end/testcases/DeltaBlue.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class DeltaBlue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method run() → void
     ;
@@ -151,7 +151,7 @@
 }
 class Planner extends core::Object {
   field core::int currentMark;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method incrementalAdd(self::Constraint c) → void
     ;
@@ -172,7 +172,7 @@
 }
 class Plan extends core::Object {
   field core::List<self::Constraint> list;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method addConstraint(self::Constraint c) → void
     ;
diff --git a/pkg/front_end/testcases/accessors.dart.direct.expect b/pkg/front_end/testcases/accessors.dart.direct.expect
index 7b53204..342baaf 100644
--- a/pkg/front_end/testcases/accessors.dart.direct.expect
+++ b/pkg/front_end/testcases/accessors.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set onlySetter(dynamic value) → void {
@@ -25,7 +25,7 @@
   }
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   get onlySetter() → core::String
diff --git a/pkg/front_end/testcases/accessors.dart.outline.expect b/pkg/front_end/testcases/accessors.dart.outline.expect
index 3a6317e..e8ed7db 100644
--- a/pkg/front_end/testcases/accessors.dart.outline.expect
+++ b/pkg/front_end/testcases/accessors.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set onlySetter(dynamic value) → void
     ;
@@ -13,7 +13,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get onlySetter() → core::String
     ;
diff --git a/pkg/front_end/testcases/annotation_top.dart.direct.expect b/pkg/front_end/testcases/annotation_top.dart.direct.expect
index a15415c..69d3ebe 100644
--- a/pkg/front_end/testcases/annotation_top.dart.direct.expect
+++ b/pkg/front_end/testcases/annotation_top.dart.direct.expect
@@ -18,7 +18,7 @@
 @self::a
 @self::A::•(2)
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/annotation_top.dart.outline.expect b/pkg/front_end/testcases/annotation_top.dart.outline.expect
index bf307ac..234cc3b 100644
--- a/pkg/front_end/testcases/annotation_top.dart.outline.expect
+++ b/pkg/front_end/testcases/annotation_top.dart.outline.expect
@@ -9,7 +9,7 @@
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static const field core::Object a;
diff --git a/pkg/front_end/testcases/annotation_top.dart.strong.expect b/pkg/front_end/testcases/annotation_top.dart.strong.expect
index a15415c..69d3ebe 100644
--- a/pkg/front_end/testcases/annotation_top.dart.strong.expect
+++ b/pkg/front_end/testcases/annotation_top.dart.strong.expect
@@ -18,7 +18,7 @@
 @self::a
 @self::A::•(2)
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/argument.dart.direct.expect b/pkg/front_end/testcases/argument.dart.direct.expect
index bade0cb..3eb116b 100644
--- a/pkg/front_end/testcases/argument.dart.direct.expect
+++ b/pkg/front_end/testcases/argument.dart.direct.expect
@@ -3,22 +3,22 @@
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Foo extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
 class Bar extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
 class Baz extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/argument.dart.outline.expect b/pkg/front_end/testcases/argument.dart.outline.expect
index 525fe92..1e18667 100644
--- a/pkg/front_end/testcases/argument.dart.outline.expect
+++ b/pkg/front_end/testcases/argument.dart.outline.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Foo extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Bar extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Baz extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method foo(dynamic x) → void
diff --git a/pkg/front_end/testcases/argument.dart.strong.expect b/pkg/front_end/testcases/argument.dart.strong.expect
index bade0cb..3eb116b 100644
--- a/pkg/front_end/testcases/argument.dart.strong.expect
+++ b/pkg/front_end/testcases/argument.dart.strong.expect
@@ -3,22 +3,22 @@
 import "dart:core" as core;
 
 abstract class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Foo extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
 class Bar extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
 class Baz extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/ast_builder.status b/pkg/front_end/testcases/ast_builder.status
index 55d5d5f..4e4c471 100644
--- a/pkg/front_end/testcases/ast_builder.status
+++ b/pkg/front_end/testcases/ast_builder.status
@@ -23,6 +23,7 @@
 function_type_recovery: Crash
 illegal_named_function_expression: Crash
 illegal_named_function_expression_scope: Crash
+implicit_new: Crash
 implicit_scope_test: Crash
 inference/abstract_class_instantiation: Crash
 inference/assert_initializer: Crash
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
index c2af184..f67b6d5 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → dynamic
@@ -12,7 +12,7 @@
     let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → dynamic
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
index 4e1301b..1f7abc8 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set a(dynamic #synthetic) → dynamic
     ;
@@ -11,7 +11,7 @@
     ;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set a(dynamic #synthetic) → dynamic
     ;
diff --git a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
index 82533c2..12509e7 100644
--- a/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_setter_abstract.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void
@@ -12,7 +12,7 @@
     let dynamic _ = null in invalid-expression "pkg/front_end/testcases/bad_setter_abstract.dart:11:8: Error: A setter should have exactly one formal parameter.\n  set d(x, y);\n       ^";
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set a(dynamic #synthetic) → void
diff --git a/pkg/front_end/testcases/bad_store.dart.direct.expect b/pkg/front_end/testcases/bad_store.dart.direct.expect
index f0c2a4b..2acd12e 100644
--- a/pkg/front_end/testcases/bad_store.dart.direct.expect
+++ b/pkg/front_end/testcases/bad_store.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/bad_store.dart.outline.expect b/pkg/front_end/testcases/bad_store.dart.outline.expect
index fd4caa9..41c648c 100644
--- a/pkg/front_end/testcases/bad_store.dart.outline.expect
+++ b/pkg/front_end/testcases/bad_store.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method identity(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/bad_store.dart.strong.expect b/pkg/front_end/testcases/bad_store.dart.strong.expect
index 752a3b6..9d63dac 100644
--- a/pkg/front_end/testcases/bad_store.dart.strong.expect
+++ b/pkg/front_end/testcases/bad_store.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/bug30695.dart.direct.expect b/pkg/front_end/testcases/bug30695.dart.direct.expect
index e55ef7a..b07b4f4 100644
--- a/pkg/front_end/testcases/bug30695.dart.direct.expect
+++ b/pkg/front_end/testcases/bug30695.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field dynamic foo = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/bug30695.dart.outline.expect b/pkg/front_end/testcases/bug30695.dart.outline.expect
index d52e7cd..2771dbb 100644
--- a/pkg/front_end/testcases/bug30695.dart.outline.expect
+++ b/pkg/front_end/testcases/bug30695.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class A extends core::Object {
   field dynamic foo;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/bug30695.dart.strong.expect b/pkg/front_end/testcases/bug30695.dart.strong.expect
index 993cbf6..618721b 100644
--- a/pkg/front_end/testcases/bug30695.dart.strong.expect
+++ b/pkg/front_end/testcases/bug30695.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field core::int foo = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/call.dart.direct.expect b/pkg/front_end/testcases/call.dart.direct.expect
index 7242d06..07f4723 100644
--- a/pkg/front_end/testcases/call.dart.direct.expect
+++ b/pkg/front_end/testcases/call.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call(dynamic x) → dynamic {
@@ -11,7 +11,7 @@
   }
 }
 class CallableGetter extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get call() → dynamic
diff --git a/pkg/front_end/testcases/call.dart.outline.expect b/pkg/front_end/testcases/call.dart.outline.expect
index 1f09e92..b38eff5 100644
--- a/pkg/front_end/testcases/call.dart.outline.expect
+++ b/pkg/front_end/testcases/call.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method call(dynamic x) → dynamic
     ;
 }
 class CallableGetter extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get call() → dynamic
     ;
diff --git a/pkg/front_end/testcases/call.dart.strong.expect b/pkg/front_end/testcases/call.dart.strong.expect
index 7c24a91..8f91575 100644
--- a/pkg/front_end/testcases/call.dart.strong.expect
+++ b/pkg/front_end/testcases/call.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Callable extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call(dynamic x) → dynamic {
@@ -11,7 +11,7 @@
   }
 }
 class CallableGetter extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get call() → dynamic
diff --git a/pkg/front_end/testcases/check_deferred_read.dart.strong.expect b/pkg/front_end/testcases/check_deferred_read.dart.strong.expect
index 5fd285b..9c00ad0 100644
--- a/pkg/front_end/testcases/check_deferred_read.dart.strong.expect
+++ b/pkg/front_end/testcases/check_deferred_read.dart.strong.expect
@@ -5,5 +5,5 @@
 
 static method main() → dynamic {}
 static method test() → dynamic {
-  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).+(1));
+  core::print((let final dynamic #t1 = CheckLibraryIsLoaded(lib) in def::x).{core::num::+}(1));
 }
diff --git a/pkg/front_end/testcases/closure.dart.direct.expect b/pkg/front_end/testcases/closure.dart.direct.expect
index b4b5082..edc6bf4 100644
--- a/pkg/front_end/testcases/closure.dart.direct.expect
+++ b/pkg/front_end/testcases/closure.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class Foo extends core::Object {
   field dynamic _field = new self::Bar::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/closure.dart.outline.expect b/pkg/front_end/testcases/closure.dart.outline.expect
index 07bada7..6048306 100644
--- a/pkg/front_end/testcases/closure.dart.outline.expect
+++ b/pkg/front_end/testcases/closure.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class Foo extends core::Object {
   field dynamic _field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method useCallback(dynamic callback) → dynamic
diff --git a/pkg/front_end/testcases/closure.dart.strong.expect b/pkg/front_end/testcases/closure.dart.strong.expect
index 465bcdc..936ac03 100644
--- a/pkg/front_end/testcases/closure.dart.strong.expect
+++ b/pkg/front_end/testcases/closure.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class Foo extends core::Object {
   field self::Bar _field = new self::Bar::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect
index 869f502..2b25f5b 100644
--- a/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect
+++ b/pkg/front_end/testcases/co19_language_metadata_syntax_t04.dart.outline.expect
@@ -7,7 +7,7 @@
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method A() → dynamic
diff --git a/pkg/front_end/testcases/compile.status b/pkg/front_end/testcases/compile.status
index 3945492..32cb788 100644
--- a/pkg/front_end/testcases/compile.status
+++ b/pkg/front_end/testcases/compile.status
@@ -122,3 +122,4 @@
 incomplete_field_formal_parameter: Fail # Fasta doesn't recover well
 
 co19_language_metadata_syntax_t04: RuntimeError # Fasta doesn't recover well
+external_import: RuntimeError # Expected -- test uses import which doesn't exist.
diff --git a/pkg/front_end/testcases/cycles.dart.direct.expect b/pkg/front_end/testcases/cycles.dart.direct.expect
index f77118c..f7cd8dc 100644
--- a/pkg/front_end/testcases/cycles.dart.direct.expect
+++ b/pkg/front_end/testcases/cycles.dart.direct.expect
@@ -3,22 +3,22 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/cycles.dart.outline.expect b/pkg/front_end/testcases/cycles.dart.outline.expect
index 379e84c..9c6a6f2 100644
--- a/pkg/front_end/testcases/cycles.dart.outline.expect
+++ b/pkg/front_end/testcases/cycles.dart.outline.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
index 61ac3b7..4a2bfdc 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method m({core::int a = 0}) → dynamic {}
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.outline.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.outline.expect
index 0fa251e..63f7075 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.outline.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method m({core::int a}) → dynamic
     ;
diff --git a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
index 30567bb..29999e5 100644
--- a/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
+++ b/pkg/front_end/testcases/duplicated_named_args_3.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method m({core::int a = 0}) → dynamic {}
diff --git a/pkg/front_end/testcases/escape.dart.direct.expect b/pkg/front_end/testcases/escape.dart.direct.expect
index db642e8..136725f 100644
--- a/pkg/front_end/testcases/escape.dart.direct.expect
+++ b/pkg/front_end/testcases/escape.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class A extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator ==(dynamic x) → dynamic
@@ -23,7 +23,7 @@
 }
 class X extends core::Object implements self::A, self::B {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/escape.dart.outline.expect b/pkg/front_end/testcases/escape.dart.outline.expect
index 6b5cf2f..6ba7f6a 100644
--- a/pkg/front_end/testcases/escape.dart.outline.expect
+++ b/pkg/front_end/testcases/escape.dart.outline.expect
@@ -4,23 +4,23 @@
 
 class A extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator ==(dynamic x) → dynamic
     ;
 }
 class X extends core::Object implements self::A, self::B {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method useAsA(self::A object) → void
diff --git a/pkg/front_end/testcases/escape.dart.strong.expect b/pkg/front_end/testcases/escape.dart.strong.expect
index 5f1812e..4dfacb5 100644
--- a/pkg/front_end/testcases/escape.dart.strong.expect
+++ b/pkg/front_end/testcases/escape.dart.strong.expect
@@ -4,19 +4,19 @@
 
 class A extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class X extends core::Object implements self::A, self::B {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/expressions.dart.direct.expect b/pkg/front_end/testcases/expressions.dart.direct.expect
index 9e197a7..181488f 100644
--- a/pkg/front_end/testcases/expressions.dart.direct.expect
+++ b/pkg/front_end/testcases/expressions.dart.direct.expect
@@ -69,7 +69,7 @@
   core::print(core::int);
   core::print(let final dynamic #t5 = core::int in let final dynamic #t6 = #t5.toString() in #t5);
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "Shouldn't work";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/expressions.dart.strong.expect b/pkg/front_end/testcases/expressions.dart.strong.expect
index c2bd441..d157089 100644
--- a/pkg/front_end/testcases/expressions.dart.strong.expect
+++ b/pkg/front_end/testcases/expressions.dart.strong.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'toString'.\n    print(int?.toString());\n               ^"]/* from null */;
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/expressions.dart:74:16: Error: Method not found: 'int.toString'.\n    print(int?.toString());\n               ^"]/* from null */;
 static method foo({dynamic fisk = null}) → dynamic {
   core::print(fisk);
 }
@@ -70,7 +70,7 @@
   core::print(core::int);
   core::print(let final core::Type #t5 = core::int in let final dynamic #t6 = #t5.{core::Object::toString}() in #t5);
   try {
-    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
+    core::print(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#int.toString, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
     throw "Shouldn't work";
   }
   on core::NoSuchMethodError catch(final core::NoSuchMethodError e) {
diff --git a/pkg/front_end/testcases/external_import.dart b/pkg/front_end/testcases/external_import.dart
new file mode 100644
index 0000000..e1f051e
--- /dev/null
+++ b/pkg/front_end/testcases/external_import.dart
@@ -0,0 +1,5 @@
+import 'dart-ext:here';
+import 'dart-ext:foo/../there';
+import 'dart-ext:/usr/local/somewhere';
+
+main() {}
diff --git a/pkg/front_end/testcases/external_import.dart.direct.expect b/pkg/front_end/testcases/external_import.dart.direct.expect
new file mode 100644
index 0000000..145e77a
--- /dev/null
+++ b/pkg/front_end/testcases/external_import.dart.direct.expect
@@ -0,0 +1,7 @@
+@dart._internal::ExternalName::•("org-dartlang-testcase:///here")
+@dart._internal::ExternalName::•("org-dartlang-testcase:///there")
+@dart._internal::ExternalName::•("file:///usr/local/somewhere")
+library;
+import self as self;
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/external_import.dart.outline.expect b/pkg/front_end/testcases/external_import.dart.outline.expect
new file mode 100644
index 0000000..d48db80
--- /dev/null
+++ b/pkg/front_end/testcases/external_import.dart.outline.expect
@@ -0,0 +1,8 @@
+@dart._internal::ExternalName::•("org-dartlang-testcase:///here")
+@dart._internal::ExternalName::•("org-dartlang-testcase:///there")
+@dart._internal::ExternalName::•("file:///usr/local/somewhere")
+library;
+import self as self;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/external_import.dart.strong.expect b/pkg/front_end/testcases/external_import.dart.strong.expect
new file mode 100644
index 0000000..145e77a
--- /dev/null
+++ b/pkg/front_end/testcases/external_import.dart.strong.expect
@@ -0,0 +1,7 @@
+@dart._internal::ExternalName::•("org-dartlang-testcase:///here")
+@dart._internal::ExternalName::•("org-dartlang-testcase:///there")
+@dart._internal::ExternalName::•("file:///usr/local/somewhere")
+library;
+import self as self;
+
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/implicit_new.dart b/pkg/front_end/testcases/implicit_new.dart
new file mode 100644
index 0000000..d10629f
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_new.dart
@@ -0,0 +1,55 @@
+// 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 "implicit_new.dart" as prefix;
+
+class Foo {
+  operator +(other) => null;
+}
+
+class Bar {
+  Bar.named();
+
+  operator +(other) => null;
+}
+
+testNSM() {
+  var y = prefix.Bar();
+  prefix.Bar();
+}
+
+f(x) => x;
+
+class IndexTester {
+  operator [](_) => null;
+  void operator []=(_a, _b) {}
+}
+
+main() {
+  var x = Foo();
+  x = prefix.Foo();
+  var z = Bar.named();
+  z = prefix.Bar.named();
+  f(Foo());
+  f(prefix.Foo());
+  f(Bar.named());
+  f(prefix.Bar.named());
+  var l = [Foo(), Bar.named()];
+  l = [prefix.Foo(), prefix.Bar.named()];
+  var m = {"foo": Foo(), "bar": Bar.named()};
+  m = {"foo": prefix.Foo(), "bar": prefix.Bar.named()};
+  var i = new IndexTester();
+  i[Foo()];
+  i[prefix.Foo()];
+  i[Bar.named()];
+  i[prefix.Bar.named()];
+  i[Foo()] = null;
+  i[prefix.Foo()] = null;
+  i[Bar.named()] = null;
+  i[prefix.Bar.named()] = null;
+  Foo() + Bar.named();
+  prefix.Foo() + prefix.Bar.named();
+  Bar.named() + Foo();
+  prefix.Bar.named() + prefix.Foo();
+}
diff --git a/pkg/front_end/testcases/implicit_new.dart.direct.expect b/pkg/front_end/testcases/implicit_new.dart.direct.expect
new file mode 100644
index 0000000..4262af7
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_new.dart.direct.expect
@@ -0,0 +1,59 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+}
+class Bar extends core::Object {
+  constructor named() → void
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+}
+class IndexTester extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator [](dynamic _) → dynamic
+    return null;
+  operator []=(dynamic _a, dynamic _b) → void {}
+}
+static method testNSM() → dynamic {
+  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+}
+static method f(dynamic x) → dynamic
+  return x;
+static method main() → dynamic {
+  dynamic x = new self::Foo::•();
+  x = new self::Foo::•();
+  dynamic z = new self::Bar::named();
+  z = new self::Bar::named();
+  self::f(new self::Foo::•());
+  self::f(new self::Foo::•());
+  self::f(new self::Bar::named());
+  self::f(new self::Bar::named());
+  dynamic l = <dynamic>[new self::Foo::•(), new self::Bar::named()];
+  l = <dynamic>[new self::Foo::•(), new self::Bar::named()];
+  dynamic m = <dynamic, dynamic>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  m = <dynamic, dynamic>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  dynamic i = new self::IndexTester::•();
+  i.[](new self::Foo::•());
+  i.[](new self::Foo::•());
+  i.[](new self::Bar::named());
+  i.[](new self::Bar::named());
+  i.[]=(new self::Foo::•(), null);
+  i.[]=(new self::Foo::•(), null);
+  i.[]=(new self::Bar::named(), null);
+  i.[]=(new self::Bar::named(), null);
+  new self::Foo::•().+(new self::Bar::named());
+  new self::Foo::•().+(new self::Bar::named());
+  new self::Bar::named().+(new self::Foo::•());
+  new self::Bar::named().+(new self::Foo::•());
+}
diff --git a/pkg/front_end/testcases/implicit_new.dart.outline.expect b/pkg/front_end/testcases/implicit_new.dart.outline.expect
new file mode 100644
index 0000000..ed008b8
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_new.dart.outline.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    ;
+  operator +(dynamic other) → dynamic
+    ;
+}
+class Bar extends core::Object {
+  constructor named() → void
+    ;
+  operator +(dynamic other) → dynamic
+    ;
+}
+class IndexTester extends core::Object {
+  synthetic constructor •() → void
+    ;
+  operator [](dynamic _) → dynamic
+    ;
+  operator []=(dynamic _a, dynamic _b) → void
+    ;
+}
+static method testNSM() → dynamic
+  ;
+static method f(dynamic x) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/implicit_new.dart.strong.expect b/pkg/front_end/testcases/implicit_new.dart.strong.expect
new file mode 100644
index 0000000..a8531fc
--- /dev/null
+++ b/pkg/front_end/testcases/implicit_new.dart.strong.expect
@@ -0,0 +1,60 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+}
+class Bar extends core::Object {
+  constructor named() → void
+    : super core::Object::•()
+    ;
+  operator +(dynamic other) → dynamic
+    return null;
+}
+class IndexTester extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator [](dynamic _) → dynamic
+    return null;
+  operator []=(dynamic _a, dynamic _b) → void {}
+}
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/implicit_new.dart:18:18: Error: Method not found: 'Bar'.\n  var y = prefix.Bar();\n                 ^", "pkg/front_end/testcases/implicit_new.dart:19:10: Error: Method not found: 'Bar'.\n  prefix.Bar();\n         ^"]/* from null */;
+static method testNSM() → dynamic {
+  dynamic y = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Bar, 32, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+}
+static method f(dynamic x) → dynamic
+  return x;
+static method main() → dynamic {
+  self::Foo x = new self::Foo::•();
+  x = new self::Foo::•();
+  self::Bar z = new self::Bar::named();
+  z = new self::Bar::named();
+  self::f(new self::Foo::•());
+  self::f(new self::Foo::•());
+  self::f(new self::Bar::named());
+  self::f(new self::Bar::named());
+  core::List<core::Object> l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
+  l = <core::Object>[new self::Foo::•(), new self::Bar::named()];
+  core::Map<core::String, core::Object> m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  m = <core::String, core::Object>{"foo": new self::Foo::•(), "bar": new self::Bar::named()};
+  self::IndexTester i = new self::IndexTester::•();
+  i.{self::IndexTester::[]}(new self::Foo::•());
+  i.{self::IndexTester::[]}(new self::Foo::•());
+  i.{self::IndexTester::[]}(new self::Bar::named());
+  i.{self::IndexTester::[]}(new self::Bar::named());
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
+  i.{self::IndexTester::[]=}(new self::Foo::•(), null);
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
+  i.{self::IndexTester::[]=}(new self::Bar::named(), null);
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
+  new self::Foo::•().{self::Foo::+}(new self::Bar::named());
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
+  new self::Bar::named().{self::Bar::+}(new self::Foo::•());
+}
diff --git a/pkg/front_end/testcases/implicit_scope_test.dart.direct.expect b/pkg/front_end/testcases/implicit_scope_test.dart.direct.expect
index 5700e18..ef5e29a 100644
--- a/pkg/front_end/testcases/implicit_scope_test.dart.direct.expect
+++ b/pkg/front_end/testcases/implicit_scope_test.dart.direct.expect
@@ -4,7 +4,7 @@
 import "package:expect/expect.dart" as exp;
 
 class ImplicitScopeTest extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method alwaysTrue() → core::bool {
diff --git a/pkg/front_end/testcases/implicit_scope_test.dart.outline.expect b/pkg/front_end/testcases/implicit_scope_test.dart.outline.expect
index 6c056aa..932d094 100644
--- a/pkg/front_end/testcases/implicit_scope_test.dart.outline.expect
+++ b/pkg/front_end/testcases/implicit_scope_test.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class ImplicitScopeTest extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method alwaysTrue() → core::bool
     ;
diff --git a/pkg/front_end/testcases/implicit_scope_test.dart.strong.expect b/pkg/front_end/testcases/implicit_scope_test.dart.strong.expect
index 7849ecf3..9ac1d76 100644
--- a/pkg/front_end/testcases/implicit_scope_test.dart.strong.expect
+++ b/pkg/front_end/testcases/implicit_scope_test.dart.strong.expect
@@ -4,7 +4,7 @@
 import "package:expect/expect.dart" as exp;
 
 class ImplicitScopeTest extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method alwaysTrue() → core::bool {
diff --git a/pkg/front_end/testcases/implicit_this.dart.direct.expect b/pkg/front_end/testcases/implicit_this.dart.direct.expect
index 51bf53c..a599fbe 100644
--- a/pkg/front_end/testcases/implicit_this.dart.direct.expect
+++ b/pkg/front_end/testcases/implicit_this.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic {
@@ -14,7 +14,7 @@
   }
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method testD() → dynamic {
diff --git a/pkg/front_end/testcases/implicit_this.dart.outline.expect b/pkg/front_end/testcases/implicit_this.dart.outline.expect
index e6bcc2e..a4b1533 100644
--- a/pkg/front_end/testcases/implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/implicit_this.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m() → dynamic
     ;
@@ -11,7 +11,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method testD() → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
index dccccaa..3cd8d21 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect
index ebae977..66f08a3 100644
--- a/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/abstract_class_instantiation.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class D<T extends core::Object> extends core::Object {
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.direct.expect b/pkg/front_end/testcases/inference/assign_local.dart.direct.expect
index dc05552..92719ee 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends core::Object> extends self::A<self::B::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.outline.expect b/pkg/front_end/testcases/inference/assign_local.dart.outline.expect
index f127591..134d614 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends self::A<self::B::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/assign_local.dart.strong.expect b/pkg/front_end/testcases/inference/assign_local.dart.strong.expect
index 65cd644..e8e11fe 100644
--- a/pkg/front_end/testcases/inference/assign_local.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/assign_local.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends core::Object> extends self::A<self::B::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/async_await.dart.direct.expect b/pkg/front_end/testcases/inference/async_await.dart.direct.expect
index 5b1671c..ba01988 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.direct.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class MyFuture extends core::Object implements asy::Future<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/async_await.dart.outline.expect b/pkg/front_end/testcases/inference/async_await.dart.outline.expect
index 6da6f07..4bf45e5 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.outline.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class MyFuture extends core::Object implements asy::Future<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method test() → void
diff --git a/pkg/front_end/testcases/inference/async_await.dart.strong.expect b/pkg/front_end/testcases/inference/async_await.dart.strong.expect
index a9e76dd..79222e9 100644
--- a/pkg/front_end/testcases/inference/async_await.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/async_await.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 abstract class MyFuture extends core::Object implements asy::Future<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract forwarding-stub method timeout(core::Duration timeLimit, {generic-covariant-impl () → asy::FutureOr<core::int> onTimeout}) → asy::Future<core::int>;
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.direct.expect b/pkg/front_end/testcases/inference/bug30624.dart.direct.expect
index 7ac957e..9a75e22 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method barA([(self::C::E, self::C::E) → core::int cmp = null]) → void {
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.outline.expect b/pkg/front_end/testcases/inference/bug30624.dart.outline.expect
index adf772d..f705538 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method barA([(self::C::E, self::C::E) → core::int cmp]) → void
     ;
diff --git a/pkg/front_end/testcases/inference/bug30624.dart.strong.expect b/pkg/front_end/testcases/inference/bug30624.dart.strong.expect
index 4d90657..1f952f5 100644
--- a/pkg/front_end/testcases/inference/bug30624.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/bug30624.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method barA([(self::C::E, self::C::E) → core::int cmp = null]) → void {
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.direct.expect b/pkg/front_end/testcases/inference/bug31132.dart.direct.expect
index 5bcc7ae..29a4ab76 100644
--- a/pkg/front_end/testcases/inference/bug31132.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/bug31132.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends self::B {
   field dynamic z = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.outline.expect b/pkg/front_end/testcases/inference/bug31132.dart.outline.expect
index c5053fc..85e0a99 100644
--- a/pkg/front_end/testcases/inference/bug31132.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/bug31132.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends self::B {
   field dynamic z;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method test(self::B x) → void
diff --git a/pkg/front_end/testcases/inference/bug31132.dart.strong.expect b/pkg/front_end/testcases/inference/bug31132.dart.strong.expect
index 43c335e..0aa0ff6 100644
--- a/pkg/front_end/testcases/inference/bug31132.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/bug31132.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends self::B {
   field dynamic z = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.expect
index 6684a0b..b98b3c2 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call() → core::int
     return 0;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get call() → self::A
@@ -19,7 +19,7 @@
 class D extends core::Object {
   field self::A fieldA = new self::A::•();
   field self::B fieldB = new self::B::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get getA() → self::A
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.outline.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.outline.expect
index 9e8f12a..e0d0b05 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method call() → core::int
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get call() → self::A
     ;
@@ -17,7 +17,7 @@
 class D extends core::Object {
   field self::A fieldA;
   field self::B fieldB;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get getA() → self::A
     ;
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
index 697ee69..644b203 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call() → core::int
     return 0;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get call() → self::A
@@ -19,7 +19,7 @@
 class D extends core::Object {
   field self::A fieldA = new self::A::•();
   field self::B fieldB = new self::B::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get getA() → self::A
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
index e59a94a..2ecc9fd 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect
index 2f1082d..0f349ae 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(dynamic x) → dynamic;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(dynamic x) → dynamic;
 }
diff --git a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
index e59a94a..2ecc9fd 100644
--- a/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/circular_method_inference.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(dynamic x) → dynamic;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.direct.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.direct.expect
index ece81ce..569ad5d 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.direct.expect
@@ -4,37 +4,37 @@
 
 class I1 extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class I2 extends self::I1 {
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::I1::•()
     ;
 }
 class A extends core::Object {
   final field self::I1 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   final field self::I2 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C1 extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → dynamic
     return null;
 }
 class C2 extends core::Object implements self::B, self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → dynamic
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index 0b25c09..f222190 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -4,37 +4,37 @@
 
 class I1 extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class I2 extends self::I1 {
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::I1::•()
     ;
 }
 class A extends core::Object {
   final field self::I1 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   final field self::I2 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C1 extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → dynamic
     return null;
 }
 class C2 extends core::Object implements self::B, self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → dynamic
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.direct.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.direct.expect
index cc41ea3..a94ba90 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.direct.expect
@@ -4,44 +4,44 @@
 
 class I1 extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class I2 extends core::Object {
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class I3 extends core::Object implements self::I1, self::I2 {
   field core::int x = null;
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
   final field self::I1 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   final field self::I2 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C1 extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → self::I3
     return null;
 }
 class C2 extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → dynamic
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 60f5c4b..5a724b7 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -4,44 +4,44 @@
 
 class I1 extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class I2 extends core::Object {
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class I3 extends core::Object implements self::I1, self::I2 {
   field core::int x = null;
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
   final field self::I1 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   final field self::I2 a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C1 extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → self::I3
     return null;
 }
 class C2 extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get a() → dynamic
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect
index 32503be..1def021 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class Foo<T extends self::A> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect
index 4aaebac..4da3023 100644
--- a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class Foo<T extends self::A> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect
index a19eafa..619f0a3 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = () → T;
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -14,7 +14,7 @@
     ;
 }
 class NotA extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
index 48abfa4..4d9c033 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = () → T;
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -14,7 +14,7 @@
     ;
 }
 class NotA extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect
index e5c2a4e..25d5c94 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Clonable<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
index e417e0f..a88cab0 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Clonable<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -19,6 +19,7 @@
   get reversed() → self::Pair<self::Pair::U, self::Pair::T>
     return new self::Pair::•<self::Pair::U, self::Pair::T>(this.{self::Pair::u}, this.{self::Pair::t});
 }
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart:22:110: Error: Can't use a super-bounded type for instance creation. Got 'test::Pair<test::Clonable<dynamic>, test::Clonable<dynamic>>'.\n      new /*error:COULD_NOT_INFER,error:COULD_NOT_INFER*/ /*@typeArgs=Clonable<dynamic>, Clonable<dynamic>*/ Pair\n                                                                                                             ^"]/* from null */;
 static method main() → dynamic {
   final self::Pair<self::Clonable<dynamic>, self::Clonable<dynamic>> x = new self::Pair::_<self::Clonable<dynamic>, self::Clonable<dynamic>>();
 }
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.direct.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.direct.expect
index 05daf2cd..7ac981c 100644
--- a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.direct.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.direct.expect
index 8c3a753..015c282 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   final field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
index 404ee5c..fcd76d6 100644
--- a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   final field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.direct.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.direct.expect
index 533cba5..e5d7297 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.direct.expect
@@ -7,7 +7,7 @@
   static field dynamic y = 3;
   field dynamic x2 = null;
   field dynamic y2 = 3;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.strong.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.strong.expect
index db6aaf1..6bdbf8c 100644
--- a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.strong.expect
@@ -7,7 +7,7 @@
   static field core::int y = 3;
   field dynamic x2 = null;
   field core::int y2 = 3;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.direct.expect
index c4d78fa..38617da 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.direct.expect
@@ -12,13 +12,13 @@
 }
 @self::Foo::•(const <dynamic>[])
 class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 @self::Foo::named(const <dynamic>[])
 class Baz extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
index e2bb732..6b3d243 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
@@ -9,11 +9,11 @@
     ;
 }
 class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Baz extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.strong.expect
index 23e1ae3..010338c 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.strong.expect
@@ -12,13 +12,13 @@
 }
 @self::Foo::•(const <core::String>[])
 class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 @self::Foo::named(const <core::String>[])
 class Baz extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.direct.expect
index b372a56..306b574 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m(dynamic x) → void {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.outline.expect
index 71cfd72..573892a 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_parameter.dart.outline.expect
@@ -7,7 +7,7 @@
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m(dynamic x) → void
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect
index 41cf916..c798f57 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.direct.expect
@@ -9,12 +9,12 @@
     ;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>() → void {}
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect
index a66d0ee..2c07f4f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_type_variable.dart.outline.expect
@@ -8,11 +8,11 @@
     ;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m<T extends core::Object>() → void
     ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect
index f890281..ca9246e 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field self::B<core::int> b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect
index 98e4171..b742af9 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field self::B<core::int> b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect
index 3063108..85ea052 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.direct.expect
@@ -5,14 +5,14 @@
 typedef Asserter<T extends core::Object> = (T) → void;
 typedef AsserterBuilder<S extends core::Object, T extends core::Object> = (S) → (T) → void;
 class DartType extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class C extends core::Object {
   static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = null;
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
@@ -28,7 +28,7 @@
 }
 abstract class G<T extends core::Object> extends core::Object {
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect
index 7db01ad..3339b4b 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.strong.expect
@@ -5,14 +5,14 @@
 typedef Asserter<T extends core::Object> = (T) → void;
 typedef AsserterBuilder<S extends core::Object, T extends core::Object> = (S) → (T) → void;
 class DartType extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class C extends core::Object {
   static field (core::List<(self::DartType) → void>) → (self::DartType) → void assertBOf = null;
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static get assertCOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void
@@ -28,7 +28,7 @@
 }
 abstract class G<T extends core::Object> extends core::Object {
   field (core::List<(self::DartType) → void>) → (self::DartType) → void assertAOf = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get assertDOf() → (core::List<(self::DartType) → void>) → (self::DartType) → void;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect
index 8110afe..d495b26 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.direct.expect
@@ -9,7 +9,7 @@
     ;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
index 6fbdc1c..e0ab312 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.outline.expect
@@ -8,7 +8,7 @@
     ;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
diff --git a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect
index dc848b7..ef576d9 100644
--- a/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_initializer_context_implicit.dart.strong.expect
@@ -9,7 +9,7 @@
     ;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.direct.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.direct.expect
index 8c3e46f..a520339 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   final field dynamic x = self::C::_x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static get _x() → core::int
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.strong.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.strong.expect
index 34894c7..00d0f7e 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   final field core::int x = self::C::_x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static get _x() → core::int
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.direct.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.direct.expect
index 9b11243..c0d8691 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   final field dynamic x = self::y;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.strong.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.strong.expect
index 9e8f8f0..284721c 100644
--- a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   final field core::int x = self::y;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.direct.expect
index b81bb5e..98a18c5 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.direct.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.strong.expect
index 182662a..0b7e49c 100644
--- a/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_downwards_generic_method_with_future_return.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:async" as asy;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.direct.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.direct.expect
index 80b1a25..a5cecb5 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.direct.expect
@@ -4,17 +4,17 @@
 import "dart:async" as asy;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.strong.expect b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.strong.expect
index 4bf46e6f..f804a74 100644
--- a/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/future_union_upwards_generic_methods.dart.strong.expect
@@ -4,17 +4,17 @@
 import "dart:async" as asy;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect
index c748f52..4b4f413 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo<T extends core::Pattern> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method<U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
index 2480ac2..920bdcc 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo<T extends core::Pattern> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method<generic-covariant-impl generic-covariant-interface U extends self::Foo::T>(self::Foo::method::U u) → self::Foo::method::U
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect
index b137543..7e92972 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
index 1091d40..32898c1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
index 1de2c0e..af643ea 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
@@ -12,7 +12,7 @@
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m<T extends core::Object>(self::D::m::T x) → self::D::m::T
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
index 6cbf87b..ddc01f1 100644
--- a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
@@ -12,7 +12,7 @@
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m<T extends core::Object>(self::D::m::T x) → self::D::m::T
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect
index f2845a4..99e84b5 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.direct.expect
@@ -4,13 +4,13 @@
 
 typedef F<V extends core::Object> = (V) → void;
 class C<T extends core::Object> extends self::D<self::C::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f<U extends core::Object>(dynamic x) → dynamic {}
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(self::D::f::U u) → (self::D::f::U) → void
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect
index 090cdf2..b141cc6 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.strong.expect
@@ -4,13 +4,13 @@
 
 typedef F<V extends core::Object> = (V) → void;
 class C<T extends core::Object> extends self::D<self::C::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f<U extends core::Object>(self::C::f::U x) → (self::C::f::U) → void {}
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(self::D::f::U u) → (self::D::f::U) → void
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect
index 6522231..551a22b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.direct.expect
@@ -4,14 +4,14 @@
 
 typedef G<V extends core::Object> = () → core::List<V>;
 class C<T extends core::Object> extends self::D<self::C::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f<U extends core::Object>(dynamic g) → dynamic
     return null;
 }
 abstract class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f<U extends core::Object>(() → core::List<self::D::f::U> g) → void;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect
index fd88e88..4e1632a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.strong.expect
@@ -4,14 +4,14 @@
 
 typedef G<V extends core::Object> = () → core::List<V>;
 class C<T extends core::Object> extends self::D<self::C::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f<U extends core::Object>(() → core::List<self::C::f::U> g) → void
     return null;
 }
 abstract class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f<U extends core::Object>(() → core::List<self::D::f::U> g) → void;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect
index b1319ff..4465b65 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.direct.expect
@@ -4,13 +4,13 @@
 
 typedef F<V extends core::Object> = () → V;
 class C<T extends core::Object> extends self::D<self::C::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f<U extends core::Object>(dynamic x) → dynamic {}
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(self::D::f::U u) → () → self::D::f::U
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect
index b93f38d..eb9055b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.strong.expect
@@ -4,13 +4,13 @@
 
 typedef F<V extends core::Object> = () → V;
 class C<T extends core::Object> extends self::D<self::C::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f<U extends core::Object>(self::C::f::U x) → () → self::C::f::U {}
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(self::D::f::U u) → () → self::D::f::U
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect
index 74fd334..3a68a44 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.direct.expect
@@ -4,7 +4,7 @@
 import "dart:math" as math;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
index 6bc1c77..59579ba 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:math" as math;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::num>(self::C::m::T x, self::C::m::T y) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect
index ba6676f..41749ee 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m<S extends core::Object>(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect
index 8f59de6..671ce41 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m<S extends core::Object>(self::D::m::S x) → self::D::m::S
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.direct.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.direct.expect
index 7ba8921..24b82f0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.direct.expect
@@ -5,13 +5,13 @@
 
 class Trace extends core::Object {
   field core::List<self::Frame> frames = <dynamic>[];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Frame extends core::Object {
   field core::String location = "";
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect
index 341eac6..1c5bf35 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.strong.expect
@@ -5,13 +5,13 @@
 
 class Trace extends core::Object {
   field core::List<self::Frame> frames = <self::Frame>[];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Frame extends core::Object {
   field core::String location = "";
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect
index 3075ff6..e98bebc 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method sort([(self::C::E, self::C::E) → core::int compare = null]) → void {
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect
index a67436e..3ab1e85 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method sort([(self::C::E, self::C::E) → core::int compare]) → void
     ;
diff --git a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect
index 1fb3503..949aa38 100644
--- a/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/greatest_closure_multiple_params.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method sort([(self::C::E, self::C::E) → core::int compare = null]) → void {
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect
index 0403a8c..a69e1d2 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → dynamic {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
 }
 class D extends self::C implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   operator []=(dynamic index, dynamic value) → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
index f58b066..77a8eb9 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.outline.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(dynamic index, dynamic value) → dynamic
     ;
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(dynamic index, dynamic value) → void
     ;
 }
 class D extends self::C implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(dynamic index, dynamic value) → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect
index 33a26ff..bc47488 100644
--- a/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → dynamic {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
 }
 class D extends self::C implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   operator []=(dynamic index, dynamic value) → void {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart
new file mode 100644
index 0000000..b7ddcd0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*@testedFeatures=inference,error*/
+library test;
+
+class C {
+  dynamic operator []=(int index, dynamic value) {}
+}
+
+abstract class I {
+  void operator []=(int index, dynamic value) {}
+}
+
+class D extends C implements I {
+  operator /*@topType=void*/ []=(int index, /*@topType=dynamic*/ value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.direct.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.direct.expect
new file mode 100644
index 0000000..1394b9b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.direct.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(core::int index, dynamic value) → dynamic {}
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(core::int index, dynamic value) → void {}
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  operator []=(core::int index, dynamic value) → dynamic {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect
new file mode 100644
index 0000000..d841119
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.outline.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  operator []=(core::int index, dynamic value) → dynamic
+    ;
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    ;
+  operator []=(core::int index, dynamic value) → void
+    ;
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → void
+    ;
+  operator []=(core::int index, dynamic value) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.strong.expect b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.strong.expect
new file mode 100644
index 0000000..d1c866b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/index_assign_operator_return_type_2.dart.strong.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(core::int index, dynamic value) → dynamic {}
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  operator []=(core::int index, dynamic value) → void {}
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  operator []=(core::int index, dynamic value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.direct.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.direct.expect
index 2948080..0b3aca2 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
@@ -12,7 +12,7 @@
 }
 class B extends core::Object {
   field dynamic x = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
index 9f0786f..bf668f7 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → dynamic
     ;
@@ -12,7 +12,7 @@
 }
 class B extends core::Object {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
index d94fba3..adb834a 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
@@ -12,7 +12,7 @@
 }
 class B extends core::Object {
   field core::int x = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect
index 823a20b..2b083f0 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect
index f93f839..031084f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,12 +19,12 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect
index 1e34d5a..9efe1fd 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.direct.expect
index 53fec96..8a46541 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -17,7 +17,7 @@
 }
 class Test2 extends core::Object {
   field core::num t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -36,7 +36,7 @@
 }
 class Test3 extends core::Object {
   field core::double t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.outline.expect
index ba72078..49618ca 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.outline.expect
@@ -4,21 +4,21 @@
 
 class Test1 extends core::Object {
   field core::int t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test2 extends core::Object {
   field core::num t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test3 extends core::Object {
   field core::double t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test3() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.strong.expect
index a6e89ad0..dd244e6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_implicit_this_upwards.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -17,7 +17,7 @@
 }
 class Test2 extends core::Object {
   field core::num t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -36,7 +36,7 @@
 }
 class Test3 extends core::Object {
   field core::double t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect
index a0e30534..38a2aec 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect
index 3d9f3a4..ff1db0b 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -23,11 +23,11 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect
index 883764e..5675288 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_full.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect
index cf86297..d8df616 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
@@ -39,7 +39,7 @@
   operator []=(self::Index i, self::B v) → void {}
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect
index 1debd58..421df3f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -23,11 +23,11 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
@@ -35,7 +35,7 @@
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect
index d8d3f65..1b1837a 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_super.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
@@ -39,7 +39,7 @@
   operator []=(self::Index i, self::B v) → void {}
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect
index a6e747d..80bc52f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect
index 3d9f3a4..ff1db0b 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -23,11 +23,11 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect
index f9e0803..781c625 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_index_this.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect
index 48b02c6..3566c8f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,7 +21,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect
index daeee46..e4b381c 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,7 +19,7 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect
index fd3511e..22bf885 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_local.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,7 +21,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect
index 0ccc65c..8dd8737 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect
index c5c3402..de60c09 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,12 +19,12 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test t) → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect
index 9d663f7..69aa5fc 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_full.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect
index feb8fad..94d0d64 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect
index c5c3402..de60c09 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,12 +19,12 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test t) → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect
index 2d29ca2..941a4b2 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.direct.expect
index bcf591c..8cb10cf 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -17,7 +17,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -36,7 +36,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.outline.expect
index fb5172d..45f7015 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.outline.expect
@@ -4,21 +4,21 @@
 
 class Test1 extends core::Object {
   field core::int prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test1 t) → void
     ;
 }
 class Test2 extends core::Object {
   field core::num prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test2 t) → void
     ;
 }
 class Test3 extends core::Object {
   field core::double prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test3(self::Test3 t) → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.strong.expect
index 12dc69f..7b5b877 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_null_aware_upwards.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -17,7 +17,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -36,7 +36,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect
index f1edca5..9f3a3bf 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,18 +21,18 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect
index 1337d56..077e4d6 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,16 +19,16 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Base extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect
index b364dcc..65a0233 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,18 +21,18 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.direct.expect
index 7fe76ba..051210b 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.direct.expect
@@ -6,12 +6,12 @@
   field core::int intProp = null;
   field core::num numProp = null;
   field core::double doubleProp = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test1 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -23,7 +23,7 @@
   }
 }
 class Test2 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -41,7 +41,7 @@
   }
 }
 class Test3 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.outline.expect
index c4fdca1..592fa68 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.outline.expect
@@ -6,23 +6,23 @@
   field core::int intProp;
   field core::num numProp;
   field core::double doubleProp;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test1 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test2 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test3 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test3() → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.strong.expect
index 75f1540..6156050 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_super_upwards.dart.strong.expect
@@ -6,12 +6,12 @@
   field core::int intProp = null;
   field core::num numProp = null;
   field core::double doubleProp = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test1 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -23,7 +23,7 @@
   }
 }
 class Test2 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -41,7 +41,7 @@
   }
 }
 class Test3 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.direct.expect
index 96e78e0..adcdb5f 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -17,7 +17,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -36,7 +36,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.outline.expect
index fb5172d..45f7015 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.outline.expect
@@ -4,21 +4,21 @@
 
 class Test1 extends core::Object {
   field core::int prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test1 t) → void
     ;
 }
 class Test2 extends core::Object {
   field core::num prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test2 t) → void
     ;
 }
 class Test3 extends core::Object {
   field core::double prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test3(self::Test3 t) → void
     ;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.strong.expect
index dccba78..2b56047 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_property_upwards.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -17,7 +17,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -36,7 +36,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.direct.expect
index e782252..aac5dbd 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.strong.expect
index e557554..d17dc17 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect
index c9a128d..f3c9f8d 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
   static field self::B staticVariable = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -22,7 +22,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect
index a4f35a6..e348b03 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
   static field self::B staticVariable;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -20,7 +20,7 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field self::B topLevelVariable;
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect
index fbe24f5..e66e6c8 100644
--- a/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_assign_to_static.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
   static field self::B staticVariable = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -22,7 +22,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.direct.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.direct.expect
index 171231a..001ba76 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → core::int
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.strong.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.strong.expect
index c382212..13a93a6 100644
--- a/pkg/front_end/testcases/inference/infer_binary_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → core::int
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.direct.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.direct.expect
index 171c23a..347b333 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.direct.expect
@@ -6,7 +6,7 @@
   field dynamic x = null;
   field dynamic y = 2;
   field dynamic z = "hi";
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -15,7 +15,7 @@
   field dynamic y = 3;
   field dynamic z = null;
   field dynamic w = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
index df8a365..729c29c 100644
--- a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.strong.expect
@@ -6,7 +6,7 @@
   field dynamic x = null;
   field core::int y = 2;
   field core::String z = "hi";
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -15,7 +15,7 @@
   field core::int y = 3;
   field core::String z = null;
   field core::int w = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.direct.expect
index 7ef40b0..08cf7fa 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.direct.expect
@@ -4,13 +4,13 @@
 
 class A extends core::Object implements self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field dynamic x = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
index bffb4a0..880acbe 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object implements self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.strong.expect
index bcaae95..86a7e29 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.strong.expect
@@ -4,13 +4,13 @@
 
 class A extends core::Object implements self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field core::int x = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.direct.expect
index 8c8ae68..d3f0a00 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class A extends core::Object implements self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → dynamic;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect
index 20511ff..fa89fb8 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.outline.expect
@@ -4,16 +4,16 @@
 
 class A extends core::Object implements self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → dynamic;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.strong.expect
index 636f059..047eb54 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_getter.dart.strong.expect
@@ -4,18 +4,18 @@
 
 class A extends core::Object implements self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.direct.expect
index 61de7b3..b5f0be8 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class A extends core::Object implements self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(dynamic value) → void;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect
index 5f8dbe9..265db2d 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.outline.expect
@@ -4,16 +4,16 @@
 
 class A extends core::Object implements self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(dynamic value) → void;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::int value) → void;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.strong.expect
index 6dc0683..314011d 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_setter.dart.strong.expect
@@ -4,18 +4,18 @@
 
 class A extends core::Object implements self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.direct.expect
index 0edb4f1..df402bc 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.direct.expect
@@ -3,50 +3,50 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 abstract class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::double;
 }
 class E extends self::A implements self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
index 6328df6..d43ea54 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
@@ -3,43 +3,43 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::num;
 }
 abstract class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::double;
 }
 class E extends self::A implements self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends self::A implements self::C {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class G extends self::A implements self::D {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class H extends self::C implements self::D {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index a38ad52..10d7729 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -3,50 +3,50 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 abstract class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::double;
 }
 class E extends self::A implements self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class F extends self::A implements self::C {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class G extends self::A implements self::D {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class H extends self::C implements self::D {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.direct.expect
index e3ec77d..e345b97 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.direct.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract get x() → core::int;
 }
 class C extends self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect
index 50235ac..06c65d5 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::num;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
 class C extends self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.strong.expect
index f4c26fe..3c4ae25 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_of_override.dart.strong.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract get x() → core::int;
 }
 class C extends self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect
index cdb209c..de0ee9c 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.direct.expect
@@ -4,7 +4,7 @@
 
 abstract class A<T extends core::Object> extends core::Object {
   field core::List<self::A::T> z = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::List<self::A::T>;
@@ -14,7 +14,7 @@
   field dynamic x = null;
   field dynamic y = null;
   field dynamic z = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
index b093685..1d6e2bc 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.outline.expect
@@ -4,7 +4,7 @@
 
 abstract class A<T extends core::Object> extends core::Object {
   field core::List<self::A::T> z;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::List<self::A::T>;
   abstract set y(core::List<self::A::T> value) → void;
@@ -13,7 +13,7 @@
   field dynamic x;
   field dynamic y;
   field dynamic z;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect
index bc00e76..e1b8859 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_with_substitution.dart.strong.expect
@@ -4,7 +4,7 @@
 
 abstract class A<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field core::List<self::A::T> z = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::List<self::A::T>;
@@ -14,7 +14,7 @@
   field core::List<core::int> x = null;
   generic-covariant-impl field core::List<core::int> y = null;
   generic-covariant-impl field core::List<core::int> z = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect
index 9720ad1..082497c 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
@@ -17,25 +17,25 @@
 }
 class C extends self::A {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class D extends self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -43,7 +43,7 @@
 }
 class G extends self::_Object&B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
index 654d08f..6e8f7c6 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.outline.expect
@@ -3,41 +3,41 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → core::int
     ;
 }
 class C extends self::A {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object implements self::A {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends core::Object implements self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class _Object&B = core::Object with self::B {
 }
 class G extends self::_Object&B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
index b75addf..6666c4d 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_getter.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
@@ -17,25 +17,25 @@
 }
 class C extends self::A {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class D extends self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -43,7 +43,7 @@
 }
 class G extends self::_Object&B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect
index 991f95a..1dd6525 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.direct.expect
@@ -3,38 +3,38 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::int value) → void {}
 }
 class C extends self::A {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class D extends self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -42,7 +42,7 @@
 }
 class G extends self::_Object&B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
index 7cca45481..762f38c 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.outline.expect
@@ -3,41 +3,41 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::int value) → void;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::int value) → void
     ;
 }
 class C extends self::A {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object implements self::A {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends core::Object implements self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class _Object&B = core::Object with self::B {
 }
 class G extends self::_Object&B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
index 4ac9925..30834b6 100644
--- a/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_overrides_setter.dart.strong.expect
@@ -3,38 +3,38 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::int value) → void {}
 }
 class C extends self::A {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class D extends self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class E extends core::Object implements self::A {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object implements self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -42,7 +42,7 @@
 }
 class G extends self::_Object&B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.direct.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.direct.expect
index 5d37485..3ae2bbb 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static get x() → core::int
@@ -11,13 +11,13 @@
 }
 class B extends self::A {
   static field dynamic x = self::f();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::A {
   static field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.outline.expect
index 077de3e..1e1996d 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.outline.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static get x() → core::int
     ;
 }
 class B extends self::A {
   static field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends self::A {
   static field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_field_static.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_static.dart.strong.expect
index 5d37485..3ae2bbb 100644
--- a/pkg/front_end/testcases/inference/infer_field_static.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_static.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static get x() → core::int
@@ -11,13 +11,13 @@
 }
 class B extends self::A {
   static field dynamic x = self::f();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::A {
   static field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.direct.expect
index 07bf174..ade9351 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
index 450141e..4b932ab 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
   abstract set x(core::double value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.strong.expect
index a98b1d6..e5bc744 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.direct.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.direct.expect
index 0985152..607a12e 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
index 520508b..965bc44 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.strong.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.strong.expect
index 3b04230..b2351c8 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.direct.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.direct.expect
index f9ce64e..eaabbd8 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::double value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
index fb35f43..b89d2f3 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::double value) → void;
 }
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.strong.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.strong.expect
index 94ebb54..e666cdd 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::double value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
index 9970876..8876de4 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → self::B
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 26a46a1..0ee04be 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → self::B
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.direct.expect
index 5995b74..a7633e5 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.direct.expect
@@ -4,13 +4,13 @@
 
 class A extends core::Object {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
index ba8e42a..b8aaf798 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.strong.expect
@@ -4,13 +4,13 @@
 
 class A extends core::Object {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
   field dynamic x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.direct.expect
index 4a0c8df..51c4c9f 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.direct.expect
@@ -4,13 +4,13 @@
 
 class A extends core::Object {
   final field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
   final field dynamic x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
index e191480..bbcf3a6 100644
--- a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.strong.expect
@@ -4,13 +4,13 @@
 
 class A extends core::Object {
   final field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
   final field dynamic x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.direct.expect
index fa3dbd4..9dcf842 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.direct.expect
@@ -5,7 +5,7 @@
 
 class B extends core::Object {
   static field dynamic y = inf::A::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.strong.expect
index 368ad39..3480785 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.strong.expect
@@ -5,7 +5,7 @@
 
 class B extends core::Object {
   static field core::int y = inf::A::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.direct.expect
index ae28f4a..d731588 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static field dynamic x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.strong.expect
index ab59fa4..cb3b662 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.direct.expect
index 2bf34c0..598ac7e 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.direct.expect
@@ -5,7 +5,7 @@
 
 class B extends core::Object {
   static field dynamic y = inf::A::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
index 2e4b516..b7577f1 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.strong.expect
@@ -5,7 +5,7 @@
 
 class B extends core::Object {
   static field core::int y = inf::A::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.direct.expect
index ae28f4a..d731588 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static field dynamic x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.strong.expect
index ab59fa4..cb3b662 100644
--- a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect
index 2601543..79ae48f 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect
index d0657f6..3e03634 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(core::int a, {core::String b = null, self::C::m::T c = null}) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect
index 0b7234b..b3f2fc0 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(core::int a, [self::C::m::T b = null]) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect
index 3c7816e..7f57027 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(core::int a, [self::C::m::T b = null]) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect
index ed00751..c4ff57c 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect
index ac56125..4b84fa0 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(core::int a, [core::String b = null, self::C::m::T c = null]) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect
index 8947a02..c9998b1 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect
index d334bf8..1d672d3 100644
--- a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m<T extends core::Object>(self::C::m::T x) → self::C::m::T
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.direct.expect
index cc869e8..1ee8980 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract get x() → dynamic;
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect
index 57937f5..1dc024f 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → dynamic;
 }
diff --git a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.strong.expect
index cf4a67e..a3c7415 100644
--- a/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_cross_to_setter.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::double value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract get x() → core::double;
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.direct.expect
index 7fce286..90c449e 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.direct.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
     return self::f();
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → dynamic;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect
index 99f4764..07f08b7 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → dynamic
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → dynamic;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
diff --git a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
index d460eea..643f30d 100644
--- a/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_getter_from_later_inferred_getter.dart.strong.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
     return self::f() as{TypeError} core::int;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect
index 886bab7..3ae0ee0 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Resource extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Folder extends self::Resource {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Resource::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect
index 6aeba23..61a99de 100644
--- a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Resource extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Folder extends self::Resource {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Resource::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect
index 41e5772..cb7e421 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.direct.expect
@@ -4,13 +4,13 @@
 
 typedef F = () → core::int;
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract method x(() → dynamic value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect
index 2d3d148..00d3cbe 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.outline.expect
@@ -4,12 +4,12 @@
 
 typedef F = () → core::int;
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method x(() → dynamic value) → void;
 }
diff --git a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect
index ced59ad..f0e5701 100644
--- a/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_function_typed.dart.strong.expect
@@ -4,13 +4,13 @@
 
 typedef F = () → core::int;
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract method x(() → dynamic value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect
index a7f20a3..80a5e2b 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, core::int y) → core::int;
@@ -11,7 +11,7 @@
   abstract method h(core::int x, {core::int y = null}) → core::int;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x) → core::int;
@@ -19,7 +19,7 @@
   abstract method h(core::int x) → core::int;
 }
 abstract class C extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(dynamic x, dynamic y) → dynamic;
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
index 743c14d..f5fbe09 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.outline.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::int x, core::int y) → core::int;
   abstract method g(core::int x, [core::int y]) → core::int;
   abstract method h(core::int x, {core::int y}) → core::int;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::int x) → core::int;
   abstract method g(core::int x) → core::int;
   abstract method h(core::int x) → core::int;
 }
 abstract class C extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(dynamic x, dynamic y) → dynamic;
   abstract method g(dynamic x, [dynamic y]) → dynamic;
diff --git a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
index 98d3037..97b8ef2 100644
--- a/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_method_missing_params.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, core::int y) → core::int;
@@ -11,7 +11,7 @@
   abstract method h(core::int x, {core::int y = null}) → core::int;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x) → core::int;
@@ -19,7 +19,7 @@
   abstract method h(core::int x) → core::int;
 }
 abstract class C extends core::Object implements self::A, self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, dynamic y) → core::int;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.direct.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.direct.expect
index 7821ba5..1ae97da 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set foo(dynamic x) → dynamic {}
 }
 class D extends core::Object {
   field core::int foo = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.strong.expect
index f269524..df2c93c 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set foo(core::int x) → void {}
 }
 class D extends core::Object {
   field core::int foo = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.direct.expect
index 4014d99..30425c7 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class C extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set foo(dynamic x) → dynamic {}
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set foo(core::int x) → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.strong.expect
index 783b5f4..a6997bd 100644
--- a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class C extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set foo(core::int x) → void {}
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set foo(core::int x) → void {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.direct.expect
index d42b661..712d6e6 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static set foo(core::int x) → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect
index b312791..d0beffa 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static set foo(core::int x) → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.strong.expect
index 911eb12..21fab5d 100644
--- a/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_return_type_for_static_setter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static set foo(core::int x) → void {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.direct.expect
index 01db963..bbf939b 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract set x(dynamic value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect
index b53b067..a185568 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(dynamic value) → void;
 }
diff --git a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.strong.expect
index d086535..6682a11 100644
--- a/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_cross_to_getter.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::double;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract set x(core::double value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.direct.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.direct.expect
index 6964352..9c6ea0a 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(dynamic value) → void;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect
index eb39f73..d5cc7f3 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(dynamic value) → void
     ;
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(dynamic value) → void;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::int value) → void;
 }
diff --git a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.strong.expect b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.strong.expect
index da45031..4332580 100644
--- a/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_from_later_inferred_setter.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class A extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::int value) → void {}
 }
 abstract class B extends core::Object implements self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
 }
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::int value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect
index bd02f2a..d15047a 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.direct.expect
@@ -4,13 +4,13 @@
 
 typedef F = () → core::int;
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract set x(() → dynamic value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect
index caa5ecd..f550eb1 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.outline.expect
@@ -4,12 +4,12 @@
 
 typedef F = () → core::int;
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(() → dynamic value) → void;
 }
diff --git a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect
index c7d7e89..dafd372 100644
--- a/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_function_typed.dart.strong.expect
@@ -4,13 +4,13 @@
 
 typedef F = () → core::int;
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(() → core::int value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract set x(() → dynamic value) → void;
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.direct.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.direct.expect
index 63ea26b..37b4a5d 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::int i) → void {}
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   set x(core::Object o) → dynamic {}
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect
index 049eada..cc74a52 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::int i) → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::Object o) → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.strong.expect b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.strong.expect
index 69b7ca7..7024005 100644
--- a/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_setter_return_type_only.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::int i) → void {}
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   set x(core::Object o) → void {}
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.direct.expect
index da10b74..b99e0c3 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static const field dynamic a3 = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.strong.expect
index e9c14f2..766ab62 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   static const field dynamic a3 = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.direct.expect
index 3b235d2..a51abfe 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.direct.expect
@@ -6,7 +6,7 @@
 
 class A extends core::Object {
   static final field dynamic a2 = inf::b1;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.strong.expect
index edcc0e4..9e64cd4 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.strong.expect
@@ -6,7 +6,7 @@
 
 class A extends core::Object {
   static final field core::int a2 = inf::b1;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.direct.expect
index 20c538a..203f0f2 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.direct.expect
@@ -6,7 +6,7 @@
 
 class A extends core::Object {
   static final field dynamic a2 = inf::b1;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.strong.expect
index fe4cecf..3f00669 100644
--- a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.strong.expect
@@ -6,7 +6,7 @@
 
 class A extends core::Object {
   static final field core::int a2 = inf::b1;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.direct.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.direct.expect
index c67b177..822e5cf 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.direct.expect
@@ -5,7 +5,7 @@
 
 class T extends core::Object {
   static final field self::T foo = self::T::m1(self::T::m2(inf::m3("", "")));
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method m1(core::String m) → self::T {
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.strong.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.strong.expect
index c67b177..822e5cf 100644
--- a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.strong.expect
@@ -5,7 +5,7 @@
 
 class T extends core::Object {
   static final field self::T foo = self::T::m1(self::T::m2(inf::m3("", "")));
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method m1(core::String m) → self::T {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.direct.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.direct.expect
index 274169d..6a398b3 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
index 4c57475..834f9ea 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.direct.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.direct.expect
index 7848a5e..d56d90f 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   final field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
index 4182344..e4288a1 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   final field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.direct.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.direct.expect
index c7e643c..b38889d 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.direct.expect
@@ -6,7 +6,7 @@
   field core::int x = 0;
   field core::int y = null;
   final field dynamic z = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test1() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
index d388007..a9a4a29 100644
--- a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.strong.expect
@@ -6,7 +6,7 @@
   field core::int x = 0;
   field core::int y = null;
   final field core::int z = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test1() → dynamic {
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.direct.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.direct.expect
index 2053099..2db852d 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.direct.expect
@@ -4,14 +4,14 @@
 import "dart:core" as core;
 
 class C extends inf::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super inf::B::•()
     ;
   get x() → dynamic
     return null;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
index a7065a9..7775a27 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.strong.expect
@@ -4,14 +4,14 @@
 import "dart:core" as core;
 
 class C extends inf::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super inf::B::•()
     ;
   get x() → core::int
     return null;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.direct.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.direct.expect
index 1c08820..cc75323 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.direct.expect
@@ -3,7 +3,7 @@
 import "./infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
 
 class B extends test::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super test::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect
index 1c08820..cc75323 100644
--- a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.strong.expect
@@ -3,7 +3,7 @@
 import "./infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
 
 class B extends test::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super test::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect
index d4e9089..cb1b1b6 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.direct.expect
@@ -5,12 +5,12 @@
 class A<T extends core::Object> extends core::Object {
   final field self::A::T x = null;
   final field self::A::T w = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
index 845d695..27998b1 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.strong.expect
@@ -5,12 +5,12 @@
 class A<T extends core::Object> extends core::Object {
   final field self::A::T x = null;
   final field self::A::T w = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect
index b286619..3aa3a9c 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.direct.expect
@@ -4,13 +4,13 @@
 
 class A<T extends core::Object> extends core::Object {
   field self::A::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<E extends core::Object> extends self::A<self::B::E> {
   field self::B::E y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
index 0a109ac..f7b87c6 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.strong.expect
@@ -4,13 +4,13 @@
 
 class A<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::A::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<E extends core::Object> extends self::A<self::B::E> {
   generic-covariant-impl generic-covariant-interface field self::B::E y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get x() → self::B::E
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect
index 053cc41..b9909f6 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class I<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
@@ -16,7 +16,7 @@
 }
 abstract class M extends core::Object {
   final field core::int y = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
index 8c7be39..b8b15d5 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class I<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, self::I::E) → core::String f) → core::String;
@@ -16,7 +16,7 @@
 }
 abstract class M extends core::Object {
   final field core::int y = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect
index e24f764..97f9b08 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.direct.expect
@@ -11,7 +11,7 @@
 }
 abstract class M extends core::Object {
   final field core::int y = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
index 6da1d62..74b6bdc 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.strong.expect
@@ -11,7 +11,7 @@
 }
 abstract class M extends core::Object {
   final field core::int y = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect
index 8156f08..b26d0cb 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.direct.expect
@@ -4,7 +4,7 @@
 import "./infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
 abstract class I<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, core::int) → core::String f) → test::A<self::I::E>;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
index 8156f08..b26d0cb 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.strong.expect
@@ -4,7 +4,7 @@
 import "./infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
 
 abstract class I<E extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method m(dynamic a, (dynamic, core::int) → core::String f) → test::A<self::I::E>;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect
index c63ed17..f45b7c8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A<T extends core::Object> extends core::Object {
   final field self::A::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
index dc59f44..032d625 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class A<T extends core::Object> extends core::Object {
   final field self::A::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object implements self::A<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect
index 425f9f3..d9c5ceb 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class Foo extends core::Object {
   field core::int bar = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar<T extends core::Iterable<core::String>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(self::Bar::T t) → void {
@@ -19,7 +19,7 @@
   }
 }
 class Baz<T extends core::Object, E extends core::Iterable<self::Baz::T>, S extends self::Baz::E> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(self::Baz::S t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
index 66a87ce..7e2bbc8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class Foo extends core::Object {
   field core::int bar = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar<T extends core::Iterable<core::String>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → void {
@@ -19,7 +19,7 @@
   }
 }
 class Baz<T extends core::Object, E extends core::Iterable<self::Baz::T>, S extends self::Baz::E> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → void {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
index c4bcfc3..6421db3 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.direct.expect
@@ -5,12 +5,12 @@
 
 class Foo extends core::Object {
   field core::int bar = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar<T extends asy::Stream<core::String>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(self::Bar::T t) → dynamic async {
@@ -20,7 +20,7 @@
   }
 }
 class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(self::Baz::S t) → dynamic async {
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
index 89add98..0abefd8 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
@@ -5,17 +5,17 @@
 
 class Foo extends core::Object {
   field core::int bar;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Bar<T extends asy::Stream<core::String>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo(self::Bar::T t) → dynamic
     ;
 }
 class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo(self::Baz::S t) → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
index 46005fa..242f2f4 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.strong.expect
@@ -5,12 +5,12 @@
 
 class Foo extends core::Object {
   field core::int bar = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar<T extends asy::Stream<core::String>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Bar::T t) → dynamic async {
@@ -20,7 +20,7 @@
   }
 }
 class Baz<T extends core::Object, E extends asy::Stream<self::Baz::T>, S extends self::Baz::E> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(generic-covariant-impl generic-covariant-interface self::Baz::S t) → dynamic async {
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.direct.expect
index e9b26a4..6e0646b 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.direct.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field dynamic x = "x";
   field dynamic y = <dynamic, dynamic>{"a": <dynamic, dynamic>{"b": "c"}, "d": <dynamic, dynamic>{"e": self::C::x}};
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.strong.expect
index 1d5d8c7..9830b33 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.strong.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field core::String x = "x";
   field core::Map<core::String, core::Map<core::String, core::String>> y = <core::String, core::Map<core::String, core::String>>{"a": <core::String, core::String>{"b": "c"}, "d": <core::String, core::String>{"e": self::C::x}};
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.direct.expect
index 0036a16..92326d3 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y = self::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.strong.expect
index 0d33356..a66e974 100644
--- a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::String y = self::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.direct.expect
index 7b34363..49bd0c9 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.direct.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field core::int a = null;
   field core::List<core::int> b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → void {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.strong.expect
index 23b7e39..41e75a0 100644
--- a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.strong.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field core::int a = null;
   field core::List<core::int> b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → void {}
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.direct.expect
index ca3ac57..6e12e92 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator *(self::C other) → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.strong.expect
index fc8362f..e3f488f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator *(self::C other) → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.direct.expect
index d77a93d..d1ae550 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator *(self::C other) → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.strong.expect
index 28cf825..f4bad7c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator *(self::C other) → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.direct.expect
index ce432c8..f22d693 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int index) → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.strong.expect
index 8171338..041d0fd 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int index) → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.direct.expect
index ab729f2..eb9f3f7 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int index) → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.strong.expect
index 2cfaf80..42314d5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int index) → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.direct.expect
index b6545d2..f706c4c 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator unary-() → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.strong.expect
index 56ee947..1cb1bde 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator unary-() → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.direct.expect
index 3eb6458..d9b94c2 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator unary-() → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.strong.expect
index 9a5a961..c64598e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator unary-() → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.direct.expect
index a702a6a..75032d8 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.strong.expect
index db47da7..0743802 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.direct.expect
index 48e2ad4..a3d8939 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.strong.expect
index 6bb22f5..79e16c1 100644
--- a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.direct.expect
index 44bc10e..bb3c248 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.strong.expect
index b1d16c9..5ab65b6 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.direct.expect
index e4b7a4a..9a8b19e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.strong.expect
index 045e829..70ba254 100644
--- a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → core::bool
     return true;
 }
 abstract class C extends core::Object implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.direct.expect
index 297feec..490371e 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   static final field dynamic f = (core::bool b) → dynamic => (core::int i) → dynamic => <dynamic, dynamic>{i: b};
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.strong.expect
index 62e4707..c459ad5 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   static final field (core::bool) → (core::int) → core::Map<core::int, core::bool> f = (core::bool b) → (core::int) → core::Map<core::int, core::bool> => (core::int i) → core::Map<core::int, core::bool> => <core::int, core::bool>{i: b};
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.direct.expect
index 07e5ae0..aa8b441 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   static final field dynamic f = (core::bool b) → dynamic => b;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.strong.expect
index 1638192..ae3f2bd 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   static final field (core::bool) → core::bool f = (core::bool b) → core::bool => b;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.direct.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.direct.expect
index befece2..540dd5f 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   static final field dynamic f = (core::bool b) → dynamic => 1;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.strong.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.strong.expect
index b4531b4..d46f057 100644
--- a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   static final field (core::bool) → core::int f = (core::bool b) → core::int => 1;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.direct.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.direct.expect
index ac0e094..409a001 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class I1 extends core::Object {
   final field dynamic x = self::y;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class I2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
index 2646d29..a280f12 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
@@ -4,16 +4,16 @@
 
 class I1 extends core::Object {
   final field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class I2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → core::int
     ;
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.strong.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.strong.expect
index 77821f8..cc07a53 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.strong.expect
@@ -4,18 +4,18 @@
 
 class I1 extends core::Object {
   final field core::int x = self::y;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class I2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 class C extends core::Object implements self::I1, self::I2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect
index 5adb383..9a8589f 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect
index a17f0c2..91dce6c 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.outline.expect
@@ -7,7 +7,7 @@
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect
index bdd35e6..65851c3 100644
--- a/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instance_creation_downwards.dart.strong.expect
@@ -8,7 +8,7 @@
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect
index 47f329d..7464b33 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
@@ -12,7 +12,7 @@
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect
index c14cfbd..cac8ab3 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
     ;
@@ -11,7 +11,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect
index c6f2f60..24d056a 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(self::C::f::T x) → self::C::f::T
@@ -12,7 +12,7 @@
     return x;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect
index aee70c3..407abc7 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect
index 5b4814c..743f43f 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
     ;
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
index fb13da1..d26a271 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff_after_contravariance_check.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant method f<U extends core::Object>(self::C::f::U x) → (self::C::T) → void
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect
index 58bf32f..ac05240 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class B<T extends self::A<dynamic>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
index 83f4257..1675d51 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class B<T extends self::A<core::int>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect
index a124293..a8450dd 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A<dynamic>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
index d6316f7..c47d4b1 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A<core::int>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect
index 6be8e0b..d39e0fe 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A<dynamic>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
index a6e138b..1b49427 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A<dynamic>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect
index 4770520..c31aed4 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
index fa1e89c..250e9df 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect
index 4770520..c31aed4 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
index fa1e89c..250e9df 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::int> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect
index 2886e19..ab2d9ba 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect
index 977dc78..8e3e3d3 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect
index 9253845..e062f16 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect
index 4ffc25f..75d4b70 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect
index a82a67e..3a30a80 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
index 5618eb8..7ac3b90d 100644
--- a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart b/pkg/front_end/testcases/inference/logical_or_promotion.dart
new file mode 100644
index 0000000..57411e0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*@testedFeatures=inference*/
+library test;
+
+abstract class A {}
+
+abstract class B {}
+
+class C {
+  A a;
+
+  void f(Object o) {
+    if (o is A || o is B) {
+      if (o is A) {
+        /*@target=C::a*/ a = /*@promotedType=A*/ o;
+      }
+    }
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.direct.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.direct.expect
new file mode 100644
index 0000000..0216b64
--- /dev/null
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.direct.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field self::A a = null;
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method f(core::Object o) → void {
+    if(o is self::A || o is self::B) {
+      if(o is self::A) {
+        this.{self::C::a} = o{self::A};
+      }
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.outline.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.outline.expect
new file mode 100644
index 0000000..abefdcc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.outline.expect
@@ -0,0 +1,21 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+class C extends core::Object {
+  field self::A a;
+  synthetic constructor •() → void
+    ;
+  method f(core::Object o) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/logical_or_promotion.dart.strong.expect b/pkg/front_end/testcases/inference/logical_or_promotion.dart.strong.expect
new file mode 100644
index 0000000..0216b64
--- /dev/null
+++ b/pkg/front_end/testcases/inference/logical_or_promotion.dart.strong.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class C extends core::Object {
+  field self::A a = null;
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method f(core::Object o) → void {
+    if(o is self::A || o is self::B) {
+      if(o is self::A) {
+        this.{self::C::a} = o{self::A};
+      }
+    }
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect
index 765fbd9..0d4c4d9 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>() → self::D<self::C::f::T>
     return null;
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect
index 400327e..28b0bd9 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>() → self::D<self::C::f::T>
     return null;
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect
index f42ffa4..2409e0e2 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>() → self::D<self::C::f::T>
     return null;
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect
index 5ee63b7..e7701fd 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>() → self::D<self::C::f::T>
     return null;
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect
index 7a21796..f986cdf 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method f<T extends core::Object>() → self::D<self::C::f::T>
     return null;
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect
index 36256c8..5a6e1b5 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method f<T extends core::Object>() → self::D<self::C::f::T>
     return null;
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect
index 43f56e8..9b0f603 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect
index 07348e0..711c11f 100644
--- a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect
index ed344e9..a535f30 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<U extends core::Object, V extends core::Object> = (U) → V;
 class Foo<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get v1() → self::Bar<self::Foo::T>
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect
index 2d9d2ab..393359f 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<U extends core::Object, V extends core::Object> = (U) → V;
 class Foo<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get v1() → self::Bar<self::Foo::T>
     ;
diff --git a/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect b/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect
index 62f4423..e409ade 100644
--- a/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/non_const_invocation.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<U extends core::Object, V extends core::Object> = (U) → V;
 class Foo<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get v1() → self::Bar<self::Foo::T>
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.direct.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.direct.expect
index 2f4d41c..dab4a13 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.outline.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.outline.expect
index 2655089..b5e6361 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.strong.expect b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.strong.expect
index 2f4d41c..dab4a13 100644
--- a/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/non_inferrable_getter_setter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.direct.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.direct.expect
index 7e6739d..68554e9 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → core::int
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.outline.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.outline.expect
index 8392dca..29f71f7 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → core::int
     ;
diff --git a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.strong.expect b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.strong.expect
index 7db057a..1fc9581 100644
--- a/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/null_aware_method_invocation.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → core::int
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.direct.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.direct.expect
index 78a95f1..4b22e8a 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.outline.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.outline.expect
index f0f825a..843c59a 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f(self::C c) → void
diff --git a/pkg/front_end/testcases/inference/null_aware_property_get.dart.strong.expect b/pkg/front_end/testcases/inference/null_aware_property_get.dart.strong.expect
index 14ca21c..d8a523e 100644
--- a/pkg/front_end/testcases/inference/null_aware_property_get.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/null_aware_property_get.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect
index 74d43e4..e939b9e 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → void;
 }
 abstract class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract method bar() → void;
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
index 9b7b111..53eed9a 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method foo() → void;
 }
 abstract class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method bar() → void;
 }
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect
index d62d3d1..56d7592 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → void;
 }
 abstract class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract method bar() → void;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.direct.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.direct.expect
index bfb34d5..bf0bbce 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.strong.expect
index d8d5b0a..54fd2f2 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.direct.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.direct.expect
index bfb34d5..bf0bbce 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
index 0c7c999..ce0e7d1 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.direct.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.direct.expect
index c0f2e2c..7fd4435 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
index 9d2eb39..1fd007a 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int x = 2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.direct.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.direct.expect
index 4bf21ef..82372f9 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.direct.expect
@@ -4,25 +4,25 @@
 
 class A extends core::Object {
   field core::int x = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field self::A a = new self::A::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field self::B b = new self::B::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
   field self::C c = new self::C::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.strong.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.strong.expect
index 4b1d52e..b349989 100644
--- a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.strong.expect
@@ -4,25 +4,25 @@
 
 class A extends core::Object {
   field core::int x = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field self::A a = new self::A::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field self::B b = new self::B::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
   field self::C c = new self::C::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.direct.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.direct.expect
index 430414d..e9e9772 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int field = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get getter() → core::int
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
index fcb3dc0..32aed55 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get getter() → core::int
     ;
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.strong.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.strong.expect
index 4778d0f..5d01eef 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int field = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get getter() → core::int
diff --git a/pkg/front_end/testcases/inference/property_set.dart.direct.expect b/pkg/front_end/testcases/inference/property_set.dart.direct.expect
index 609e0f9..c247031 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A<T extends core::Object> extends core::Object {
   field core::List<self::A::T> x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set y(core::List<self::A::T> value) → void {}
diff --git a/pkg/front_end/testcases/inference/property_set.dart.outline.expect b/pkg/front_end/testcases/inference/property_set.dart.outline.expect
index 49ccb85..e693bd9 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class A<T extends core::Object> extends core::Object {
   field core::List<self::A::T> x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set y(core::List<self::A::T> value) → void
     ;
diff --git a/pkg/front_end/testcases/inference/property_set.dart.strong.expect b/pkg/front_end/testcases/inference/property_set.dart.strong.expect
index 2cd49d9..699d136 100644
--- a/pkg/front_end/testcases/inference/property_set.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field core::List<self::A::T> x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set y(generic-covariant-impl generic-covariant-interface core::List<self::A::T> value) → void {}
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
index 7a9fa5e..e226c84 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.outline.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.outline.expect
index f9f343e..c019f65 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(dynamic #synthetic) → void
     ;
diff --git a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
index e48816b..9441461 100644
--- a/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/property_set_bad_setter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(dynamic #synthetic) → void
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart b/pkg/front_end/testcases/inference/recursive_generic_function.dart
new file mode 100644
index 0000000..82ca679
--- /dev/null
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart
@@ -0,0 +1,16 @@
+// 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.
+
+/*@testedFeatures=inference*/
+library test;
+
+void _mergeSort<T>(
+    T Function(T) list, int compare(T a, T b), T Function(T) target) {
+  /*@typeArgs=_mergeSort::T*/ _mergeSort(list, compare, target);
+  /*@typeArgs=_mergeSort::T*/ _mergeSort(list, compare, list);
+  /*@typeArgs=_mergeSort::T*/ _mergeSort(target, compare, target);
+  /*@typeArgs=_mergeSort::T*/ _mergeSort(target, compare, list);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect
new file mode 100644
index 0000000..4af9ac5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.direct.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
+  self::_mergeSort<dynamic>(list, compare, target);
+  self::_mergeSort<dynamic>(list, compare, list);
+  self::_mergeSort<dynamic>(target, compare, target);
+  self::_mergeSort<dynamic>(target, compare, list);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect
new file mode 100644
index 0000000..31cc717
--- /dev/null
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect b/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect
new file mode 100644
index 0000000..ab23a10
--- /dev/null
+++ b/pkg/front_end/testcases/inference/recursive_generic_function.dart.strong.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method _mergeSort<T extends core::Object>((self::_mergeSort::T) → self::_mergeSort::T list, (self::_mergeSort::T, self::_mergeSort::T) → core::int compare, (self::_mergeSort::T) → self::_mergeSort::T target) → void {
+  self::_mergeSort<self::_mergeSort::T>(list, compare, target);
+  self::_mergeSort<self::_mergeSort::T>(list, compare, list);
+  self::_mergeSort<self::_mergeSort::T>(target, compare, target);
+  self::_mergeSort<self::_mergeSort::T>(target, compare, list);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect
index 6c5a663..2dcf59c 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::num> extends core::Object {
   field self::C::T a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method op(core::double b) → void {
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect
index 4336f7c..7a020fb 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method op(core::double b) → void {
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect
index 69d79f8..33580fd 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::num> extends core::Object {
   field self::C::T a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method op(core::int b) → void {
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect
index 920a286..15431c7 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method op(core::int b) → void {
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect
index 9ab5646..a4422e2 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::num> extends core::Object {
   field self::C::T a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method op(self::C::T b) → void {
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect
index 0fc1c8a..6410fb3 100644
--- a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::num> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method op(generic-covariant-impl generic-covariant-interface self::C::T b) → void {
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart b/pkg/front_end/testcases/inference/setter_return_type.dart
new file mode 100644
index 0000000..864265c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart
@@ -0,0 +1,20 @@
+// 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.
+
+/*@testedFeatures=inference,error*/
+library test;
+
+class C {
+  dynamic set x(int value) {}
+}
+
+abstract class I {
+  void set x(int value) {}
+}
+
+class D extends C implements I {
+  set /*@topType=void*/ x(/*@topType=int*/ value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.direct.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.direct.expect
new file mode 100644
index 0000000..7fe0689
--- /dev/null
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.direct.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(core::int value) → dynamic {}
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(core::int value) → void {}
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  set x(dynamic value) → dynamic {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect
new file mode 100644
index 0000000..29a3eb6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.outline.expect
@@ -0,0 +1,24 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  set x(core::int value) → dynamic
+    ;
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    ;
+  set x(core::int value) → void
+    ;
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → void
+    ;
+  set x(dynamic value) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/inference/setter_return_type.dart.strong.expect b/pkg/front_end/testcases/inference/setter_return_type.dart.strong.expect
new file mode 100644
index 0000000..7e46a78
--- /dev/null
+++ b/pkg/front_end/testcases/inference/setter_return_type.dart.strong.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(core::int value) → dynamic {}
+}
+abstract class I extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set x(core::int value) → void {}
+}
+class D extends self::C implements self::I {
+  synthetic constructor •() → void
+    : super self::C::•()
+    ;
+  set x(core::int value) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.direct.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.direct.expect
index f2bf3ed..1b6aeac 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method f(core::String s) → core::int
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.strong.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.strong.expect
index 7d1fc32..f39269c 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method f(core::String s) → core::int
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.direct.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.direct.expect
index 3e9c091..1eda6bb 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::List<core::num> x = <dynamic>[0];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.outline.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.outline.expect
index 36c9cdb..7e7ee84 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::List<core::num> x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field core::List<core::num> y;
diff --git a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.strong.expect b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.strong.expect
index 719227f..1dd089b 100644
--- a/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/subexpressions_of_explicitly_typed_fields.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::List<core::num> x = <core::num>[0];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect b/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect
index 1a182d7..041e05e 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(core::int x, core::String y) → void {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator []=(core::Object x, core::Object y) → void {}
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect b/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect
index 307e0c5..9d1472d 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(core::int x, core::String y) → void
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(core::Object x, core::Object y) → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect b/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect
index 2b6329e..6908392 100644
--- a/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_index_set.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(core::int x, core::String y) → void {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator []=(core::Object x, core::Object y) → void {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect
index 08a6341..cd3af92 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.direct.expect
@@ -4,13 +4,13 @@
 import "dart:async" as asy;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(core::Map<core::int, self::B::T> x, core::List<self::B::T> y) → void {}
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator []=(core::Object x, core::Object y) → void {}
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
index 7931dd1..9ef3f0c 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.outline.expect
@@ -4,13 +4,13 @@
 import "dart:async" as asy;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(core::Map<core::int, self::B::T> x, core::List<self::B::T> y) → void
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator []=(core::Object x, core::Object y) → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect
index ff689f7..a5cd75e 100644
--- a/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_index_set_substitution.dart.strong.expect
@@ -4,13 +4,13 @@
 import "dart:async" as asy;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator []=(generic-covariant-impl generic-covariant-interface core::Map<core::int, self::B::T> x, generic-covariant-impl generic-covariant-interface core::List<self::B::T> y) → void {}
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator []=(generic-covariant-impl core::Object x, generic-covariant-impl core::Object y) → void {}
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.direct.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.direct.expect
index 5e400c1..8cab747 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → core::int
     return 0;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.outline.expect
index 4568e7f..2b44b40 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → core::int
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation.dart.strong.expect b/pkg/front_end/testcases/inference/super_method_invocation.dart.strong.expect
index a5c0690..ee81a01 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → core::int
     return 0;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect
index 70b8f66..bcfab27 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.direct.expect
@@ -4,24 +4,24 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g(self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method g(core::Object x) → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
index 471eb18..4d0679c 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.outline.expect
@@ -4,21 +4,21 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g(self::E<self::B::T> x) → self::D<self::B::T>
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g(core::Object x) → self::E<asy::Future<self::C::U>>
     ;
diff --git a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect
index 787374a..973b188 100644
--- a/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_method_invocation_substitution.dart.strong.expect
@@ -4,24 +4,24 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g(generic-covariant-impl generic-covariant-interface self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method g(generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_get.dart.direct.expect
index 68ec3ab..b924b6f 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class C extends core::Object {
   field dynamic x = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
index dceba6b..f50036c 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class C extends core::Object {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_get.dart.strong.expect
index fb81110..5b8b0df 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class C extends core::Object {
   field core::int x = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.direct.expect
index b991d0c..979a599 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class C extends core::Object {
   field dynamic f = () → dynamic => 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
index d003bc5..513c5d6 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class C extends core::Object {
   field dynamic f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.strong.expect
index d5477d3..7b98ac9 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class C extends core::Object {
   field () → core::int f = () → core::int => 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.direct.expect
index 2a5ca35..6be1419 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call() → core::int
@@ -11,12 +11,12 @@
 }
 class C extends core::Object {
   field dynamic f = new self::CallableClass::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
index bd7618a..3371811 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method call() → core::int
     ;
 }
 class C extends core::Object {
   field dynamic f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.strong.expect
index 0b4b7af..8fa0de6 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class CallableClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call() → core::int
@@ -11,12 +11,12 @@
 }
 class C extends core::Object {
   field self::CallableClass f = new self::CallableClass::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect
index e0b7fda..8ee6c1c 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.direct.expect
@@ -4,23 +4,23 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
   field self::D<self::B::T> x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   get x() → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
index 86dfd6d..04cb684 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.outline.expect
@@ -4,20 +4,20 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends core::Object {
   field self::D<self::B::T> x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → self::E<asy::Future<self::C::U>>
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect
index c7dc05d..5841a0d 100644
--- a/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_substitution.dart.strong.expect
@@ -4,23 +4,23 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::D<self::B::T> x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   get x() → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.direct.expect
index d5ca9b9..f878cdf 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → core::int
     return 0;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.outline.expect
index 4568e7f..2b44b40 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → core::int
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g() → void
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.strong.expect
index 2579770..71fd364 100644
--- a/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_tearoff.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → core::int
     return 0;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method g() → void {
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect
index 10b3801..f4bec43 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.direct.expect
@@ -4,23 +4,23 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
   field self::D<self::B::T> x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   get x() → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
index fe34e5b..97fbb9b 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.outline.expect
@@ -4,20 +4,20 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends core::Object {
   field self::D<self::B::T> x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → self::E<asy::Future<self::C::U>>
     ;
diff --git a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect
index 255a741..3103ff0 100644
--- a/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/super_property_set_substitution.dart.strong.expect
@@ -4,23 +4,23 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::D<self::B::T> x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   get x() → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.direct.expect b/pkg/front_end/testcases/inference/this_reference.dart.direct.expect
index 91e0f51..b04ed9d 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.outline.expect b/pkg/front_end/testcases/inference/this_reference.dart.outline.expect
index 9b85e5f..c506387 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → void
     ;
diff --git a/pkg/front_end/testcases/inference/this_reference.dart.strong.expect b/pkg/front_end/testcases/inference/this_reference.dart.strong.expect
index 02ba572..2c721a1 100644
--- a/pkg/front_end/testcases/inference/this_reference.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/this_reference.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.direct.expect b/pkg/front_end/testcases/inference/try_catch.dart.direct.expect
index 1fc62c6..b39e7c9 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.outline.expect b/pkg/front_end/testcases/inference/try_catch.dart.outline.expect
index f64f12b..a8666ad 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method test(() → void f) → void
diff --git a/pkg/front_end/testcases/inference/try_catch.dart.strong.expect b/pkg/front_end/testcases/inference/try_catch.dart.strong.expect
index 3dee6da..98944f71 100644
--- a/pkg/front_end/testcases/inference/try_catch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/try_catch.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.direct.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.direct.expect
index f1fd11b..f99d7ff 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.outline.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.outline.expect
index f64f12b..a8666ad 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method test(() → void f) → void
diff --git a/pkg/front_end/testcases/inference/try_catch_finally.dart.strong.expect b/pkg/front_end/testcases/inference/try_catch_finally.dart.strong.expect
index ace40f8..b68e248 100644
--- a/pkg/front_end/testcases/inference/try_catch_finally.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/try_catch_finally.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.direct.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.direct.expect
index 0e421fc..6d36f68 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
 class E extends core::StackTrace {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::StackTrace::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect
index bbc32f2..37019c2 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::StackTrace {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method test(() → void f) → void
diff --git a/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect b/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect
index 3af5e52..0f2ef25 100644
--- a/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/try_catch_promotion.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
 class E extends core::StackTrace {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::StackTrace::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.direct.expect b/pkg/front_end/testcases/inference/type_cast.dart.direct.expect
index b0705b9..92d88c6 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends core::Object> extends self::A<self::B::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
index aee9eb4..8491585 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends self::A<self::B::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.strong.expect b/pkg/front_end/testcases/inference/type_cast.dart.strong.expect
index 6407324..2418fa8 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends core::Object> extends self::A<self::B::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
index 0c99d6c..42d105e 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect
index 0e39783..ac4a642 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
index 0e26ccb..1634538 100644
--- a/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unresolved_super.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect
index 054a846..94926cb 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect
index 8061f27..453c72f 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect
index a9a041d..601a1ea 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect
index 6dbc7b9..2cb1a2a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect
index 60f6501..46c4204 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect
index 6dbc7b9..2cb1a2a 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(() → self::C::f::T g) → core::List<self::C::f::T>
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.direct.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.direct.expect
index 42b6a16..65b6c5b 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.direct.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(dynamic x) → core::double
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.strong.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.strong.expect
index 6aaab51..a24ce84 100644
--- a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(dynamic x) → core::double
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect
index 8484c59..16e4209 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<U extends core::Object, V extends core::Object> = (U) → V;
 class Foo<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get v1() → self::Bar<self::Foo::T>
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect
index 2d9d2ab..393359f 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<U extends core::Object, V extends core::Object> = (U) → V;
 class Foo<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get v1() → self::Bar<self::Foo::T>
     ;
diff --git a/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect b/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect
index 21a8e8b..ae42957 100644
--- a/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/const_invocation.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<U extends core::Object, V extends core::Object> = (U) → V;
 class Foo<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get v1() → self::Bar<self::Foo::T>
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect
index 874bd97..2e54afa 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
index 6131ae2..ad47727 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
     ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
index 1965b1b..8e902ec 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<T extends core::Object>(self::A::f::T t) → self::A::f::T
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect
index 6f53943..e86775a 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field self::B<core::int> b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
index 232fa41..d0b810a 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field self::B<core::int> b;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends core::Object {
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect
index 913f0d4..019ae1b 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field self::B<core::int> b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.direct.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.direct.expect
index 1799e26..ae0c7e8 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.direct.expect
@@ -5,14 +5,14 @@
 class A extends core::Object {
   field dynamic x = () → dynamic => new self::B::•().x;
   field dynamic y = () → dynamic => new self::B::•().x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
   field dynamic x = null;
   field dynamic y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
index 3a623f2..59276ba 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
@@ -5,13 +5,13 @@
 class A extends core::Object {
   field dynamic x;
   field dynamic y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
   field dynamic x;
   field dynamic y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
index 7770e4d..30acbb6 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.strong.expect
@@ -5,14 +5,14 @@
 class A extends core::Object {
   field dynamic x = () → dynamic => new self::B::•().{self::B::x};
   field () → dynamic y = () → dynamic => new self::B::•().{self::B::x};
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
   field dynamic x = null;
   field () → dynamic y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
index 7e8a4d4..e612ea3 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field self::A aField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set aSetter(self::A value) → void {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
index 5a371a8..6bd42ce 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
   field self::A aField;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set aSetter(self::A value) → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
index d87176d..c5b3997 100644
--- a/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_identifier_downwards.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field self::A aField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set aSetter(self::A value) → void {}
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
index 2b4fcb0..f8bb637 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.direct.expect
@@ -4,12 +4,12 @@
 import "dart:async" as asy;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
index 6943bef..006a0f5 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
index 8013f99..8d16152 100644
--- a/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart.strong.expect
@@ -4,12 +4,12 @@
 import "dart:async" as asy;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect
index 26f262d..53d59d1 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::C
@@ -12,7 +12,7 @@
     return null;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::E
@@ -21,27 +21,27 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class G extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int i) → self::A
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect
index cc6a535..1116704 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int value) → self::C
     ;
@@ -11,7 +11,7 @@
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int value) → self::E
     ;
@@ -19,23 +19,23 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class G extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::int i) → self::A
     ;
diff --git a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect
index b444b73..9a5b546 100644
--- a/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/indexed_assign_combiner.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::C
@@ -12,7 +12,7 @@
     return null;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::E
@@ -21,27 +21,27 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class G extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int i) → self::A
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect
index d3169a6..233af9d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect
index f93f839..031084f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,12 +19,12 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect
index 8983249..128a53e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.direct.expect
index 9d752ae..0a5df04 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -20,7 +20,7 @@
 }
 class Test2 extends core::Object {
   field core::num t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -39,7 +39,7 @@
 }
 class Test3 extends core::Object {
   field core::double t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.outline.expect
index ba72078..49618ca 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.outline.expect
@@ -4,21 +4,21 @@
 
 class Test1 extends core::Object {
   field core::int t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test2 extends core::Object {
   field core::num t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test3 extends core::Object {
   field core::double t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test3() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.strong.expect
index e79b545..df44b13 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_implicit_this_upwards.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -20,7 +20,7 @@
 }
 class Test2 extends core::Object {
   field core::num t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
@@ -39,7 +39,7 @@
 }
 class Test3 extends core::Object {
   field core::double t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect
index fe603ea3..c460798 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect
index 3d9f3a4..ff1db0b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -23,11 +23,11 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect
index 11ebccb..211cbb9 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_full.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect
index 17cf428..515c5dd 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::F v) → self::C
@@ -17,7 +17,7 @@
     return null;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::E v) → self::D
@@ -26,27 +26,27 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class F extends self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::E::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect
index 62690b3..0b77cdc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::F v) → self::C
     ;
@@ -15,7 +15,7 @@
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::E v) → self::D
     ;
@@ -23,23 +23,23 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect
index 92f40fc..8c2dd0c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_set_vs_get.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::F v) → self::C
@@ -17,7 +17,7 @@
     return null;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::E v) → self::D
@@ -26,27 +26,27 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class F extends self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::E::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect
index 47f7f12..02ff3dc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
@@ -39,7 +39,7 @@
   operator []=(self::Index i, self::B v) → void {}
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect
index 1debd58..421df3f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -23,11 +23,11 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
@@ -35,7 +35,7 @@
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect
index 2d02025..ac4968c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
@@ -39,7 +39,7 @@
   operator []=(self::Index i, self::B v) → void {}
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect
index 0f2d274..7ad93e72 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::String s) → self::Base::T
@@ -14,7 +14,7 @@
   abstract method setValue(core::String s, self::Base::U v) → void;
 }
 abstract class Test1 extends self::Base<core::int, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -29,7 +29,7 @@
   }
 }
 abstract class Test2 extends self::Base<core::int, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -47,7 +47,7 @@
   }
 }
 abstract class Test3 extends self::Base<core::int, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -63,7 +63,7 @@
   }
 }
 abstract class Test4 extends self::Base<core::num, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -78,7 +78,7 @@
   }
 }
 abstract class Test5 extends self::Base<core::num, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -96,7 +96,7 @@
   }
 }
 abstract class Test6 extends self::Base<core::num, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -112,7 +112,7 @@
   }
 }
 abstract class Test7 extends self::Base<core::double, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -127,7 +127,7 @@
   }
 }
 abstract class Test8 extends self::Base<core::double, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -145,7 +145,7 @@
   }
 }
 abstract class Test9 extends self::Base<core::double, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect
index a99413b..e678ac3 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::String s) → self::Base::T
     ;
@@ -13,55 +13,55 @@
   abstract method setValue(core::String s, self::Base::U v) → void;
 }
 abstract class Test1 extends self::Base<core::int, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test2 extends self::Base<core::int, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test3 extends self::Base<core::int, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test4 extends self::Base<core::num, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test5 extends self::Base<core::num, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test6 extends self::Base<core::num, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test7 extends self::Base<core::double, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test8 extends self::Base<core::double, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 abstract class Test9 extends self::Base<core::double, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
index b541199..a5de1b6 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_super_upwards.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::String s) → self::Base::T
@@ -14,7 +14,7 @@
   abstract method setValue(core::String s, generic-covariant-impl generic-covariant-interface self::Base::U v) → void;
 }
 abstract class Test1 extends self::Base<core::int, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -31,7 +31,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
 }
 abstract class Test2 extends self::Base<core::int, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -51,7 +51,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::num v) → void;
 }
 abstract class Test3 extends self::Base<core::int, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -69,7 +69,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
 }
 abstract class Test4 extends self::Base<core::num, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -86,7 +86,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
 }
 abstract class Test5 extends self::Base<core::num, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -106,7 +106,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::num v) → void;
 }
 abstract class Test6 extends self::Base<core::num, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -124,7 +124,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::double v) → void;
 }
 abstract class Test7 extends self::Base<core::double, core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -141,7 +141,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::int v) → void;
 }
 abstract class Test8 extends self::Base<core::double, core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -161,7 +161,7 @@
   abstract forwarding-stub method setValue(core::String s, generic-covariant-impl core::num v) → void;
 }
 abstract class Test9 extends self::Base<core::double, core::double> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect
index 9edcdb9..2c0f5d8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect
index 3d9f3a4..ff1db0b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -23,11 +23,11 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::Index i) → self::B
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect
index a93cbdb..754dfc6 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Index extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -26,12 +26,12 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::Index i) → self::B
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.direct.expect
index 3794498..62118c8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Test1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::int;
@@ -20,7 +20,7 @@
   }
 }
 abstract class Test2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::int;
@@ -40,7 +40,7 @@
   }
 }
 abstract class Test3 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::int;
@@ -58,7 +58,7 @@
   }
 }
 abstract class Test4 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::num;
@@ -75,7 +75,7 @@
   }
 }
 abstract class Test5 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::num;
@@ -95,7 +95,7 @@
   }
 }
 abstract class Test6 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::num;
@@ -113,7 +113,7 @@
   }
 }
 abstract class Test7 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::double;
@@ -130,7 +130,7 @@
   }
 }
 abstract class Test8 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::double;
@@ -150,7 +150,7 @@
   }
 }
 abstract class Test9 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::double;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.outline.expect
index 91159e5..cb25765 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Test1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::int;
   abstract operator []=(core::String s, core::int v) → void;
@@ -11,7 +11,7 @@
     ;
 }
 abstract class Test2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::int;
   abstract operator []=(core::String s, core::num v) → void;
@@ -19,7 +19,7 @@
     ;
 }
 abstract class Test3 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::int;
   abstract operator []=(core::String s, core::double v) → void;
@@ -27,7 +27,7 @@
     ;
 }
 abstract class Test4 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::int v) → void;
@@ -35,7 +35,7 @@
     ;
 }
 abstract class Test5 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::num v) → void;
@@ -43,7 +43,7 @@
     ;
 }
 abstract class Test6 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::num;
   abstract operator []=(core::String s, core::double v) → void;
@@ -51,7 +51,7 @@
     ;
 }
 abstract class Test7 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::int v) → void;
@@ -59,7 +59,7 @@
     ;
 }
 abstract class Test8 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::num v) → void;
@@ -67,7 +67,7 @@
     ;
 }
 abstract class Test9 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → core::double;
   abstract operator []=(core::String s, core::double v) → void;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
index 852b248..055146e 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_this_upwards.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Test1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::int;
@@ -20,7 +20,7 @@
   }
 }
 abstract class Test2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::int;
@@ -40,7 +40,7 @@
   }
 }
 abstract class Test3 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::int;
@@ -58,7 +58,7 @@
   }
 }
 abstract class Test4 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::num;
@@ -75,7 +75,7 @@
   }
 }
 abstract class Test5 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::num;
@@ -95,7 +95,7 @@
   }
 }
 abstract class Test6 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::num;
@@ -113,7 +113,7 @@
   }
 }
 abstract class Test7 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::double;
@@ -130,7 +130,7 @@
   }
 }
 abstract class Test8 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::double;
@@ -150,7 +150,7 @@
   }
 }
 abstract class Test9 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → core::double;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect
index 5124a37..7455ebf 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → self::Test::T;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect
index 1a49f43..68b8c6d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract operator [](core::String s) → self::Test::T;
   abstract operator []=(core::String s, self::Test::U v) → void;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
index b0964a3..b758276 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index_upwards.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class Test<T extends core::Object, U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract operator [](core::String s) → self::Test::T;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect
index 217cbec..eec4890 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,7 +21,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect
index daeee46..e4b381c 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,7 +19,7 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect
index ca6d4bc..1758b80 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_local.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,7 +21,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.direct.expect
index cc6f450..b065aea 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
index ffb3600..090f13d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field dynamic v_assign;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.strong.expect
index abce25f..9b1a01f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.direct.expect
index 64e6de9..45017e8 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → core::int
@@ -13,7 +13,7 @@
 }
 class B extends core::Object {
   field self::A a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
index 987fb55..906ceea 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(dynamic other) → core::int
     ;
@@ -12,7 +12,7 @@
 }
 class B extends core::Object {
   field self::A a;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field dynamic v_prefix_pp;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
index abc9777..c5411ae 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → core::int
@@ -13,7 +13,7 @@
 }
 class B extends core::Object {
   field self::A a = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect
index f0c7aa2..cf78a86 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect
index c5c3402..de60c09 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,12 +19,12 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test t) → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect
index a799eff..0009111 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_full.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect
index 4848028..9e6a640 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect
index c5c3402..de60c09 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,12 +19,12 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test t) → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect
index 26c2531..d13eac7 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,13 +21,13 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Test extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.direct.expect
index 69e8b66..59129cd 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -20,7 +20,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -39,7 +39,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.outline.expect
index fb5172d..45f7015 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.outline.expect
@@ -4,21 +4,21 @@
 
 class Test1 extends core::Object {
   field core::int prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test1 t) → void
     ;
 }
 class Test2 extends core::Object {
   field core::num prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test2 t) → void
     ;
 }
 class Test3 extends core::Object {
   field core::double prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test3(self::Test3 t) → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.strong.expect
index 9a7ad5b..834d57b 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_null_aware_upwards.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -20,7 +20,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -39,7 +39,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect
index ecb6608..ccc4134 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,18 +21,18 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect
index 1337d56..077e4d6 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -19,16 +19,16 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Base extends core::Object {
   field self::B member;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect
index d0046fd..5963336 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -21,18 +21,18 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class Base extends core::Object {
   field self::B member = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.direct.expect
index 1402364..66e910a 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.direct.expect
@@ -6,12 +6,12 @@
   field core::int intProp = null;
   field core::num numProp = null;
   field core::double doubleProp = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test1 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -26,7 +26,7 @@
   }
 }
 class Test2 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -44,7 +44,7 @@
   }
 }
 class Test3 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.outline.expect
index c4fdca1..592fa68 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.outline.expect
@@ -6,23 +6,23 @@
   field core::int intProp;
   field core::num numProp;
   field core::double doubleProp;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Test1 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test2 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
 }
 class Test3 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test3() → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.strong.expect
index d5838d0..73e1212 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_super_upwards.dart.strong.expect
@@ -6,12 +6,12 @@
   field core::int intProp = null;
   field core::num numProp = null;
   field core::double doubleProp = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Test1 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -26,7 +26,7 @@
   }
 }
 class Test2 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test() → void {
@@ -44,7 +44,7 @@
   }
 }
 class Test3 extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method test3() → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.direct.expect
index 7403609..d268f79 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -20,7 +20,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -39,7 +39,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.outline.expect
index fb5172d..45f7015 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.outline.expect
@@ -4,21 +4,21 @@
 
 class Test1 extends core::Object {
   field core::int prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test1 t) → void
     ;
 }
 class Test2 extends core::Object {
   field core::num prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test(self::Test2 t) → void
     ;
 }
 class Test3 extends core::Object {
   field core::double prop;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method test3(self::Test3 t) → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.strong.expect
index f7a58850..78c30db 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_upwards.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Test1 extends core::Object {
   field core::int prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test1 t) → void {
@@ -20,7 +20,7 @@
 }
 class Test2 extends core::Object {
   field core::num prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test(self::Test2 t) → void {
@@ -39,7 +39,7 @@
 }
 class Test3 extends core::Object {
   field core::double prop = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method test3(self::Test3 t) → void {
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.direct.expect
index 75e1c71..5d4e0bc7 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
index f27b342..c96e2f4 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field self::A a;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.strong.expect
index e51e92c..2fe641f 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class A extends core::Object {
   field core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect
index c605a6e..fa2ea61 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
   static field self::B staticVariable = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -22,7 +22,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect
index a4f35a6..e348b03 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.outline.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
   static field self::B staticVariable;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::C v) → self::A
     ;
@@ -20,7 +20,7 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field self::B topLevelVariable;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect
index c0f0da1..84c4d62 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_static.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
   static field self::B staticVariable = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(self::C v) → self::A
@@ -22,7 +22,7 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.direct.expect
index 675b0e3..0d86ccf 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
@@ -11,7 +11,7 @@
 }
 class B extends self::A {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
index 8f8c05c..6274d9f 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
   abstract set x(core::double value) → void;
 }
 class B extends self::A {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
index 9c0b9ea..ad2a9c8 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::int;
@@ -11,7 +11,7 @@
 }
 class B extends self::A {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.direct.expect
index 980cc01..ba4b43f 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.direct.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract get x() → core::int;
 }
 class C extends self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
index cad0e61..34df48d 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::int;
 }
 class C extends self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
index a0d4e5f..85d23e6 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(core::num value) → void;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract get x() → core::int;
 }
 class C extends self::B {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.direct.expect
index 5b2c2ce..370dc25 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.direct.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract set x(core::int value) → void;
 }
 class C extends self::B {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
index 1c36296..bac8d1c 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → core::num;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(core::int value) → void;
 }
 class C extends self::B {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
index c0e722e..1a3e8bf 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → core::num;
 }
 abstract class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   abstract set x(core::int value) → void;
 }
 class C extends self::B {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.direct.expect
index 50f1e22..097abf7 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field self::B b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get c() → self::C
@@ -17,12 +17,12 @@
   set c(self::C value) → void {}
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
index 2d146c8..a21ef5e 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class A extends core::Object {
   field self::B b;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get c() → self::C
     ;
@@ -16,11 +16,11 @@
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field dynamic a;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.strong.expect
index 0be849a..b42ff08 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field self::B b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get c() → self::C
@@ -17,12 +17,12 @@
   set c(self::C value) → void {}
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.direct.expect
index 5a8ae1c..7e940c1 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.direct.expect
@@ -4,23 +4,23 @@
 
 class A extends core::Object {
   field self::B b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field self::C c = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
index 1c2caf9..ffe61a5 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
@@ -4,20 +4,20 @@
 
 class A extends core::Object {
   field self::B b;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
   field self::C c;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field dynamic a;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.strong.expect
index 61b4c2d..80f34b9 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.strong.expect
@@ -4,23 +4,23 @@
 
 class A extends core::Object {
   field self::B b = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
   field self::C c = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.direct.expect
index e53d859..e431672 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.direct.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field dynamic b = () → dynamic => self::x;
   field dynamic c = () → dynamic => self::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
index e693964..ec8e2e0 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field dynamic b;
   field dynamic c;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field dynamic a;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
index 3db6238..1425513 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.strong.expect
@@ -5,7 +5,7 @@
 class A extends core::Object {
   field dynamic b = () → dynamic => self::x;
   field () → dynamic c = () → dynamic => self::x;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.direct.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.direct.expect
index 94f4cfb..147a6a5 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method f() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
index 0ff38be..7b617ff 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → void
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → dynamic
     ;
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.strong.expect
index 1b26ccc..9a42ff3 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method f() → void {}
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.direct.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.direct.expect
index 7aa9998..8d4f115 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.direct.expect
@@ -3,35 +3,35 @@
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(core::Object o) → void {}
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::E::•()
     ;
   method f(core::Object o) → void {}
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
index 9332738..c2021f7 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.outline.expect
@@ -3,31 +3,31 @@
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::Object o) → void
     ;
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::Object o) → void
     ;
diff --git a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect
index accd6bf..eec2396 100644
--- a/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/multiple_interface_inheritance.dart.strong.expect
@@ -3,36 +3,36 @@
 import "dart:core" as core;
 
 abstract class I1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int i) → void;
 }
 abstract class I2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object o) → void;
 }
 abstract class C extends core::Object implements self::I1, self::I2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract forwarding-stub method f(core::Object o) → void;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(core::Object o) → void {}
 }
 abstract class E extends core::Object implements self::I2, self::I1 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::E::•()
     ;
   method f(core::Object o) → void {}
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect
index 28b9c23..1bb7b06 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::C
@@ -12,7 +12,7 @@
     return null;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::E
@@ -21,27 +21,27 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class G extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get target() → self::A
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect
index eed4fbe..b4b96d8 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int value) → self::C
     ;
@@ -11,7 +11,7 @@
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int value) → self::E
     ;
@@ -19,23 +19,23 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class G extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get target() → self::A
     ;
diff --git a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect
index 7e5abb0..1bb49c8 100644
--- a/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/property_assign_combiner.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::C
@@ -12,7 +12,7 @@
     return null;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::E
@@ -21,27 +21,27 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class G extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get target() → self::A
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.direct.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.direct.expect
index ca2ff66..a0e3f31 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int field = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get getter() → core::int
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
index 62a5ccf..4ac3777 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get getter() → core::int
     ;
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.strong.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.strong.expect
index 877fb88..fecf831 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field core::int field = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get getter() → core::int
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect
index f0bd157..3b7b792 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::C
@@ -12,7 +12,7 @@
     return null;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::E
@@ -21,22 +21,22 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect
index 8618f59..1e63c29 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int value) → self::C
     ;
@@ -11,7 +11,7 @@
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int value) → self::E
     ;
@@ -19,19 +19,19 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method f<T extends core::Object>() → self::f::T
diff --git a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect
index 800702e..e2277e6 100644
--- a/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/static_assign_combiner.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::C
@@ -12,7 +12,7 @@
     return null;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int value) → self::E
@@ -21,22 +21,22 @@
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect
index 495e552..d30ced1 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int x) → core::num
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator [](core::Object x) → core::int
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect
index f91a674..662ebfe 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::int x) → core::num
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::Object x) → core::int
     ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect b/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect
index ab175e4..78e7bfb 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int x) → core::num
     return null;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator [](core::Object x) → core::int
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect
index c90d041..ee237ad 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.direct.expect
@@ -4,24 +4,24 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator [](core::Object x) → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
index 4669020..469ee7f 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.outline.expect
@@ -4,21 +4,21 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](self::E<self::B::T> x) → self::D<self::B::T>
     ;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::Object x) → self::E<asy::Future<self::C::U>>
     ;
diff --git a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect
index c8fcac2..b061ba0 100644
--- a/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/super_index_get_substitution.dart.strong.expect
@@ -4,24 +4,24 @@
 import "dart:async" as asy;
 
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E<T extends core::Object> extends self::D<self::E::T> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](generic-covariant-impl generic-covariant-interface self::E<self::B::T> x) → self::D<self::B::T>
     return null;
 }
 class C<U extends core::Object> extends self::B<asy::Future<self::C::U>> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   operator [](generic-covariant-impl core::Object x) → self::E<asy::Future<self::C::U>>
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.direct.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.direct.expect
index 7984c11..cd980ee 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.direct.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.direct.expect
@@ -3,45 +3,45 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 abstract class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class H extends self::G {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::G::•()
     ;
   method foo() → self::C
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
index 3943a47..bbf424f 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
@@ -3,38 +3,38 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class H extends self::G {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → self::C
     ;
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect
index 7818214..35ad473 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.strong.expect
@@ -3,46 +3,46 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 abstract class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → self::A;
 }
 abstract class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → self::B;
 }
 abstract class F extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → core::Object;
 }
 abstract class G extends core::Object implements self::D, self::E, self::F {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract forwarding-stub method foo() → self::B;
 }
 class H extends self::G {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::G::•()
     ;
   method foo() → self::C
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.expect
index 7d5f090..8c50708 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_generic_classes_from_dill.dart.strong.expect
@@ -4,7 +4,7 @@
 import "dart:collection" as col;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
index 5ee4f7e..7f1bc8a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
index e280168..b96b592 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list_with_generic_argument.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method fun() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
index f59f22b..7a9a472 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
index 3cce7c5..b7936f1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_omitted_bound.dart.strong.expect
@@ -4,12 +4,12 @@
 import "dart:collection" as col;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method fun() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
index cd81801..3657fb3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends self::A<self::A::T>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
index e7f6898..00162ec 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
index 16df436..52cb506 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list_with_generic_argument.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::Object> = (T) → dynamic;
 class B<U extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method fun() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
index 85ce2a1..f63ba9a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
index 588b68c..ff7a612 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_omitted_bound.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::Object> = (T) → dynamic;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect
index 24ce2c1..4024856 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef A<T extends core::Object> = (T) → dynamic;
 typedef B<U extends (U) → dynamic> = (U) → dynamic;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic {
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart
new file mode 100644
index 0000000..4e50e29
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart
@@ -0,0 +1,13 @@
+// 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.
+
+// This test checks that type inference uses type arguments provided by
+// instantiate to bound in type annotations to infer the type arguments of the
+// corresponding constructor invocations.
+
+class A<T extends num> {}
+
+main() {
+  A a = new A();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect
new file mode 100644
index 0000000..b63980f
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.strong.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  self::A<core::num> a = new self::A::•<core::num>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart
new file mode 100644
index 0000000..00dae45
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart
@@ -0,0 +1,13 @@
+// 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.
+
+// This test checks that type inference invokes instantiate to bound to provide
+// type arguments to constructor invocations in cases when nothing constrains
+// the arguments or the invocation.
+
+class A<T extends num> {}
+
+main() {
+  new A();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect
new file mode 100644
index 0000000..bf8ac07
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.strong.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::num> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {
+  new self::A::•<core::num>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart
new file mode 100644
index 0000000..5ca2c73
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart
@@ -0,0 +1,18 @@
+// 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.
+
+// This test checks that instantiate to bound could be run on partially defined
+// type arguments supplied by type inference.
+
+class A<T> {}
+
+class B<T extends num, S extends List<T>> extends A<T> {
+  B([T x]) {}
+}
+
+main() {
+  B x; // No information is provided by type inference.
+  var y = new B(3); // T is constrained by int <: T by the upwards context.
+  A<int> z = new B(); // T is constrained by T <: int by the downwards context.
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect
new file mode 100644
index 0000000..cf6dc06
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.strong.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class B<T extends core::num, S extends core::List<self::B::T>> extends self::A<self::B::T> {
+  constructor •([self::B::T x = null]) → void
+    : super self::A::•() {}
+}
+static method main() → dynamic {
+  self::B<core::num, core::List<core::num>> x;
+  self::B<core::int, core::List<core::int>> y = new self::B::•<core::int, core::List<core::int>>(3);
+  self::A<core::int> z = new self::B::•<core::int, core::List<core::int>>();
+}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart
new file mode 100644
index 0000000..4bdbe0d
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart
@@ -0,0 +1,13 @@
+// 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.
+
+// This test checks that super-bounded types that are produced by instantiate to
+// bound are rejected when inferred as type arguments of constructor
+// invocations.
+
+class B<T extends Comparable<T>> {}
+
+var y = new B();
+
+main() {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
new file mode 100644
index 0000000..6a927d8
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.strong.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends core::Comparable<self::B::T>> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static field self::B<core::Comparable<dynamic>> y = new self::B::•<core::Comparable<dynamic>>();
+static const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart:11:13: Error: Can't use a super-bounded type for instance creation. Got '#lib1::B<dart.core::Comparable<dynamic>>'.\nvar y = new B();\n            ^"]/* from null */;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
index d6193c5..8b8b879 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo(self::A<core::num> a) → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
index c620a46..e031824 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
index 84a4ce2..7c0008d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list_with_generic_argument.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<S extends core::Object> extends core::Object {
   final field core::List<self::A<self::B::S>> foo = <self::A<self::B::S>>[];
   final field core::List<self::A<core::num>> bar = <self::A<core::num>>[];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
index 1b12e12..945d678 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
index 65538cb..bd60470 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/omitted_bound.dart.strong.expect
@@ -4,12 +4,12 @@
 import "dart:collection" as col;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → self::A<dynamic>
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
index 837cc64..99ef415 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class A<T extends core::num> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B<T extends self::A<core::num>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
index d8c359c..08af2f5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A<T extends self::A<self::A::T>> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
index 5f28d03..52fa1cf 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::num> = (T) → dynamic;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo((core::num) → dynamic a) → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
index c4e1521..e674c32 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list_with_generic_argument.dart.strong.expect
@@ -6,7 +6,7 @@
 class B<S extends core::Object> extends core::Object {
   generic-contravariant final field core::List<(self::B::S) → dynamic> foo = <(self::B::S) → dynamic>[];
   final field core::List<(core::num) → dynamic> bar = <(core::num) → dynamic>[];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
index 451edbe..f3c3c27 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_omitted_bound.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::Object> = (T) → dynamic;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → (dynamic) → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
index 875fc1a..03b6e9c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef A<T extends core::num> = (T) → dynamic;
 class B<T extends (core::num) → dynamic> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.direct.expect b/pkg/front_end/testcases/invalid_assignment.dart.direct.expect
index bcb617b..a891be4 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.direct.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int i) → core::String
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.outline.expect b/pkg/front_end/testcases/invalid_assignment.dart.outline.expect
index 13f750f..d5d3c0e 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.outline.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::int i) → core::String
     ;
diff --git a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
index 77f5f93..964488f 100644
--- a/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_assignment.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::int i) → core::String
diff --git a/pkg/front_end/testcases/invalid_cast.dart.direct.expect b/pkg/front_end/testcases/invalid_cast.dart.direct.expect
index eef3c60..d768d66 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.direct.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.direct.expect
@@ -20,7 +20,7 @@
   static method staticFunction(core::int i) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/invalid_cast.dart.outline.expect b/pkg/front_end/testcases/invalid_cast.dart.outline.expect
index 644d93c..fb9e73a 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.outline.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.outline.expect
@@ -18,7 +18,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method topLevelFunction(core::int i) → void
diff --git a/pkg/front_end/testcases/invalid_cast.dart.strong.expect b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
index 9ca2218..b1bc2fc 100644
--- a/pkg/front_end/testcases/invalid_cast.dart.strong.expect
+++ b/pkg/front_end/testcases/invalid_cast.dart.strong.expect
@@ -20,7 +20,7 @@
   static method staticFunction(core::int i) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/metadata_named_mixin_application.dart.direct.expect b/pkg/front_end/testcases/metadata_named_mixin_application.dart.direct.expect
index 148e11c..f571756 100644
--- a/pkg/front_end/testcases/metadata_named_mixin_application.dart.direct.expect
+++ b/pkg/front_end/testcases/metadata_named_mixin_application.dart.direct.expect
@@ -4,17 +4,17 @@
 
 @self::a
 class C = self::D with self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/metadata_named_mixin_application.dart.outline.expect b/pkg/front_end/testcases/metadata_named_mixin_application.dart.outline.expect
index bdba575..00b49e4 100644
--- a/pkg/front_end/testcases/metadata_named_mixin_application.dart.outline.expect
+++ b/pkg/front_end/testcases/metadata_named_mixin_application.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class C = self::D with self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static const field dynamic a;
diff --git a/pkg/front_end/testcases/metadata_named_mixin_application.dart.strong.expect b/pkg/front_end/testcases/metadata_named_mixin_application.dart.strong.expect
index 148e11c..f571756 100644
--- a/pkg/front_end/testcases/metadata_named_mixin_application.dart.strong.expect
+++ b/pkg/front_end/testcases/metadata_named_mixin_application.dart.strong.expect
@@ -4,17 +4,17 @@
 
 @self::a
 class C = self::D with self::E {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/micro.dart.direct.expect b/pkg/front_end/testcases/micro.dart.direct.expect
index c4bb3b9..990c0b7 100644
--- a/pkg/front_end/testcases/micro.dart.direct.expect
+++ b/pkg/front_end/testcases/micro.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method instanceMethod() → dynamic {
@@ -11,19 +11,19 @@
   }
 }
 abstract class ExternalValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -39,13 +39,13 @@
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
 }
 class DynamicReceiver2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
diff --git a/pkg/front_end/testcases/micro.dart.outline.expect b/pkg/front_end/testcases/micro.dart.outline.expect
index a047f13..56f02f7 100644
--- a/pkg/front_end/testcases/micro.dart.outline.expect
+++ b/pkg/front_end/testcases/micro.dart.outline.expect
@@ -3,23 +3,23 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method instanceMethod() → dynamic
     ;
 }
 abstract class ExternalValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class FinalBox extends core::Object {
@@ -32,13 +32,13 @@
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method dynamicallyCalled(dynamic x) → dynamic
     ;
 }
 class DynamicReceiver2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method dynamicallyCalled(dynamic x) → dynamic
     ;
diff --git a/pkg/front_end/testcases/micro.dart.strong.expect b/pkg/front_end/testcases/micro.dart.strong.expect
index 8c08428..c7b1e6d 100644
--- a/pkg/front_end/testcases/micro.dart.strong.expect
+++ b/pkg/front_end/testcases/micro.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method instanceMethod() → dynamic {
@@ -11,19 +11,19 @@
   }
 }
 abstract class ExternalValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class Bar extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method externalInstanceMethod() → self::ExternalValue;
 }
 class Box extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -39,13 +39,13 @@
     ;
 }
 class DynamicReceiver1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
 }
 class DynamicReceiver2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method dynamicallyCalled(dynamic x) → dynamic {}
diff --git a/pkg/front_end/testcases/mixin.dart.direct.expect b/pkg/front_end/testcases/mixin.dart.direct.expect
index 36382d1..82cbfbd 100644
--- a/pkg/front_end/testcases/mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/mixin.dart.direct.expect
@@ -12,14 +12,14 @@
     ;
 }
 abstract class M1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
 }
 abstract class M2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
@@ -31,7 +31,7 @@
     ;
 }
 abstract class G1<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
@@ -40,7 +40,7 @@
 abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
 }
 class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/mixin.dart.outline.expect b/pkg/front_end/testcases/mixin.dart.outline.expect
index 82a24fb..f2e9d27 100644
--- a/pkg/front_end/testcases/mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/mixin.dart.outline.expect
@@ -11,13 +11,13 @@
     ;
 }
 abstract class M1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m() → dynamic
     ;
 }
 abstract class M2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m() → dynamic
     ;
@@ -27,7 +27,7 @@
     ;
 }
 abstract class G1<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m() → dynamic
     ;
@@ -35,7 +35,7 @@
 abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
 }
 class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/mixin.dart.strong.expect b/pkg/front_end/testcases/mixin.dart.strong.expect
index 01891c8..bdaa070 100644
--- a/pkg/front_end/testcases/mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/mixin.dart.strong.expect
@@ -12,14 +12,14 @@
     ;
 }
 abstract class M1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
     return core::print("M1");
 }
 abstract class M2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
@@ -31,7 +31,7 @@
     ;
 }
 abstract class G1<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic
@@ -40,7 +40,7 @@
 abstract class _Object&G1^^#T0<#T0 extends core::Object> = core::Object with self::G1<self::_Object&G1^^#T0::#T0> {
 }
 class D<S extends core::Object> extends self::_Object&G1^^#T0<self::D::S> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/named_parameters.dart.direct.expect b/pkg/front_end/testcases/named_parameters.dart.direct.expect
index 0b1a7db..5623b11 100644
--- a/pkg/front_end/testcases/named_parameters.dart.direct.expect
+++ b/pkg/front_end/testcases/named_parameters.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Superclass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo({dynamic alpha, dynamic beta}) → dynamic {}
@@ -14,7 +14,7 @@
   }
 }
 class Subclass extends self::Superclass {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Superclass::•()
     ;
   method foo({dynamic beta, dynamic alpha}) → dynamic {}
diff --git a/pkg/front_end/testcases/named_parameters.dart.outline.expect b/pkg/front_end/testcases/named_parameters.dart.outline.expect
index 31ae8e4..acdd97f 100644
--- a/pkg/front_end/testcases/named_parameters.dart.outline.expect
+++ b/pkg/front_end/testcases/named_parameters.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Superclass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo({dynamic alpha, dynamic beta}) → dynamic
     ;
@@ -13,7 +13,7 @@
     ;
 }
 class Subclass extends self::Superclass {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo({dynamic beta, dynamic alpha}) → dynamic
     ;
diff --git a/pkg/front_end/testcases/native_as_name.dart.direct.expect b/pkg/front_end/testcases/native_as_name.dart.direct.expect
index 01d9add..93e5e80 100644
--- a/pkg/front_end/testcases/native_as_name.dart.direct.expect
+++ b/pkg/front_end/testcases/native_as_name.dart.direct.expect
@@ -9,20 +9,20 @@
     ;
 }
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method native() → core::String
     return "method";
 }
 class Y1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get native() → core::String;
 }
 class Y2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   @core::override
@@ -31,7 +31,7 @@
 }
 class Z extends core::Object {
   field core::String f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set native(core::String s) → dynamic
diff --git a/pkg/front_end/testcases/native_as_name.dart.outline.expect b/pkg/front_end/testcases/native_as_name.dart.outline.expect
index 9955d59..80a1780 100644
--- a/pkg/front_end/testcases/native_as_name.dart.outline.expect
+++ b/pkg/front_end/testcases/native_as_name.dart.outline.expect
@@ -8,25 +8,25 @@
     ;
 }
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method native() → core::String
     ;
 }
 class Y1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get native() → core::String;
 }
 class Y2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get native() → core::String
     ;
 }
 class Z extends core::Object {
   field core::String f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set native(core::String s) → dynamic
     ;
diff --git a/pkg/front_end/testcases/native_as_name.dart.strong.expect b/pkg/front_end/testcases/native_as_name.dart.strong.expect
index eb3cfd0..4b3cf16 100644
--- a/pkg/front_end/testcases/native_as_name.dart.strong.expect
+++ b/pkg/front_end/testcases/native_as_name.dart.strong.expect
@@ -9,20 +9,20 @@
     ;
 }
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method native() → core::String
     return "method";
 }
 class Y1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get native() → core::String;
 }
 class Y2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   @core::override
@@ -31,7 +31,7 @@
 }
 class Z extends core::Object {
   field core::String f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set native(core::String s) → void
diff --git a/pkg/front_end/testcases/null_aware.dart.direct.expect b/pkg/front_end/testcases/null_aware.dart.direct.expect
index f85d16d..ddf9175 100644
--- a/pkg/front_end/testcases/null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/null_aware.dart.direct.expect
@@ -5,7 +5,7 @@
 class Foo extends core::Object {
   field core::int field = null;
   static field core::int staticField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/null_aware.dart.outline.expect b/pkg/front_end/testcases/null_aware.dart.outline.expect
index cd828cc..ef39846 100644
--- a/pkg/front_end/testcases/null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/null_aware.dart.outline.expect
@@ -5,7 +5,7 @@
 class Foo extends core::Object {
   field core::int field;
   static field core::int staticField;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/null_aware.dart.strong.expect b/pkg/front_end/testcases/null_aware.dart.strong.expect
index 1f16763..0c3d292 100644
--- a/pkg/front_end/testcases/null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/null_aware.dart.strong.expect
@@ -5,7 +5,7 @@
 class Foo extends core::Object {
   field core::int field = null;
   static field core::int staticField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/operators.dart.direct.expect b/pkg/front_end/testcases/operators.dart.direct.expect
index d2c131d..1997580 100644
--- a/pkg/front_end/testcases/operators.dart.direct.expect
+++ b/pkg/front_end/testcases/operators.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Operators extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → dynamic
diff --git a/pkg/front_end/testcases/operators.dart.outline.expect b/pkg/front_end/testcases/operators.dart.outline.expect
index b068cb5..58caf3b 100644
--- a/pkg/front_end/testcases/operators.dart.outline.expect
+++ b/pkg/front_end/testcases/operators.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Operators extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(dynamic other) → dynamic
     ;
diff --git a/pkg/front_end/testcases/optional.dart.direct.expect b/pkg/front_end/testcases/optional.dart.direct.expect
index f28ea2b..eb5ddb9 100644
--- a/pkg/front_end/testcases/optional.dart.direct.expect
+++ b/pkg/front_end/testcases/optional.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method(dynamic x, [dynamic y, dynamic z]) → dynamic {
@@ -11,32 +11,32 @@
   }
 }
 abstract class External extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method externalMethod(core::int x, [core::int y, core::int z]) → core::String;
   abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method event(core::String input, [core::int x, core::int y]) → void;
 }
 class TestListener extends self::Listener {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Listener::•()
     ;
   method event(dynamic input, [dynamic x, dynamic y]) → void {}
 }
 class ExtendedListener extends self::Listener {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Listener::•()
     ;
   method event(dynamic input, [dynamic x, dynamic y, dynamic z]) → void {}
 }
 class InvalidListener extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method event(dynamic input, [dynamic x]) → void {}
diff --git a/pkg/front_end/testcases/optional.dart.outline.expect b/pkg/front_end/testcases/optional.dart.outline.expect
index 1b926ef..b82f9f2 100644
--- a/pkg/front_end/testcases/optional.dart.outline.expect
+++ b/pkg/front_end/testcases/optional.dart.outline.expect
@@ -3,36 +3,36 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method method(dynamic x, [dynamic y, dynamic z]) → dynamic
     ;
 }
 abstract class External extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method externalMethod(core::int x, [core::int y, core::int z]) → core::String;
   abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method event(core::String input, [core::int x, core::int y]) → void;
 }
 class TestListener extends self::Listener {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method event(dynamic input, [dynamic x, dynamic y]) → void
     ;
 }
 class ExtendedListener extends self::Listener {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method event(dynamic input, [dynamic x, dynamic y, dynamic z]) → void
     ;
 }
 class InvalidListener extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method event(dynamic input, [dynamic x]) → void
     ;
diff --git a/pkg/front_end/testcases/optional.dart.strong.expect b/pkg/front_end/testcases/optional.dart.strong.expect
index 42c41a8..a741c32 100644
--- a/pkg/front_end/testcases/optional.dart.strong.expect
+++ b/pkg/front_end/testcases/optional.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method(dynamic x, [dynamic y = null, dynamic z = null]) → dynamic {
@@ -11,32 +11,32 @@
   }
 }
 abstract class External extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method externalMethod(core::int x, [core::int y = null, core::int z = null]) → core::String;
   abstract method listen(self::Listener listener) → void;
 }
 abstract class Listener extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method event(core::String input, [core::int x = null, core::int y = null]) → void;
 }
 class TestListener extends self::Listener {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Listener::•()
     ;
   method event(core::String input, [core::int x, core::int y]) → void {}
 }
 class ExtendedListener extends self::Listener {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Listener::•()
     ;
   method event(core::String input, [core::int x, core::int y, dynamic z]) → void {}
 }
 class InvalidListener extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method event(dynamic input, [dynamic x = null]) → void {}
diff --git a/pkg/front_end/testcases/override.dart.direct.expect b/pkg/front_end/testcases/override.dart.direct.expect
index 5448dbe..f491b61 100644
--- a/pkg/front_end/testcases/override.dart.direct.expect
+++ b/pkg/front_end/testcases/override.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar extends self::Foo {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Foo::•()
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method() → self::Foo {
@@ -21,7 +21,7 @@
   }
 }
 class Sub extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method method() → self::Foo {
diff --git a/pkg/front_end/testcases/override.dart.outline.expect b/pkg/front_end/testcases/override.dart.outline.expect
index 2cd93cc..1cd8eab 100644
--- a/pkg/front_end/testcases/override.dart.outline.expect
+++ b/pkg/front_end/testcases/override.dart.outline.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Bar extends self::Foo {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method method() → self::Foo
     ;
 }
 class Sub extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method method() → self::Foo
     ;
diff --git a/pkg/front_end/testcases/override.dart.strong.expect b/pkg/front_end/testcases/override.dart.strong.expect
index 8c50d09..da081a5 100644
--- a/pkg/front_end/testcases/override.dart.strong.expect
+++ b/pkg/front_end/testcases/override.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar extends self::Foo {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Foo::•()
     ;
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method() → self::Foo {
@@ -21,7 +21,7 @@
   }
 }
 class Sub extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method method() → self::Foo {
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect
index 84d7aaa..929fb02 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(self::A value) → void {}
@@ -21,7 +21,7 @@
     return null;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(dynamic value) → void {}
@@ -29,7 +29,7 @@
     return null;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set x(self::A value) → void {}
@@ -37,7 +37,7 @@
     return null;
 }
 class F extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set x(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
index ae273b2..e72187d 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(self::A value) → void
     ;
@@ -19,7 +19,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(dynamic value) → void
     ;
@@ -27,7 +27,7 @@
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(self::A value) → void
     ;
@@ -35,7 +35,7 @@
     ;
 }
 class F extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(self::B value) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
index d8d285d..680ce86 100644
--- a/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_after_inference.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(self::A value) → void {}
@@ -21,7 +21,7 @@
     return null;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(self::A value) → void {}
@@ -29,7 +29,7 @@
     return null;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set x(self::A value) → void {}
@@ -37,7 +37,7 @@
     return null;
 }
 class F extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set x(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect
index f819e53..28beda4 100644
--- a/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(self::A value) → void {}
@@ -21,7 +21,7 @@
     return null;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(core::Object value) → void {}
@@ -29,7 +29,7 @@
     return null;
 }
 class E extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect
index 1e00014..81a11b3 100644
--- a/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(self::A value) → void
     ;
@@ -19,7 +19,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::Object value) → void
     ;
@@ -27,7 +27,7 @@
     ;
 }
 class E extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(self::B value) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
index 0a96296..39e3d95 100644
--- a/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_basic.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(self::A value) → void {}
@@ -21,7 +21,7 @@
     return null;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(core::Object value) → void {}
@@ -29,7 +29,7 @@
     return null;
 }
 class E extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect
index bccda69..66aef63 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x1(covariant self::A value) → void {}
@@ -24,7 +24,7 @@
   set x6(covariant self::B value) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x1(self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
index 71f151e..ef4604c 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x1(covariant self::A value) → void
     ;
@@ -27,7 +27,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x1(self::B value) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
index 09e0a0c..9502e43 100644
--- a/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_accessor_with_covariant_modifier.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x1(covariant self::A value) → void {}
@@ -24,7 +24,7 @@
   set x6(covariant self::B value) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x1(covariant self::B value) → void {}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect b/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect
index ecd2931..aecb023 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.direct.expect
@@ -3,35 +3,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::A x) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(dynamic x) → void {}
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f(self::A x) → void {}
 }
 class F extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect b/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
index 9f2649d..0f780a0 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.outline.expect
@@ -3,33 +3,33 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::A x) → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(dynamic x) → void
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::A x) → void
     ;
 }
 class F extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::B x) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
index 02d5935..f95d0be 100644
--- a/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_after_inference.dart.strong.expect
@@ -3,35 +3,35 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::A x) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(self::A x) → void {}
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f(self::A x) → void {}
 }
 class F extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart.direct.expect b/pkg/front_end/testcases/override_check_basic.dart.direct.expect
index bbf5c19..cb5a353 100644
--- a/pkg/front_end/testcases/override_check_basic.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_basic.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(self::A x) → void {}
@@ -22,7 +22,7 @@
   method f4() → self::A {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(core::Object x) → void {}
@@ -31,7 +31,7 @@
   method f4() → self::B {}
 }
 class E extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_basic.dart.outline.expect b/pkg/front_end/testcases/override_check_basic.dart.outline.expect
index a3e5791..3432cbe 100644
--- a/pkg/front_end/testcases/override_check_basic.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_basic.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(self::A x) → void
     ;
@@ -23,7 +23,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(core::Object x) → void
     ;
@@ -35,7 +35,7 @@
     ;
 }
 class E extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(self::B x) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_basic.dart.strong.expect b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
index 9252e55d..7ca80f6 100644
--- a/pkg/front_end/testcases/override_check_basic.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_basic.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(self::A x) → void {}
@@ -22,7 +22,7 @@
   method f4() → self::A {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(core::Object x) → void {}
@@ -31,7 +31,7 @@
   method f4() → self::B {}
 }
 class E extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
index 9a29468..0273119 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.direct.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void {}
 }
 class B extends self::A<core::String> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void {}
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
index 4eeabe2..5c2a82a 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<U extends core::Object>(core::Map<self::A::T, self::A::f::U> m) → void
     ;
 }
 class B extends self::A<core::String> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<V extends core::Object>(core::Map<core::String, self::B::f::V> m) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
index 21337fd..5871307 100644
--- a/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_two_substitutions.dart.strong.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends core::Object>(generic-covariant-impl generic-covariant-interface core::Map<self::A::T, self::A::f::U> m) → void {}
 }
 class B extends self::A<core::String> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method f<V extends core::Object>(generic-covariant-impl core::Map<core::String, self::B::f::V> m) → void {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect
index 8ae0958..fe85b88 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(covariant self::A x) → void {}
@@ -24,7 +24,7 @@
   method f6(covariant self::B x) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(self::B x) → void {}
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
index de5016f..6037ed1 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(covariant self::A x) → void
     ;
@@ -27,7 +27,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(self::B x) → void
     ;
diff --git a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
index 06f4aca..a4ef49c 100644
--- a/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
+++ b/pkg/front_end/testcases/override_check_with_covariant_modifier.dart.strong.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(covariant self::A x) → void {}
@@ -24,7 +24,7 @@
   method f6(covariant self::B x) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(covariant self::B x) → void {}
diff --git a/pkg/front_end/testcases/prefer_baseclass.dart.direct.expect b/pkg/front_end/testcases/prefer_baseclass.dart.direct.expect
index d65bbe4..a31ae2c 100644
--- a/pkg/front_end/testcases/prefer_baseclass.dart.direct.expect
+++ b/pkg/front_end/testcases/prefer_baseclass.dart.direct.expect
@@ -3,32 +3,32 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class AB1 extends self::A implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class AB2 extends self::A implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class BA1 extends self::B implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class BA2 extends self::B implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/prefer_baseclass.dart.outline.expect b/pkg/front_end/testcases/prefer_baseclass.dart.outline.expect
index 01d805f..d00f434 100644
--- a/pkg/front_end/testcases/prefer_baseclass.dart.outline.expect
+++ b/pkg/front_end/testcases/prefer_baseclass.dart.outline.expect
@@ -3,27 +3,27 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class AB1 extends self::A implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class AB2 extends self::A implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class BA1 extends self::B implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class BA2 extends self::B implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method takeSubclassOfA(dynamic obj) → dynamic
diff --git a/pkg/front_end/testcases/prefer_baseclass.dart.strong.expect b/pkg/front_end/testcases/prefer_baseclass.dart.strong.expect
index d02c817..56e4f44 100644
--- a/pkg/front_end/testcases/prefer_baseclass.dart.strong.expect
+++ b/pkg/front_end/testcases/prefer_baseclass.dart.strong.expect
@@ -3,32 +3,32 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class AB1 extends self::A implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class AB2 extends self::A implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class BA1 extends self::B implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class BA2 extends self::B implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index 9bc9165..e114c24 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -10,7 +10,7 @@
 abstract class _lib.Supertype&lib.Mixin = lib::Supertype with lib::Mixin {
 }
 class WithMixin extends self::_lib.Supertype&lib.Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super lib::Supertype::•()
     ;
 }
diff --git a/pkg/front_end/testcases/qualified.dart.outline.expect b/pkg/front_end/testcases/qualified.dart.outline.expect
index f7705191..8d87bf0 100644
--- a/pkg/front_end/testcases/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/qualified.dart.outline.expect
@@ -12,7 +12,7 @@
 abstract class _lib.Supertype&lib.Mixin = lib::Supertype with lib::Mixin {
 }
 class WithMixin extends self::_lib.Supertype&lib.Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C<T extends core::Object> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index a597b6f..571f727 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -10,7 +10,7 @@
 abstract class _lib.Supertype&lib.Mixin = lib::Supertype with lib::Mixin {
 }
 class WithMixin extends self::_lib.Supertype&lib.Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super lib::Supertype::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.direct.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.direct.expect
index 524e1ae..fc2544f 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/abstract_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/abstract_constructor.dart.outline.expect
index d2daed8..8fc1fa2 100644
--- a/pkg/front_end/testcases/rasta/abstract_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/abstract_constructor.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.direct.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.direct.expect
index aa77144..eafe4ce 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.direct.expect
@@ -8,7 +8,7 @@
     ;
 }
 class B extends self::A {
-  default constructor •() → self::B
+  synthetic constructor •() → self::B
     : invalid-initializer;
 }
 static method main() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.outline.expect
index d910cd0..1edd902 100644
--- a/pkg/front_end/testcases/rasta/bad_default_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_default_constructor.dart.outline.expect
@@ -7,7 +7,7 @@
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.direct.expect b/pkg/front_end/testcases/rasta/cascades.dart.direct.expect
index f3c4f23..3e0316e 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method add(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/rasta/cascades.dart.outline.expect b/pkg/front_end/testcases/rasta/cascades.dart.outline.expect
index f383103..66fdaf0 100644
--- a/pkg/front_end/testcases/rasta/cascades.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/cascades.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method add(dynamic x) → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.direct.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.direct.expect
index 853a0e6..73a23ec 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.direct.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → self::A
+  synthetic constructor •() → self::A
     : invalid-initializer;
 }
 class B extends core::Object {
-  default constructor •() → self::B
+  synthetic constructor •() → self::B
     : invalid-initializer;
 }
 class C extends core::Object {
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
index 9aeb27d..8c80f82 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
-  constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect
index 241032c..af20a91 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -13,7 +13,7 @@
 abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
 }
 class A extends self::__Object&Mixin&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
index 6600b70..68a7de9 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class Mixin extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class _Object&Mixin = core::Object with self::Mixin {
@@ -12,6 +12,6 @@
 abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
 }
 class A extends self::__Object&Mixin&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
index 241032c..af20a91 100644
--- a/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/duplicated_mixin.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -13,7 +13,7 @@
 abstract class __Object&Mixin&Mixin = self::_Object&Mixin with self::Mixin {
 }
 class A extends self::__Object&Mixin&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.direct.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.direct.expect
index 9297e5a..5fe23cb 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.direct.expect
@@ -3,17 +3,17 @@
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C3 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
index 5da78bb..a0a9f8c 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
@@ -3,15 +3,15 @@
 import "dart:core" as core;
 
 class C1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C3 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A<T extends core::Object> extends core::Object {
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect
index 9da0472..0d5738c 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Mixin extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
@@ -17,7 +17,7 @@
 abstract class _Base&Mixin = self::Base with self::Mixin {
 }
 class Sub extends self::_Base&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
index 4ab4b90..7694753 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Mixin extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
@@ -15,7 +15,7 @@
 abstract class _Base&Mixin = self::Base with self::Mixin {
 }
 class Sub extends self::_Base&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
index 1947a7d..a970df5 100644
--- a/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000007.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Mixin extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
@@ -17,7 +17,7 @@
 abstract class _Base&Mixin = self::Base with self::Mixin {
 }
 class Sub extends self::_Base&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.direct.expect
index 0a844a9..8acc697 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class A extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method m() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/issue_000012.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000012.dart.outline.expect
index 600adfa..bce37695 100644
--- a/pkg/front_end/testcases/rasta/issue_000012.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000012.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class A extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.direct.expect
index 3c0789e..b7a10584 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.direct.expect
@@ -6,7 +6,7 @@
   field dynamic a = null;
   field dynamic b = 0;
   field dynamic c = 1.+(2);
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
index fbdcf92..11c2fc1 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
@@ -6,7 +6,7 @@
   field dynamic a;
   field dynamic b;
   field dynamic c;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object {
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.direct.expect
index 49f48a8..2d661c2 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method æøC() → dynamic;
diff --git a/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect
index 3b79239..2f20ccb 100644
--- a/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000035.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method æøC() → dynamic;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.direct.expect
index 4772ac8..e7115e9 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.direct.expect
@@ -8,6 +8,6 @@
     : invalid-initializer;
 }
 class B extends self::A {
-  default constructor •() → self::B
+  synthetic constructor •() → self::B
     : super self::A::•();
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000039.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000039.dart.outline.expect
index 7eaf284..74c22b5 100644
--- a/pkg/front_end/testcases/rasta/issue_000039.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000039.dart.outline.expect
@@ -8,6 +8,6 @@
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect
index 13905fb..16429f7 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.outline.expect
index 36ede25..e2e33dc 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect
index 673d1c5..4f59cd7 100644
--- a/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000041.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.direct.expect
index e72b426..b4e9678 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000043.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000043.dart.outline.expect
index 287561e..8efb57a 100644
--- a/pkg/front_end/testcases/rasta/issue_000043.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000043.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.direct.expect
index 6e579c8..584e9e7 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.direct.expect
@@ -11,12 +11,12 @@
 }
 class M1 extends core::Object {
   field core::num v2 = 0;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C = self::A with self::M1 {
-  constructor •(core::bool v1, core::num v2) → void
+  synthetic constructor •(core::bool v1, core::num v2) → void
     : super self::A::•(v1, v2)
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect
index 8a09735..8469fe4 100644
--- a/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000048.dart.outline.expect
@@ -10,11 +10,11 @@
 }
 class M1 extends core::Object {
   field core::num v2;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C = self::A with self::M1 {
-  constructor •(core::bool v1, core::num v2) → void
+  synthetic constructor •(core::bool v1, core::num v2) → void
     : super self::A::•(v1, v2)
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.direct.expect
index 86f1aa1..565ce7e 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator ==(dynamic other) → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect
index b3acddc..368853e 100644
--- a/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000053.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator ==(dynamic other) → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.direct.expect
index 85a69c1..359f315 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.direct.expect
@@ -22,7 +22,7 @@
   }
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method m() → core::int {
diff --git a/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect
index d645fee..8e6ec1a 100644
--- a/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000067.dart.outline.expect
@@ -21,7 +21,7 @@
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m() → core::int
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect
index cfe6ec7..d2e5607 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.direct.expect
@@ -4,22 +4,22 @@
 import "package:expect/expect.dart" as exp;
 
 class G<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect
index 08bd936..e1d7f2e 100644
--- a/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000068.dart.outline.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class G<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect
index 9e3e85f..4324cb8 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.direct.expect
@@ -25,12 +25,12 @@
   set setter(self::A::S s) → void {}
 }
 abstract class J<Aa extends core::Object, B extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class I<H extends core::Object, C extends core::Object, K extends core::Object> extends self::J<self::I::C, self::I::K> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::J::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
index 1553d9c..c0e3673 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
@@ -18,11 +18,11 @@
     ;
 }
 abstract class J<Aa extends core::Object, B extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class I<H extends core::Object, C extends core::Object, K extends core::Object> extends self::J<self::I::C, self::I::K> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect
index c0b7d4a..35cf1612 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
@@ -13,7 +13,7 @@
 abstract class _Object&Mixin = core::Object with self::Mixin {
 }
 class Foo extends self::_Object&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
index db8820c..f5c3d07 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class Mixin extends core::Object {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
@@ -12,7 +12,7 @@
 abstract class _Object&Mixin = core::Object with self::Mixin {
 }
 class Foo extends self::_Object&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
index 5005a69..d0251cd 100644
--- a/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000080.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Mixin extends core::Object {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
@@ -13,7 +13,7 @@
 abstract class _Object&Mixin = core::Object with self::Mixin {
 }
 class Foo extends self::_Object&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.direct.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.direct.expect
index 9542e23..1e3002d 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.direct.expect
@@ -4,13 +4,13 @@
 
 class Base extends core::Object {
   field core::int hashCode = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Sub extends self::Base {
   field core::int _hashCode = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   get hashCode() → dynamic
diff --git a/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect
index 246e0c7..076eb4a 100644
--- a/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000081.dart.outline.expect
@@ -4,12 +4,12 @@
 
 class Base extends core::Object {
   field core::int hashCode;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Sub extends self::Base {
   field core::int _hashCode;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get hashCode() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.direct.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.direct.expect
index bb19d53..feb8d13 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.direct.expect
@@ -7,7 +7,7 @@
   field dynamic y = null;
   field dynamic z = null;
   field self::Mixin::T t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect
index caa5a96..fdda949 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.outline.expect
@@ -7,7 +7,7 @@
   field dynamic y;
   field dynamic z;
   field self::Mixin::T t;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
index 6e09914..514b8d0 100644
--- a/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/mixin_library.dart.strong.expect
@@ -7,7 +7,7 @@
   field dynamic y = null;
   field dynamic z = null;
   generic-covariant-impl generic-covariant-interface field self::Mixin::T t = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
diff --git a/pkg/front_end/testcases/rasta/static.dart.direct.expect b/pkg/front_end/testcases/rasta/static.dart.direct.expect
index 487ec3e..e047d82 100644
--- a/pkg/front_end/testcases/rasta/static.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.direct.expect
@@ -5,7 +5,7 @@
 class Foo extends core::Object {
   static const field dynamic staticConstant = 42;
   static field dynamic staticField = 42;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static method staticFunction() → dynamic {}
diff --git a/pkg/front_end/testcases/rasta/static.dart.outline.expect b/pkg/front_end/testcases/rasta/static.dart.outline.expect
index 7296eed..5a87d22 100644
--- a/pkg/front_end/testcases/rasta/static.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.outline.expect
@@ -5,7 +5,7 @@
 class Foo extends core::Object {
   static const field dynamic staticConstant;
   static field dynamic staticField;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static method staticFunction() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/super.dart.direct.expect b/pkg/front_end/testcases/rasta/super.dart.direct.expect
index 864867d..7c9f7d6 100644
--- a/pkg/front_end/testcases/rasta/super.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.direct.expect
@@ -8,7 +8,7 @@
   field dynamic c = null;
   field dynamic d = null;
   final field dynamic f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get e() → dynamic
@@ -34,7 +34,7 @@
 }
 class B extends self::A {
   final field dynamic d = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get b() → dynamic
@@ -43,7 +43,7 @@
   set i(dynamic x) → dynamic {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/super.dart.outline.expect b/pkg/front_end/testcases/rasta/super.dart.outline.expect
index 809f633..6bfb282 100644
--- a/pkg/front_end/testcases/rasta/super.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.outline.expect
@@ -8,7 +8,7 @@
   field dynamic c;
   field dynamic d;
   final field dynamic f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get e() → dynamic
     ;
@@ -39,7 +39,7 @@
 }
 class B extends self::A {
   final field dynamic d;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get b() → dynamic
     ;
@@ -49,7 +49,7 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index d54ccec..b24414b 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -8,7 +8,7 @@
   field dynamic c = null;
   field dynamic d = null;
   final field dynamic f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get e() → dynamic
@@ -21,7 +21,7 @@
     return null;
   operator [](dynamic _) → dynamic
     return null;
-  operator []=(dynamic a, dynamic b) → dynamic {}
+  operator []=(dynamic a, dynamic b) → void {}
   operator ~() → dynamic
     return 117;
   operator unary-() → dynamic
@@ -34,7 +34,7 @@
 }
 class B extends self::A {
   final field dynamic d = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get b() → dynamic
@@ -43,7 +43,7 @@
   set i(dynamic x) → void {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
index e442eb9..0dfe536 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.direct.expect
@@ -4,7 +4,7 @@
 import "./mixin_library.dart" as mix;
 
 class Super<S extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
@@ -15,24 +15,24 @@
 abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
 }
 class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
 abstract class _Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
 }
 class D extends self::_Super&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
 class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
index bf13521..5c8d386 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.outline.expect
@@ -4,7 +4,7 @@
 import "./mixin_library.dart" as mix;
 
 class Super<S extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
@@ -14,22 +14,22 @@
 abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
 }
 class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class _Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> {
 }
 class D extends self::_Super&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
diff --git a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
index 52fa5f8..1f90789 100644
--- a/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super_mixin.dart.strong.expect
@@ -4,7 +4,7 @@
 import "./mixin_library.dart" as mix;
 
 class Super<S extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → dynamic
@@ -15,7 +15,7 @@
 abstract class _Super&Mixin^#T0^#T0<#T0 extends core::Object> = self::Super<self::_Super&Mixin^#T0^#T0::#T0> with mix::Mixin<self::_Super&Mixin^#T0^#T0::#T0> {
 }
 class C<V extends core::Object> extends self::_Super&Mixin^#T0^#T0<self::C::V> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
@@ -24,18 +24,18 @@
   abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
 }
 class D extends self::_Super&Mixin {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
   abstract forwarding-stub set t(generic-covariant-impl dynamic _) → void;
 }
 class C2<V extends core::Object> = self::Super<self::C2::V> with mix::Mixin<self::C2::V> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
 }
 class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Super::•()
     ;
   abstract forwarding-stub method g(generic-covariant-impl dynamic a) → dynamic;
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.direct.expect b/pkg/front_end/testcases/rasta/super_operator.dart.direct.expect
index e78d8cd..526ade7 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(core::String s) → dynamic
@@ -13,7 +13,7 @@
   operator []=(dynamic i, dynamic val) → dynamic {}
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   operator +(core::String s) → dynamic
@@ -24,7 +24,7 @@
     return let final dynamic #t1 = let final dynamic #t2 = i in let final dynamic #t3 = i = #t2.+(1) in #t2 in let final dynamic #t4 = super.{self::A::[]}(#t1).+(val) in let final dynamic #t5 = super.{self::A::[]=}(#t1, #t4) in #t4;
 }
 class Autobianchi extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method g() → dynamic
diff --git a/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect b/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect
index 02aacd7..865c5c8 100644
--- a/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/super_operator.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::String s) → dynamic
     ;
@@ -13,7 +13,7 @@
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(core::String s) → dynamic
     ;
@@ -23,7 +23,7 @@
     ;
 }
 class Autobianchi extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method g() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.direct.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.direct.expect
index a30a24d..3bb5487 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/rasta/this_invoke.dart.outline.expect b/pkg/front_end/testcases/rasta/this_invoke.dart.outline.expect
index 7076ca8..0e97189 100644
--- a/pkg/front_end/testcases/rasta/this_invoke.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/this_invoke.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method m(dynamic x) → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.direct.expect b/pkg/front_end/testcases/rasta/type_literals.dart.direct.expect
index ef89960..7f2a332 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef Func = () → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect b/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect
index da9fa81..4f17669 100644
--- a/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/type_literals.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef Func = () → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/unresolved.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved.dart.direct.expect
index 786b965..5c81153 100644
--- a/pkg/front_end/testcases/rasta/unresolved.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved.dart.direct.expect
@@ -3,5 +3,5 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Missing, 32, null, <dynamic>[].toList(growable: false), <dynamic, dynamic>{}));
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#Missing, 32, const <dynamic>[], const <dynamic>[], core::Map::unmodifiable<dynamic, dynamic>(const <dynamic, dynamic>{})));
 }
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
index 469dce3..53f41ea 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef VoidFunction = () → void;
 class Fisk extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method it1(dynamic x) → dynamic {
diff --git a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.outline.expect b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.outline.expect
index f385920..d7b074d 100644
--- a/pkg/front_end/testcases/rasta/unresolved_for_in.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_for_in.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef VoidFunction = () → void;
 class Fisk extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method it1(dynamic x) → dynamic
     ;
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.direct.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.direct.expect
index 85c8a96..3a8eaab 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.direct.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  default constructor •() → self::E
+  synthetic constructor •() → self::E
     : super core::Object::•();
   method foo() → dynamic {
     super.[]=(4, 42);
diff --git a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.outline.expect b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.outline.expect
index f2553f4..ada7d49 100644
--- a/pkg/front_end/testcases/rasta/unresolved_recovery.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/unresolved_recovery.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method foo() → dynamic
     ;
diff --git a/pkg/front_end/testcases/redirecting_constructor.dart.direct.expect b/pkg/front_end/testcases/redirecting_constructor.dart.direct.expect
index 1812657..e17a8f7 100644
--- a/pkg/front_end/testcases/redirecting_constructor.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_constructor.dart.direct.expect
@@ -11,7 +11,7 @@
     let dynamic #redirecting_factory = self::B::• in invalid-expression;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
 }
diff --git a/pkg/front_end/testcases/redirecting_constructor.dart.outline.expect b/pkg/front_end/testcases/redirecting_constructor.dart.outline.expect
index 18a6649..50ce3cd 100644
--- a/pkg/front_end/testcases/redirecting_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_constructor.dart.outline.expect
@@ -10,7 +10,7 @@
     let dynamic #redirecting_factory = self::B::• in invalid-expression;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/redirecting_factory.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory.dart.direct.expect
index 324c82e..b77998f 100644
--- a/pkg/front_end/testcases/redirecting_factory.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory.dart.direct.expect
@@ -21,7 +21,7 @@
   }
 }
 class Builder<X extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method() → dynamic {
@@ -39,17 +39,17 @@
     let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in invalid-expression;
 }
 class SimpleCaseImpl2<Ai2 extends core::Object, Bi2 extends core::Object> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2, self::SimpleCaseImpl2::Bi2> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Base<M extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Mixin<M extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory.dart.outline.expect
index 3f266d3..ae9d4d5 100644
--- a/pkg/front_end/testcases/redirecting_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory.dart.outline.expect
@@ -19,7 +19,7 @@
     ;
 }
 class Builder<X extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method method() → dynamic
     ;
@@ -35,19 +35,19 @@
     let dynamic #redirecting_factory = self::SimpleCaseImpl2::• in invalid-expression;
 }
 class SimpleCaseImpl2<Ai2 extends core::Object, Bi2 extends core::Object> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2, self::SimpleCaseImpl2::Bi2> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Base<M extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Mixin<M extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Mix<M extends core::Object> = self::Base<self::Mix::M> with self::Mixin<self::Mix::M> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
 }
diff --git a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect
index bf535a5..9c67c20 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Y extends self::X {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::X::•()
     ;
 }
diff --git a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect
index 98ad89c..e691673 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Y extends self::X {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A extends core::Object {
diff --git a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect
index bf535a5..9c67c20 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeargs_test.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Y extends self::X {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::X::•()
     ;
 }
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect
index de9c98b..278afdd 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.direct.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Y extends self::X {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::X::•()
     ;
 }
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect
index a5a5d15..01df3c7 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.outline.expect
@@ -3,11 +3,11 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Y extends self::X {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class A<T extends core::Object, S extends self::A::T> extends core::Object {
diff --git a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect
index de9c98b..278afdd 100644
--- a/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect
+++ b/pkg/front_end/testcases/redirecting_factory_typeparambounds_test.dart.strong.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Y extends self::X {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::X::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
index dc9b4c9..6da0dfb 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::Object> extends core::Object {
   field self::C<dynamic> field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
index 3a906ef2..b6cacd1 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::Object> extends core::Object {
   field self::C<dynamic> field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
index 563ed03..3e3c7a4 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::Object> extends core::Object {
   field self::C<dynamic> field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect
index bf351e8..f535fa7 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.direct.expect
@@ -5,7 +5,7 @@
 typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect b/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect
index ea2077a..c9ded96 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.outline.expect
@@ -5,7 +5,7 @@
 typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → void
     ;
diff --git a/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect
index a9dea91..c2c1595 100644
--- a/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30838.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef Foo<S extends core::Object> = <T extends core::Object>(T) → S;
 class A extends core::Object {
   field <T extends core::Object>(T) → core::int f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method test() → void {
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect
index 5ac1010..f0ee655 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.outline.expect
@@ -3,16 +3,16 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
   field dynamic f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
index 624cacb..4277942 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator unary-() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect
index 0d6871e..626dcfc 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator unary-() → dynamic
     ;
diff --git a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
index 624cacb..4277942 100644
--- a/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31183.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator unary-() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
index f2e5d11..4fad235 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Typed<T extends core::Object> extends core::Object {
   field self::Typed::T v = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
index 9b2a93b..3f98d5d 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class Typed<T extends core::Object> extends core::Object {
   field self::Typed::T v;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
index 2b3bb2c..bf30fe7 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Typed<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::Typed::T v = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
index 7a0c1f5..fb6d550 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31198.dart.outline.expect
index 85389a0..58ff8eb 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class B extends self::A {
diff --git a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
index 7a0c1f5..fb6d550 100644
--- a/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31198.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.direct.expect
index 42f411e..044ccf6 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F = () → void;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.outline.expect
index 4ccf3ef..91d5b6c 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F = () → void;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.strong.expect
index 4e92d74..c1938f2 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F = () → void;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.direct.expect
index e016090..d61a225 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.outline.expect
index b97fa7c..1fc6d80 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → dynamic
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.strong.expect
index 57d7b2c..18abd83 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_get.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.direct.expect
index 6c4a854..2341dd8 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.outline.expect
index 61cd659..74b6309 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(dynamic value) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.strong.expect
index 922b572..b7006b5 100644
--- a/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/call_kinds_set.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(dynamic value) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect
index 774bf1f..bf5d9be 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends (self::C::T) → void>(self::C::f::U x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
index e291b97..8ec2342 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<U extends (self::C::T) → void>(self::C::f::U x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect
index a8c8eaf..547faf4 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends (self::C::T) → void>(self::C::f::U x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect
index 468f49c..5221de2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1() → (self::C::T) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect
index f415fc9..a87c9ba 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1() → (self::C::T) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
index 261ce78..adab8ca 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant method f1() → (self::C::T) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect
index a79419b..8acd66a 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1() → (self::C::T) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect
index f415fc9..a87c9ba 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1() → (self::C::T) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
index 202937e..7635298 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_return_null_aware.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant method f1() → (self::C::T) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect
index 8b49ddd..e4fcea0 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.direct.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
   field (self::C::T) → void y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::C::T value) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect
index efce192..871ab56 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.outline.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
   field (self::C::T) → void y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::C::T value) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
index ee75da5..88625d3 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
   generic-contravariant field (self::C::T) → void y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::C::T value) → void {
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect
index d99b393..012a192 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect
index 43a80e6..5f2d058 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get f1() → (self::C::T) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
index 6cbaf26..5c3e2d2 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant get f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect
index ec555ed..7b9c2c6 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect
index 43a80e6..5f2d058 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get f1() → (self::C::T) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
index 03f4b82..fcd0c39 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_getter_return_null_aware.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant get f1() → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect
index 55d41e2..b0a70d9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends self::C::T>(self::C::f::U x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
index 3132f27..eaad1c0 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<U extends self::C::T>(self::C::f::U x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
index b817868..e88f16f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect
index 47bbefa..421712c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::C::T x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect
index 203c03e..6ebe36d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::C::T x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect
index c3fb550..78f2e36 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::C::T x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect
index 84eecb4..51f994d 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(core::List<self::C::T> x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect
index d1361d8..d3057ec 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(core::List<self::C::T> x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect
index 752a320..e945744 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_complex.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(generic-covariant-impl generic-covariant-interface core::List<self::C::T> x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect
index 1dcb21c..49169f4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.direct.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f1(self::I::T x) → void;
   abstract method f2(self::I::T x) → void;
 }
 class C<U extends core::Object> extends core::Object implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(core::int x) → void {}
   method f2(core::int x, [self::C::U y = null]) → void {}
 }
 class D<U extends core::Object> extends self::C<self::D::U> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
index 63fe878..6a0cec0 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f1(self::I::T x) → void;
   abstract method f2(self::I::T x) → void;
 }
 class C<U extends core::Object> extends core::Object implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(core::int x) → void
     ;
@@ -17,7 +17,7 @@
     ;
 }
 class D<U extends core::Object> extends self::C<self::D::U> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(core::int x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect
index 5b6f60a..b941549 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface.dart.strong.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f1(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
   abstract method f2(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
 class C<U extends core::Object> extends core::Object implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(generic-covariant-impl core::int x) → void {}
   method f2(generic-covariant-impl core::int x, [generic-covariant-impl generic-covariant-interface self::C::U y = null]) → void {}
 }
 class D<U extends core::Object> extends self::C<self::D::U> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(generic-covariant-impl core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect
index a19b61f..8d93c66 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.direct.expect
@@ -3,25 +3,25 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::I::T x) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
index 2d48d39..a9b1002 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.outline.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → void
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
index b94f5b1..10178cb 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_mixin.dart.strong.expect
@@ -3,25 +3,25 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect
index 30b0db2..e6d6b9b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::I::T x) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
index 54e9bad..57bd231 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method g1(self::C c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect
index dcc5549..dfe595c 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect
index a84b9e1..2a83d23 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.direct.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::I::T x) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
index 5771e9e..94b5113 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.outline.expect
@@ -3,22 +3,22 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect
index 5b142c9..2f06fdd 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_in_interface_super_mixin.dart.strong.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int x) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect
index 6130f9a..f7ef8a8 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.direct.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 typedef G<T extends core::Object, U extends core::Object> = (T) → U;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(self::C::T x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect
index 5090163..351f537 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.outline.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 typedef G<T extends core::Object, U extends core::Object> = (T) → U;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(self::C::T x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect
index 3d68971..89e8e41 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_parameter_tear_off.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 typedef G<T extends core::Object, U extends core::Object> = (T) → U;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(generic-covariant-impl generic-covariant-interface self::C::T x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect
index 9dc7285..773f079 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.direct.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → dynamic;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::num x) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(covariant core::int x) → void {}
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f(core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
index c797f7c..c28351a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.outline.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → dynamic;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::num x) → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(covariant core::int x) → void
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect
index 0df3ee0..03b5829 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword.dart.strong.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → dynamic;
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::num x) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(covariant core::int x) → void {}
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method f(covariant core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.direct.expect
index 2800008..a100ec5 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.direct.expect
@@ -4,19 +4,19 @@
 
 class C extends core::Object {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object implements self::C {
   covariant field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object implements self::D {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect
index 0b0df1f..103431f 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.outline.expect
@@ -4,17 +4,17 @@
 
 class C extends core::Object {
   field core::num x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object implements self::C {
   covariant field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object implements self::D {
   field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.strong.expect
index 71be3a9..3c842e9 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field.dart.strong.expect
@@ -4,19 +4,19 @@
 
 class C extends core::Object {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object implements self::C {
   covariant field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object implements self::D {
   covariant field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.direct.expect
index c8153c2..61c27ca 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class C extends core::Object {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object implements self::C {
   covariant field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object implements self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect
index af7fb7f..7d4f5fa 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.outline.expect
@@ -4,16 +4,16 @@
 
 class C extends core::Object {
   field core::num x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends core::Object implements self::C {
   covariant field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object implements self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → core::int
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.strong.expect
index 16c293b..0ec77c4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_field_inherited_by_setter.dart.strong.expect
@@ -4,18 +4,18 @@
 
 class C extends core::Object {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends core::Object implements self::C {
   covariant field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object implements self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.direct.expect
index 4d297cd..fc4bc15 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::num value) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(covariant core::int value) → void {}
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set x(core::int value) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect
index 4efb3f5..6cba96e 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.outline.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::num value) → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(covariant core::int value) → void
     ;
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::int value) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.strong.expect
index e65c0c1..ef38d7a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::num value) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(covariant core::int value) → void {}
 }
 class E extends self::D {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   set x(covariant core::int value) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.direct.expect
index 0e066f3..dc7f644 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.direct.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::num value) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(covariant core::int value) → void {}
 }
 class E extends core::Object implements self::D {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect
index 3c85e1a..58df96b 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.outline.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::num value) → void
     ;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(covariant core::int value) → void
     ;
 }
 class E extends core::Object implements self::D {
   field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.strong.expect
index d9c4b4b..8175f23 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_keyword_setter_inherited_by_field.dart.strong.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::num value) → void {}
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set x(covariant core::int value) → void {}
 }
 class E extends core::Object implements self::D {
   covariant field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect
index 39c3d9a7..3552fdc 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.direct.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
   field self::C::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set y(self::C::T value) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect
index 48c11e1..0ab028a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.outline.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
   field self::C::T x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set y(self::C::T value) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect
index b76af2b..6dcd2b4 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_setter.dart.strong.expect
@@ -5,7 +5,7 @@
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set y(generic-covariant-impl generic-covariant-interface self::C::T value) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect
index 511bdd9..e710937 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(self::C::T x) → void {}
   method f2(core::int x) → void {}
 }
 class D extends self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(covariant core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
index 90ea602..29cb370 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(self::C::T x) → void
     ;
@@ -11,7 +11,7 @@
     ;
 }
 class D extends self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f1(covariant core::int x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect
index bab3c3d..4655e62 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f1(generic-covariant-impl generic-covariant-interface self::C::T x) → void {}
   method f2(core::int x) → void {}
 }
 class D extends self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f1(covariant generic-covariant-impl core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect
index ee000b4..1bd3bd3 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<U extends self::C::T>(self::C::f::U x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
index dd36dc2..1beaf51 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f<U extends self::C::T>(self::C::f::U x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect
index 17c450a..3ebc69c 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f<generic-covariant-impl generic-covariant-interface U extends self::C::T>(self::C::f::U x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect
index e5395bc..bd9af0e 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class B<T extends core::Object> extends core::Object {
   field self::B::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C implements self::B<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
index 86b22d9..2ac3d36 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.outline.expect
@@ -4,16 +4,16 @@
 
 class B<T extends core::Object> extends core::Object {
   field self::B::T x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
   field core::num x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C implements self::B<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
index 660289b..0620b1b 100644
--- a/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/field_forwarding_stub_generic_covariant.dart.strong.expect
@@ -4,18 +4,18 @@
 
 class B<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C implements self::B<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   forwarding-stub set x(generic-covariant-impl core::num _) → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect
index fdede7a..e6905e8 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class B extends core::Object {
   field core::Object _x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f([core::num x = 10]) → void {
@@ -20,14 +20,14 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f([self::I::T x = null]) → void;
   abstract method g({self::I::T x = null}) → void;
 }
 class C extends self::B implements self::I<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
index fcf546b..eb83109 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class B extends core::Object {
   field core::Object _x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f([core::num x]) → void
     ;
@@ -14,13 +14,13 @@
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f([self::I::T x]) → void;
   abstract method g({self::I::T x}) → void;
 }
 class C extends self::B implements self::I<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect
index 43c7c23..8db2e73 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_default_values.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class B extends core::Object {
   field core::Object _x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f([core::num x = 10]) → void {
@@ -20,14 +20,14 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f([generic-covariant-impl generic-covariant-interface self::I::T x = null]) → void;
   abstract method g({generic-covariant-impl generic-covariant-interface self::I::T x = null}) → void;
 }
 class C extends self::B implements self::I<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f([generic-covariant-impl core::num x]) → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect
index e117abd..bc78480 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::I::T x, core::int y) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
index 7491ccd..9abb71b 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x, core::int y) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::I::T x, core::int y) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect
index a462d28..0bfc9ad 100644
--- a/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/forwarding_stub_with_non_covariant_param.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::I::T x, core::int y) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int x, core::int y) → void
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect
index 721095e..e76c032 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::Object> extends core::Object {
   field self::C::T y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(self::C::T t) → void {}
@@ -12,12 +12,12 @@
 class D extends core::Object implements self::C<core::num> {
   field core::num x = null;
   field core::num y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object implements self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(core::num t) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
index 1a99231..d22bd7e 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::Object> extends core::Object {
   field self::C::T y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(self::C::T t) → void
     ;
@@ -12,11 +12,11 @@
 class D extends core::Object implements self::C<core::num> {
   field core::num x;
   field core::num y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends core::Object implements self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set x(core::num t) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect
index 154a02d..42d0664 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_covariance_inheritance_setter_field.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::C::T y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(generic-covariant-impl generic-covariant-interface self::C::T t) → void {}
@@ -12,12 +12,12 @@
 class D extends core::Object implements self::C<core::num> {
   generic-covariant-impl field core::num x = null;
   generic-covariant-impl field core::num y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class E extends core::Object implements self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set x(generic-covariant-impl core::num t) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect
index 25d68ba..6c33166 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.direct.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(covariant core::Object value) → void;
 }
 class B extends core::Object implements self::A {
   field core::Object x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(covariant core::Object x) → void {}
 }
 class C<T extends core::Object> extends core::Object implements self::B {
   field self::C::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::C::T x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
index 8f65dd0..8382a52 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.outline.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(covariant core::Object value) → void;
 }
 class B extends core::Object implements self::A {
   field core::Object x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(covariant core::Object x) → void
     ;
 }
 class C<T extends core::Object> extends core::Object implements self::B {
   field self::C::T x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::C::T x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect
index 935a4df..3cb3cc3 100644
--- a/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks/generic_vs_explicit_covariance.dart.strong.expect
@@ -3,21 +3,21 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(covariant core::Object value) → void;
 }
 class B extends core::Object implements self::A {
   covariant field core::Object x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(covariant core::Object x) → void {}
 }
 class C<T extends core::Object> extends core::Object implements self::B {
   covariant generic-covariant-impl generic-covariant-interface field self::C::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(covariant generic-covariant-impl generic-covariant-interface self::C::T x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect
index e7d494c..fa00c10 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::num x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::I::T x) → void;
 }
 class C extends self::B implements self::I<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract method f(core::num x) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
index 08b035c..75bdee2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::num x) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::I::T x) → void;
 }
 class C extends self::B implements self::I<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::num x) → void;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect
index ac8f153..4cdc473 100644
--- a/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/abstract_override_becomes_forwarding_stub.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::num x) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::I::T x) → void;
 }
 class C extends self::B implements self::I<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub forwarding-semi-stub method f(generic-covariant-impl core::num x) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect
index 88a6d30..b0e9bfc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → dynamic;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::C::T x) → void {}
@@ -21,12 +21,12 @@
     return this.{self::C::f};
 }
 class D extends self::C<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
 class E extends self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(covariant core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
index 1f54bc8..9c70c67 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → dynamic;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::C::T x) → void
     ;
@@ -18,11 +18,11 @@
     ;
 }
 class D extends self::C<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class E extends self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(covariant core::int x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
index 9737723..1a496c8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/call_through_this.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → dynamic;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::C::T x) → void {}
@@ -21,7 +21,7 @@
     return this.{self::C::f};
 }
 class D extends self::C<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   abstract forwarding-stub method f(generic-covariant-impl core::int x) → void;
@@ -31,7 +31,7 @@
   abstract forwarding-stub method g3(generic-covariant-impl self::C<core::int> c, generic-covariant-impl core::int x) → void;
 }
 class E extends self::C<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   method f(covariant generic-covariant-impl core::int x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect
index acb9bc5..142da81 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(dynamic other) → self::B<self::B::T, (self::B::T) → void>
@@ -13,7 +13,7 @@
 class C extends core::Object {
   field self::B<core::num, (core::num) → void> x = null;
   static field self::B<core::num, (core::num) → void> y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int i) → self::B<core::num, (core::num) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
index 7e50884..51e24b8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(dynamic other) → self::B<self::B::T, (self::B::T) → void>
     ;
@@ -12,7 +12,7 @@
 class C extends core::Object {
   field self::B<core::num, (core::num) → void> x;
   static field self::B<core::num, (core::num) → void> y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::int i) → self::B<core::num, (core::num) → void>
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
index 85f4a3c..0449783 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object, U extends (self::B::T) → void> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant operator +(dynamic other) → self::B<self::B::T, (self::B::T) → void>
@@ -13,7 +13,7 @@
 class C extends core::Object {
   field self::B<core::num, (core::num) → void> x = null;
   static field self::B<core::num, (core::num) → void> y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int i) → self::B<core::num, (core::num) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect
index 655c5b8..e5d0682 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.direct.expect
@@ -4,14 +4,14 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → self::B<(self::C::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect
index 176d392..0b7e9a5 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.outline.expect
@@ -4,13 +4,13 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     ;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → self::B<(self::C::T) → void>
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
index 212456e..93a83ea 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_getter_return_compound_assign.dart.strong.expect
@@ -4,14 +4,14 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(generic-covariant-impl generic-covariant-interface self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant get x() → self::B<(self::C::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect
index e1b6433..78a8669 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.direct.expect
@@ -4,14 +4,14 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int i) → self::B<(self::C::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect
index 8f8be66..4e1e19f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.outline.expect
@@ -4,13 +4,13 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator +(self::B<self::B::T> other) → self::B<self::B::T>
     ;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::int i) → self::B<(self::C::T) → void>
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
index 383d968..74c67a7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_assign.dart.strong.expect
@@ -4,14 +4,14 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator +(generic-covariant-impl generic-covariant-interface self::B<self::B::T> other) → self::B<self::B::T>
     return null;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant operator [](core::int i) → self::B<(self::C::T) → void>
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect
index b939d36..02c5897 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   operator [](core::int i) → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect
index 431e78a..31036c6 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   operator [](core::int i) → (self::C::T) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
index 886a632..5653b2b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_index_get.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   generic-contravariant operator [](core::int i) → (self::C::T) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect
index 9d2d4f0..e8eb073 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::B::T x) → void {}
@@ -11,7 +11,7 @@
   method h<U extends self::B::T>() → void {}
 }
 class C extends self::B<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
index f636a45..ebd92db 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::B::T x) → void
     ;
@@ -13,7 +13,7 @@
     ;
 }
 class C extends self::B<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method g1(self::B<core::num> b) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect
index 6e43acd..e4bff7d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::B::T x) → void {}
@@ -11,7 +11,7 @@
   method h<generic-covariant-impl generic-covariant-interface U extends self::B::T>() → void {}
 }
 class C extends self::B<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub method f(generic-covariant-impl core::int x) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect
index 450ee70..5ae17d3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.direct.expect
@@ -4,12 +4,12 @@
 
 class B<T extends core::Object> extends core::Object {
   field self::B::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends self::B<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect
index 61becad..b70e682 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.outline.expect
@@ -4,11 +4,11 @@
 
 class B<T extends core::Object> extends core::Object {
   field self::B::T x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends self::B<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect
index 2238329..e0ee96e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_abstract_generic_covariant.dart.strong.expect
@@ -4,12 +4,12 @@
 
 class B<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends self::B<core::num> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub set x(generic-covariant-impl core::num _) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.direct.expect
index 99356fc..0825415 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.direct.expect
@@ -4,18 +4,18 @@
 
 class B extends core::Object {
   covariant field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
index 9c33a76..731ee5b 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.outline.expect
@@ -4,16 +4,16 @@
 
 class B extends core::Object {
   covariant field core::num x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C extends core::Object {
   field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class D extends self::C implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
index c41beed..98aaa88 100644
--- a/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/field_forwarding_stub_explicit_covariant.dart.strong.expect
@@ -4,18 +4,18 @@
 
 class B extends core::Object {
   covariant field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class D extends self::C implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   forwarding-stub set x(covariant core::num _) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.direct.expect
index ce84b5c..810f4b8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.direct.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field dynamic staticField = null;
   field dynamic instanceField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static set staticSetter(dynamic x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.outline.expect
index 3d4afee..1e63df1 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field dynamic staticField;
   field dynamic instanceField;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   static set staticSetter(dynamic x) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.expect
index ce84b5c..810f4b8 100644
--- a/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/for_in_call_kinds.dart.strong.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field dynamic staticField = null;
   field dynamic instanceField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   static set staticSetter(dynamic x) → void {}
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect
index fcc7ffa..a69ba21 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.direct.expect
@@ -5,13 +5,13 @@
 class B<T extends core::Object> extends core::Object {
   field self::B::T x = null;
   field self::B::T y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C<T extends core::Object> extends core::Object implements self::B<core::num> {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get y() → dynamic;
@@ -19,7 +19,7 @@
 }
 class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get y() → dynamic;
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
index ae9fe44..0c10d85 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.outline.expect
@@ -5,19 +5,19 @@
 class B<T extends core::Object> extends core::Object {
   field self::B::T x;
   field self::B::T y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C<T extends core::Object> extends core::Object implements self::B<core::num> {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get y() → dynamic;
   abstract set y(dynamic value) → dynamic;
 }
 class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get y() → dynamic;
   abstract set y(dynamic value) → dynamic;
diff --git a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect
index bb7b397..7a67ecc 100644
--- a/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/generic_covariance_based_on_inference.dart.strong.expect
@@ -5,13 +5,13 @@
 class B<T extends core::Object> extends core::Object {
   generic-covariant-impl generic-covariant-interface field self::B::T x = null;
   generic-covariant-impl generic-covariant-interface field self::B::T y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C<T extends core::Object> extends core::Object implements self::B<core::num> {
   generic-covariant-impl field core::num x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get y() → core::num;
@@ -19,7 +19,7 @@
 }
 class D<T extends core::Object> extends core::Object implements self::B<self::D::T> {
   generic-covariant-impl generic-covariant-interface field self::D::T x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get y() → self::D::T;
diff --git a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.direct.expect
index 8451e54..8e15a1f 100644
--- a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.direct.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field core::bool staticValue = self::o;
   field core::bool instanceValue = self::o;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.outline.expect
index b7f0ed3..40daf68 100644
--- a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.outline.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field core::bool staticValue;
   field core::bool instanceValue;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static field core::Object o;
diff --git a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.strong.expect
index 47c6495..8cea5b3 100644
--- a/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/implicit_downcast_field.dart.strong.expect
@@ -5,7 +5,7 @@
 class C extends core::Object {
   static field core::bool staticValue = self::o as{TypeError} core::bool;
   field core::bool instanceValue = self::o as{TypeError} core::bool;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect
index 239abd1..4c4735d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int {
@@ -20,7 +20,7 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → self::I::T;
@@ -31,12 +31,12 @@
 class M extends core::Object {
   field core::int x = null;
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index 8ec5847..05bfd76 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → core::int
     ;
@@ -15,7 +15,7 @@
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → self::I::T;
   abstract set x(self::I::T value) → void;
@@ -25,11 +25,11 @@
 class M extends core::Object {
   field core::int x;
   field core::int y;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
index 6a51acf..7ae9bb9 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int {
@@ -20,7 +20,7 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → self::I::T;
@@ -31,12 +31,12 @@
 class M extends core::Object {
   field core::int x = null;
   field core::int y = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub set y(covariant core::Object value) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect
index 654b5c5..20bef1d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.direct.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → (core::int) → void {
@@ -15,14 +15,14 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
 abstract class M<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → self::M::T
@@ -33,12 +33,12 @@
   abstract method f() → self::M::T;
 }
 abstract class C<T extends core::Object> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends self::C<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method f() → (core::int) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect
index 17c15b4..95b1dc0 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.outline.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → (core::int) → void
     ;
@@ -12,13 +12,13 @@
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
 abstract class M<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → self::M::T
     ;
@@ -27,12 +27,12 @@
   abstract method f() → self::M::T;
 }
 abstract class C<T extends core::Object> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
 class D extends self::C<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → (core::int) → void
     ;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect
index f1dd2bd..66a0075 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → (core::int) → void {
@@ -15,14 +15,14 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract generic-contravariant get x() → (self::I::T) → void;
   abstract set x(core::Object value) → void;
 }
 abstract class M<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → self::M::T
@@ -33,14 +33,14 @@
   abstract method f() → self::M::T;
 }
 abstract class C<T extends core::Object> = self::B with self::M<(self::C::T) → void> implements self::I<self::C::T> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub generic-contravariant method f() → (self::C::T) → void;
   abstract forwarding-stub generic-contravariant get x() → (self::C::T) → void;
 }
 class D extends self::C<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method f() → (core::int) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter_and_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter_and_setter.dart.strong.expect
index d12e6df..9b5e0ad 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter_and_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_getter_and_setter.dart.strong.expect
@@ -4,7 +4,7 @@
 
 typedef F<T extends core::Object> = (T) → T;
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → (core::int) → core::int {
@@ -15,14 +15,14 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract generic-contravariant get x() → (self::I::T) → self::I::T;
   abstract set x(generic-covariant-impl generic-covariant-interface (self::I::T) → self::I::T value) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → (core::int) → core::int
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect
index f135dea..f15e59d 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int {
@@ -20,7 +20,7 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → self::I::T;
@@ -29,7 +29,7 @@
   abstract set y(covariant core::Object value) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
@@ -44,7 +44,7 @@
   }
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
index 43fc151..27d681e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → core::int
     ;
@@ -15,7 +15,7 @@
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract get x() → self::I::T;
   abstract set x(self::I::T value) → void;
@@ -23,7 +23,7 @@
   abstract set y(covariant core::Object value) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get x() → core::int
     ;
@@ -35,7 +35,7 @@
     ;
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
index ad0a819..9fc4e47 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int {
@@ -20,7 +20,7 @@
   }
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract get x() → self::I::T;
@@ -29,7 +29,7 @@
   abstract set y(covariant core::Object value) → void;
 }
 class M extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get x() → core::int
@@ -44,7 +44,7 @@
   }
 }
 class C = self::B with self::M implements self::I<core::int> {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub set y(covariant core::Object value) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.direct.expect
index e9368ab..b0a0022 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → core::int {
@@ -12,13 +12,13 @@
   }
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(covariant core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect
index 025b88c..90af082 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → core::int
     ;
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(covariant core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method expectTypeError(() → void callback) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.strong.expect
index f5e4b5b..33025a0 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_checked_via_target.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → core::int {
@@ -12,13 +12,13 @@
   }
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(covariant core::Object x) → core::int;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(covariant core::Object x) → core::int
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect
index ff66100..8324835 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.direct.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → self::B::T {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object x) → self::I::T;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect
index 9d0e99b..ea24f69 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.outline.expect
@@ -4,18 +4,18 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x) → self::B::T
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::Object x) → self::I::T;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect
index 25df8b9..0278865 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_contravariant_from_class.dart.strong.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x) → self::B::T {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::Object x) → self::I::T;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub generic-contravariant method f(core::Object x) → (self::C::T) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect
index 0645c1e..1d29587 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.direct.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect
index 5e3ee73..3c3e508 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.outline.expect
@@ -4,18 +4,18 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f((self::B::T) → void x, core::int y) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect
index c90d5e6..ee19538 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_class.dart.strong.expect
@@ -4,19 +4,19 @@
 
 typedef F<T extends core::Object> = (T) → void;
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl generic-covariant-interface ((self::C::T) → void) → void x, core::Object y) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect
index 29b2d64..fcf58faa 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::I::T x, core::Object y) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
index 25e7304..9151bf7 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x, core::int y) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::I::T x, core::Object y) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect
index dfb09f7..892c2f0 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_interface.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::I::T x, core::Object y) → void;
 }
 class C extends self::B implements self::I<core::int> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect
index e1bcdea..b2f0239 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(self::B::T x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, core::Object y) → void;
 }
 class C extends self::B<core::int> implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
index 6ee50ad..a7c73a2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(self::B::T x, core::int y) → void
     ;
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::int x, core::Object y) → void;
 }
 class C extends self::B<core::int> implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect
index 9d6f0af..37bfc39 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantImpl_from_super.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl generic-covariant-interface self::B::T x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, core::Object y) → void;
 }
 class C extends self::B<core::int> implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub method f(generic-covariant-impl core::int x, core::Object y) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect
index 64ded71..a9dd532 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.direct.expect
@@ -4,25 +4,25 @@
 
 typedef F<T extends core::Object> = (T) → void;
 abstract class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(self::A::T x, core::int y) → void;
 }
 class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f((self::B::T) → void x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect
index 97ed83d..9e334f5 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.outline.expect
@@ -4,23 +4,23 @@
 
 typedef F<T extends core::Object> = (T) → void;
 abstract class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(self::A::T x, core::int y) → void;
 }
 class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f((self::B::T) → void x, core::int y) → void
     ;
 }
 abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f((self::I::T) → void x, core::Object y) → void;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect
index ad248de..fcb22cdd 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariantInterface_from_class.dart.strong.expect
@@ -4,25 +4,25 @@
 
 typedef F<T extends core::Object> = (T) → void;
 abstract class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl generic-covariant-interface self::A::T x, core::int y) → void;
 }
 class B<T extends core::Object> extends core::Object implements self::A<(self::B::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(generic-covariant-impl (self::B::T) → void x, core::int y) → void {}
 }
 abstract class I<T extends core::Object> extends core::Object implements self::A<(self::I::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(generic-covariant-impl (self::I::T) → void x, core::Object y) → void;
 }
 class C<T extends core::Object> extends self::B<(self::C::T) → void> implements self::I<(self::C::T) → void> {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub method f(generic-covariant-impl generic-covariant-interface ((self::C::T) → void) → void x, core::Object y) → void;
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.direct.expect
index 5c689c3..3b68eaf 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(covariant core::int x, core::Object y) → void;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect
index 869b519..12472cd 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(core::int x, core::int y) → void
     ;
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(covariant core::int x, core::Object y) → void;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.strong.expect
index 5c9c45a..e6a169e 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_interface.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(covariant core::int x, core::Object y) → void;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   forwarding-stub method f(covariant core::int x, core::Object y) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.direct.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.direct.expect
index 38b53ed..67e593a 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.direct.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.direct.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(covariant core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, core::Object y) → void;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
 }
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect
index 46cd976..b5cf523 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.outline.expect
@@ -3,18 +3,18 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f(covariant core::int x, core::int y) → void
     ;
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract method f(core::int x, core::Object y) → void;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.strong.expect b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.strong.expect
index 81ae3f8..4e31b00 100644
--- a/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.strong.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/stub_from_interface_covariant_from_super.dart.strong.expect
@@ -3,19 +3,19 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f(covariant core::int x, core::int y) → void {}
 }
 abstract class I extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method f(core::int x, core::Object y) → void;
 }
 class C extends self::B implements self::I {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   abstract forwarding-stub method f(covariant core::int x, core::Object y) → void;
diff --git a/pkg/front_end/testcases/shaker/export_combinators.dart.outline.expect b/pkg/front_end/testcases/shaker/export_combinators.dart.outline.expect
index 6e594ba..cb203dd 100644
--- a/pkg/front_end/testcases/shaker/export_combinators.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/export_combinators.dart.outline.expect
@@ -15,7 +15,7 @@
 import "dart:core" as core;
 
 class A2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 
@@ -25,11 +25,11 @@
 import "dart:core" as core;
 
 class A4 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 class A6 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 
diff --git a/pkg/front_end/testcases/shaker/export_references.dart.outline.expect b/pkg/front_end/testcases/shaker/export_references.dart.outline.expect
index 13defc1..3f65083 100644
--- a/pkg/front_end/testcases/shaker/export_references.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/export_references.dart.outline.expect
@@ -15,7 +15,7 @@
 import "dart:core" as core;
 
 class B extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 
@@ -25,6 +25,6 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
diff --git a/pkg/front_end/testcases/shaker/export_targets.dart.outline.expect b/pkg/front_end/testcases/shaker/export_targets.dart.outline.expect
index 7899582..3139b70 100644
--- a/pkg/front_end/testcases/shaker/export_targets.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/export_targets.dart.outline.expect
@@ -15,7 +15,7 @@
 
 typedef MyFunctionTypeAlias = () → void;
 class MyClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 static field core::int myTopLevelVariable;
diff --git a/pkg/front_end/testcases/shaker/source_class.dart.outline.expect b/pkg/front_end/testcases/shaker/source_class.dart.outline.expect
index 126deb8..105e644 100644
--- a/pkg/front_end/testcases/shaker/source_class.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/source_class.dart.outline.expect
@@ -10,7 +10,7 @@
 class C extends core::Object {
   field sou::A1 f1;
   field dynamic f2;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
   method m1(sou::A4 a, [sou::A5 b]) → sou::A3;
   method m2(sou::A4 a, {sou::A6 b}) → sou::A3;
diff --git a/pkg/front_end/testcases/shaker/source_class_static.dart.outline.expect b/pkg/front_end/testcases/shaker/source_class_static.dart.outline.expect
index 360e15f..de7cbca 100644
--- a/pkg/front_end/testcases/shaker/source_class_static.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/source_class_static.dart.outline.expect
@@ -9,7 +9,7 @@
 
 class C extends core::Object {
   static field sou::A2 publicField;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
   static method publicMethod() → sou::A4;
   static get publicGetter() → sou::A6;
diff --git a/pkg/front_end/testcases/shaker/source_top.dart.outline.expect b/pkg/front_end/testcases/shaker/source_top.dart.outline.expect
index 871ea8f..781008f 100644
--- a/pkg/front_end/testcases/shaker/source_top.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/source_top.dart.outline.expect
@@ -10,22 +10,22 @@
 typedef F1 = (sou::A5, [sou::A6]) → sou::A4;
 typedef F2 = (sou::A5, {b: sou::A7}) → sou::A4;
 class C1 extends sou::A1 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super sou::A1::•();
 }
 class C2 extends core::Object implements sou::A2 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 abstract class _Object&A3 extends core::Object implements sou::A3 {
 }
 class C3 extends self::_Object&A3 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 @self::Meta::•(sou::A14)
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 class Meta extends core::Object {
@@ -44,7 +44,7 @@
 import "dart:core" as core;
 
 class A1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 class A2 extends core::Object {
diff --git a/pkg/front_end/testcases/shaker/target_constant.dart.outline.expect b/pkg/front_end/testcases/shaker/target_constant.dart.outline.expect
index be9b60c..ed84690 100644
--- a/pkg/front_end/testcases/shaker/target_constant.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/target_constant.dart.outline.expect
@@ -13,19 +13,19 @@
   static final field core::int staticConstField_from_staticFinal;
   final field core::int staticConstField_from_final;
   field core::int staticConstField_from_regular;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 class RefNotConstStaticFields extends core::Object {
   static field core::int ref_staticFinalField;
   static field core::int ref_staticField;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 class RefNotConstInstanceFields extends core::Object {
   static field core::int ref_instanceFinalField;
   static field core::int ref_instanceField;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
 }
 static const field dynamic b = const tar::B::•();
diff --git a/pkg/front_end/testcases/shaker/transitive_annotations.dart.outline.expect b/pkg/front_end/testcases/shaker/transitive_annotations.dart.outline.expect
index 0337ca6..3e56148 100644
--- a/pkg/front_end/testcases/shaker/transitive_annotations.dart.outline.expect
+++ b/pkg/front_end/testcases/shaker/transitive_annotations.dart.outline.expect
@@ -8,7 +8,7 @@
 import "dart:core" as core;
 
 class X1 extends tra::C1 {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super tra::C1::•();
   @tra::forMethod2
   method publicMethodX1() → void;
@@ -37,7 +37,7 @@
 class C1 extends core::Object {
   @self::forClassField
   field core::int publicField;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•();
   @self::forMethod1
   method publicMethod1() → void;
diff --git a/pkg/front_end/testcases/static_setter.dart.direct.expect b/pkg/front_end/testcases/static_setter.dart.direct.expect
index 1163764..cdb5c4d 100644
--- a/pkg/front_end/testcases/static_setter.dart.direct.expect
+++ b/pkg/front_end/testcases/static_setter.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/static_setter.dart.outline.expect b/pkg/front_end/testcases/static_setter.dart.outline.expect
index 061c6a7..8321fc4 100644
--- a/pkg/front_end/testcases/static_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/static_setter.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static set foo(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/static_setter.dart.strong.expect b/pkg/front_end/testcases/static_setter.dart.strong.expect
index 688fc8a8..98e7239 100644
--- a/pkg/front_end/testcases/static_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/static_setter.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Foo extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/store_load.dart.direct.expect b/pkg/front_end/testcases/store_load.dart.direct.expect
index c2d3742..ad7092d 100644
--- a/pkg/front_end/testcases/store_load.dart.direct.expect
+++ b/pkg/front_end/testcases/store_load.dart.direct.expect
@@ -4,23 +4,23 @@
 
 class Foo extends core::Object {
   field dynamic _field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class FooValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar extends core::Object {
   field dynamic _field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class BarValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/store_load.dart.outline.expect b/pkg/front_end/testcases/store_load.dart.outline.expect
index 9f4aeb6..a5b4130 100644
--- a/pkg/front_end/testcases/store_load.dart.outline.expect
+++ b/pkg/front_end/testcases/store_load.dart.outline.expect
@@ -4,20 +4,20 @@
 
 class Foo extends core::Object {
   field dynamic _field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class FooValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class Bar extends core::Object {
   field dynamic _field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class BarValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/store_load.dart.strong.expect b/pkg/front_end/testcases/store_load.dart.strong.expect
index 1c51fda..59c3869 100644
--- a/pkg/front_end/testcases/store_load.dart.strong.expect
+++ b/pkg/front_end/testcases/store_load.dart.strong.expect
@@ -4,23 +4,23 @@
 
 class Foo extends core::Object {
   field dynamic _field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class FooValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Bar extends core::Object {
   field dynamic _field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class BarValue extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index ec8fc44..96c1038 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -67,7 +67,6 @@
 unused_methods: Fail
 void_methods: Fail
 warn_unresolved_sends: Fail # Test assumes Dart 1.0 semantics
-check_deferred_read: Fail
 
 inference/abstract_class_instantiation: Fail # Issue #30040
 inference/conflicts_can_happen: TypeCheckError
@@ -219,3 +218,5 @@
 incomplete_field_formal_parameter: Fail # Fasta doesn't recover well
 
 co19_language_metadata_syntax_t04: RuntimeError # Fasta doesn't recover well
+
+external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
diff --git a/pkg/front_end/testcases/super_call.dart.direct.expect b/pkg/front_end/testcases/super_call.dart.direct.expect
index 39a17a6..3a1635a 100644
--- a/pkg/front_end/testcases/super_call.dart.direct.expect
+++ b/pkg/front_end/testcases/super_call.dart.direct.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call(core::int x) → core::int
     return x.*(2);
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method call(core::int x) → core::int
diff --git a/pkg/front_end/testcases/super_call.dart.outline.expect b/pkg/front_end/testcases/super_call.dart.outline.expect
index a12055e..84c2e19 100644
--- a/pkg/front_end/testcases/super_call.dart.outline.expect
+++ b/pkg/front_end/testcases/super_call.dart.outline.expect
@@ -3,13 +3,13 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method call(core::int x) → core::int
     ;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method call(core::int x) → core::int
     ;
diff --git a/pkg/front_end/testcases/super_call.dart.strong.expect b/pkg/front_end/testcases/super_call.dart.strong.expect
index 31219d0..bb6aa08 100644
--- a/pkg/front_end/testcases/super_call.dart.strong.expect
+++ b/pkg/front_end/testcases/super_call.dart.strong.expect
@@ -3,14 +3,14 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method call(core::int x) → core::int
     return x.{core::num::*}(2);
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method call(core::int x) → core::int
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect b/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect
index 8a18e88..eac205d 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.direct.expect
@@ -8,7 +8,7 @@
   field dynamic c = null;
   field dynamic d = null;
   final field dynamic f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get e() → dynamic
@@ -32,7 +32,7 @@
 }
 class B extends self::A {
   final field dynamic d = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get b() → dynamic
@@ -41,7 +41,7 @@
   set i(dynamic x) → dynamic {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.outline.expect b/pkg/front_end/testcases/super_rasta_copy.dart.outline.expect
index 61dc388..dc09d25 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.outline.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.outline.expect
@@ -8,7 +8,7 @@
   field dynamic c;
   field dynamic d;
   final field dynamic f;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get e() → dynamic
     ;
@@ -35,7 +35,7 @@
 }
 class B extends self::A {
   final field dynamic d;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   get b() → dynamic
     ;
@@ -45,7 +45,7 @@
     ;
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method test() → dynamic
     ;
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
index 8ed214a..c40c044 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -8,7 +8,7 @@
   field dynamic c = null;
   field dynamic d = null;
   final field dynamic f = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get e() → dynamic
@@ -21,7 +21,7 @@
     return null;
   operator [](dynamic _) → dynamic
     return null;
-  operator []=(dynamic a, dynamic b) → dynamic {}
+  operator []=(dynamic a, dynamic b) → void {}
   operator ~() → dynamic
     return 117;
   operator unary-() → dynamic
@@ -32,7 +32,7 @@
 }
 class B extends self::A {
   final field dynamic d = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   get b() → dynamic
@@ -41,7 +41,7 @@
   set i(dynamic x) → void {}
 }
 class C extends self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::B::•()
     ;
   method test() → dynamic {
diff --git a/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect b/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect
index adce035..546ca24 100644
--- a/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect
+++ b/pkg/front_end/testcases/type_variable_as_super.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
@@ -13,7 +13,7 @@
     ;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect b/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
index 2d8fc87..a770e2c 100644
--- a/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_as_super.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class A<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 abstract class B<T extends core::Object> extends core::Object {
@@ -11,7 +11,7 @@
     ;
 }
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 static method main() → dynamic
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect b/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
index 301cc60..b588a3e 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method() → invalid-type
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect b/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
index 0fe9ea8..6447b5b 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method method() → invalid-type
     ;
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
index e232826..1550e3d 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method method() → invalid-type
diff --git a/pkg/front_end/testcases/undefined.dart.direct.expect b/pkg/front_end/testcases/undefined.dart.direct.expect
index cfc1ec6..e3bfd98 100644
--- a/pkg/front_end/testcases/undefined.dart.direct.expect
+++ b/pkg/front_end/testcases/undefined.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {}
diff --git a/pkg/front_end/testcases/undefined.dart.outline.expect b/pkg/front_end/testcases/undefined.dart.outline.expect
index 82b8592..b11bd19 100644
--- a/pkg/front_end/testcases/undefined.dart.outline.expect
+++ b/pkg/front_end/testcases/undefined.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method f() → void
     ;
diff --git a/pkg/front_end/testcases/undefined.dart.strong.expect b/pkg/front_end/testcases/undefined.dart.strong.expect
index e05b21c..28270f8 100644
--- a/pkg/front_end/testcases/undefined.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method f() → void {}
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.direct.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.direct.expect
index a2ed83c..ceea877 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.direct.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.direct.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(dynamic value) → void;
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.outline.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.outline.expect
index cb360bd..af37326 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.outline.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.outline.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   abstract set x(dynamic value) → void;
 }
diff --git a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
index 7a86cc9..ec385ce 100644
--- a/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
+++ b/pkg/front_end/testcases/undefined_getter_in_compound_assignment.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class C extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract set x(dynamic value) → void;
diff --git a/pkg/front_end/testcases/uninitialized_fields.dart.direct.expect b/pkg/front_end/testcases/uninitialized_fields.dart.direct.expect
index f18927f..4696956 100644
--- a/pkg/front_end/testcases/uninitialized_fields.dart.direct.expect
+++ b/pkg/front_end/testcases/uninitialized_fields.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Uninitialized extends core::Object {
   field core::int x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/front_end/testcases/uninitialized_fields.dart.outline.expect b/pkg/front_end/testcases/uninitialized_fields.dart.outline.expect
index e2a349c..0b1cf23 100644
--- a/pkg/front_end/testcases/uninitialized_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/uninitialized_fields.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class Uninitialized extends core::Object {
   field core::int x;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
 }
 class PartiallyInitialized extends core::Object {
diff --git a/pkg/front_end/testcases/unused_methods.dart.direct.expect b/pkg/front_end/testcases/unused_methods.dart.direct.expect
index 2648f69..9b1c543 100644
--- a/pkg/front_end/testcases/unused_methods.dart.direct.expect
+++ b/pkg/front_end/testcases/unused_methods.dart.direct.expect
@@ -9,7 +9,7 @@
   }
 }
 abstract class UsedAsBaseClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
@@ -23,7 +23,7 @@
   }
 }
 class UsedAsInterface extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
@@ -31,7 +31,7 @@
   }
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method usedInSubclass() → void {
@@ -39,7 +39,7 @@
   }
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
@@ -47,7 +47,7 @@
   }
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
diff --git a/pkg/front_end/testcases/unused_methods.dart.outline.expect b/pkg/front_end/testcases/unused_methods.dart.outline.expect
index 3065d87..e3031b0 100644
--- a/pkg/front_end/testcases/unused_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/unused_methods.dart.outline.expect
@@ -7,7 +7,7 @@
     ;
 }
 abstract class UsedAsBaseClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method usedInSubclass() → void
     ;
@@ -17,25 +17,25 @@
     ;
 }
 class UsedAsInterface extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method usedInSubclass() → void
     ;
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method usedInSubclass() → void
     ;
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method usedInSubclass() → void
     ;
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method usedInSubclass() → void
     ;
diff --git a/pkg/front_end/testcases/unused_methods.dart.strong.expect b/pkg/front_end/testcases/unused_methods.dart.strong.expect
index a779706..cb22b9b 100644
--- a/pkg/front_end/testcases/unused_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/unused_methods.dart.strong.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 abstract class UsedAsBaseClass extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method usedInSubclass() → void;
@@ -16,14 +16,14 @@
   abstract method usedInSubclass() → void;
 }
 class InstantiatedButMethodsUnused extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method usedInSubclass() → void
     throw "Method removed by tree-shaking";
 }
 class ClassA extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
@@ -31,7 +31,7 @@
   }
 }
 class ClassB extends self::UsedAsBaseClass implements self::UsedAsInterface, self::InstantiatedButMethodsUnused {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::UsedAsBaseClass::•()
     ;
   method usedInSubclass() → void {
diff --git a/pkg/front_end/testcases/void_methods.dart.direct.expect b/pkg/front_end/testcases/void_methods.dart.direct.expect
index 044feab..dfbe035 100644
--- a/pkg/front_end/testcases/void_methods.dart.direct.expect
+++ b/pkg/front_end/testcases/void_methods.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field core::List<dynamic> list = <dynamic>[1, 2, 3];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set first(dynamic x) → dynamic
diff --git a/pkg/front_end/testcases/void_methods.dart.outline.expect b/pkg/front_end/testcases/void_methods.dart.outline.expect
index 6b4a504..31c9bac 100644
--- a/pkg/front_end/testcases/void_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/void_methods.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field core::List<dynamic> list;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set first(dynamic x) → dynamic
     ;
diff --git a/pkg/front_end/testcases/void_methods.dart.strong.expect b/pkg/front_end/testcases/void_methods.dart.strong.expect
index 683d3ae..ca84f50 100644
--- a/pkg/front_end/testcases/void_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/void_methods.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class Foo extends core::Object {
   field core::List<dynamic> list = <dynamic>[1, 2, 3];
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   set first(dynamic x) → void
diff --git a/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect b/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect
index 4ed764e..5750f13 100644
--- a/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect
+++ b/pkg/front_end/testcases/warn_unresolved_sends.dart.direct.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic superField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method superMethod() → dynamic {}
@@ -17,7 +17,7 @@
 }
 class D extends self::C {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set setterOnly(dynamic _) → void {}
@@ -55,7 +55,7 @@
 }
 class E extends self::D {
   field dynamic missingField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method missingMethod() → void {}
diff --git a/pkg/front_end/testcases/warn_unresolved_sends.dart.outline.expect b/pkg/front_end/testcases/warn_unresolved_sends.dart.outline.expect
index 88cbd1a..a22d6d0 100644
--- a/pkg/front_end/testcases/warn_unresolved_sends.dart.outline.expect
+++ b/pkg/front_end/testcases/warn_unresolved_sends.dart.outline.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic superField;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method superMethod() → dynamic
     ;
@@ -19,7 +19,7 @@
 }
 class D extends self::C {
   field dynamic field;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   set setterOnly(dynamic _) → void
     ;
@@ -32,7 +32,7 @@
 }
 class E extends self::D {
   field dynamic missingField;
-  default constructor •() → void
+  synthetic constructor •() → void
     ;
   method missingMethod() → void
     ;
diff --git a/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect b/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect
index 1668b95..df689b5 100644
--- a/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect
+++ b/pkg/front_end/testcases/warn_unresolved_sends.dart.strong.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic superField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method superMethod() → dynamic {}
@@ -17,7 +17,7 @@
 }
 class D extends self::C {
   field dynamic field = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
   set setterOnly(dynamic _) → void {}
@@ -55,7 +55,7 @@
 }
 class E extends self::D {
   field dynamic missingField = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method missingMethod() → void {}
diff --git a/pkg/front_end/tool/_fasta/compile_platform.dart b/pkg/front_end/tool/_fasta/compile_platform.dart
index 76865bf..738a0f1 100644
--- a/pkg/front_end/tool/_fasta/compile_platform.dart
+++ b/pkg/front_end/tool/_fasta/compile_platform.dart
@@ -9,6 +9,7 @@
 import 'dart:io' show File, Platform, exitCode;
 
 import 'package:compiler/src/kernel/dart2js_target.dart' show Dart2jsTarget;
+import 'package:vm/target/runner.dart' show RunnerTarget;
 
 import 'package:kernel/target/targets.dart' show TargetFlags, targets;
 
@@ -34,6 +35,7 @@
 
 Future main(List<String> arguments) async {
   targets["dart2js"] = (TargetFlags flags) => new Dart2jsTarget(flags);
+  targets["runner"] = (TargetFlags flags) => new RunnerTarget(flags);
   for (int i = 0; i < iterations; i++) {
     if (i > 0) {
       print("\n");
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 5f2954d..a05093e 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -623,8 +623,10 @@
       library.fileUri = fileUri;
     }
 
-    assert(((_) => true)(debugPath
-        .add(library.name ?? library.importUri?.toString() ?? 'library')));
+    assert(() {
+      debugPath.add(library.name ?? library.importUri?.toString() ?? 'library');
+      return true;
+    }());
 
     if (shouldWriteData) {
       _fillTreeNodeList(
@@ -778,7 +780,10 @@
     var name = readStringOrNullIfEmpty();
     var fileUri = readUriReference();
     var annotations = readAnnotationList(node);
-    assert(((_) => true)(debugPath.add(node.name ?? 'normal-class')));
+    assert(() {
+      debugPath.add(node.name ?? 'normal-class');
+      return true;
+    }());
     readAndPushTypeParameterList(node.typeParameters, node);
     var supertype = readSupertypeOption();
     var mixedInType = readSupertypeOption();
@@ -840,7 +845,10 @@
     var name = readName();
     var fileUri = readUriReference();
     var annotations = readAnnotationList(node);
-    assert(((_) => true)(debugPath.add(node.name?.name ?? 'field')));
+    assert(() {
+      debugPath.add(node.name?.name ?? 'field');
+      return true;
+    }());
     var type = readDartType();
     var initializer = readExpressionOption();
     int transformerFlags = getAndResetTransformerFlags();
@@ -877,7 +885,10 @@
     var name = readName();
     var fileUri = readUriReference();
     var annotations = readAnnotationList(node);
-    assert(((_) => true)(debugPath.add(node.name?.name ?? 'constructor')));
+    assert(() {
+      debugPath.add(node.name?.name ?? 'constructor');
+      return true;
+    }());
     var function = readFunctionNode(false, -1);
     pushVariableDeclarations(function.positionalParameters);
     pushVariableDeclarations(function.namedParameters);
@@ -920,7 +931,10 @@
     var name = readName();
     var fileUri = readUriReference();
     var annotations = readAnnotationList(node);
-    assert(((_) => true)(debugPath.add(node.name?.name ?? 'procedure')));
+    assert(() {
+      debugPath.add(node.name?.name ?? 'procedure');
+      return true;
+    }());
     int functionNodeSize = endOffset - _byteOffset;
     // Read small factories up front. Postpone everything else.
     bool readFunctionNodeNow =
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 1d0f38f..6ae2bb9 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -389,6 +389,7 @@
         name: node.name,
         isConst: node.isConst,
         isExternal: node.isExternal,
+        isSynthetic: node.isSynthetic,
         initializers: node.initializers.map(clone).toList(),
         transformerFlags: node.transformerFlags)
       ..fileEndOffset = node.fileEndOffset;
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 5d84fa3..87b92be 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -944,7 +944,7 @@
     writeIndentation();
     writeModifier(node.isExternal, 'external');
     writeModifier(node.isConst, 'const');
-    writeModifier(node.isSynthetic, 'default');
+    writeModifier(node.isSynthetic, 'synthetic');
     writeWord('constructor');
     writeFunction(node.function,
         name: node.name, initializers: node.initializers);
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 3646f2b..0935136 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -235,7 +235,8 @@
     // Assemble the constructor.
     return new Constructor(function,
         name: superclassConstructor.name,
-        initializers: <Initializer>[superInitializer]);
+        initializers: <Initializer>[superInitializer],
+        isSynthetic: true);
   }
 }
 
diff --git a/pkg/kernel/lib/transformations/sanitize_for_vm.dart b/pkg/kernel/lib/transformations/sanitize_for_vm.dart
index fc83ab7..54d7e7d 100644
--- a/pkg/kernel/lib/transformations/sanitize_for_vm.dart
+++ b/pkg/kernel/lib/transformations/sanitize_for_vm.dart
@@ -15,7 +15,8 @@
         if (class_.constructors.isEmpty && class_.procedures.isEmpty) {
           class_.addMember(new Constructor(
               new FunctionNode(new EmptyStatement()),
-              name: new Name('')));
+              name: new Name(''),
+              isSynthetic: true));
         }
       }
     }
diff --git a/pkg/kernel/lib/type_algebra.dart b/pkg/kernel/lib/type_algebra.dart
index 9471dd3..fc325fd 100644
--- a/pkg/kernel/lib/type_algebra.dart
+++ b/pkg/kernel/lib/type_algebra.dart
@@ -160,6 +160,8 @@
   var map = <TypeParameter, DartType>{};
   for (int i = 0; i < typeParameters.length; ++i) {
     map[typeParameters[i]] = new TypeParameterType(freshParameters[i]);
+  }
+  for (int i = 0; i < typeParameters.length; ++i) {
     freshParameters[i].bound = substitute(typeParameters[i].bound, map);
   }
   return new FreshTypeParameters(freshParameters, Substitution.fromMap(map));
@@ -171,8 +173,20 @@
 
   FreshTypeParameters(this.freshTypeParameters, this.substitution);
 
+  FunctionType applyToFunctionType(FunctionType type) => new FunctionType(
+      type.positionalParameters.map(substitute).toList(),
+      substitute(type.returnType),
+      namedParameters: type.namedParameters.map(substituteNamed).toList(),
+      typeParameters: freshTypeParameters,
+      requiredParameterCount: type.requiredParameterCount,
+      positionalParameterNames: type.positionalParameterNames,
+      typedefReference: type.typedefReference);
+
   DartType substitute(DartType type) => substitution.substituteType(type);
 
+  NamedType substituteNamed(NamedType type) =>
+      new NamedType(type.name, substitute(type.type));
+
   Supertype substituteSuper(Supertype type) {
     return substitution.substituteSupertype(type);
   }
diff --git a/pkg/kernel/lib/type_environment.dart b/pkg/kernel/lib/type_environment.dart
index cb52ecc..d12bf7b 100644
--- a/pkg/kernel/lib/type_environment.dart
+++ b/pkg/kernel/lib/type_environment.dart
@@ -151,6 +151,131 @@
     }
     return !hierarchy.hasProperSubtypes(class_);
   }
+
+  /// Replaces all covariant occurrences of `dynamic`, `Object`, and `void` with
+  /// `Null` and all contravariant occurrences of `Null` with `Object`.
+  DartType replaceTopAndBottom(DartType type, {bool isCovariant = true}) {
+    if (type is DynamicType && isCovariant) {
+      return const BottomType();
+    } else if (type is InterfaceType &&
+        type.classNode == objectType.classNode &&
+        isCovariant) {
+      return const BottomType();
+    } else if (type is InterfaceType && type.classNode.typeParameters != null) {
+      List<DartType> typeArguments = type.typeArguments ??
+          calculateBounds(type.classNode.typeParameters, objectType.classNode);
+      List<DartType> replacedTypeArguments =
+          new List<DartType>(typeArguments.length);
+      for (int i = 0; i < replacedTypeArguments.length; i++) {
+        replacedTypeArguments[i] =
+            replaceTopAndBottom(typeArguments[i], isCovariant: true);
+      }
+      return new InterfaceType(type.classNode, replacedTypeArguments);
+    } else if (type is TypedefType && type.typedefNode.typeParameters != null) {
+      List<DartType> typeArguments = type.typeArguments ??
+          calculateBounds(
+              type.typedefNode.typeParameters, objectType.classNode);
+      List<DartType> replacedTypeArguments =
+          new List<DartType>(typeArguments.length);
+      for (int i = 0; i < replacedTypeArguments.length; i++) {
+        replacedTypeArguments[i] =
+            replaceTopAndBottom(typeArguments[i], isCovariant: true);
+      }
+      return new TypedefType(type.typedefNode, replacedTypeArguments);
+    } else if (type is FunctionType) {
+      var replacedReturnType =
+          replaceTopAndBottom(type.returnType, isCovariant: true);
+      var replacedPositionalParameters =
+          new List<DartType>(type.positionalParameters.length);
+      for (int i = 0; i < replacedPositionalParameters.length; i++) {
+        replacedPositionalParameters[i] = replaceTopAndBottom(
+            type.positionalParameters[i],
+            isCovariant: false);
+      }
+      var replacedNamedParameters =
+          new List<NamedType>(type.namedParameters.length);
+      for (int i = 0; i < replacedNamedParameters.length; i++) {
+        replacedNamedParameters[i] = new NamedType(
+            type.namedParameters[i].name,
+            replaceTopAndBottom(type.namedParameters[i].type,
+                isCovariant: false));
+      }
+      return new FunctionType(replacedPositionalParameters, replacedReturnType,
+          namedParameters: replacedNamedParameters,
+          typeParameters: type.typeParameters,
+          requiredParameterCount: type.requiredParameterCount,
+          positionalParameterNames: type.positionalParameterNames,
+          typedefReference: type.typedefReference);
+    }
+    return type;
+  }
+
+  bool isSuperBounded(DartType type) {
+    List<TypeParameter> typeParameters;
+    List<DartType> typeArguments;
+
+    if (type is InterfaceType && type.classNode.typeParameters != null) {
+      typeParameters = type.classNode.typeParameters;
+      typeArguments = type.typeArguments;
+    } else if (type is TypedefType && type.typedefNode.typeParameters != null) {
+      typeParameters = type.typedefNode.typeParameters;
+      typeArguments = type.typeArguments;
+    }
+
+    if (typeParameters == null) {
+      return false;
+    }
+
+    typeArguments =
+        typeArguments ?? calculateBounds(typeParameters, objectType.classNode);
+
+    var substitution = <TypeParameter, DartType>{};
+    for (int i = 0; i < typeParameters.length; i++) {
+      substitution[typeParameters[i]] = typeArguments[i];
+    }
+    var substitutedBounds = new List<DartType>(typeParameters.length);
+    for (int i = 0; i < typeParameters.length; i++) {
+      substitutedBounds[i] = substitute(typeParameters[i].bound, substitution);
+    }
+
+    bool isViolated = false;
+    for (int i = 0; i < typeArguments.length; i++) {
+      if (!isSubtypeOf(typeArguments[i], substitutedBounds[i])) {
+        isViolated = true;
+      }
+    }
+    if (!isViolated) {
+      return false;
+    }
+
+    var replaced = replaceTopAndBottom(type);
+    List<DartType> replacedArguments;
+    if (replaced is InterfaceType) {
+      replacedArguments = replaced.typeArguments;
+    } else if (replaced is TypedefType) {
+      replacedArguments = replaced.typeArguments;
+    }
+
+    if (replacedArguments == null) {
+      return false;
+    }
+
+    var replacedSubstitution = <TypeParameter, DartType>{};
+    for (int i = 0; i < typeParameters.length; i++) {
+      replacedSubstitution[typeParameters[i]] = replacedArguments[i];
+    }
+    var replacedBounds = new List<DartType>(typeParameters.length);
+    for (int i = 0; i < typeParameters.length; i++) {
+      replacedBounds[i] =
+          substitute(typeParameters[i].bound, replacedSubstitution);
+    }
+    for (int i = 0; i < replacedArguments.length; i++) {
+      if (!isSubtypeOf(replacedArguments[i], replacedBounds[i])) {
+        return false;
+      }
+    }
+    return true;
+  }
 }
 
 /// The part of [TypeEnvironment] that deals with subtype tests.
diff --git a/pkg/kernel/testcases/closures/blocks.dart.expect b/pkg/kernel/testcases/closures/blocks.dart.expect
index fbefa53..89fec93 100644
--- a/pkg/kernel/testcases/closures/blocks.dart.expect
+++ b/pkg/kernel/testcases/closures/blocks.dart.expect
@@ -5,7 +5,7 @@
 typedef fn = (dynamic) → dynamic;
 typedef fn2 = (dynamic, dynamic) → dynamic;
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/kernel/testcases/closures/capture_this.dart.expect b/pkg/kernel/testcases/closures/capture_this.dart.expect
index 829b686..c12586a 100644
--- a/pkg/kernel/testcases/closures/capture_this.dart.expect
+++ b/pkg/kernel/testcases/closures/capture_this.dart.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic x = null;
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method m() → dynamic {
diff --git a/pkg/kernel/testcases/closures/captured_class_type_vars.dart.expect b/pkg/kernel/testcases/closures/captured_class_type_vars.dart.expect
index a6ffe7f..479559a 100644
--- a/pkg/kernel/testcases/closures/captured_class_type_vars.dart.expect
+++ b/pkg/kernel/testcases/closures/captured_class_type_vars.dart.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class Isgen<B extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method getfn() → dynamic {
diff --git a/pkg/kernel/testcases/closures/closure_types.dart.expect b/pkg/kernel/testcases/closures/closure_types.dart.expect
index 2e8dd4b..f9ad232 100644
--- a/pkg/kernel/testcases/closures/closure_types.dart.expect
+++ b/pkg/kernel/testcases/closures/closure_types.dart.expect
@@ -5,7 +5,7 @@
 typedef ct = (core::int) → void;
 typedef dt = (core::int) → core::String;
 class C<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method getf() → void {
@@ -15,7 +15,7 @@
   }
 }
 class D<T extends core::Object> extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method getf() → void {
diff --git a/pkg/kernel/testcases/closures/contexts_in_field_initializers.dart.expect b/pkg/kernel/testcases/closures/contexts_in_field_initializers.dart.expect
index 48a6f54..9a8f039 100644
--- a/pkg/kernel/testcases/closures/contexts_in_field_initializers.dart.expect
+++ b/pkg/kernel/testcases/closures/contexts_in_field_initializers.dart.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/kernel/testcases/closures/contexts_in_super_initializers.dart.expect b/pkg/kernel/testcases/closures/contexts_in_super_initializers.dart.expect
index fc42160..3fb0a71 100644
--- a/pkg/kernel/testcases/closures/contexts_in_super_initializers.dart.expect
+++ b/pkg/kernel/testcases/closures/contexts_in_super_initializers.dart.expect
@@ -3,12 +3,12 @@
 import "dart:core" as core;
 
 class X extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class Y extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/kernel/testcases/closures/field.dart.expect b/pkg/kernel/testcases/closures/field.dart.expect
index 908804b..7136b0c9 100644
--- a/pkg/kernel/testcases/closures/field.dart.expect
+++ b/pkg/kernel/testcases/closures/field.dart.expect
@@ -6,7 +6,7 @@
   field dynamic v = MakeClosure<<T extends core::Object>(dynamic) → dynamic, self::C::T>(self::closure#C#v#function, MakeVector(1));
   final field dynamic y = MakeClosure<() → dynamic>(self::closure#C#y#function, null);
   static final field dynamic z = MakeClosure<() → dynamic>(self::closure#C#z#function, null);
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/kernel/testcases/closures/instance_tear_off.dart.expect b/pkg/kernel/testcases/closures/instance_tear_off.dart.expect
index a967843..e0f8e77 100644
--- a/pkg/kernel/testcases/closures/instance_tear_off.dart.expect
+++ b/pkg/kernel/testcases/closures/instance_tear_off.dart.expect
@@ -4,7 +4,7 @@
 
 class C extends core::Object {
   field dynamic f = MakeClosure<() → dynamic>(self::closure#C#f#function, null);
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get g() → dynamic
@@ -20,7 +20,7 @@
 }
 class D<T extends core::Object> extends core::Object {
   field dynamic f = MakeClosure<() → dynamic>(self::closure#D#f#function, null);
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get g() → dynamic
@@ -36,7 +36,7 @@
 }
 class E<T extends core::Object> extends core::Object {
   field dynamic f = MakeClosure<() → dynamic>(self::closure#E#f#function, null);
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   get g() → dynamic
diff --git a/pkg/pkg.status b/pkg/pkg.status
index a12448f..f5bf31f 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -116,7 +116,9 @@
 vm/test/*: SkipByDesign # Only meant to run on vm
 
 [ $system == windows ]
+front_end/test/fasta/ast_builder_test: Pass, Slow, Timeout
 front_end/test/fasta/bootstrap_test: Skip # Issue 31902
+front_end/test/fasta/strong_test: Pass, Slow, Timeout
 front_end/test/src/incremental/hot_reload_e2e_test: Skip # Issue 31901
 front_end/test/whole_program_test: Skip # Issue 31902
 
@@ -208,7 +210,7 @@
 analysis_server/test/integration/edit/sort_members_test: Pass, Slow
 analysis_server/test/services/correction/fix_test: Pass, Slow
 analysis_server/test/socket_server_test: Skip # Pass, Slow
-analyzer/test/generated/non_error_resolver_kernel_test: Skip # Timing out even with Pass, Slow: Issue 30796
+analyzer/test/generated/non_error_resolver_kernel_test: Pass, Slow
 analyzer/test/src/summary/resynthesize_ast_test: Pass, Slow
 analyzer/test/src/task/strong/front_end_inference_test: Pass, Slow
 
diff --git a/pkg/vm/lib/target/runner.dart b/pkg/vm/lib/target/runner.dart
new file mode 100644
index 0000000..3b7ce0c
--- /dev/null
+++ b/pkg/vm/lib/target/runner.dart
@@ -0,0 +1,42 @@
+// 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.
+library kernel.target.runner;
+
+import 'package:kernel/target/targets.dart';
+import 'package:kernel/target/vm.dart' show VmTarget;
+
+class RunnerTarget extends VmTarget {
+  RunnerTarget(TargetFlags flags) : super(flags);
+
+  @override
+  String get name => 'runner';
+
+  // This is the order that bootstrap libraries are loaded according to
+  // `runtime/vm/object_store.h`.
+  @override
+  List<String> get extraRequiredLibraries => const <String>[
+        'dart:async',
+        'dart:collection',
+        'dart:convert',
+        'dart:developer',
+        'dart:_internal',
+        'dart:isolate',
+        'dart:math',
+
+        // The library dart:mirrors may be ignored by the VM, e.g. when built in
+        // PRODUCT mode.
+        'dart:mirrors',
+
+        'dart:profiler',
+        'dart:typed_data',
+        'dart:nativewrappers',
+        'dart:io',
+
+        // Required for dart_runner.
+        'dart:fuchsia.builtin',
+        'dart:zircon',
+        'dart:fuchsia',
+        'dart:vmservice_io',
+      ];
+}
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index cd3cafb..390a625 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -24,11 +24,7 @@
 // organized in several categories:
 //
 // === Correctness ===
-// * Support dynamic calls via getters & dynamic tear-offs.
-// * Re-evaluate field initializer if its dependency changes (avoid
-//   re-using cached value).
-// * Handle noSuchMethod invocations correctly (especially in case of dynamic
-//   calls).
+// * Handle noSuchMethod invocations correctly.
 // * Verify incremental re-calculation by fresh analysis starting with known
 //   allocated classes.
 // * Auto-generate entry_points.json during build.
@@ -72,7 +68,7 @@
 /// This is the basic unit of processing in type flow analysis.
 /// Call sites calling the same method with the same argument types
 /// may reuse results of the analysis through the same _Invocation instance.
-class _Invocation extends _DependencyTracker {
+abstract class _Invocation extends _DependencyTracker {
   final Selector selector;
   final Args<Type> args;
 
@@ -83,9 +79,7 @@
   /// result or not (to avoid invalidation of callers if result hasn't changed).
   Type invalidatedResult;
 
-  bool _isPolymorphic = false;
-  Set<Call> _callSites; // Populated only if non-direct and not polymorphic.
-  Member _monomorphicTarget;
+  Type process(TypeFlowAnalysis typeFlowAnalysis);
 
   _Invocation(this.selector, this.args);
 
@@ -102,8 +96,283 @@
 
   @override
   String toString() => "_Invocation $selector $args";
+}
 
-  void setPolymorphic() {
+class _DirectInvocation extends _Invocation {
+  _DirectInvocation(DirectSelector selector, Args<Type> args)
+      : super(selector, args);
+
+  @override
+  Type process(TypeFlowAnalysis typeFlowAnalysis) {
+    assertx(typeFlowAnalysis.currentInvocation == this);
+
+    if (selector.member is Field) {
+      return _processField(typeFlowAnalysis);
+    } else {
+      return _processFunction(typeFlowAnalysis);
+    }
+  }
+
+  Type _processField(TypeFlowAnalysis typeFlowAnalysis) {
+    final Field field = selector.member as Field;
+    final int firstParamIndex = field.isStatic ? 0 : 1;
+    final _FieldValue fieldValue = typeFlowAnalysis.getFieldValue(field);
+
+    switch (selector.callKind) {
+      case CallKind.PropertyGet:
+        assertx(args.values.length == firstParamIndex);
+        assertx(args.names.isEmpty);
+        return fieldValue.getValue(typeFlowAnalysis);
+
+      case CallKind.PropertySet:
+        assertx(args.values.length == firstParamIndex + 1);
+        assertx(args.names.isEmpty);
+        final Type setterArg = args.values[firstParamIndex];
+        fieldValue.setValue(setterArg, typeFlowAnalysis);
+        return const EmptyType();
+
+      case CallKind.Method:
+        // Call via field.
+        // TODO(alexmarkov): support function types and use inferred type
+        // to get more precise return type.
+        return new Type.fromStatic(const DynamicType());
+
+      case CallKind.FieldInitializer:
+        assertx(args.values.isEmpty);
+        assertx(args.names.isEmpty);
+        fieldValue.setValue(
+            typeFlowAnalysis
+                .getSummary(field)
+                .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis),
+            typeFlowAnalysis);
+        return const EmptyType();
+    }
+
+    // Make dartanalyzer happy.
+    throw 'Unexpected call kind ${selector.callKind}';
+  }
+
+  Type _processFunction(TypeFlowAnalysis typeFlowAnalysis) {
+    final Member member = selector.member;
+    if (selector.memberAgreesToCallKind(member)) {
+      if (_isLegalNumberOfArguments()) {
+        return typeFlowAnalysis
+            .getSummary(member)
+            .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
+      } else {
+        // TODO(alexmarkov): support noSuchMethod invocation here.
+        return new Type.empty();
+      }
+    } else {
+      if (selector.callKind == CallKind.PropertyGet) {
+        // Tear-off.
+        // TODO(alexmarkov): capture receiver type
+        assertx((member is Procedure) && !member.isGetter && !member.isSetter);
+        typeFlowAnalysis.addRawCall(new DirectSelector(member));
+        return new Type.fromStatic(const DynamicType());
+      } else {
+        // Call via getter.
+        // TODO(alexmarkov): capture receiver type
+        assertx((selector.callKind == CallKind.Method) &&
+            (member is Procedure) &&
+            member.isGetter);
+        typeFlowAnalysis.addRawCall(
+            new DirectSelector(member, callKind: CallKind.PropertyGet));
+        return new Type.fromStatic(const DynamicType());
+      }
+    }
+  }
+
+  bool _isLegalNumberOfArguments() {
+    final function = selector.member.function;
+    assertx(function != null);
+
+    final int positionalArguments = args.positionalCount;
+
+    final int firstParamIndex = hasReceiverArg(selector.member) ? 1 : 0;
+    final int requiredParameters =
+        firstParamIndex + function.requiredParameterCount;
+    if (positionalArguments < requiredParameters) {
+      return false;
+    }
+
+    final int positionalParameters =
+        firstParamIndex + function.positionalParameters.length;
+    if (positionalArguments > positionalParameters) {
+      return false;
+    }
+
+    return true;
+  }
+}
+
+class _DispatchableInvocation extends _Invocation {
+  bool _isPolymorphic = false;
+  Set<Call> _callSites; // Populated only if not polymorphic.
+  Member _monomorphicTarget;
+
+  _DispatchableInvocation(Selector selector, Args<Type> args)
+      : super(selector, args) {
+    assertx(selector is! DirectSelector);
+  }
+
+  @override
+  Type process(TypeFlowAnalysis typeFlowAnalysis) {
+    assertx(typeFlowAnalysis.currentInvocation == this);
+
+    // Collect all possible targets for this invocation,
+    // along with more accurate receiver types for each target.
+    final targets = <Member, Type>{};
+    _collectTargetsForReceiverType(args.receiver, targets, typeFlowAnalysis);
+
+    // Calculate result as a union of results of direct invocations
+    // corresponding to each target.
+    Type result = new Type.empty();
+
+    if (targets.isEmpty) {
+      tracePrint("No targets...");
+    } else {
+      if (targets.length == 1) {
+        _setMonomorphicTarget(targets.keys.single);
+      } else {
+        _setPolymorphic();
+      }
+      targets.forEach((Member target, Type receiver) {
+        final directSelector =
+            new DirectSelector(target, callKind: selector.callKind);
+
+        Args<Type> directArgs = args;
+        if (args.receiver != receiver) {
+          directArgs = new Args<Type>.withReceiver(args, receiver);
+        }
+
+        final directInvocation = typeFlowAnalysis._invocationsCache
+            .getInvocation(directSelector, directArgs);
+
+        final Type type =
+            typeFlowAnalysis.workList.processInvocation(directInvocation);
+
+        // Result of this invocation depends on the results of direct
+        // invocations corresponding to each target.
+        directInvocation.addDependentInvocation(this);
+
+        result = result.union(type, typeFlowAnalysis.hierarchyCache);
+      });
+    }
+
+    // TODO(alexmarkov): handle closures more precisely
+    if ((selector is DynamicSelector) && (selector.name.name == "call")) {
+      tracePrint("Possible closure call, result is dynamic");
+      result = new Type.fromStatic(const DynamicType());
+    }
+
+    return result;
+  }
+
+  void _collectTargetsForReceiverType(Type receiver, Map<Member, Type> targets,
+      TypeFlowAnalysis typeFlowAnalysis) {
+    assertx(receiver != const EmptyType()); // should be filtered earlier
+
+    if (receiver is NullableType) {
+      _collectTargetsForNull(targets, typeFlowAnalysis);
+      receiver = (receiver as NullableType).baseType;
+      assertx(receiver is! NullableType);
+    }
+
+    if (selector is InterfaceSelector) {
+      final staticReceiverType =
+          new Type.fromStatic(selector.member.enclosingClass.rawType);
+      receiver = receiver.intersection(
+          staticReceiverType, typeFlowAnalysis.hierarchyCache);
+      assertx(receiver is! NullableType);
+
+      tracePrint("Narrowed down receiver type: $receiver");
+    }
+
+    if (receiver is ConeType) {
+      // Specialization of type cone will add dependency of the current
+      // invocation to the receiver class. A new allocated class discovered
+      // in the receiver cone will invalidate this invocation.
+      receiver = typeFlowAnalysis.hierarchyCache
+          .specializeTypeCone((receiver as ConeType).dartType);
+    }
+
+    if (receiver is ConcreteType) {
+      _collectTargetsForConcreteType(receiver, targets, typeFlowAnalysis);
+    } else if (receiver is SetType) {
+      for (var type in receiver.types) {
+        _collectTargetsForConcreteType(type, targets, typeFlowAnalysis);
+      }
+    } else if (receiver is AnyType) {
+      _collectTargetsForSelector(targets, typeFlowAnalysis);
+    } else {
+      assertx(receiver is EmptyType);
+    }
+  }
+
+  // TODO(alexmarkov): Consider caching targets for Null type.
+  void _collectTargetsForNull(
+      Map<Member, Type> targets, TypeFlowAnalysis typeFlowAnalysis) {
+    Class nullClass = typeFlowAnalysis.environment.coreTypes.nullClass;
+
+    Member target = typeFlowAnalysis.hierarchyCache.hierarchy
+        .getDispatchTarget(nullClass, selector.name, setter: selector.isSetter);
+
+    if (target != null) {
+      tracePrint("Found $target for null receiver");
+      _addTarget(targets, target, new Type.nullable(const EmptyType()),
+          typeFlowAnalysis);
+    }
+  }
+
+  void _collectTargetsForConcreteType(ConcreteType receiver,
+      Map<Member, Type> targets, TypeFlowAnalysis typeFlowAnalysis) {
+    DartType receiverDartType = receiver.dartType;
+
+    assertx(receiverDartType is! FunctionType);
+    assertx(receiverDartType is InterfaceType); // TODO(alexmarkov)
+
+    Class class_ = (receiverDartType as InterfaceType).classNode;
+
+    Member target = typeFlowAnalysis.hierarchyCache.hierarchy
+        .getDispatchTarget(class_, selector.name, setter: selector.isSetter);
+
+    if (target != null) {
+      tracePrint("Found $target for concrete receiver $receiver");
+      _addTarget(targets, target, receiver, typeFlowAnalysis);
+    } else {
+      tracePrint("Target is not found for receiver $receiver");
+    }
+  }
+
+  void _collectTargetsForSelector(
+      Map<Member, Type> targets, TypeFlowAnalysis typeFlowAnalysis) {
+    Selector selector = this.selector;
+    if (selector is InterfaceSelector) {
+      // TODO(alexmarkov): support generic types and make sure inferred types
+      // are always same or better than static types.
+//      assertx(selector.member.enclosingClass ==
+//          _typeFlowAnalysis.environment.coreTypes.objectClass, details: selector);
+      selector = new DynamicSelector(selector.callKind, selector.name);
+    }
+
+    final receiver = args.receiver;
+    for (Member target in typeFlowAnalysis.hierarchyCache
+        .getDynamicTargets(selector as DynamicSelector)) {
+      _addTarget(targets, target, receiver, typeFlowAnalysis);
+    }
+  }
+
+  void _addTarget(Map<Member, Type> targets, Member member, Type receiver,
+      TypeFlowAnalysis typeFlowAnalysis) {
+    Type oldReceiver = targets[member];
+    if (oldReceiver != null) {
+      receiver = receiver.union(oldReceiver, typeFlowAnalysis.hierarchyCache);
+    }
+    targets[member] = receiver;
+  }
+
+  void _setPolymorphic() {
     if (!_isPolymorphic) {
       _isPolymorphic = true;
       _monomorphicTarget = null;
@@ -114,7 +383,7 @@
     }
   }
 
-  void setMonomorphicTarget(Member target) {
+  void _setMonomorphicTarget(Member target) {
     assertx(!_isPolymorphic);
     assertx((_monomorphicTarget == null) || (_monomorphicTarget == target));
     _monomorphicTarget = target;
@@ -161,7 +430,9 @@
   final Set<_Invocation> _invocations = new Set<_Invocation>();
 
   _Invocation getInvocation(Selector selector, Args<Type> args) {
-    _Invocation invocation = new _Invocation(selector, args);
+    _Invocation invocation = (selector is DirectSelector)
+        ? new _DirectInvocation(selector, args)
+        : new _DispatchableInvocation(selector, args);
     _Invocation result = _invocations.lookup(invocation);
     if (result == null) {
       bool added = _invocations.add(invocation);
@@ -172,160 +443,79 @@
   }
 }
 
-/// Base class for handlers of invocations of a member.
-abstract class _MemberInvocationHandler extends _DependencyTracker {
-  final Member member;
-  Summary _summary;
-
-  _MemberInvocationHandler(this.member);
-
-  Summary getSummary(TypeFlowAnalysis typeFlowAnalysis) {
-    return _summary ??= typeFlowAnalysis.summaryCollector.createSummary(member);
-  }
-
-  Type handleInvocation(
-      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis);
-
-  @override
-  String toString() => "_M $member";
-}
-
-class _ProcedureInvocationHandler extends _MemberInvocationHandler {
-  _ProcedureInvocationHandler(Member member) : super(member);
-
-  @override
-  Type handleInvocation(
-      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis) {
-    if (invocation.selector.memberAgreesToCallKind(member)) {
-      if (_isLegalNumberOfArguments(invocation)) {
-        addDependentInvocation(typeFlowAnalysis.currentInvocation);
-        return getSummary(typeFlowAnalysis).apply(
-            invocation.args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
-      } else {
-        return new Type.empty();
-      }
-    } else {
-      if (invocation.selector.callKind == CallKind.PropertyGet) {
-        // Tear-off.
-        // TODO(alexmarkov): capture receiver type
-        assertx((member is Procedure) &&
-            !(member as Procedure).isGetter &&
-            !(member as Procedure).isSetter);
-        typeFlowAnalysis.addRawCall(new DirectSelector(member));
-        return new Type.fromStatic(const DynamicType());
-      } else {
-        // Call via getter.
-        // TODO(alexmarkov): capture receiver type
-        assertx((invocation.selector.callKind == CallKind.Method) &&
-            (member is Procedure) &&
-            (member as Procedure).isGetter);
-        typeFlowAnalysis.addRawCall(
-            new DirectSelector(member, callKind: CallKind.PropertyGet));
-        return new Type.fromStatic(const DynamicType());
-      }
-    }
-  }
-
-  bool _isLegalNumberOfArguments(_Invocation invocation) {
-    final function = member.function;
-    assertx(function != null);
-
-    final int positionalArguments = invocation.args.positionalCount;
-
-    final int firstParamIndex = hasReceiverArg(member) ? 1 : 0;
-    final int requiredParameters =
-        firstParamIndex + function.requiredParameterCount;
-    if (positionalArguments < requiredParameters) {
-      return false;
-    }
-
-    final int positionalParameters =
-        firstParamIndex + function.positionalParameters.length;
-    if (positionalArguments > positionalParameters) {
-      return false;
-    }
-
-    return true;
-  }
-}
-
-class _FieldGetterInvocationHandler extends _MemberInvocationHandler {
+class _FieldValue extends _DependencyTracker {
+  final Field field;
   Type value;
+  _DirectInvocation _initializerInvocation;
 
-  _FieldGetterInvocationHandler(Field member) : super(member);
+  _FieldValue(this.field) {
+    if (field.initializer == null && _isDefaultValueOfFieldObservable()) {
+      value = new Type.nullable(const EmptyType());
+    } else {
+      value = const EmptyType();
+    }
+  }
 
-  Field get field => member as Field;
+  bool _isDefaultValueOfFieldObservable() {
+    if (field.isStatic) {
+      return true;
+    }
 
-  int get receiverCount => field.isStatic ? 0 : 1;
+    final enclosingClass = field.enclosingClass;
+    assertx(enclosingClass != null);
+
+    // Default value is not observable if every generative constructor
+    // is redirecting or initializes the field.
+    return !enclosingClass.constructors.every((Constructor constr) {
+      for (var initializer in constr.initializers) {
+        if ((initializer is RedirectingInitializer) ||
+            ((initializer is FieldInitializer) &&
+                (initializer.field == field))) {
+          return true;
+        }
+      }
+      return false;
+    });
+  }
 
   void ensureInitialized(TypeFlowAnalysis typeFlowAnalysis) {
-    if (value == null) {
-      // Evaluate initializer
-      final args = new Args<Type>(const <Type>[]);
-      value = getSummary(typeFlowAnalysis)
-          .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
+    if (field.initializer != null) {
+      if (_initializerInvocation == null) {
+        _initializerInvocation = typeFlowAnalysis._invocationsCache
+            .getInvocation(
+                new DirectSelector(field, callKind: CallKind.FieldInitializer),
+                new Args<Type>(const <Type>[]));
+      }
 
-      // TODO(alexmarkov): re-evaluate initializer on invalidations
+      // It may update the field value.
+      typeFlowAnalysis.workList.processInvocation(_initializerInvocation);
     }
   }
 
-  @override
-  Type handleInvocation(
-      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis) {
+  Type getValue(TypeFlowAnalysis typeFlowAnalysis) {
     ensureInitialized(typeFlowAnalysis);
+    addDependentInvocation(typeFlowAnalysis.currentInvocation);
+    return value;
+  }
 
-    if (invocation.selector.callKind == CallKind.PropertyGet) {
-      assertx(invocation.args.values.length == receiverCount);
-      assertx(invocation.args.names.isEmpty);
-      addDependentInvocation(typeFlowAnalysis.currentInvocation);
-      return value;
-    } else {
-      // Call via field.
-      assertx(invocation.selector.callKind == CallKind.Method);
-      return new Type.fromStatic(const DynamicType());
+  void setValue(Type newValue, TypeFlowAnalysis typeFlowAnalysis) {
+    final Type newType = value.union(newValue, typeFlowAnalysis.hierarchyCache);
+    if (newType != value) {
+      tracePrint("Set field $field value $newType");
+      invalidateDependentInvocations(typeFlowAnalysis.workList);
+      value = newType;
     }
   }
 
   @override
-  String toString() => "_GetF $member {value: $value}";
+  String toString() => "_FieldValue $field => $value";
 }
 
-class _FieldSetterInvocationHandler extends _MemberInvocationHandler {
-  final _FieldGetterInvocationHandler getter;
-
-  _FieldSetterInvocationHandler(this.getter) : super(getter.field);
-
-  Field get field => getter.field;
-  int get receiverCount => getter.receiverCount;
-
-  @override
-  Type handleInvocation(
-      _Invocation invocation, TypeFlowAnalysis typeFlowAnalysis) {
-    getter.ensureInitialized(typeFlowAnalysis);
-    assertx(invocation.selector.callKind == CallKind.PropertySet);
-
-    assertx(invocation.args.values.length == receiverCount + 1);
-    assertx(invocation.args.names.isEmpty);
-    final Type setterArg = invocation.args.values[receiverCount];
-
-    final Type newType =
-        getter.value.union(setterArg, typeFlowAnalysis.hierarchyCache);
-    if (newType != getter.value) {
-      getter.invalidateDependentInvocations(typeFlowAnalysis.workList);
-      getter.value = newType;
-    }
-    return new Type.empty();
-  }
-
-  @override
-  String toString() => "_SetF $member";
-}
-
-class _DynamicInvocationHandler extends _DependencyTracker {
+class _DynamicTargetSet extends _DependencyTracker {
   final DynamicSelector selector;
   final Set<Member> targets = new Set<Member>();
 
-  _DynamicInvocationHandler(this.selector);
+  _DynamicTargetSet(this.selector);
 }
 
 class _ClassData extends _DependencyTracker {
@@ -354,15 +544,8 @@
   /// targets of invocations may appear.
   /// It also means that there is no need to add dependencies on classes.
   bool _sealed = false;
-
-  final Map<Member, _ProcedureInvocationHandler> _procedureHandlers =
-      <Member, _ProcedureInvocationHandler>{};
-  final Map<Field, _FieldGetterInvocationHandler> _fieldGetterHandlers =
-      <Field, _FieldGetterInvocationHandler>{};
-  final Map<Field, _FieldSetterInvocationHandler> _fieldSetterHandlers =
-      <Field, _FieldSetterInvocationHandler>{};
-  final Map<DynamicSelector, _DynamicInvocationHandler> _dynamicHandlers =
-      <DynamicSelector, _DynamicInvocationHandler>{};
+  final Map<DynamicSelector, _DynamicTargetSet> _dynamicTargets =
+      <DynamicSelector, _DynamicTargetSet>{};
 
   _ClassHierarchyCache(this._typeFlowAnalysis, this.hierarchy);
 
@@ -392,8 +575,8 @@
         supertype.invalidateDependentInvocations(_typeFlowAnalysis.workList);
       }
 
-      for (var handler in _dynamicHandlers.values) {
-        _addDynamicTarget(cl, handler);
+      for (var targetSet in _dynamicTargets.values) {
+        _addDynamicTarget(cl, targetSet);
       }
     }
   }
@@ -490,65 +673,28 @@
     }
   }
 
-  _MemberInvocationHandler getMemberHandler(Member member, CallKind callKind) {
-    if (member is Field) {
-      if (callKind == CallKind.PropertySet) {
-        return _fieldSetterHandlers[member] ??=
-            new _FieldSetterInvocationHandler(
-                getMemberHandler(member, CallKind.PropertyGet));
-      } else {
-        return _fieldGetterHandlers[member] ??=
-            new _FieldGetterInvocationHandler(member);
-      }
-    } else {
-      return _procedureHandlers[member] ??=
-          new _ProcedureInvocationHandler(member);
-    }
-  }
-
-  bool isMemberUsed(Member member) {
-    if (member is Field) {
-      return _fieldGetterHandlers[member]?.value != null;
-    } else {
-      return _procedureHandlers[member]?._summary != null;
-    }
-  }
-
   Iterable<Member> getDynamicTargets(DynamicSelector selector) {
-    final handler =
-        (_dynamicHandlers[selector] ??= _createDynamicHandler(selector));
-    return handler.targets;
+    final targetSet =
+        (_dynamicTargets[selector] ??= _createDynamicTargetSet(selector));
+    return targetSet.targets;
   }
 
-  _DynamicInvocationHandler _createDynamicHandler(DynamicSelector selector) {
-    final handler = new _DynamicInvocationHandler(selector);
+  _DynamicTargetSet _createDynamicTargetSet(DynamicSelector selector) {
+    final targetSet = new _DynamicTargetSet(selector);
     for (Class c in allocatedClasses) {
-      _addDynamicTarget(c, handler);
+      _addDynamicTarget(c, targetSet);
     }
-    return handler;
+    return targetSet;
   }
 
-  void _addDynamicTarget(Class c, _DynamicInvocationHandler handler) {
+  void _addDynamicTarget(Class c, _DynamicTargetSet targetSet) {
     assertx(!_sealed);
-    final selector = handler.selector;
+    final selector = targetSet.selector;
     final member = hierarchy.getDispatchTarget(c, selector.name,
         setter: selector.isSetter);
     if (member != null) {
-      if (selector.memberAgreesToCallKind(member)) {
-        if (handler.targets.add(member)) {
-          handler.invalidateDependentInvocations(_typeFlowAnalysis.workList);
-        }
-      } else {
-        if (selector.callKind == CallKind.Method) {
-          // Call via getter/field.
-          // TODO(alexmarkov)
-          // assertx(false);
-        } else {
-          assertx(selector.callKind == CallKind.PropertyGet);
-          // Tear-off.
-          // TODO(alexmarkov)
-          // assertx(false);
-        }
+      if (targetSet.targets.add(member)) {
+        targetSet.invalidateDependentInvocations(_typeFlowAnalysis.workList);
       }
     }
   }
@@ -565,169 +711,11 @@
     classes.values.forEach((c) {
       buf.write("    ${c.dump()}\n");
     });
-    buf.write("  handlers:\n");
-    _procedureHandlers.values.forEach((handler) {
-      buf.write("    $handler\n");
-    });
-    _fieldGetterHandlers.values.forEach((handler) {
-      buf.write("    $handler\n");
-    });
-    _fieldSetterHandlers.values.forEach((handler) {
-      buf.write("    $handler\n");
-    });
     buf.write("}\n");
     return buf.toString();
   }
 }
 
-class _InvocationAnalyzer {
-  final TypeFlowAnalysis _typeFlowAnalysis;
-
-  _InvocationAnalyzer(this._typeFlowAnalysis);
-
-  Type processInvocation(_Invocation invocation) {
-    final Selector selector = invocation.selector;
-    Type result = null;
-
-    if (selector is DirectSelector) {
-      result = _processDirectInvocation(selector, invocation);
-    } else {
-      result = _processMultipleTargets(selector, invocation);
-    }
-
-    assertx(result != null);
-    invocation.result = result;
-
-    if (invocation.invalidatedResult != null) {
-      if (invocation.invalidatedResult != result) {
-        invocation.invalidateDependentInvocations(_typeFlowAnalysis.workList);
-      }
-      invocation.invalidatedResult = null;
-    }
-
-    return result;
-  }
-
-  Type _processDirectInvocation(
-      DirectSelector selector, _Invocation invocation) {
-    final handler = _typeFlowAnalysis.hierarchyCache
-        .getMemberHandler(selector.member, selector.callKind);
-    return handler.handleInvocation(invocation, _typeFlowAnalysis);
-  }
-
-  Type _processMultipleTargets(Selector selector, _Invocation invocation) {
-    Iterable<_MemberInvocationHandler> targets = _collectTargets(invocation);
-    Type result = new Type.empty();
-
-    if (targets.isEmpty) {
-      tracePrint("No targets...");
-    } else {
-      if (targets.length == 1) {
-        invocation.setMonomorphicTarget(targets.single.member);
-      } else {
-        invocation.setPolymorphic();
-      }
-      for (var handler in targets) {
-        Type type = handler.handleInvocation(invocation, _typeFlowAnalysis);
-        result = result.union(type, _typeFlowAnalysis.hierarchyCache);
-      }
-    }
-
-    // TODO(alexmarkov): handle closures more precisely
-    if ((selector is DynamicSelector) && (selector.name.name == "call")) {
-      tracePrint("Possible closure call, result is dynamic");
-      result = new Type.fromStatic(const DynamicType());
-    }
-
-    return result;
-  }
-
-  Iterable<_MemberInvocationHandler> _collectTargets(_Invocation invocation) {
-    assertx(invocation.selector is! DirectSelector);
-
-    Type receiver = invocation.args.receiver;
-    assertx(receiver != const EmptyType()); // should be filtered earlier
-
-    Set<Member> targets = new Set<Member>();
-    _collectForReceiverType(receiver, invocation.selector, targets);
-
-    return targets.map((Member member) => _typeFlowAnalysis.hierarchyCache
-        .getMemberHandler(member, invocation.selector.callKind));
-  }
-
-  void _collectForReceiverType(
-      Type receiver, Selector selector, Set<Member> targets) {
-    if (receiver is NullableType) {
-      _collectForConcreteType(
-          _typeFlowAnalysis.environment.nullType, selector, targets);
-      receiver = (receiver as NullableType).baseType;
-      assertx(receiver is! NullableType);
-    }
-
-    if (selector is InterfaceSelector) {
-      final staticReceiverType =
-          new Type.fromStatic(selector.member.enclosingClass.rawType);
-      receiver = receiver.intersection(
-          staticReceiverType, _typeFlowAnalysis.hierarchyCache);
-      assertx(receiver is! NullableType);
-
-      tracePrint("Narrowed down receiver type: $receiver");
-    }
-
-    if (receiver is ConeType) {
-      receiver = _typeFlowAnalysis.hierarchyCache
-          .specializeTypeCone((receiver as ConeType).dartType);
-    }
-
-    if (receiver is ConcreteType) {
-      _collectForConcreteType(receiver.dartType, selector, targets);
-    } else if (receiver is SetType) {
-      for (var type in receiver.types) {
-        _collectForConcreteType(type.dartType, selector, targets);
-      }
-    } else if (receiver is AnyType) {
-      _collectForSelector(selector, targets);
-    } else {
-      assertx(receiver is EmptyType);
-    }
-  }
-
-  void _collectForConcreteType(
-      DartType receiver, Selector selector, Set<Member> targets) {
-    if (receiver is FunctionType) {
-      assertx((selector is DynamicSelector) && (selector.name.name == "call"));
-      return;
-    }
-
-    assertx(receiver is InterfaceType); // TODO(alexmarkov)
-
-    Class class_ = (receiver as InterfaceType).classNode;
-
-    Member target = _typeFlowAnalysis.hierarchyCache.hierarchy
-        .getDispatchTarget(class_, selector.name, setter: selector.isSetter);
-
-    if (target != null) {
-      tracePrint("Found $target for concrete receiver type $receiver");
-      targets.add(target);
-    } else {
-      tracePrint("Target is not found for concrete receiver type $receiver");
-    }
-  }
-
-  void _collectForSelector(Selector selector, Set<Member> targets) {
-    if (selector is InterfaceSelector) {
-      // TODO(alexmarkov): support generic types and make sure inferred types
-      // are always same or better than static types.
-//      assertx(selector.member.enclosingClass ==
-//          _typeFlowAnalysis.environment.coreTypes.objectClass, details: selector);
-      selector = new DynamicSelector(selector.callKind, selector.name);
-    }
-
-    targets.addAll(_typeFlowAnalysis.hierarchyCache
-        .getDynamicTargets(selector as DynamicSelector));
-  }
-}
-
 class _WorkList {
   final TypeFlowAnalysis _typeFlowAnalysis;
   final Set<_Invocation> pending = new Set<_Invocation>();
@@ -783,8 +771,17 @@
     if (processing.add(invocation)) {
       callStack.add(invocation);
 
-      final Type result =
-          _typeFlowAnalysis.invocationAnalyzer.processInvocation(invocation);
+      final Type result = invocation.process(_typeFlowAnalysis);
+
+      assertx(result != null);
+      invocation.result = result;
+
+      if (invocation.invalidatedResult != null) {
+        if (invocation.invalidatedResult != result) {
+          invocation.invalidateDependentInvocations(this);
+        }
+        invocation.invalidatedResult = null;
+      }
 
       final last = callStack.removeLast();
       assertx(identical(last, invocation));
@@ -796,7 +793,11 @@
     } else {
       // Recursive invocation, approximate with static type.
       Statistics.recursiveInvocationsApproximated++;
-      return new Type.fromStatic(invocation.selector.staticReturnType);
+      final staticType =
+          new Type.fromStatic(invocation.selector.staticReturnType);
+      tracePrint(
+          "Approximated recursive invocation with static type $staticType");
+      return staticType;
     }
   }
 }
@@ -808,9 +809,11 @@
   _ClassHierarchyCache hierarchyCache;
   SummaryCollector summaryCollector;
   _InvocationsCache _invocationsCache = new _InvocationsCache();
-  _InvocationAnalyzer invocationAnalyzer;
   _WorkList workList;
 
+  final Map<Member, Summary> _summaries = <Member, Summary>{};
+  final Map<Field, _FieldValue> _fieldValues = <Field, _FieldValue>{};
+
   TypeFlowAnalysis(
       ClosedWorldClassHierarchy hierarchy, this.environment, this.libraryIndex,
       {List<String> entryPointsJSONFiles})
@@ -818,7 +821,6 @@
     hierarchyCache = new _ClassHierarchyCache(this, hierarchy);
     summaryCollector =
         new SummaryCollector(environment, this, nativeCodeOracle);
-    invocationAnalyzer = new _InvocationAnalyzer(this);
     workList = new _WorkList(this);
 
     if (entryPointsJSONFiles != null) {
@@ -828,12 +830,26 @@
 
   _Invocation get currentInvocation => workList.callStack.last;
 
+  Summary getSummary(Member member) {
+    return _summaries[member] ??= summaryCollector.createSummary(member);
+  }
+
+  _FieldValue getFieldValue(Field field) {
+    return _fieldValues[field] ??= new _FieldValue(field);
+  }
+
   void process() {
     workList.process();
     hierarchyCache.seal();
   }
 
-  bool isMemberUsed(Member member) => hierarchyCache.isMemberUsed(member);
+  bool isMemberUsed(Member member) {
+    if (member is Field) {
+      return _fieldValues.containsKey(member);
+    } else {
+      return _summaries.containsKey(member);
+    }
+  }
 
   Call callSite(TreeNode node) => summaryCollector.callSites[node];
 
@@ -850,7 +866,7 @@
       tracePrint("APPLY $invocation");
     }
 
-    if (callSite != null) {
+    if ((callSite != null) && (invocation is _DispatchableInvocation)) {
       invocation.addCallSite(callSite);
     }
 
diff --git a/pkg/vm/lib/transformations/type_flow/calls.dart b/pkg/vm/lib/transformations/type_flow/calls.dart
index 3fb41129..cb4d30d 100644
--- a/pkg/vm/lib/transformations/type_flow/calls.dart
+++ b/pkg/vm/lib/transformations/type_flow/calls.dart
@@ -16,6 +16,7 @@
   Method, // x.foo(..) or foo()
   PropertyGet, // ... x.foo ...
   PropertySet, // x.foo = ...
+  FieldInitializer,
 }
 
 /// [Selector] encapsulates the way of calling (at the call site).
@@ -52,6 +53,7 @@
       case CallKind.PropertyGet:
         return member.getterType;
       case CallKind.PropertySet:
+      case CallKind.FieldInitializer:
         return const BottomType();
     }
     return null;
@@ -68,6 +70,8 @@
         return (member is Field) || ((member is Procedure) && member.isGetter);
       case CallKind.PropertySet:
         return (member is Field) || ((member is Procedure) && member.isSetter);
+      case CallKind.FieldInitializer:
+        return (member is Field);
     }
     return false;
   }
@@ -80,6 +84,8 @@
         return 'get ';
       case CallKind.PropertySet:
         return 'set ';
+      case CallKind.FieldInitializer:
+        return 'init ';
     }
     return '';
   }
@@ -91,7 +97,9 @@
 
   DirectSelector(this.member, {CallKind callKind = CallKind.Method})
       : super(callKind) {
-    assertx(memberAgreesToCallKind(member), details: member);
+    assertx((callKind == CallKind.Method) ||
+        (callKind == CallKind.PropertyGet) ||
+        memberAgreesToCallKind(member));
   }
 
   @override
@@ -157,6 +165,12 @@
 
   Args(this.values, {this.names = const <String>[]});
 
+  Args.withReceiver(Args<T> args, T receiver)
+      : values = new List.from(args.values),
+        names = args.names {
+    values[0] = receiver;
+  }
+
   int get positionalCount => values.length - names.length;
 
   // TODO(alexmarkov): get rid of this method
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 911d7dd..8290f25 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -8,6 +8,7 @@
 import 'dart:core' hide Type;
 
 import 'package:kernel/ast.dart' hide Statement, StatementVisitor;
+import 'package:kernel/ast.dart' as ast show Statement, StatementVisitor;
 import 'package:kernel/type_environment.dart' show TypeEnvironment;
 
 import 'calls.dart';
@@ -70,7 +71,10 @@
         }
 
         if (st is Join) {
-          if (st.values.length == 1) {
+          final n = st.values.length;
+          if (n == 0) {
+            return const EmptyType();
+          } else if (n == 1) {
             return st.values.single;
           }
         }
@@ -130,6 +134,90 @@
   }
 }
 
+/// Detects whether the control flow can pass through the function body and
+/// reach its end. Returns 'false' if it can prove that control never reaches
+/// the end. Otherwise, conservatively returns 'true'.
+class _FallthroughDetector extends ast.StatementVisitor<bool> {
+  // This fallthrough detector does not build control flow graph nor detect if
+  // a function has unreachable code. For simplicity, it assumes that all
+  // statements are reachable, so it just inspects the last statements of a
+  // function and checks if control can fall through them or not.
+
+  bool controlCanFallThrough(FunctionNode function) {
+    return function.body.accept(this);
+  }
+
+  @override
+  bool defaultStatement(ast.Statement node) =>
+      throw "Unexpected statement of type ${node.runtimeType}";
+
+  @override
+  bool visitExpressionStatement(ExpressionStatement node) =>
+      (node.expression is! Throw) && (node.expression is! Rethrow);
+
+  @override
+  bool visitBlock(Block node) =>
+      node.statements.isEmpty || node.statements.last.accept(this);
+
+  @override
+  bool visitEmptyStatement(EmptyStatement node) => true;
+
+  @override
+  bool visitAssertStatement(AssertStatement node) => true;
+
+  @override
+  bool visitLabeledStatement(LabeledStatement node) => true;
+
+  @override
+  bool visitBreakStatement(BreakStatement node) => false;
+
+  @override
+  bool visitWhileStatement(WhileStatement node) => true;
+
+  @override
+  bool visitDoStatement(DoStatement node) => true;
+
+  @override
+  bool visitForStatement(ForStatement node) => true;
+
+  @override
+  bool visitForInStatement(ForInStatement node) => true;
+
+  @override
+  bool visitSwitchStatement(SwitchStatement node) => true;
+
+  @override
+  bool visitContinueSwitchStatement(ContinueSwitchStatement node) => false;
+
+  @override
+  bool visitIfStatement(IfStatement node) =>
+      node.then == null ||
+      node.otherwise == null ||
+      node.then.accept(this) ||
+      node.otherwise.accept(this);
+
+  @override
+  bool visitReturnStatement(ReturnStatement node) => false;
+
+  @override
+  bool visitTryCatch(TryCatch node) =>
+      node.body.accept(this) ||
+      node.catches.any((Catch catch_) => catch_.body.accept(this));
+
+  @override
+  bool visitTryFinally(TryFinally node) =>
+      node.body.accept(this) && node.finalizer.accept(this);
+
+  @override
+  bool visitYieldStatement(YieldStatement node) => true;
+
+  @override
+  bool visitVariableDeclaration(VariableDeclaration node) => true;
+
+  @override
+  bool visitFunctionDeclaration(FunctionDeclaration node) => true;
+}
+
 /// Create a type flow summary for a member from the kernel AST.
 class SummaryCollector extends RecursiveVisitor<TypeExpr> {
   final TypeEnvironment _environment;
@@ -137,6 +225,7 @@
   final NativeCodeOracle _nativeCodeOracle;
 
   final Map<TreeNode, Call> callSites = <TreeNode, Call>{};
+  final _FallthroughDetector _fallthroughDetector = new _FallthroughDetector();
 
   Summary _summary;
   Map<VariableDeclaration, Join> _variables;
@@ -157,15 +246,8 @@
     if (member is Field) {
       _summary = new Summary();
 
-      if (member.initializer != null) {
-        _summary.result = _visit(member.initializer);
-      } else {
-        if (_isDefaultValueOfFieldObservable(member)) {
-          _summary.result = new Type.nullable(new Type.empty());
-        } else {
-          _summary.result = new Type.empty();
-        }
-      }
+      assertx(member.initializer != null);
+      _summary.result = _visit(member.initializer);
     } else {
       FunctionNode function = member.function;
 
@@ -205,11 +287,9 @@
       if (member is Constructor) {
         // Make sure instance field initializers are visited.
         for (var f in member.enclosingClass.members) {
-          if ((f is Field) && (!f.isStatic) && (f.initializer != null)) {
-            // Implicitly evaluates and includes field initializer.
-            // TODO(alexmarkov): Consider including field initializer code into constructors.
+          if ((f is Field) && !f.isStatic && (f.initializer != null)) {
             _entryPointsListener.addRawCall(
-                new DirectSelector(f, callKind: CallKind.PropertyGet));
+                new DirectSelector(f, callKind: CallKind.FieldInitializer));
           }
         }
         member.initializers.forEach(_visit);
@@ -218,16 +298,15 @@
       if (function.body == null) {
         Type type = _nativeCodeOracle.handleNativeProcedure(
             member, _entryPointsListener);
-        if (_returnValue != null) {
-          _returnValue.values.add(type);
-        }
+        _returnValue.values.add(type);
       } else {
         _visit(function.body);
+
+        if (_fallthroughDetector.controlCanFallThrough(function)) {
+          _returnValue.values.add(_nullType);
+        }
       }
 
-      if (_returnValue.values.isEmpty) {
-        _returnValue.values.add(_nullType);
-      }
       _summary.result = _returnValue;
       _environment.thisType = null;
     }
@@ -253,7 +332,8 @@
 
     List<Type> args = <Type>[];
 
-    if (hasReceiverArg(member)) {
+    if (hasReceiverArg(member) &&
+        (selector.callKind != CallKind.FieldInitializer)) {
       assertx(member.enclosingClass != null);
       Type receiver = new Type.cone(member.enclosingClass.rawType);
       args.add(receiver);
@@ -279,33 +359,14 @@
       case CallKind.PropertySet:
         args.add(new Type.fromStatic(member.setterType));
         break;
+
+      case CallKind.FieldInitializer:
+        break;
     }
 
     return new Args<Type>(args);
   }
 
-  bool _isDefaultValueOfFieldObservable(Field field) {
-    if (field.isStatic) {
-      return true;
-    }
-
-    final enclosingClass = field.enclosingClass;
-    assertx(enclosingClass != null);
-
-    // Default value is not ebservable if every generative constructor
-    // is redirecting or initializes the field.
-    return !enclosingClass.constructors.every((Constructor constr) {
-      for (var initializer in constr.initializers) {
-        if ((initializer is RedirectingInitializer) ||
-            ((initializer is FieldInitializer) &&
-                (initializer.field == field))) {
-          return true;
-        }
-      }
-      return false;
-    });
-  }
-
   TypeExpr _visit(TreeNode node) => node.accept(this);
 
   Args<TypeExpr> _visitArguments(TypeExpr receiver, Arguments arguments) {
@@ -349,6 +410,7 @@
     return v;
   }
 
+  // TODO(alexmarkov): Avoid declaring variables with static types.
   void _declareVariableWithStaticType(VariableDeclaration decl) {
     Join v = _declareVariable(decl);
     v.values.add(new Type.fromStatic(v.staticType));
@@ -486,6 +548,8 @@
           new DirectSelector(target, callKind: CallKind.PropertyGet), args);
     } else {
       // Tear-off.
+      // TODO(alexmarkov): Consider cleaning up this code as it duplicates
+      // processing in DirectInvocation.
       // TODO(alexmarkov): capture receiver type
       _entryPointsListener.addRawCall(new DirectSelector(target));
       return _staticType(node);
@@ -648,6 +712,8 @@
     } else {
       if ((target is Field) || ((target is Procedure) && target.isGetter)) {
         // Call via field.
+        // TODO(alexmarkov): Consider cleaning up this code as it duplicates
+        // processing in DirectInvocation.
         _makeCall(
             node,
             new DirectSelector(target, callKind: CallKind.PropertyGet),
@@ -675,6 +741,8 @@
             new DirectSelector(target, callKind: CallKind.PropertyGet), args);
       } else {
         // Tear-off.
+        // TODO(alexmarkov): Consider cleaning up this code as it duplicates
+        // processing in DirectInvocation.
         // TODO(alexmarkov): capture receiver type
         _entryPointsListener.addRawCall(new DirectSelector(target));
         return _staticType(node);
@@ -1046,7 +1114,7 @@
 
   @override
   defaultMember(Member m) {
-    if (!m.isAbstract) {
+    if (!m.isAbstract && !(m is Field && m.initializer == null)) {
       _summaryColector.createSummary(m);
     }
   }
diff --git a/pkg/vm/lib/transformations/type_flow/types.dart b/pkg/vm/lib/transformations/type_flow/types.dart
index d9d9a68..4865e16 100644
--- a/pkg/vm/lib/transformations/type_flow/types.dart
+++ b/pkg/vm/lib/transformations/type_flow/types.dart
@@ -55,6 +55,7 @@
 /// Base class for types inferred by the type flow analysis.
 /// [Type] describes a specific set of values (Dart instances) and does not
 /// directly correspond to a Dart type.
+/// TODO(alexmarkov): consider detaching Type hierarchy from TypeExpr/Statement.
 abstract class Type extends TypeExpr {
   const Type();
 
diff --git a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
index 9e051d2..78fd141 100644
--- a/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
+++ b/pkg/vm/test/transformations/type_flow/summary_collector_test.dart
@@ -31,7 +31,8 @@
 
   @override
   defaultMember(Member member) {
-    if (!member.isAbstract) {
+    if (!member.isAbstract &&
+        !((member is Field) && (member.initializer == null))) {
       _buf.writeln("------------ $member ------------");
       _buf.writeln(_summaryColector.createSummary(member));
     }
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart
new file mode 100644
index 0000000..8db45c9
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart
@@ -0,0 +1,186 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class T {}
+
+empty1() {}
+void empty2() {}
+dynamic empty3() {} // ignore: missing_return
+Object empty4() {} // ignore: missing_return
+
+Object return1() {
+  return new T();
+}
+
+void return2(int i) {
+  return return2(i - 1);
+}
+
+return3() => new T();
+
+expr1() {
+  new T();
+}
+
+expr2(bool c) {
+  if (c) {
+    return new T();
+  }
+  new T();
+}
+
+expr3(bool c, Object x) {
+  if (c) {
+    return new T();
+  }
+  x.toString();
+}
+
+throw1(bool c, Object x) {
+  Object y = x;
+  throw y;
+}
+
+throw2(bool c, Object x) {
+  if (c) {
+    return new T();
+  }
+  throw 'Error!';
+}
+
+loop1(bool c, Object x) {
+  for (;;) {}
+}
+
+loop2(bool c, Object x) {
+  if (c) {
+    return new T();
+  }
+  do {} while (false);
+}
+
+loop3(bool c, Object x) {
+  if (c) {
+    return new T();
+  }
+  L:
+  for (;;) {
+    break L;
+  }
+}
+
+switch_(bool c, int i) {
+  if (c) {
+    return new T();
+  }
+  switch (i) {
+    case 1:
+      continue L;
+    L:
+    case 2:
+      break;
+  }
+}
+
+if1(bool c) {
+  if (c) {
+    return new T();
+  } else {
+    throw 'Error!';
+  }
+}
+
+if2(bool c) {
+  if (c) {
+    return new T();
+  } else {}
+}
+
+if3(bool c) {
+  if (c) {} else {
+    throw 'Error!';
+  }
+}
+
+if4(bool c) {
+  if (c) {} else {}
+}
+
+void if5(bool c) {
+  if (c) {
+    return if5(c);
+  } else {
+    L:
+    for (;;) {
+      while (true) {
+        break L;
+        return if5(!c);
+      }
+    }
+    if (!c) {
+      throw 'Error!';
+    }
+  }
+}
+
+label1(bool c) {
+  L:
+  {
+    if (c) {
+      return new T();
+    }
+    break L;
+  }
+}
+
+try1(bool c) {
+  if (c) {
+    return new T();
+  }
+  try {} on ArgumentError {}
+}
+
+try2() {
+  try {
+    return new T();
+  } on ArgumentError {}
+}
+
+try3() {
+  try {
+    return new T();
+  } on ArgumentError {
+    throw 'Error!';
+  }
+}
+
+try4(bool c) {
+  if (c) {
+    return new T();
+  }
+  try {} finally {}
+}
+
+try5() {
+  try {} finally {
+    return new T();
+  }
+}
+
+try6() {
+  try {
+    return new T();
+  } finally {}
+}
+
+try7(bool c) {
+  if (c) {
+    return new T();
+  }
+  try {} on ArgumentError {} finally {
+    throw 'Error!';
+  }
+}
+
+main() {}
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect
new file mode 100644
index 0000000..a34ced5
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/implicit_return_null.dart.expect
@@ -0,0 +1,130 @@
+------------ #lib::T:: ------------
+%this = _Parameter #0 [#lib::T]
+t1 = _Call direct [dart.core::Object::] (%this)
+RESULT: _T {}?
+------------ #lib::empty1 ------------
+
+RESULT: _T {}?
+------------ #lib::empty2 ------------
+
+RESULT: _T {}?
+------------ #lib::empty3 ------------
+
+RESULT: _T {}?
+------------ #lib::empty4 ------------
+
+RESULT: _T {}?
+------------ #lib::return1 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::return2 ------------
+%i = _Parameter #0 [dart.core::int]
+t1* = _Call [dart.core::num::-] (%i, _T (dart.core::int)+)
+t2* = _Call direct [#lib::return2] (t1)
+RESULT: t2
+------------ #lib::return3 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::expr1 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T {}?
+------------ #lib::expr2 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+t2 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::expr3 ------------
+%c = _Parameter #0 [dart.core::bool]
+%x = _Parameter #1 [dart.core::Object]
+t2 = _Call direct [#lib::T::] (_T (#lib::T))
+t3 = _Call [dart.core::Object::toString] (%x)
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::throw1 ------------
+%c = _Parameter #0 [dart.core::bool]
+%x = _Parameter #1 [dart.core::Object]
+RESULT: _T {}
+------------ #lib::throw2 ------------
+%c = _Parameter #0 [dart.core::bool]
+%x = _Parameter #1 [dart.core::Object]
+t2 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::loop1 ------------
+%c = _Parameter #0 [dart.core::bool]
+%x = _Parameter #1 [dart.core::Object]
+RESULT: _T {}?
+------------ #lib::loop2 ------------
+%c = _Parameter #0 [dart.core::bool]
+%x = _Parameter #1 [dart.core::Object]
+t2 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::loop3 ------------
+%c = _Parameter #0 [dart.core::bool]
+%x = _Parameter #1 [dart.core::Object]
+t2 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::switch_ ------------
+%c = _Parameter #0 [dart.core::bool]
+%i = _Parameter #1 [dart.core::int]
+t2 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::if1 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::if2 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::if3 ------------
+%c = _Parameter #0 [dart.core::bool]
+RESULT: _T {}?
+------------ #lib::if4 ------------
+%c = _Parameter #0 [dart.core::bool]
+RESULT: _T {}?
+------------ #lib::if5 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1* = _Call direct [#lib::if5] (%c)
+t2* = _Call direct [#lib::if5] (_T (dart.core::bool)+)
+%result = _Join [void] (t1, t2, _T {}?)
+RESULT: %result
+------------ #lib::label1 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::try1 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::try2 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::try3 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::try4 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+%result = _Join [dynamic] (_T (#lib::T), _T {}?)
+RESULT: %result
+------------ #lib::try5 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::try6 ------------
+t0 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::try7 ------------
+%c = _Parameter #0 [dart.core::bool]
+t1 = _Call direct [#lib::T::] (_T (#lib::T))
+RESULT: _T (#lib::T)
+------------ #lib::main ------------
+
+RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
index d334286..c25357b 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
@@ -45,6 +45,3 @@
 ------------ #lib::main ------------
 
 RESULT: _T {}?
------------- #lib::someStatic ------------
-
-RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
index 8b353eb..b8520e9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
@@ -3,32 +3,32 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → core::int;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → core::int
     return 1;
 }
 class C extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → core::int
     return 2;
 }
 class D extends self::C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::C::•()
     ;
 }
 class E extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method toString() → core::String
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect
index 936910d..f9d4af3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/hello.dart.expect
@@ -3,7 +3,7 @@
 import "dart:core" as core;
 
 class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart
new file mode 100644
index 0000000..c4e949c
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart
@@ -0,0 +1,64 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class T1 {}
+
+class T2 {}
+
+abstract class A {
+  Object foo();
+}
+
+class B implements A {
+  Object foo() => new T1();
+}
+
+class C implements A {
+  Object foo() => new T2();
+}
+
+Function unknown;
+
+getDynamic() => unknown.call();
+
+Object getValue() {
+  A aa = getDynamic();
+  return aa.foo();
+}
+
+Object field1 = getValue();
+
+class DeepCaller1 {
+  barL1() => barL2();
+  barL2() => barL3();
+  barL3() => barL4();
+  barL4() => field1;
+}
+
+class D {
+  Object field2 = getValue();
+}
+
+class DeepCaller2 {
+  barL1(D dd) => barL2(dd);
+  barL2(D dd) => barL3(dd);
+  barL3(D dd) => barL4(dd);
+  barL4(D dd) => dd.field2;
+}
+
+use1(DeepCaller1 x) => x.barL1();
+use2(DeepCaller2 x) => x.barL1(new D());
+
+createC() {
+  new C();
+}
+
+main(List<String> args) {
+  new B();
+
+  use1(new DeepCaller1());
+  use2(new DeepCaller2());
+
+  createC();
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
new file mode 100644
index 0000000..237f42e
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -0,0 +1,87 @@
+library #lib;
+import self as self;
+import "dart:core" as core;
+
+class T1 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class T2 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    throw "TFA Error: #lib::A::";
+  abstract method foo() → core::Object;
+}
+class B extends core::Object implements self::A {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → core::Object
+    return new self::T1::•();
+}
+class C extends core::Object implements self::A {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo() → core::Object
+    return new self::T2::•();
+}
+class DeepCaller1 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method barL1() → dynamic
+    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL2] [@vm.inferred-type.metadata=!] this.{self::DeepCaller1::barL2}();
+  method barL2() → dynamic
+    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL3] [@vm.inferred-type.metadata=!] this.{self::DeepCaller1::barL3}();
+  method barL3() → dynamic
+    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL4] [@vm.inferred-type.metadata=!] this.{self::DeepCaller1::barL4}();
+  method barL4() → dynamic
+    return [@vm.inferred-type.metadata=!] self::field1;
+}
+class D extends core::Object {
+  field core::Object field2 = [@vm.inferred-type.metadata=!] self::getValue();
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+class DeepCaller2 extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method barL1(self::D dd) → dynamic
+    return [@vm.direct-call.metadata=#lib::DeepCaller2::barL2] [@vm.inferred-type.metadata=!] this.{self::DeepCaller2::barL2}(dd);
+  method barL2(self::D dd) → dynamic
+    return [@vm.direct-call.metadata=#lib::DeepCaller2::barL3] [@vm.inferred-type.metadata=!] this.{self::DeepCaller2::barL3}(dd);
+  method barL3(self::D dd) → dynamic
+    return [@vm.direct-call.metadata=#lib::DeepCaller2::barL4] [@vm.inferred-type.metadata=!] this.{self::DeepCaller2::barL4}(dd);
+  method barL4(self::D dd) → dynamic
+    return [@vm.direct-call.metadata=#lib::D::field2] [@vm.inferred-type.metadata=!] dd.{self::D::field2};
+}
+static field core::Function unknown;
+static field core::Object field1 = [@vm.inferred-type.metadata=!] self::getValue();
+static method getDynamic() → dynamic
+  return self::unknown.call();
+static method getValue() → core::Object {
+  self::A aa = self::getDynamic() as{TypeError} self::A;
+  return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
+}
+static method use1(self::DeepCaller1 x) → dynamic
+  return [@vm.direct-call.metadata=#lib::DeepCaller1::barL1] [@vm.inferred-type.metadata=!] x.{self::DeepCaller1::barL1}();
+static method use2(self::DeepCaller2 x) → dynamic
+  return [@vm.direct-call.metadata=#lib::DeepCaller2::barL1] [@vm.inferred-type.metadata=!] x.{self::DeepCaller2::barL1}(new self::D::•());
+static method createC() → dynamic {
+  new self::C::•();
+}
+static method main(core::List<core::String> args) → dynamic {
+  new self::B::•();
+  self::use1(new self::DeepCaller1::•());
+  self::use2(new self::DeepCaller2::•());
+  self::createC();
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
index 72ac45b..344b2fb 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
@@ -3,37 +3,37 @@
 import "dart:core" as core;
 
 class T1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class T2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::T2::";
 }
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → dynamic;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → dynamic
     return new self::T1::•();
 }
 class C extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
   method foo() → dynamic
     throw "TFA Error: #lib::C::foo";
 }
 class Intermediate extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method bar(self::A aa) → dynamic
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
index 2559e906..79b33b7 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
@@ -3,52 +3,52 @@
 import "dart:core" as core;
 
 class T1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class T2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → dynamic;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → dynamic
     return new self::T1::•();
 }
 abstract class C extends core::Object implements self::B {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
 }
 class D extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 abstract class _D&C extends self::D implements self::C {
-  constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
 }
 class E extends self::_D&C {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::D::•()
     ;
   method foo() → dynamic
     return new self::T2::•();
 }
 class Intermediate extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method bar(self::A aa) → dynamic
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
index d3ac445..eef7a9d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
@@ -3,24 +3,24 @@
 import "dart:core" as core;
 
 class T1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class T2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class A extends core::Object {
   field dynamic field1 = new self::T1::•();
   field dynamic field2 = new self::T1::•();
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
 }
 class DeepCaller1 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method barL1(self::A aa) → dynamic
@@ -33,7 +33,7 @@
     return [@vm.direct-call.metadata=#lib::A::field1??] [@vm.inferred-type.metadata=#lib::T1] aa.{self::A::field1};
 }
 class DeepCaller2 extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method barL1(self::A aa) → dynamic
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart
new file mode 100644
index 0000000..2d22fe6
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+A aa = new B();
+
+dynamic knownResult() => new B();
+
+abstract class A {
+  int foo();
+}
+
+class B extends A {
+  int foo() => 1 + knownResult().foo(); // Should have metadata.
+}
+
+class C implements A {
+  int foo() => 2 + knownResult().foo(); // Should be unreachable.
+}
+
+class TearOffDynamicMethod {
+  dynamic bazz;
+  TearOffDynamicMethod(dynamic arg) : bazz = arg.foo {
+    bazz();
+  }
+}
+
+main(List<String> args) {
+  Function closure = () => new B();
+  new TearOffDynamicMethod(closure.call());
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
new file mode 100644
index 0000000..186a0a3
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -0,0 +1,38 @@
+library #lib;
+import self as self;
+import "dart:core" as core;
+
+abstract class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  abstract method foo() → core::int;
+}
+class B extends self::A {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+  method foo() → core::int
+    return 1.{core::num::+}([@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
+}
+class C extends core::Object implements self::A {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    throw "TFA Error: #lib::C::";
+  method foo() → core::int
+    throw "TFA Error: #lib::C::foo";
+}
+class TearOffDynamicMethod extends core::Object {
+  field dynamic bazz;
+  constructor •(dynamic arg) → void
+    : self::TearOffDynamicMethod::bazz = arg.foo, super core::Object::•() {
+    this.{self::TearOffDynamicMethod::bazz}();
+  }
+}
+static field self::A aa = throw "TFA Error: #lib::aa";
+static method knownResult() → dynamic
+  return new self::B::•();
+static method main(core::List<core::String> args) → dynamic {
+  core::Function closure = () → self::B => new self::B::•();
+  new self::TearOffDynamicMethod::•(closure.call());
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
index 65f9cd2..d00fa90 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_interface_method.dart.expect
@@ -3,20 +3,20 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → core::int;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → core::int
     return 1.{core::num::+}([@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
 }
 class C extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
   method foo() → core::int
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index 4f68c9e..8a28d7c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -3,27 +3,27 @@
 import "dart:core" as core;
 
 abstract class A extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   abstract method foo() → core::int;
 }
 class B extends self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::A::•()
     ;
   method foo() → core::int
     return 1.{core::num::+}([@vm.inferred-type.metadata=#lib::B] self::knownResult().foo() as{TypeError} core::num) as{TypeError} core::int;
 }
 class C extends core::Object implements self::A {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     throw "TFA Error: #lib::C::";
   method foo() → core::int
     throw "TFA Error: #lib::C::foo";
 }
 class Base extends core::Object {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super core::Object::•()
     ;
   method foo() → core::int
@@ -32,7 +32,7 @@
     return x.call() as{TypeError} core::int;
 }
 class TearOffSuperMethod extends self::Base {
-  default constructor •() → void
+  synthetic constructor •() → void
     : super self::Base::•()
     ;
   method foo() → core::int
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index c5a2e15..7ab6bcb 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -60,8 +60,7 @@
       kernel_binaries_path_(NULL),
       platform_binary_filename_(NULL),
       kernel_platform_(NULL),
-      application_kernel_binary_(NULL),
-      kernel_file_specified_(false) {}
+      application_kernel_binary_(NULL) {}
 
 DFE::~DFE() {
   if (frontend_filename_ != NULL) {
@@ -134,6 +133,9 @@
 }
 
 const char* DFE::GetPlatformBinaryFilename() {
+  if (kernel_binaries_path_ == NULL) {
+    return NULL;
+  }
   if (platform_binary_filename_ == NULL) {
     platform_binary_filename_ = OS::SCreate(
         /*zone=*/NULL, "%s%s%s", kernel_binaries_path_, File::PathSeparator(),
@@ -160,8 +162,13 @@
     // recompile the script.
     // TODO(aam): When Frontend is ready, VM should be passing vm_outline.dill
     // instead of vm_platform.dill to Frontend for compilation.
+    const char* platform_kernel = GetPlatformBinaryFilename();
+    if (platform_kernel == NULL) {
+      return Dart_NewApiError(
+          "Path to platfrom kernel not known; did you miss --kernel-binaries?");
+    }
     Dart_KernelCompilationResult kresult =
-        Dart_CompileToKernel(url_string, GetPlatformBinaryFilename());
+        Dart_CompileToKernel(url_string, platform_kernel);
     if (kresult.status != Dart_KernelCompilationStatus_Ok) {
       return Dart_NewApiError(kresult.error);
     }
@@ -222,8 +229,12 @@
   const char* sanitized_uri = script_uri;
 #endif
 
+  const char* platform_kernel = GetPlatformBinaryFilename();
+  if (platform_kernel == NULL) {
+    return NULL;
+  }
   Dart_KernelCompilationResult result =
-      Dart_CompileToKernel(sanitized_uri, GetPlatformBinaryFilename());
+      Dart_CompileToKernel(sanitized_uri, platform_kernel);
   switch (result.status) {
     case Dart_KernelCompilationStatus_Ok:
       return Dart_ReadKernelBinary(result.kernel, result.kernel_size,
diff --git a/runtime/bin/dfe.h b/runtime/bin/dfe.h
index fb3258a..2d13b92 100644
--- a/runtime/bin/dfe.h
+++ b/runtime/bin/dfe.h
@@ -45,9 +45,6 @@
     application_kernel_binary_ = application_kernel_binary;
   }
 
-  bool kernel_file_specified() const { return kernel_file_specified_; }
-  void set_kernel_file_specified(bool value) { kernel_file_specified_ = value; }
-
   // Method to read a kernel file into a kernel program blob.
   // If the specified script [url] is not a kernel IR, compile it first using
   // DFE and then read the resulting kernel file into a kernel program blob.
@@ -94,8 +91,6 @@
   // Loaded instead of platform if --kernel-binaries is not specified.
   void* application_kernel_binary_;
 
-  bool kernel_file_specified_;  // Kernel file was specified on the cmd line.
-
   static void* kKernelServiceProgram;
 
   DISALLOW_COPY_AND_ASSIGN(DFE);
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index a4d7490..978db7a 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -559,9 +559,8 @@
 }
 
 void FUNCTION_NAME(File_OpenStdio)(Dart_NativeArguments args) {
-  int64_t fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
-  ASSERT((fd == STDIN_FILENO) || (fd == STDOUT_FILENO) ||
-         (fd == STDERR_FILENO));
+  const int64_t fd =
+      DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
   File* file = File::OpenStdio(static_cast<int>(fd));
   Dart_SetIntegerReturnValue(args, reinterpret_cast<intptr_t>(file));
 }
diff --git a/runtime/bin/file_android.cc b/runtime/bin/file_android.cc
index 06fdea4..fdaab8c 100644
--- a/runtime/bin/file_android.cc
+++ b/runtime/bin/file_android.cc
@@ -237,7 +237,7 @@
 }
 
 File* File::OpenStdio(int fd) {
-  return ((fd < 0) || (2 < fd)) ? NULL : new File(new FileHandle(fd));
+  return new File(new FileHandle(fd));
 }
 
 bool File::Exists(Namespace* namespc, const char* name) {
@@ -626,7 +626,6 @@
 }
 
 File::StdioHandleType File::GetStdioHandleType(int fd) {
-  ASSERT((0 <= fd) && (fd <= 2));
   struct stat buf;
   int result = fstat(fd, &buf);
   if (result == -1) {
diff --git a/runtime/bin/file_fuchsia.cc b/runtime/bin/file_fuchsia.cc
index 3891fb0..929d5e1 100644
--- a/runtime/bin/file_fuchsia.cc
+++ b/runtime/bin/file_fuchsia.cc
@@ -216,7 +216,7 @@
 }
 
 File* File::OpenStdio(int fd) {
-  return ((fd < 0) || (2 < fd)) ? NULL : new File(new FileHandle(fd));
+  return new File(new FileHandle(fd));
 }
 
 bool File::Exists(Namespace* namespc, const char* name) {
@@ -561,7 +561,6 @@
 }
 
 File::StdioHandleType File::GetStdioHandleType(int fd) {
-  ASSERT((0 <= fd) && (fd <= 2));
   struct stat64 buf;
   int result = TEMP_FAILURE_RETRY(fstat64(fd, &buf));
   if (result == -1) {
diff --git a/runtime/bin/file_linux.cc b/runtime/bin/file_linux.cc
index 70831d3..90098c7 100644
--- a/runtime/bin/file_linux.cc
+++ b/runtime/bin/file_linux.cc
@@ -236,7 +236,7 @@
 }
 
 File* File::OpenStdio(int fd) {
-  return ((fd < 0) || (2 < fd)) ? NULL : new File(new FileHandle(fd));
+  return new File(new FileHandle(fd));
 }
 
 bool File::Exists(Namespace* namespc, const char* name) {
@@ -619,7 +619,6 @@
 }
 
 File::StdioHandleType File::GetStdioHandleType(int fd) {
-  ASSERT((0 <= fd) && (fd <= 2));
   struct stat64 buf;
   int result = TEMP_FAILURE_RETRY(fstat64(fd, &buf));
   if (result == -1) {
diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
index 24d2016..6587527 100644
--- a/runtime/bin/file_macos.cc
+++ b/runtime/bin/file_macos.cc
@@ -236,7 +236,7 @@
 }
 
 File* File::OpenStdio(int fd) {
-  return ((fd < 0) || (2 < fd)) ? NULL : new File(new FileHandle(fd));
+  return new File(new FileHandle(fd));
 }
 
 bool File::Exists(Namespace* namespc, const char* name) {
@@ -511,7 +511,6 @@
 }
 
 File::StdioHandleType File::GetStdioHandleType(int fd) {
-  ASSERT((0 <= fd) && (fd <= 2));
   struct stat buf;
   int result = fstat(fd, &buf);
   if (result == -1) {
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index c207088..787bac0 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -148,12 +148,12 @@
   V(Socket_SetOption, 4)                                                       \
   V(Socket_SetSocketId, 2)                                                     \
   V(Socket_WriteList, 4)                                                       \
-  V(Stdin_ReadByte, 0)                                                         \
-  V(Stdin_GetEchoMode, 0)                                                      \
-  V(Stdin_SetEchoMode, 1)                                                      \
-  V(Stdin_GetLineMode, 0)                                                      \
-  V(Stdin_SetLineMode, 1)                                                      \
-  V(Stdin_AnsiSupported, 0)                                                    \
+  V(Stdin_ReadByte, 1)                                                         \
+  V(Stdin_GetEchoMode, 1)                                                      \
+  V(Stdin_SetEchoMode, 2)                                                      \
+  V(Stdin_GetLineMode, 1)                                                      \
+  V(Stdin_SetLineMode, 2)                                                      \
+  V(Stdin_AnsiSupported, 1)                                                    \
   V(Stdout_GetTerminalSize, 1)                                                 \
   V(Stdout_AnsiSupported, 1)                                                   \
   V(StringToSystemEncoding, 1)                                                 \
diff --git a/runtime/bin/isolate_data.cc b/runtime/bin/isolate_data.cc
index a91c228..796509a 100644
--- a/runtime/bin/isolate_data.cc
+++ b/runtime/bin/isolate_data.cc
@@ -21,7 +21,8 @@
       builtin_lib_(NULL),
       loader_(NULL),
       app_snapshot_(app_snapshot),
-      dependencies_(NULL) {
+      dependencies_(NULL),
+      create_isolate_from_kernel_(false) {
   if (package_root != NULL) {
     ASSERT(packages_file == NULL);
     this->package_root = strdup(package_root);
diff --git a/runtime/bin/isolate_data.h b/runtime/bin/isolate_data.h
index d1b2b94..ed78806 100644
--- a/runtime/bin/isolate_data.h
+++ b/runtime/bin/isolate_data.h
@@ -78,11 +78,19 @@
 
   void OnIsolateShutdown();
 
+  void set_create_isolate_from_kernel(bool value) {
+    create_isolate_from_kernel_ = value;
+  }
+  bool create_isolate_from_kernel() const {
+    return create_isolate_from_kernel_;
+  }
+
  private:
   Dart_Handle builtin_lib_;
   Loader* loader_;
   AppSnapshot* app_snapshot_;
   MallocGrowableArray<char*>* dependencies_;
+  bool create_isolate_from_kernel_;
 
   DISALLOW_COPY_AND_ASSIGN(IsolateData);
 };
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index a2215e7..bb6adc6 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -209,6 +209,7 @@
   }
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
 // Forward a request from the tag handler to the kernel isolate.
 // [ tag, send port, url ]
 void Loader::SendKernelRequest(Dart_LibraryTag tag, Dart_Handle url) {
@@ -216,15 +217,30 @@
   Dart_Port kernel_port = Dart_KernelPort();
   ASSERT(kernel_port != ILLEGAL_PORT);
 
-  Dart_Handle request = Dart_NewList(3);
+  // NOTE: This list should be kept in sync with kernel_service.dart
+  // and kernel_isolate.cc.
+  Dart_Handle request = Dart_NewList(9);
   Dart_ListSetAt(request, 0, Dart_NewInteger(tag));
   Dart_ListSetAt(request, 1, Dart_NewSendPort(port_));
   Dart_ListSetAt(request, 2, url);
+  const char* platform_kernel = dfe.GetPlatformBinaryFilename();
+  if (platform_kernel != NULL) {
+    Dart_ListSetAt(request, 3, Dart_NewStringFromCString(platform_kernel));
+  } else {
+    Dart_ListSetAt(request, 3, Dart_Null());
+  }
+  Dart_ListSetAt(request, 4, Dart_False() /* incremental */);
+  Dart_ListSetAt(request, 5, Dart_True() /* strong */);
+  Dart_ListSetAt(request, 6,
+                 Dart_NewInteger(Dart_GetMainPortId()) /* isolateId */);
+  Dart_ListSetAt(request, 7, Dart_Null() /* sourceFiles */);
+  Dart_ListSetAt(request, 8, Dart_True() /* suppressWarnings */);
   if (Dart_Post(kernel_port, request)) {
     MonitorLocker ml(monitor_);
     pending_operations_++;
   }
 }
+#endif
 
 void Loader::QueueMessage(Dart_CObject* message) {
   MonitorLocker ml(monitor_);
@@ -680,13 +696,24 @@
     return result;
   }
   if (tag == Dart_kKernelTag) {
-    ASSERT(dfe.UseDartFrontend() || dfe.kernel_file_specified());
     Dart_Isolate current = Dart_CurrentIsolate();
     ASSERT(!Dart_IsServiceIsolate(current) && !Dart_IsKernelIsolate(current));
     return dfe.ReadKernelBinary(current, url_string);
   }
-  ASSERT(Dart_IsKernelIsolate(Dart_CurrentIsolate()) ||
-         (!dfe.UseDartFrontend() && !dfe.kernel_file_specified()));
+  if (tag == Dart_kImportResolvedExtensionTag) {
+    if (strncmp(url_string, "file://", 7)) {
+      return DartUtils::NewError(
+          "Resolved native extensions must use the file:// scheme.");
+    }
+    const char* absolute_path = DartUtils::RemoveScheme(url_string);
+
+    if (!File::IsAbsolutePath(absolute_path)) {
+      return DartUtils::NewError("Native extension path must be absolute.");
+    }
+
+    return Extensions::LoadExtension("/", absolute_path, library);
+  }
+  ASSERT(Dart_IsKernelIsolate(Dart_CurrentIsolate()) || !dfe.UseDartFrontend());
   if (tag != Dart_kScriptTag) {
     // Special case for handling dart: imports and parts.
     // Grab the library's url.
@@ -764,7 +791,12 @@
   if (DartUtils::IsDartExtensionSchemeURL(url_string)) {
     loader->SendImportExtensionRequest(url, Dart_LibraryUrl(library));
   } else {
-    if (Dart_KernelIsolateIsRunning()) {
+    if (Dart_KernelIsolateIsRunning() &&
+        isolate_data->create_isolate_from_kernel()) {
+      // TODO(sivachandra): After linking the platform kernel file with
+      // the embedder, the library tag handler should not be called to compile
+      // a script to kernel and load it. Remove this part when platform kernel
+      // kernel file is linked in to the embedder.
       loader->SendKernelRequest(tag, url);
     } else {
       loader->SendRequest(
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 77004f5..0f33626 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -198,22 +198,16 @@
   CHECK_RESULT(result);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-  if (dfe.kernel_file_specified()) {
-    ASSERT(kernel_program != NULL);
-    result = Dart_LoadKernel(kernel_program);
-    isolate_data->kernel_program = NULL;  // Dart_LoadKernel takes ownership.
-  } else {
-    if (kernel_program != NULL) {
-      Dart_Handle uri = Dart_NewStringFromCString(script_uri);
-      CHECK_RESULT(uri);
-      Dart_Handle resolved_script_uri = DartUtils::ResolveScript(uri);
-      CHECK_RESULT(resolved_script_uri);
-      result =
-          Dart_LoadScript(uri, resolved_script_uri,
-                          reinterpret_cast<Dart_Handle>(kernel_program), 0, 0);
-      isolate_data->kernel_program = NULL;  // Dart_LoadScript takes ownership.
-      CHECK_RESULT(result);
-    }
+  if (kernel_program != NULL) {
+    Dart_Handle uri = Dart_NewStringFromCString(script_uri);
+    CHECK_RESULT(uri);
+    Dart_Handle resolved_script_uri = DartUtils::ResolveScript(uri);
+    CHECK_RESULT(resolved_script_uri);
+    result =
+        Dart_LoadScript(uri, resolved_script_uri,
+                        reinterpret_cast<Dart_Handle>(kernel_program), 0, 0);
+    isolate_data->kernel_program = NULL;  // Dart_LoadScript takes ownership.
+    CHECK_RESULT(result);
   }
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
 
@@ -343,6 +337,7 @@
     IsolateData* isolate_data =
         new IsolateData(uri, package_root, packages_config, NULL);
     isolate_data->kernel_program = kernel_service_program;
+    isolate_data->set_create_isolate_from_kernel(true);
     isolate = Dart_CreateIsolateFromKernel(uri, main, kernel_service_program,
                                            flags, isolate_data, error);
   }
@@ -397,10 +392,12 @@
   ASSERT(flags != NULL);
   flags->load_vmservice_library = true;
   if (dfe.UsePlatformBinary()) {
+    isolate_data->set_create_isolate_from_kernel(true);
     isolate = Dart_CreateIsolateFromKernel(
         script_uri, NULL, dfe.kernel_platform(), flags, isolate_data, error);
     skip_library_load = true;
   } else if (dfe.application_kernel_binary() != NULL) {
+    isolate_data->set_create_isolate_from_kernel(true);
     isolate = Dart_CreateIsolateFromKernel(script_uri, NULL,
                                            dfe.application_kernel_binary(),
                                            flags, isolate_data, error);
@@ -493,11 +490,7 @@
   if (!isolate_run_app_snapshot) {
     kernel_platform = dfe.kernel_platform();
     kernel_program = dfe.ReadScript(script_uri);
-    if (kernel_program != NULL) {
-      // A kernel file was specified on the command line instead of a source
-      // file. Load that kernel file directly.
-      dfe.set_kernel_file_specified(true);
-    } else if (dfe.UseDartFrontend()) {
+    if (dfe.UseDartFrontend() && (kernel_program == NULL)) {
       kernel_program = dfe.CompileAndReadScript(script_uri, error, exit_code);
       if (kernel_program == NULL) {
         return NULL;
@@ -509,9 +502,11 @@
 
   Dart_Isolate isolate = NULL;
   if (kernel_platform != NULL) {
+    isolate_data->set_create_isolate_from_kernel(true);
     isolate = Dart_CreateIsolateFromKernel(script_uri, main, kernel_platform,
                                            flags, isolate_data, error);
   } else if (kernel_program != NULL) {
+    isolate_data->set_create_isolate_from_kernel(true);
     isolate = Dart_CreateIsolateFromKernel(script_uri, main, kernel_program,
                                            flags, isolate_data, error);
   } else {
@@ -1058,6 +1053,7 @@
   // If a kernel platform binary file is specified, read it. This
   // step will become redundant once we have the snapshot version
   // of the kernel core/platform libraries.
+  void* application_kernel_binary = NULL;
   if (dfe.UsePlatformBinary()) {
     void* kernel_platform = dfe.ReadPlatform();
     if (kernel_platform == NULL) {
@@ -1066,10 +1062,9 @@
     }
     dfe.set_kernel_platform(kernel_platform);
   } else {
-    void* application_kernel_binary = dfe.ReadScript(script_name);
+    application_kernel_binary = dfe.ReadScript(script_name);
     if (application_kernel_binary != NULL) {
       dfe.set_application_kernel_binary(application_kernel_binary);
-      dfe.set_kernel_file_specified(true);
     }
   }
 #endif
@@ -1102,8 +1097,8 @@
   // 2. If we have kernel service dill file linked in and a dill file
   // was specified as the main dart program.
   init_params.start_kernel_isolate =
-      dfe.UseDartFrontend() ||
-      (dfe.kernel_file_specified() && DFE::KernelServiceDillAvailable());
+      dfe.UseDartFrontend() || ((application_kernel_binary != NULL) &&
+                                DFE::KernelServiceDillAvailable());
 #else
   init_params.start_kernel_isolate = false;
 #endif
diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc
index 44871e9..1c1191a 100644
--- a/runtime/bin/process.cc
+++ b/runtime/bin/process.cc
@@ -71,6 +71,14 @@
   return string_args;
 }
 
+bool Process::ModeIsAttached(ProcessStartMode mode) {
+  return (mode == kNormal) || (mode == kInheritStdio);
+}
+
+bool Process::ModeHasStdio(ProcessStartMode mode) {
+  return (mode == kNormal) || (mode == kDetachedWithStdio);
+}
+
 void Process::ClearAllSignalHandlers() {
   for (intptr_t i = 1; i <= kLastSignal; i++) {
     ClearSignalHandler(i, ILLEGAL_PORT);
@@ -145,7 +153,7 @@
     }
   }
   int64_t mode =
-      DartUtils::GetInt64ValueCheckRange(Dart_GetNativeArgument(args, 6), 0, 2);
+      DartUtils::GetInt64ValueCheckRange(Dart_GetNativeArgument(args, 6), 0, 3);
   Dart_Handle stdin_handle = Dart_GetNativeArgument(args, 7);
   Dart_Handle stdout_handle = Dart_GetNativeArgument(args, 8);
   Dart_Handle stderr_handle = Dart_GetNativeArgument(args, 9);
@@ -159,7 +167,7 @@
       static_cast<ProcessStartMode>(mode), &process_stdout, &process_stdin,
       &process_stderr, &pid, &exit_event, &os_error_message);
   if (error_code == 0) {
-    if (mode != kDetached) {
+    if (Process::ModeHasStdio(static_cast<ProcessStartMode>(mode))) {
       Socket::SetSocketIdNativeField(stdin_handle, process_stdin,
                                      Socket::kFinalizerNormal);
       Socket::SetSocketIdNativeField(stdout_handle, process_stdout,
@@ -167,7 +175,7 @@
       Socket::SetSocketIdNativeField(stderr_handle, process_stderr,
                                      Socket::kFinalizerNormal);
     }
-    if (mode == kNormal) {
+    if (Process::ModeIsAttached(static_cast<ProcessStartMode>(mode))) {
       Socket::SetSocketIdNativeField(exit_handle, exit_event,
                                      Socket::kFinalizerNormal);
     }
diff --git a/runtime/bin/process.h b/runtime/bin/process.h
index adf91ee..4f34a36 100644
--- a/runtime/bin/process.h
+++ b/runtime/bin/process.h
@@ -80,8 +80,9 @@
 // To be kept in sync with ProcessStartMode consts in sdk/lib/io/process.dart.
 enum ProcessStartMode {
   kNormal = 0,
-  kDetached = 1,
-  kDetachedWithStdio = 2,
+  kInheritStdio = 1,
+  kDetached = 2,
+  kDetachedWithStdio = 3,
 };
 
 class Process {
@@ -153,6 +154,9 @@
   static int64_t MaxRSS();
   static void GetRSSInformation(int64_t* max_rss, int64_t* current_rss);
 
+  static bool ModeIsAttached(ProcessStartMode mode);
+  static bool ModeHasStdio(ProcessStartMode mode);
+
  private:
   static int global_exit_code_;
   static Mutex* global_exit_code_mutex_;
diff --git a/runtime/bin/process_android.cc b/runtime/bin/process_android.cc
index 669036b..7afd0ee 100644
--- a/runtime/bin/process_android.cc
+++ b/runtime/bin/process_android.cc
@@ -319,7 +319,7 @@
     ExitCodeHandler::ProcessStarted();
 
     // Register the child process if not detached.
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       err = RegisterProcess(pid);
       if (err != 0) {
         return err;
@@ -339,7 +339,7 @@
     // Read the result of executing the child process.
     VOID_TEMP_FAILURE_RETRY(close(exec_control_[1]));
     exec_control_[1] = -1;
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       err = ReadExecResult();
     } else {
       err = ReadDetachedExecResult(&pid);
@@ -349,7 +349,7 @@
 
     // Return error code if any failures.
     if (err != 0) {
-      if (mode_ == kNormal) {
+      if (Process::ModeIsAttached(mode_)) {
         // Since exec() failed, we're not interested in the exit code.
         // We close the reading side of the exit code pipe here.
         // GetProcessExitCodes will get a broken pipe error when it
@@ -362,7 +362,7 @@
       return err;
     }
 
-    if (mode_ != kDetached) {
+    if (Process::ModeHasStdio(mode_)) {
       // Connect stdio, stdout and stderr.
       FDUtils::SetNonBlocking(read_in_[0]);
       *in_ = read_in_[0];
@@ -405,7 +405,7 @@
     }
 
     // For detached processes the pipe to connect stderr and stdin are not used.
-    if (mode_ != kDetached) {
+    if (Process::ModeHasStdio(mode_)) {
       result = TEMP_FAILURE_RETRY(pipe2(read_err_, O_CLOEXEC));
       if (result < 0) {
         return CleanupAndReturnError();
@@ -428,7 +428,7 @@
       perror("Failed receiving notification message");
       exit(1);
     }
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       ExecProcess();
     } else {
       ExecDetachedProcess();
@@ -469,16 +469,20 @@
   }
 
   void ExecProcess() {
-    if (TEMP_FAILURE_RETRY(dup2(write_out_[0], STDIN_FILENO)) == -1) {
-      ReportChildError();
-    }
+    if (mode_ == kNormal) {
+      if (TEMP_FAILURE_RETRY(dup2(write_out_[0], STDIN_FILENO)) == -1) {
+        ReportChildError();
+      }
 
-    if (TEMP_FAILURE_RETRY(dup2(read_in_[1], STDOUT_FILENO)) == -1) {
-      ReportChildError();
-    }
+      if (TEMP_FAILURE_RETRY(dup2(read_in_[1], STDOUT_FILENO)) == -1) {
+        ReportChildError();
+      }
 
-    if (TEMP_FAILURE_RETRY(dup2(read_err_[1], STDERR_FILENO)) == -1) {
-      ReportChildError();
+      if (TEMP_FAILURE_RETRY(dup2(read_err_[1], STDERR_FILENO)) == -1) {
+        ReportChildError();
+      }
+    } else {
+      ASSERT(mode_ == kInheritStdio);
     }
 
     if (working_directory_ != NULL &&
diff --git a/runtime/bin/process_linux.cc b/runtime/bin/process_linux.cc
index eebe081..b889c28 100644
--- a/runtime/bin/process_linux.cc
+++ b/runtime/bin/process_linux.cc
@@ -319,7 +319,7 @@
     ExitCodeHandler::ProcessStarted();
 
     // Register the child process if not detached.
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       err = RegisterProcess(pid);
       if (err != 0) {
         return err;
@@ -339,7 +339,7 @@
     // Read the result of executing the child process.
     VOID_TEMP_FAILURE_RETRY(close(exec_control_[1]));
     exec_control_[1] = -1;
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       err = ReadExecResult();
     } else {
       err = ReadDetachedExecResult(&pid);
@@ -349,7 +349,7 @@
 
     // Return error code if any failures.
     if (err != 0) {
-      if (mode_ == kNormal) {
+      if (Process::ModeIsAttached(mode_)) {
         // Since exec() failed, we're not interested in the exit code.
         // We close the reading side of the exit code pipe here.
         // GetProcessExitCodes will get a broken pipe error when it
@@ -362,7 +362,7 @@
       return err;
     }
 
-    if (mode_ != kDetached) {
+    if (Process::ModeHasStdio(mode_)) {
       // Connect stdio, stdout and stderr.
       FDUtils::SetNonBlocking(read_in_[0]);
       *in_ = read_in_[0];
@@ -405,7 +405,7 @@
     }
 
     // For detached processes the pipe to connect stderr and stdin are not used.
-    if (mode_ != kDetached) {
+    if (Process::ModeHasStdio(mode_)) {
       result = TEMP_FAILURE_RETRY(pipe2(read_err_, O_CLOEXEC));
       if (result < 0) {
         return CleanupAndReturnError();
@@ -428,7 +428,7 @@
       perror("Failed receiving notification message");
       exit(1);
     }
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       ExecProcess();
     } else {
       ExecDetachedProcess();
@@ -469,16 +469,20 @@
   }
 
   void ExecProcess() {
-    if (TEMP_FAILURE_RETRY(dup2(write_out_[0], STDIN_FILENO)) == -1) {
-      ReportChildError();
-    }
+    if (mode_ == kNormal) {
+      if (TEMP_FAILURE_RETRY(dup2(write_out_[0], STDIN_FILENO)) == -1) {
+        ReportChildError();
+      }
 
-    if (TEMP_FAILURE_RETRY(dup2(read_in_[1], STDOUT_FILENO)) == -1) {
-      ReportChildError();
-    }
+      if (TEMP_FAILURE_RETRY(dup2(read_in_[1], STDOUT_FILENO)) == -1) {
+        ReportChildError();
+      }
 
-    if (TEMP_FAILURE_RETRY(dup2(read_err_[1], STDERR_FILENO)) == -1) {
-      ReportChildError();
+      if (TEMP_FAILURE_RETRY(dup2(read_err_[1], STDERR_FILENO)) == -1) {
+        ReportChildError();
+      }
+    } else {
+      ASSERT(mode_ == kInheritStdio);
     }
 
     if (working_directory_ != NULL &&
diff --git a/runtime/bin/process_macos.cc b/runtime/bin/process_macos.cc
index d947e5a..d997e01 100644
--- a/runtime/bin/process_macos.cc
+++ b/runtime/bin/process_macos.cc
@@ -313,7 +313,7 @@
     ExitCodeHandler::ProcessStarted();
 
     // Register the child process if not detached.
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       err = RegisterProcess(pid);
       if (err != 0) {
         return err;
@@ -333,7 +333,7 @@
     // Read the result of executing the child process.
     VOID_TEMP_FAILURE_RETRY(close(exec_control_[1]));
     exec_control_[1] = -1;
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       err = ReadExecResult();
     } else {
       err = ReadDetachedExecResult(&pid);
@@ -343,7 +343,7 @@
 
     // Return error code if any failures.
     if (err != 0) {
-      if (mode_ == kNormal) {
+      if (Process::ModeIsAttached(mode_)) {
         // Since exec() failed, we're not interested in the exit code.
         // We close the reading side of the exit code pipe here.
         // GetProcessExitCodes will get a broken pipe error when it
@@ -356,7 +356,7 @@
       return err;
     }
 
-    if (mode_ != kDetached) {
+    if (Process::ModeHasStdio(mode_)) {
       // Connect stdio, stdout and stderr.
       FDUtils::SetNonBlocking(read_in_[0]);
       *in_ = read_in_[0];
@@ -403,7 +403,7 @@
     FDUtils::SetCloseOnExec(read_in_[1]);
 
     // For detached processes the pipe to connect stderr and stdin are not used.
-    if (mode_ != kDetached) {
+    if (Process::ModeHasStdio(mode_)) {
       result = TEMP_FAILURE_RETRY(pipe(read_err_));
       if (result < 0) {
         return CleanupAndReturnError();
@@ -430,7 +430,7 @@
       perror("Failed receiving notification message");
       exit(1);
     }
-    if (mode_ == kNormal) {
+    if (Process::ModeIsAttached(mode_)) {
       ExecProcess();
     } else {
       ExecDetachedProcess();
@@ -438,16 +438,20 @@
   }
 
   void ExecProcess() {
-    if (TEMP_FAILURE_RETRY(dup2(write_out_[0], STDIN_FILENO)) == -1) {
-      ReportChildError();
-    }
+    if (mode_ == kNormal) {
+      if (TEMP_FAILURE_RETRY(dup2(write_out_[0], STDIN_FILENO)) == -1) {
+        ReportChildError();
+      }
 
-    if (TEMP_FAILURE_RETRY(dup2(read_in_[1], STDOUT_FILENO)) == -1) {
-      ReportChildError();
-    }
+      if (TEMP_FAILURE_RETRY(dup2(read_in_[1], STDOUT_FILENO)) == -1) {
+        ReportChildError();
+      }
 
-    if (TEMP_FAILURE_RETRY(dup2(read_err_[1], STDERR_FILENO)) == -1) {
-      ReportChildError();
+      if (TEMP_FAILURE_RETRY(dup2(read_err_[1], STDERR_FILENO)) == -1) {
+        ReportChildError();
+      }
+    } else {
+      ASSERT(mode_ == kInheritStdio);
     }
 
     if (working_directory_ != NULL &&
diff --git a/runtime/bin/process_patch.dart b/runtime/bin/process_patch.dart
index 515b66d..31702f0 100644
--- a/runtime/bin/process_patch.dart
+++ b/runtime/bin/process_patch.dart
@@ -281,7 +281,7 @@
     }
     _mode = mode;
 
-    if (mode != ProcessStartMode.DETACHED) {
+    if (_modeHasStdio(mode)) {
       // stdin going to process.
       _stdin = new _StdSink(new _Socket._writePipe().._owner = this);
       // stdout coming from process.
@@ -289,7 +289,7 @@
       // stderr coming from process.
       _stderr = new _StdStream(new _Socket._readPipe().._owner = this);
     }
-    if (mode == ProcessStartMode.NORMAL) {
+    if (_modeIsAttached(mode)) {
       _exitHandler = new _Socket._readPipe();
     }
     _ended = false;
@@ -303,6 +303,16 @@
   _NativeSocket get _stderrNativeSocket =>
       (_stderr._stream as _Socket)._nativeSocket;
 
+  static bool _modeIsAttached(ProcessStartMode mode) {
+    return (mode == ProcessStartMode.NORMAL) ||
+        (mode == ProcessStartMode.INHERIT_STDIO);
+  }
+
+  static bool _modeHasStdio(ProcessStartMode mode) {
+    return (mode == ProcessStartMode.NORMAL) ||
+        (mode == ProcessStartMode.DETACHED_WITH_STDIO);
+  }
+
   static String _getShellCommand() {
     if (Platform.isWindows) {
       return 'cmd.exe';
@@ -390,7 +400,7 @@
 
   Future<Process> _start() {
     var completer = new Completer<Process>();
-    if (_mode == ProcessStartMode.NORMAL) {
+    if (_modeIsAttached(_mode)) {
       _exitCode = new Completer<int>();
     }
     // TODO(ager): Make the actual process starting really async instead of
@@ -404,10 +414,10 @@
           _workingDirectory,
           _environment,
           _mode.index,
-          _mode == ProcessStartMode.DETACHED ? null : _stdinNativeSocket,
-          _mode == ProcessStartMode.DETACHED ? null : _stdoutNativeSocket,
-          _mode == ProcessStartMode.DETACHED ? null : _stderrNativeSocket,
-          _mode != ProcessStartMode.NORMAL ? null : _exitHandler._nativeSocket,
+          _modeHasStdio(_mode) ? _stdinNativeSocket : null,
+          _modeHasStdio(_mode) ? _stdoutNativeSocket : null,
+          _modeHasStdio(_mode) ? _stderrNativeSocket : null,
+          _modeIsAttached(_mode) ? _exitHandler._nativeSocket : null,
           status);
       if (!success) {
         completer.completeError(new ProcessException(
@@ -420,7 +430,7 @@
 
       // Setup an exit handler to handle internal cleanup and possible
       // callback when a process terminates.
-      if (_mode == ProcessStartMode.NORMAL) {
+      if (_modeIsAttached(_mode)) {
         int exitDataRead = 0;
         final int EXIT_DATA_SIZE = 8;
         List<int> exitDataBuffer = new List<int>(EXIT_DATA_SIZE);
@@ -436,7 +446,9 @@
             _ended = true;
             _exitCode.complete(exitCode(exitDataBuffer));
             // Kill stdin, helping hand if the user forgot to do it.
-            (_stdin._sink as _Socket).destroy();
+            if (_modeHasStdio(_mode)) {
+              (_stdin._sink as _Socket).destroy();
+            }
             _resourceInfo.stopped();
           }
 
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index 5da9bd3..2a1ed8e 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -504,39 +504,41 @@
     STARTUPINFOEXW startup_info;
     ZeroMemory(&startup_info, sizeof(startup_info));
     startup_info.StartupInfo.cb = sizeof(startup_info);
-    startup_info.StartupInfo.hStdInput = stdin_handles_[kReadHandle];
-    startup_info.StartupInfo.hStdOutput = stdout_handles_[kWriteHandle];
-    startup_info.StartupInfo.hStdError = stderr_handles_[kWriteHandle];
-    startup_info.StartupInfo.dwFlags = STARTF_USESTDHANDLES;
+    if (mode_ != kInheritStdio) {
+      startup_info.StartupInfo.hStdInput = stdin_handles_[kReadHandle];
+      startup_info.StartupInfo.hStdOutput = stdout_handles_[kWriteHandle];
+      startup_info.StartupInfo.hStdError = stderr_handles_[kWriteHandle];
+      startup_info.StartupInfo.dwFlags = STARTF_USESTDHANDLES;
 
-    bool supports_proc_thread_attr_lists = EnsureInitialized();
-    if (supports_proc_thread_attr_lists) {
-      // Setup the handles to inherit. We only want to inherit the three handles
-      // for stdin, stdout and stderr.
-      SIZE_T size = 0;
-      // The call to determine the size of an attribute list always fails with
-      // ERROR_INSUFFICIENT_BUFFER and that error should be ignored.
-      if (!init_proc_thread_attr_list(NULL, 1, 0, &size) &&
-          (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) {
-        return CleanupAndReturnError();
+      bool supports_proc_thread_attr_lists = EnsureInitialized();
+      if (supports_proc_thread_attr_lists) {
+        // Setup the handles to inherit. We only want to inherit the three
+        // handles for stdin, stdout and stderr.
+        SIZE_T size = 0;
+        // The call to determine the size of an attribute list always fails with
+        // ERROR_INSUFFICIENT_BUFFER and that error should be ignored.
+        if (!init_proc_thread_attr_list(NULL, 1, 0, &size) &&
+            (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) {
+          return CleanupAndReturnError();
+        }
+        attribute_list_ = reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(
+            Dart_ScopeAllocate(size));
+        ZeroMemory(attribute_list_, size);
+        if (!init_proc_thread_attr_list(attribute_list_, 1, 0, &size)) {
+          return CleanupAndReturnError();
+        }
+        static const int kNumInheritedHandles = 3;
+        HANDLE inherited_handles[kNumInheritedHandles] = {
+            stdin_handles_[kReadHandle], stdout_handles_[kWriteHandle],
+            stderr_handles_[kWriteHandle]};
+        if (!update_proc_thread_attr(
+                attribute_list_, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
+                inherited_handles, kNumInheritedHandles * sizeof(HANDLE), NULL,
+                NULL)) {
+          return CleanupAndReturnError();
+        }
+        startup_info.lpAttributeList = attribute_list_;
       }
-      attribute_list_ = reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(
-          Dart_ScopeAllocate(size));
-      ZeroMemory(attribute_list_, size);
-      if (!init_proc_thread_attr_list(attribute_list_, 1, 0, &size)) {
-        return CleanupAndReturnError();
-      }
-      static const int kNumInheritedHandles = 3;
-      HANDLE inherited_handles[kNumInheritedHandles] = {
-          stdin_handles_[kReadHandle], stdout_handles_[kWriteHandle],
-          stderr_handles_[kWriteHandle]};
-      if (!update_proc_thread_attr(
-              attribute_list_, 0, PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
-              inherited_handles, kNumInheritedHandles * sizeof(HANDLE), NULL,
-              NULL)) {
-        return CleanupAndReturnError();
-      }
-      startup_info.lpAttributeList = attribute_list_;
     }
 
     PROCESS_INFORMATION process_info;
@@ -545,7 +547,7 @@
     // Create process.
     DWORD creation_flags =
         EXTENDED_STARTUPINFO_PRESENT | CREATE_UNICODE_ENVIRONMENT;
-    if (mode_ != kNormal) {
+    if (!Process::ModeIsAttached(mode_)) {
       creation_flags |= DETACHED_PROCESS;
     }
     BOOL result = CreateProcessW(
@@ -558,26 +560,33 @@
         reinterpret_cast<STARTUPINFOW*>(&startup_info), &process_info);
 
     if (result == 0) {
+      Log::PrintErr("CreateProcessW failed %d\n", GetLastError());
       return CleanupAndReturnError();
     }
 
-    CloseHandle(stdin_handles_[kReadHandle]);
-    CloseHandle(stdout_handles_[kWriteHandle]);
-    CloseHandle(stderr_handles_[kWriteHandle]);
-    if (mode_ == kNormal) {
+    if (mode_ != kInheritStdio) {
+      CloseHandle(stdin_handles_[kReadHandle]);
+      CloseHandle(stdout_handles_[kWriteHandle]);
+      CloseHandle(stderr_handles_[kWriteHandle]);
+    }
+    if (Process::ModeIsAttached(mode_)) {
       ProcessInfoList::AddProcess(process_info.dwProcessId,
                                   process_info.hProcess,
                                   exit_handles_[kWriteHandle]);
     }
     if (mode_ != kDetached) {
       // Connect the three stdio streams.
-      FileHandle* stdin_handle = new FileHandle(stdin_handles_[kWriteHandle]);
-      FileHandle* stdout_handle = new FileHandle(stdout_handles_[kReadHandle]);
-      FileHandle* stderr_handle = new FileHandle(stderr_handles_[kReadHandle]);
-      *in_ = reinterpret_cast<intptr_t>(stdout_handle);
-      *out_ = reinterpret_cast<intptr_t>(stdin_handle);
-      *err_ = reinterpret_cast<intptr_t>(stderr_handle);
-      if (mode_ == kNormal) {
+      if (Process::ModeHasStdio(mode_)) {
+        FileHandle* stdin_handle = new FileHandle(stdin_handles_[kWriteHandle]);
+        FileHandle* stdout_handle =
+            new FileHandle(stdout_handles_[kReadHandle]);
+        FileHandle* stderr_handle =
+            new FileHandle(stderr_handles_[kReadHandle]);
+        *in_ = reinterpret_cast<intptr_t>(stdout_handle);
+        *out_ = reinterpret_cast<intptr_t>(stdin_handle);
+        *err_ = reinterpret_cast<intptr_t>(stderr_handle);
+      }
+      if (Process::ModeIsAttached(mode_)) {
         FileHandle* exit_handle = new FileHandle(exit_handles_[kReadHandle]);
         *exit_handler_ = reinterpret_cast<intptr_t>(exit_handle);
       }
@@ -603,13 +612,15 @@
     if (mode_ != kDetached) {
       // Open pipes for stdin, stdout, stderr and for communicating the exit
       // code.
-      if (!CreateProcessPipe(stdin_handles_, pipe_names[0], kInheritRead) ||
-          !CreateProcessPipe(stdout_handles_, pipe_names[1], kInheritWrite) ||
-          !CreateProcessPipe(stderr_handles_, pipe_names[2], kInheritWrite)) {
-        return CleanupAndReturnError();
+      if (Process::ModeHasStdio(mode_)) {
+        if (!CreateProcessPipe(stdin_handles_, pipe_names[0], kInheritRead) ||
+            !CreateProcessPipe(stdout_handles_, pipe_names[1], kInheritWrite) ||
+            !CreateProcessPipe(stderr_handles_, pipe_names[2], kInheritWrite)) {
+          return CleanupAndReturnError();
+        }
       }
       // Only open exit code pipe for non detached processes.
-      if (mode_ == kNormal) {
+      if (Process::ModeIsAttached(mode_)) {
         if (!CreateProcessPipe(exit_handles_, pipe_names[3], kInheritNone)) {
           return CleanupAndReturnError();
         }
diff --git a/runtime/bin/socket_base_fuchsia.cc b/runtime/bin/socket_base_fuchsia.cc
index b14b665..a6a524d 100644
--- a/runtime/bin/socket_base_fuchsia.cc
+++ b/runtime/bin/socket_base_fuchsia.cc
@@ -287,14 +287,23 @@
     return NULL;
   }
 
-  // Call the ioctl.
+  // Call the ioctls.
   netc_get_if_info_t get_if_info;
-  const ssize_t size = ioctl_netc_get_if_info(fd, &get_if_info);
+  const ssize_t size = ioctl_netc_get_num_ifs(fd, &get_if_info.n_info);
   if (size < 0) {
-    LOG_ERR("ListInterfaces: ioctl_netc_get_if_info() failed");
+    LOG_ERR("ListInterfaces: ioctl_netc_get_num_ifs() failed");
     close(fd);
     return NULL;
   }
+  for (uint32_t i = 0; i < get_if_info.n_info; i++) {
+    const ssize_t size =
+        ioctl_netc_get_if_info_at(fd, &i, &get_if_info.info[i]);
+    if (size < 0) {
+      LOG_ERR("ListInterfaces: ioctl_netc_get_if_info_at() failed");
+      close(fd);
+      return NULL;
+    }
+  }
 
   // Process the results.
   const int lookup_family = SocketAddress::FromType(type);
diff --git a/runtime/bin/stdio.cc b/runtime/bin/stdio.cc
index 5ba32ba..d833ba4 100644
--- a/runtime/bin/stdio.cc
+++ b/runtime/bin/stdio.cc
@@ -16,11 +16,37 @@
 namespace dart {
 namespace bin {
 
+static bool GetIntptrArgument(Dart_NativeArguments args,
+                              intptr_t idx,
+                              intptr_t* value) {
+  ASSERT(value != NULL);
+  int64_t v;
+  Dart_Handle status = Dart_GetNativeIntegerArgument(args, 0, &v);
+  if (Dart_IsError(status)) {
+    // The caller is expecting an OSError if something goes wrong.
+    OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+    return false;
+  }
+  if ((v < kIntptrMin) || (kIntptrMax < v)) {
+    // The caller is expecting an OSError if something goes wrong.
+    OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+    return false;
+  }
+  *value = static_cast<intptr_t>(v);
+  return true;
+}
+
 void FUNCTION_NAME(Stdin_ReadByte)(Dart_NativeArguments args) {
   ScopedBlockingCall blocker;
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
+    return;
+  }
   int byte = -1;
-  if (Stdin::ReadByte(&byte)) {
-    Dart_SetReturnValue(args, Dart_NewInteger(byte));
+  if (Stdin::ReadByte(fd, &byte)) {
+    Dart_SetIntegerReturnValue(args, byte);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
@@ -28,16 +54,31 @@
 
 void FUNCTION_NAME(Stdin_GetEchoMode)(Dart_NativeArguments args) {
   bool enabled = false;
-  if (Stdin::GetEchoMode(&enabled)) {
-    Dart_SetReturnValue(args, Dart_NewBoolean(enabled));
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
+    return;
+  }
+  if (Stdin::GetEchoMode(fd, &enabled)) {
+    Dart_SetBooleanReturnValue(args, enabled);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
 }
 
 void FUNCTION_NAME(Stdin_SetEchoMode)(Dart_NativeArguments args) {
-  bool enabled = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 0));
-  if (Stdin::SetEchoMode(enabled)) {
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
+    return;
+  }
+  bool enabled;
+  Dart_Handle status = Dart_GetNativeBooleanArgument(args, 1, &enabled);
+  if (Dart_IsError(status)) {
+    // The caller is expecting an OSError if something goes wrong.
+    OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+    return;
+  }
+  if (Stdin::SetEchoMode(fd, enabled)) {
     Dart_SetReturnValue(args, Dart_True());
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
@@ -46,17 +87,32 @@
 
 void FUNCTION_NAME(Stdin_GetLineMode)(Dart_NativeArguments args) {
   bool enabled = false;
-  if (Stdin::GetLineMode(&enabled)) {
-    Dart_SetReturnValue(args, Dart_NewBoolean(enabled));
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
+    return;
+  }
+  if (Stdin::GetLineMode(fd, &enabled)) {
+    Dart_SetBooleanReturnValue(args, enabled);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
 }
 
 void FUNCTION_NAME(Stdin_SetLineMode)(Dart_NativeArguments args) {
-  bool enabled = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 0));
-  if (Stdin::SetLineMode(enabled)) {
-    Dart_SetReturnValue(args, Dart_True());
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
+    return;
+  }
+  bool enabled;
+  Dart_Handle status = Dart_GetNativeBooleanArgument(args, 1, &enabled);
+  if (Dart_IsError(status)) {
+    // The caller is expecting an OSError if something goes wrong.
+    OSError os_error(-1, "Invalid argument", OSError::kUnknown);
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+    return;
+  }
+  if (Stdin::SetLineMode(fd, enabled)) {
+    Dart_SetBooleanReturnValue(args, true);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
@@ -64,7 +120,11 @@
 
 void FUNCTION_NAME(Stdin_AnsiSupported)(Dart_NativeArguments args) {
   bool supported = false;
-  if (Stdin::AnsiSupported(&supported)) {
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
+    return;
+  }
+  if (Stdin::AnsiSupported(fd, &supported)) {
     Dart_SetBooleanReturnValue(args, supported);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
@@ -72,17 +132,10 @@
 }
 
 void FUNCTION_NAME(Stdout_GetTerminalSize)(Dart_NativeArguments args) {
-  if (!Dart_IsInteger(Dart_GetNativeArgument(args, 0))) {
-    OSError os_error(-1, "Invalid argument", OSError::kUnknown);
-    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
     return;
   }
-  intptr_t fd = DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 0));
-  if ((fd != 1) && (fd != 2)) {
-    Dart_SetReturnValue(args, Dart_NewApiError("Terminal fd must be 1 or 2"));
-    return;
-  }
-
   int size[2];
   if (Stdout::GetTerminalSize(fd, size)) {
     Dart_Handle list = Dart_NewList(2);
@@ -95,14 +148,8 @@
 }
 
 void FUNCTION_NAME(Stdout_AnsiSupported)(Dart_NativeArguments args) {
-  if (!Dart_IsInteger(Dart_GetNativeArgument(args, 0))) {
-    OSError os_error(-1, "Invalid argument", OSError::kUnknown);
-    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
-    return;
-  }
-  intptr_t fd = DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 0));
-  if ((fd != 1) && (fd != 2)) {
-    Dart_SetReturnValue(args, Dart_NewApiError("Terminal fd must be 1 or 2"));
+  intptr_t fd;
+  if (!GetIntptrArgument(args, 0, &fd)) {
     return;
   }
   bool supported = false;
diff --git a/runtime/bin/stdio.h b/runtime/bin/stdio.h
index 89a2278..3bbc019 100644
--- a/runtime/bin/stdio.h
+++ b/runtime/bin/stdio.h
@@ -15,15 +15,15 @@
 
 class Stdin {
  public:
-  static bool ReadByte(int* byte);
+  static bool ReadByte(intptr_t fd, int* byte);
 
-  static bool GetEchoMode(bool* enabled);
-  static bool SetEchoMode(bool enabled);
+  static bool GetEchoMode(intptr_t fd, bool* enabled);
+  static bool SetEchoMode(intptr_t fd, bool enabled);
 
-  static bool GetLineMode(bool* enabled);
-  static bool SetLineMode(bool enabled);
+  static bool GetLineMode(intptr_t fd, bool* enabled);
+  static bool SetLineMode(intptr_t fd, bool enabled);
 
-  static bool AnsiSupported(bool* supported);
+  static bool AnsiSupported(intptr_t fd, bool* supported);
 
  private:
   DISALLOW_ALLOCATION();
diff --git a/runtime/bin/stdio_android.cc b/runtime/bin/stdio_android.cc
index 5b6323f..2999118 100644
--- a/runtime/bin/stdio_android.cc
+++ b/runtime/bin/stdio_android.cc
@@ -17,18 +17,19 @@
 namespace dart {
 namespace bin {
 
-bool Stdin::ReadByte(int* byte) {
-  const int c = NO_RETRY_EXPECTED(fgetc(stdin));
-  if ((c == EOF) && (ferror(stdin) != 0)) {
+bool Stdin::ReadByte(intptr_t fd, int* byte) {
+  unsigned char b;
+  ssize_t s = TEMP_FAILURE_RETRY(read(fd, &b, 1));
+  if (s < 0) {
     return false;
   }
-  *byte = (c == EOF) ? -1 : c;
+  *byte = (s == 0) ? -1 : b;
   return true;
 }
 
-bool Stdin::GetEchoMode(bool* enabled) {
+bool Stdin::GetEchoMode(intptr_t fd, bool* enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -36,9 +37,9 @@
   return true;
 }
 
-bool Stdin::SetEchoMode(bool enabled) {
+bool Stdin::SetEchoMode(intptr_t fd, bool enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -47,13 +48,13 @@
   } else {
     term.c_lflag &= ~(ECHO | ECHONL);
   }
-  status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
+  status = NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
   return (status == 0);
 }
 
-bool Stdin::GetLineMode(bool* enabled) {
+bool Stdin::GetLineMode(intptr_t fd, bool* enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -61,9 +62,9 @@
   return true;
 }
 
-bool Stdin::SetLineMode(bool enabled) {
+bool Stdin::SetLineMode(intptr_t fd, bool enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -72,7 +73,7 @@
   } else {
     term.c_lflag &= ~(ICANON);
   }
-  status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
+  status = NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
   return (status == 0);
 }
 
@@ -84,8 +85,8 @@
   return strstr(term, "xterm") != NULL;
 }
 
-bool Stdin::AnsiSupported(bool* supported) {
-  *supported = isatty(STDIN_FILENO) && TermHasXTerm();
+bool Stdin::AnsiSupported(intptr_t fd, bool* supported) {
+  *supported = isatty(fd) && TermHasXTerm();
   return true;
 }
 
diff --git a/runtime/bin/stdio_fuchsia.cc b/runtime/bin/stdio_fuchsia.cc
index fae1c8e..65a2918 100644
--- a/runtime/bin/stdio_fuchsia.cc
+++ b/runtime/bin/stdio_fuchsia.cc
@@ -10,32 +10,32 @@
 namespace dart {
 namespace bin {
 
-bool Stdin::ReadByte(int* byte) {
+bool Stdin::ReadByte(intptr_t fd, int* byte) {
   UNIMPLEMENTED();
   return false;
 }
 
-bool Stdin::GetEchoMode(bool* enabled) {
+bool Stdin::GetEchoMode(intptr_t fd, bool* enabled) {
   UNIMPLEMENTED();
   return false;
 }
 
-bool Stdin::SetEchoMode(bool enabled) {
+bool Stdin::SetEchoMode(intptr_t fd, bool enabled) {
   UNIMPLEMENTED();
   return false;
 }
 
-bool Stdin::GetLineMode(bool* enabled) {
+bool Stdin::GetLineMode(intptr_t fd, bool* enabled) {
   UNIMPLEMENTED();
   return false;
 }
 
-bool Stdin::SetLineMode(bool enabled) {
+bool Stdin::SetLineMode(intptr_t fd, bool enabled) {
   UNIMPLEMENTED();
   return false;
 }
 
-bool Stdin::AnsiSupported(bool* supported) {
+bool Stdin::AnsiSupported(intptr_t fd, bool* supported) {
   UNIMPLEMENTED();
   return false;
 }
diff --git a/runtime/bin/stdio_linux.cc b/runtime/bin/stdio_linux.cc
index 8973bc5..18e19e8 100644
--- a/runtime/bin/stdio_linux.cc
+++ b/runtime/bin/stdio_linux.cc
@@ -17,18 +17,19 @@
 namespace dart {
 namespace bin {
 
-bool Stdin::ReadByte(int* byte) {
-  const int c = NO_RETRY_EXPECTED(fgetc(stdin));
-  if ((c == EOF) && (ferror(stdin) != 0)) {
+bool Stdin::ReadByte(intptr_t fd, int* byte) {
+  unsigned char b;
+  ssize_t s = TEMP_FAILURE_RETRY(read(fd, &b, 1));
+  if (s < 0) {
     return false;
   }
-  *byte = (c == EOF) ? -1 : c;
+  *byte = (s == 0) ? -1 : b;
   return true;
 }
 
-bool Stdin::GetEchoMode(bool* enabled) {
+bool Stdin::GetEchoMode(intptr_t fd, bool* enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -36,9 +37,9 @@
   return true;
 }
 
-bool Stdin::SetEchoMode(bool enabled) {
+bool Stdin::SetEchoMode(intptr_t fd, bool enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -47,13 +48,13 @@
   } else {
     term.c_lflag &= ~(ECHO | ECHONL);
   }
-  status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
+  status = NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
   return (status == 0);
 }
 
-bool Stdin::GetLineMode(bool* enabled) {
+bool Stdin::GetLineMode(intptr_t fd, bool* enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -61,9 +62,9 @@
   return true;
 }
 
-bool Stdin::SetLineMode(bool enabled) {
+bool Stdin::SetLineMode(intptr_t fd, bool enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -72,7 +73,7 @@
   } else {
     term.c_lflag &= ~(ICANON);
   }
-  status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
+  status = NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
   return (status == 0);
 }
 
@@ -84,8 +85,8 @@
   return strstr(term, "xterm") != NULL;
 }
 
-bool Stdin::AnsiSupported(bool* supported) {
-  *supported = isatty(STDIN_FILENO) && TermHasXTerm();
+bool Stdin::AnsiSupported(intptr_t fd, bool* supported) {
+  *supported = isatty(fd) && TermHasXTerm();
   return true;
 }
 
diff --git a/runtime/bin/stdio_macos.cc b/runtime/bin/stdio_macos.cc
index a43c43b..b81e352 100644
--- a/runtime/bin/stdio_macos.cc
+++ b/runtime/bin/stdio_macos.cc
@@ -17,18 +17,19 @@
 namespace dart {
 namespace bin {
 
-bool Stdin::ReadByte(int* byte) {
-  const int c = NO_RETRY_EXPECTED(fgetc(stdin));
-  if ((c == EOF) && (ferror(stdin) != 0)) {
+bool Stdin::ReadByte(intptr_t fd, int* byte) {
+  unsigned char b;
+  ssize_t s = TEMP_FAILURE_RETRY(read(fd, &b, 1));
+  if (s < 0) {
     return false;
   }
-  *byte = (c == EOF) ? -1 : c;
+  *byte = (s == 0) ? -1 : b;
   return true;
 }
 
-bool Stdin::GetEchoMode(bool* enabled) {
+bool Stdin::GetEchoMode(intptr_t fd, bool* enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -36,9 +37,9 @@
   return true;
 }
 
-bool Stdin::SetEchoMode(bool enabled) {
+bool Stdin::SetEchoMode(intptr_t fd, bool enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -47,13 +48,13 @@
   } else {
     term.c_lflag &= ~(ECHO | ECHONL);
   }
-  status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
+  status = NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
   return (status == 0);
 }
 
-bool Stdin::GetLineMode(bool* enabled) {
+bool Stdin::GetLineMode(intptr_t fd, bool* enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -61,9 +62,9 @@
   return true;
 }
 
-bool Stdin::SetLineMode(bool enabled) {
+bool Stdin::SetLineMode(intptr_t fd, bool enabled) {
   struct termios term;
-  int status = NO_RETRY_EXPECTED(tcgetattr(STDIN_FILENO, &term));
+  int status = NO_RETRY_EXPECTED(tcgetattr(fd, &term));
   if (status != 0) {
     return false;
   }
@@ -72,7 +73,7 @@
   } else {
     term.c_lflag &= ~(ICANON);
   }
-  status = NO_RETRY_EXPECTED(tcsetattr(STDIN_FILENO, TCSANOW, &term));
+  status = NO_RETRY_EXPECTED(tcsetattr(fd, TCSANOW, &term));
   return (status == 0);
 }
 
@@ -84,8 +85,8 @@
   return strstr(term, "xterm") != NULL;
 }
 
-bool Stdin::AnsiSupported(bool* supported) {
-  *supported = isatty(STDIN_FILENO) && TermHasXTerm();
+bool Stdin::AnsiSupported(intptr_t fd, bool* supported) {
+  *supported = isatty(fd) && TermHasXTerm();
   return true;
 }
 
diff --git a/runtime/bin/stdio_patch.dart b/runtime/bin/stdio_patch.dart
index 41d2a21..14bee98 100644
--- a/runtime/bin/stdio_patch.dart
+++ b/runtime/bin/stdio_patch.dart
@@ -7,23 +7,22 @@
 @patch
 class _StdIOUtils {
   @patch
-  static Stdin _getStdioInputStream() {
-    switch (_getStdioHandleType(0)) {
+  static Stdin _getStdioInputStream(int fd) {
+    switch (_getStdioHandleType(fd)) {
       case _STDIO_HANDLE_TYPE_TERMINAL:
       case _STDIO_HANDLE_TYPE_PIPE:
       case _STDIO_HANDLE_TYPE_SOCKET:
-        return new Stdin._(new _Socket._readPipe(0));
+        return new Stdin._(new _Socket._readPipe(fd), fd);
       case _STDIO_HANDLE_TYPE_FILE:
-        return new Stdin._(new _FileStream.forStdin());
+        return new Stdin._(new _FileStream.forStdin(), fd);
       default:
         throw new FileSystemException(
-            "Couldn't determine file type of stdin (fd 0)");
+            "Couldn't determine file type of stdin (fd $fd)");
     }
   }
 
   @patch
   static _getStdioOutputStream(int fd) {
-    assert(fd == 1 || fd == 2);
     switch (_getStdioHandleType(fd)) {
       case _STDIO_HANDLE_TYPE_TERMINAL:
       case _STDIO_HANDLE_TYPE_PIPE:
@@ -58,7 +57,7 @@
 class Stdin {
   @patch
   int readByteSync() {
-    var result = _readByte();
+    var result = _readByte(_fd);
     if (result is OSError) {
       throw new StdinException("Error reading byte from stdin", result);
     }
@@ -67,7 +66,7 @@
 
   @patch
   bool get echoMode {
-    var result = _echoMode();
+    var result = _echoMode(_fd);
     if (result is OSError) {
       throw new StdinException("Error getting terminal echo mode", result);
     }
@@ -80,7 +79,7 @@
       throw new UnsupportedError(
           "This embedder disallows setting Stdin.echoMode");
     }
-    var result = _setEchoMode(enabled);
+    var result = _setEchoMode(_fd, enabled);
     if (result is OSError) {
       throw new StdinException("Error setting terminal echo mode", result);
     }
@@ -88,7 +87,7 @@
 
   @patch
   bool get lineMode {
-    var result = _lineMode();
+    var result = _lineMode(_fd);
     if (result is OSError) {
       throw new StdinException("Error getting terminal line mode", result);
     }
@@ -101,7 +100,7 @@
       throw new UnsupportedError(
           "This embedder disallows setting Stdin.lineMode");
     }
-    var result = _setLineMode(enabled);
+    var result = _setLineMode(_fd, enabled);
     if (result is OSError) {
       throw new StdinException("Error setting terminal line mode", result);
     }
@@ -109,19 +108,19 @@
 
   @patch
   bool get supportsAnsiEscapes {
-    var result = _supportsAnsiEscapes();
+    var result = _supportsAnsiEscapes(_fd);
     if (result is OSError) {
       throw new StdinException("Error determining ANSI support", result);
     }
     return result;
   }
 
-  static _echoMode() native "Stdin_GetEchoMode";
-  static _setEchoMode(bool enabled) native "Stdin_SetEchoMode";
-  static _lineMode() native "Stdin_GetLineMode";
-  static _setLineMode(bool enabled) native "Stdin_SetLineMode";
-  static _readByte() native "Stdin_ReadByte";
-  static _supportsAnsiEscapes() native "Stdin_AnsiSupported";
+  static _echoMode(int fd) native "Stdin_GetEchoMode";
+  static _setEchoMode(int fd, bool enabled) native "Stdin_SetEchoMode";
+  static _lineMode(int fd) native "Stdin_GetLineMode";
+  static _setLineMode(int fd, bool enabled) native "Stdin_SetLineMode";
+  static _readByte(int fd) native "Stdin_ReadByte";
+  static _supportsAnsiEscapes(int fd) native "Stdin_AnsiSupported";
 }
 
 @patch
diff --git a/runtime/bin/stdio_win.cc b/runtime/bin/stdio_win.cc
index cf66166..cbfc2d8 100644
--- a/runtime/bin/stdio_win.cc
+++ b/runtime/bin/stdio_win.cc
@@ -20,7 +20,7 @@
 namespace dart {
 namespace bin {
 
-bool Stdin::ReadByte(int* byte) {
+bool Stdin::ReadByte(intptr_t fd, int* byte) {
   HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
   uint8_t buffer[1];
   DWORD read = 0;
@@ -32,7 +32,7 @@
   return true;
 }
 
-bool Stdin::GetEchoMode(bool* enabled) {
+bool Stdin::GetEchoMode(intptr_t fd, bool* enabled) {
   HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
   DWORD mode;
   if (!GetConsoleMode(h, &mode)) {
@@ -42,7 +42,7 @@
   return true;
 }
 
-bool Stdin::SetEchoMode(bool enabled) {
+bool Stdin::SetEchoMode(intptr_t fd, bool enabled) {
   HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
   DWORD mode;
   if (!GetConsoleMode(h, &mode)) {
@@ -56,7 +56,7 @@
   return SetConsoleMode(h, mode);
 }
 
-bool Stdin::GetLineMode(bool* enabled) {
+bool Stdin::GetLineMode(intptr_t fd, bool* enabled) {
   HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
   DWORD mode;
   if (!GetConsoleMode(h, &mode)) {
@@ -66,7 +66,7 @@
   return true;
 }
 
-bool Stdin::SetLineMode(bool enabled) {
+bool Stdin::SetLineMode(intptr_t fd, bool enabled) {
   HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
   DWORD mode;
   if (!GetConsoleMode(h, &mode)) {
@@ -80,7 +80,7 @@
   return SetConsoleMode(h, mode);
 }
 
-bool Stdin::AnsiSupported(bool* supported) {
+bool Stdin::AnsiSupported(intptr_t fd, bool* supported) {
   ASSERT(supported != NULL);
   HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
   if (h == INVALID_HANDLE_VALUE) {
diff --git a/runtime/bin/utils_fuchsia.cc b/runtime/bin/utils_fuchsia.cc
index b859fce..b763016 100644
--- a/runtime/bin/utils_fuchsia.cc
+++ b/runtime/bin/utils_fuchsia.cc
@@ -81,7 +81,7 @@
 }
 
 int64_t TimerUtils::GetCurrentMonotonicMicros() {
-  int64_t ticks = zx_time_get(ZX_CLOCK_MONOTONIC);
+  int64_t ticks = zx_clock_get(ZX_CLOCK_MONOTONIC);
   return ticks / kNanosecondsPerMicrosecond;
 }
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index de90aed..4128b5f 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -2703,6 +2703,7 @@
   Dart_kSourceTag,
   Dart_kImportTag,
   Dart_kKernelTag,
+  Dart_kImportResolvedExtensionTag,
 } Dart_LibraryTag;
 
 /**
@@ -2751,6 +2752,13 @@
  * The dart front end typically compiles all the scripts, imports and part
  * files into one intermediate file hence we don't use the source/import or
  * script tags.
+ *
+ * Dart_kImportResolvedExtensionTag
+ *
+ * This tag is used to load an external import (shared object file) without
+ * performing path resolution first. The 'url' provided should be an absolute
+ * path with the 'file://' schema. It doesn't require the service isolate to be
+ * available and will not initialize a Loader for the isolate.
  */
 typedef Dart_Handle (*Dart_LibraryTagHandler)(
     Dart_LibraryTag tag,
diff --git a/runtime/lib/double.dart b/runtime/lib/double.dart
index 4c88b4e..86ad7ca 100644
--- a/runtime/lib/double.dart
+++ b/runtime/lib/double.dart
@@ -288,6 +288,30 @@
           return EQUAL;
         }
         return thisIsNegative ? LESS : GREATER;
+      } else if (other is int) {
+        // Compare as integers as it is more precise if the integer value is
+        // outside of MIN_EXACT_INT_TO_DOUBLE..MAX_EXACT_INT_TO_DOUBLE range.
+        const int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
+        const int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
+        if ((MIN_EXACT_INT_TO_DOUBLE <= other) &&
+            (other <= MAX_EXACT_INT_TO_DOUBLE)) {
+          return EQUAL;
+        }
+        const bool limitIntsTo64Bits = ((1 << 64) == 0);
+        if (limitIntsTo64Bits) {
+          // With integers limited to 64 bits, double.toInt() clamps
+          // double value to fit into the MIN_INT64..MAX_INT64 range.
+          // MAX_INT64 is not precisely representable as double, so
+          // integers near MAX_INT64 compare as equal to (MAX_INT64 + 1) when
+          // represented as doubles.
+          // There is no similar problem with MIN_INT64 as it is precisely
+          // representable as double.
+          const double maxInt64Plus1AsDouble = 9223372036854775808.0;
+          if (this >= maxInt64Plus1AsDouble) {
+            return GREATER;
+          }
+        }
+        return toInt().compareTo(other);
       } else {
         return EQUAL;
       }
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index 7d13829..d779bc7 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -166,20 +166,36 @@
     if (other is double) {
       const int MAX_EXACT_INT_TO_DOUBLE = 9007199254740992; // 2^53.
       const int MIN_EXACT_INT_TO_DOUBLE = -MAX_EXACT_INT_TO_DOUBLE;
-      double d = other;
-      if (d.isInfinite) {
-        return d == double.negativeInfinity ? GREATER : LESS;
+      const bool limitIntsTo64Bits = ((1 << 64) == 0);
+      if (limitIntsTo64Bits) {
+        // With integers limited to 64 bits, double.toInt() clamps
+        // double value to fit into the MIN_INT64..MAX_INT64 range.
+        // Check if the double value is outside of this range.
+        // This check handles +/-infinity as well.
+        const double minInt64AsDouble = -9223372036854775808.0;
+        // MAX_INT64 is not precisely representable in doubles, so
+        // check against (MAX_INT64 + 1).
+        const double maxInt64Plus1AsDouble = 9223372036854775808.0;
+        if (other < minInt64AsDouble) {
+          return GREATER;
+        } else if (other >= maxInt64Plus1AsDouble) {
+          return LESS;
+        }
+      } else {
+        if (other.isInfinite) {
+          return other.isNegative ? GREATER : LESS;
+        }
       }
-      if (d.isNaN) {
+      if (other.isNaN) {
         return LESS;
       }
       if (MIN_EXACT_INT_TO_DOUBLE <= this && this <= MAX_EXACT_INT_TO_DOUBLE) {
         // Let the double implementation deal with -0.0.
-        return -(d.compareTo(this.toDouble()));
+        return -(other.compareTo(this.toDouble()));
       } else {
         // If abs(other) > MAX_EXACT_INT_TO_DOUBLE, then other has an integer
         // value (no bits below the decimal point).
-        other = d.toInt();
+        other = other.toInt();
       }
     }
     if (this < other) {
diff --git a/runtime/observatory/tests/service/service_kernel.status b/runtime/observatory/tests/service/service_kernel.status
index 75bbb40..323e712 100644
--- a/runtime/observatory/tests/service/service_kernel.status
+++ b/runtime/observatory/tests/service/service_kernel.status
@@ -43,12 +43,30 @@
 coverage_leaf_function_test: RuntimeError
 coverage_optimized_function_test: Skip # Timeout
 get_source_report_test: RuntimeError
+get_vm_timeline_rpc_test: Pass, Timeout
+issue_25465_test: Pass, Timeout
+issue_30555_test: Pass, Timeout
+next_through_assign_call_test: Pass, Timeout
+next_through_call_on_field_in_class_test: Pass, Timeout
+next_through_create_list_and_map_test: Pass, Timeout
+next_through_is_and_as_test: Pass, Timeout
+next_through_multi_catch_test: Pass, Timeout
+next_through_simple_async_with_returns_test: Pass, Timeout
+next_through_simple_linear_2_test: Pass, Timeout
+regress_28443_test: Pass, Timeout
 step_test: Pass, Slow
 step_through_constructor_test: Pass, Slow
+step_through_function_2_test: Pass, Timeout
+step_through_function_test: Pass, Timeout
+step_through_property_get_test: Pass, Timeout
+step_through_switch_test: Pass, Timeout
+step_through_switch_with_continue_test: Pass, Timeout
 
 [ $compiler == dartk && $system == windows && $strong ]
 add_breakpoint_rpc_kernel_test: Skip # Timeout
-issue_30555_test: Skip # Timeout
+code_test: RuntimeError
+get_object_rpc_test: RuntimeError
+get_stack_rpc_test: RuntimeError
 next_through_implicit_call_test: Skip # Timeout
 next_through_operator_bracket_on_super_test: Skip # Timeout
 next_through_operator_bracket_on_this_test: Skip # Timeout
@@ -76,6 +94,5 @@
 external_service_registration_test: CompileTimeError # Issue 31696
 external_service_registration_via_notification_test: CompileTimeError # Issue 31696
 external_service_synchronous_invocation_test: CompileTimeError # Issue 31696
-get_object_rpc_test: RuntimeError
 step_through_arithmetic_test: RuntimeError
 
diff --git a/runtime/observatory/web/timeline.js b/runtime/observatory/web/timeline.js
index e709a11..9e92ad4 100644
--- a/runtime/observatory/web/timeline.js
+++ b/runtime/observatory/web/timeline.js
@@ -622,7 +622,7 @@
                      parser.hostname +
                      ':' +
                      parser.port +
-                     '/_getCpuProfileTimeline?tags=VMUser&isolateId=' +
+                     '/_getCpuProfileTimeline?tags=None&isolateId=' +
                      isolateId +
                      '&timeOriginMicros=' + timeOrigin +
                      '&timeExtentMicros=' + timeExtent;
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 4390d0f..afd3dd3 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -60,6 +60,12 @@
 dart/simd128float32_test: Skip # compilers not aware of Simd128
 dart/truncating_ints_test: Skip # dart2js doesn't know about --limit-ints-to-64-bits
 
+[ $compiler == dartk ]
+cc/DartAPI_New: Crash
+cc/DartAPI_TypeGetParameterizedTypes: Crash
+dart/redirection_type_shuffling_test/00: Crash
+dart/redirection_type_shuffling_test/none: Crash
+
 [ $compiler != dartk ]
 cc/IsolateReload_KernelIncrementalCompile: Skip
 cc/IsolateReload_KernelIncrementalCompileAppAndLib: Skip
@@ -324,8 +330,6 @@
 cc/IsolateReload_TypeIdentityParameter: Fail
 
 [ $compiler == dartk && $system == windows ]
-cc/DartAPI_New: Fail
-cc/DartAPI_TypeGetParameterizedTypes: Fail
 cc/IsolateReload_DanglingGetter_Class: Crash
 cc/IsolateReload_DanglingGetter_Instance: Crash
 cc/IsolateReload_LibraryLookup: Crash
@@ -340,19 +344,12 @@
 cc/IsolateReload_TypeIdentityParameter: Crash
 cc/Profiler_BasicSourcePosition: Fail
 cc/Profiler_CodeTicks: Fail
+cc/Profiler_ContextAllocation: Fail, Pass # Flaky on Windows --- sometimes give "profiler_test.cc: 1107: error: expected: !walker.Down()"
 cc/Profiler_FunctionTicks: Fail
 cc/Profiler_ToggleRecordAllocation: Fail
 cc/Profiler_TrivialRecordAllocation: Fail
 cc/Service_Address: Fail
 cc/Service_Code: Fail
-dart/redirection_type_shuffling_test/00: Fail
-dart/redirection_type_shuffling_test/none: Fail
-
-[ $compiler == dartk && $system != windows ]
-cc/DartAPI_New: Crash
-cc/DartAPI_TypeGetParameterizedTypes: Crash
-dart/redirection_type_shuffling_test/00: Crash
-dart/redirection_type_shuffling_test/none: Crash
 
 [ $compiler == dartk && $strong ]
 dart/optimized_stacktrace_line_and_column_test: CompileTimeError # Issue 31586
@@ -376,6 +373,9 @@
 [ $compiler == none && $runtime == drt ]
 dart/truncating_ints_test: Skip # Issue 14651
 
+[ $mode == debug && $system == windows ]
+dart/spawn_shutdown_test: Skip # Flaky crashes unable to start thread; likely low memory on the bot.
+
 [ $mode == product && $runtime == vm ]
 cc/DartAPI_IsolateSetCheckedMode: Fail, OK # Checked mode disabled in product mode.
 
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index aac2689..eda3979 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -190,15 +190,6 @@
   }
 }
 
-void ClassTable::RegisterAt(intptr_t index, const Class& cls) {
-  ASSERT(Thread::Current()->IsMutatorThread());
-  ASSERT(index != kIllegalCid);
-  ASSERT(index >= kNumPredefinedCids);
-  AllocateIndex(index);
-  cls.set_id(index);
-  table_[index] = cls.raw();
-}
-
 #if defined(DEBUG)
 void ClassTable::Unregister(intptr_t index) {
   table_[index] = 0;
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index 7d62faf..d5c15cb 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.h
@@ -191,8 +191,6 @@
 
   void AllocateIndex(intptr_t index);
 
-  void RegisterAt(intptr_t index, const Class& cls);
-
 #if defined(DEBUG)
   void Unregister(intptr_t index);
 #endif
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index 68b4238..d0cbb8a 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -265,6 +265,23 @@
   return false;
 }
 
+bool AotCallSpecializer::IsSupportedIntOperandForStaticDoubleOp(
+    CompileType* operand_type) {
+  if (operand_type->IsNullableInt()) {
+    if (operand_type->ToNullableCid() == kSmiCid) {
+      return true;
+    }
+
+    if (FLAG_limit_ints_to_64_bits &&
+        FlowGraphCompiler::SupportsUnboxedInt64() &&
+        FlowGraphCompiler::CanConvertInt64ToDouble()) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
 Value* AotCallSpecializer::PrepareStaticOpInput(Value* input,
                                                 intptr_t cid,
                                                 Instruction* call) {
@@ -276,8 +293,19 @@
 
   input = input->CopyWithType(Z);
 
-  if ((cid == kDoubleCid) && (input->Type()->ToNullableCid() == kSmiCid)) {
-    Definition* conversion = new (Z) SmiToDoubleInstr(input, call->token_pos());
+  if ((cid == kDoubleCid) && input->Type()->IsNullableInt()) {
+    Definition* conversion = NULL;
+
+    if (input->Type()->ToNullableCid() == kSmiCid) {
+      conversion = new (Z) SmiToDoubleInstr(input, call->token_pos());
+    } else if (FLAG_limit_ints_to_64_bits &&
+               FlowGraphCompiler::SupportsUnboxedInt64() &&
+               FlowGraphCompiler::CanConvertInt64ToDouble()) {
+      conversion = new (Z) Int64ToDoubleInstr(input, Thread::kNoDeoptId,
+                                              Instruction::kNotSpeculative);
+    } else {
+      UNREACHABLE();
+    }
 
     if (FLAG_trace_strong_mode_types) {
       THR_Print("[Strong mode] Inserted %s\n", conversion->ToCString());
@@ -332,7 +360,7 @@
       CompileType* right_type = right_value->Type();
       if (left_type->IsNullableInt() && right_type->IsNullableInt()) {
         if (FLAG_limit_ints_to_64_bits &&
-            FlowGraphCompiler::SupportsUnboxedMints()) {
+            FlowGraphCompiler::SupportsUnboxedInt64()) {
           if (Token::IsRelationalOperator(op_kind)) {
             left_value = PrepareStaticOpInput(left_value, kMintCid, instr);
             right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
@@ -367,11 +395,9 @@
         }
       } else if (FlowGraphCompiler::SupportsUnboxedDoubles() &&
                  (left_type->IsNullableDouble() ||
-                  (left_type->ToNullableCid() == kSmiCid)) &&
+                  IsSupportedIntOperandForStaticDoubleOp(left_type)) &&
                  (right_type->IsNullableDouble() ||
-                  (right_type->ToNullableCid() == kSmiCid))) {
-        // TODO(dartbug.com/30480): Extend double/int mixed cases from Smi to
-        // AbstractInt (it requires corresponding conversions).
+                  IsSupportedIntOperandForStaticDoubleOp(right_type))) {
         ASSERT(left_type->IsNullableDouble() || right_type->IsNullableDouble());
         // TODO(dartbug.com/30480): Support == and != for doubles.
         if ((op_kind == Token::kLT) || (op_kind == Token::kLTE) ||
@@ -405,7 +431,7 @@
       if (left_type->IsNullableInt() && right_type->IsNullableInt() &&
           (op_kind != Token::kDIV)) {
         if (FLAG_limit_ints_to_64_bits &&
-            FlowGraphCompiler::SupportsUnboxedMints()) {
+            FlowGraphCompiler::SupportsUnboxedInt64()) {
           if ((op_kind == Token::kSHR) || (op_kind == Token::kSHL)) {
             // TODO(dartbug.com/30480): Enable 64-bit integer shifts.
             // replacement = new ShiftInt64OpInstr(
@@ -428,11 +454,9 @@
         }
       } else if (FlowGraphCompiler::SupportsUnboxedDoubles() &&
                  (left_type->IsNullableDouble() ||
-                  (left_type->ToNullableCid() == kSmiCid)) &&
+                  IsSupportedIntOperandForStaticDoubleOp(left_type)) &&
                  (right_type->IsNullableDouble() ||
-                  (right_type->ToNullableCid() == kSmiCid))) {
-        // TODO(dartbug.com/30480): Extend double/int mixed cases from Smi to
-        // AbstractInt (it requires corresponding conversions).
+                  IsSupportedIntOperandForStaticDoubleOp(right_type))) {
         if ((op_kind == Token::kADD) || (op_kind == Token::kSUB) ||
             (op_kind == Token::kMUL) || (op_kind == Token::kDIV)) {
           ASSERT(left_type->IsNullableDouble() ||
@@ -482,7 +506,7 @@
         Value* left_value = call->PushArgumentAt(0)->value();
         Value* right_value = call->PushArgumentAt(1)->value();
         if (right_value->Type()->IsNullableDouble() ||
-            (right_value->Type()->ToNullableCid() == kSmiCid)) {
+            IsSupportedIntOperandForStaticDoubleOp(right_value->Type())) {
           left_value =
               PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, call);
@@ -496,7 +520,7 @@
         Value* left_value = call->PushArgumentAt(0)->value();
         Value* right_value = call->PushArgumentAt(1)->value();
         if (right_value->Type()->IsNullableDouble() ||
-            (right_value->Type()->ToNullableCid() == kSmiCid)) {
+            IsSupportedIntOperandForStaticDoubleOp(right_value->Type())) {
           left_value =
               PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, call);
@@ -970,13 +994,13 @@
     return false;
   }
 
-  TypeRangeCache* cache = precompiler_->type_range_cache();
-  if (cache == NULL) {
+  HierarchyInfo* hi = thread()->hierarchy_info();
+  if (hi == NULL) {
     return false;
   }
 
   intptr_t lower_limit, upper_limit;
-  if (!cache->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) {
+  if (!hi->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) {
     return false;
   }
 
@@ -1044,13 +1068,13 @@
     return false;
   }
 
-  TypeRangeCache* cache = precompiler_->type_range_cache();
-  if (cache == NULL) {
+  HierarchyInfo* hi = thread()->hierarchy_info();
+  if (hi == NULL) {
     return false;
   }
 
   intptr_t lower_limit, upper_limit;
-  if (!cache->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) {
+  if (!hi->InstanceOfHasClassRange(type, &lower_limit, &upper_limit)) {
     return false;
   }
 
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.h b/runtime/vm/compiler/aot/aot_call_specializer.h
index 68705f7..214d345 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.h
+++ b/runtime/vm/compiler/aot/aot_call_specializer.h
@@ -47,6 +47,7 @@
   bool TryInlineFieldAccess(InstanceCallInstr* call);
   bool TryInlineFieldAccess(StaticCallInstr* call);
 
+  bool IsSupportedIntOperandForStaticDoubleOp(CompileType* operand_type);
   Value* PrepareStaticOpInput(Value* input, intptr_t cid, Instruction* call);
 
   Value* PrepareReceiverOfDevirtualizedCall(Value* input, intptr_t cid);
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 89aa1a8..a211946 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -211,13 +211,6 @@
     lower_limits_[i] = kNotComputed;
     upper_limits_[i] = kNotComputed;
   }
-  ASSERT(precompiler->type_range_cache() == NULL);
-  precompiler->set_type_range_cache(this);
-}
-
-TypeRangeCache::~TypeRangeCache() {
-  ASSERT(precompiler_->type_range_cache() == this);
-  precompiler_->set_type_range_cache(NULL);
 }
 
 RawError* Precompiler::CompileAll(
@@ -235,98 +228,6 @@
   }
 }
 
-bool TypeRangeCache::InstanceOfHasClassRange(const AbstractType& type,
-                                             intptr_t* lower_limit,
-                                             intptr_t* upper_limit) {
-  ASSERT(type.IsFinalized() && !type.IsMalformedOrMalbounded());
-
-  if (!type.IsInstantiated()) return false;
-  if (type.IsFunctionType()) return false;
-  if (type.IsDartFunctionType()) return false;
-
-  Zone* zone = thread_->zone();
-  const TypeArguments& type_arguments =
-      TypeArguments::Handle(zone, type.arguments());
-  if (!type_arguments.IsNull() &&
-      !type_arguments.IsRaw(0, type_arguments.Length()))
-    return false;
-
-  intptr_t type_cid = type.type_class_id();
-  if (lower_limits_[type_cid] == kNotContiguous) return false;
-  if (lower_limits_[type_cid] != kNotComputed) {
-    *lower_limit = lower_limits_[type_cid];
-    *upper_limit = upper_limits_[type_cid];
-    return true;
-  }
-
-  *lower_limit = -1;
-  *upper_limit = -1;
-  intptr_t last_matching_cid = -1;
-
-  ClassTable* table = thread_->isolate()->class_table();
-  Class& cls = Class::Handle(zone);
-  AbstractType& cls_type = AbstractType::Handle(zone);
-  for (intptr_t cid = kInstanceCid; cid < table->NumCids(); cid++) {
-    // Create local zone because deep hierarchies may allocate lots of handles
-    // within one iteration of this loop.
-    StackZone stack_zone(thread_);
-    HANDLESCOPE(thread_);
-
-    if (!table->HasValidClassAt(cid)) continue;
-    if (cid == kTypeArgumentsCid) continue;
-    if (cid == kVoidCid) continue;
-    if (cid == kDynamicCid) continue;
-    if (cid == kNullCid) continue;  // Instance is not at Bottom like Null type.
-    cls = table->At(cid);
-    if (cls.is_abstract()) continue;
-    if (cls.is_patch()) continue;
-    if (cls.IsTopLevel()) continue;
-
-    cls_type = cls.RareType();
-    if (cls_type.IsSubtypeOf(type, NULL, NULL, Heap::kNew)) {
-      last_matching_cid = cid;
-      if (*lower_limit == -1) {
-        // Found beginning of range.
-        *lower_limit = cid;
-      } else if (*upper_limit == -1) {
-        // Expanding range.
-      } else {
-        // Found a second range.
-        lower_limits_[type_cid] = kNotContiguous;
-        return false;
-      }
-    } else {
-      if (*lower_limit == -1) {
-        // Still before range.
-      } else if (*upper_limit == -1) {
-        // Found end of range.
-        *upper_limit = last_matching_cid;
-      } else {
-        // After range.
-      }
-    }
-  }
-  if (*lower_limit == -1) {
-    // Not implemented by any concrete class.
-    *lower_limit = kIllegalCid;
-    *upper_limit = kIllegalCid;
-  }
-
-  if (*upper_limit == -1) {
-    ASSERT(last_matching_cid != -1);
-    *upper_limit = last_matching_cid;
-  }
-
-  if (FLAG_trace_precompiler) {
-    THR_Print("Type check for %s is cid range [%" Pd ", %" Pd "]\n",
-              type.ToCString(), *lower_limit, *upper_limit);
-  }
-
-  lower_limits_[type_cid] = *lower_limit;
-  upper_limits_[type_cid] = *upper_limit;
-  return true;
-}
-
 Precompiler::Precompiler(Thread* thread)
     : thread_(thread),
       zone_(NULL),
@@ -354,7 +255,6 @@
       types_to_retain_(),
       consts_to_retain_(),
       field_type_map_(),
-      type_range_cache_(NULL),
       error_(Error::Handle()),
       get_runtime_type_is_unique_(false) {}
 
@@ -375,7 +275,10 @@
       ASSERT(Error::Handle(Z, T->sticky_error()).IsNull());
 
       ClassFinalizer::SortClasses();
-      TypeRangeCache trc(this, T, I->class_table()->NumCids());
+
+      // The cid-ranges of subclasses of a class are e.g. used for is/as checks
+      // as well as other type checks.
+      HierarchyInfo hierarchy_info(T);
 
       // Precompile static initializers to compute result type information.
       PrecompileStaticInitializers();
diff --git a/runtime/vm/compiler/aot/precompiler.h b/runtime/vm/compiler/aot/precompiler.h
index 7bcb47e..c54fc75 100644
--- a/runtime/vm/compiler/aot/precompiler.h
+++ b/runtime/vm/compiler/aot/precompiler.h
@@ -343,10 +343,6 @@
   }
 
   FieldTypeMap* field_type_map() { return &field_type_map_; }
-  TypeRangeCache* type_range_cache() { return type_range_cache_; }
-  void set_type_range_cache(TypeRangeCache* value) {
-    type_range_cache_ = value;
-  }
 
   static void PopulateWithICData(const Function& func, FlowGraph* graph);
 
@@ -433,7 +429,6 @@
   AbstractTypeSet types_to_retain_;
   InstanceSet consts_to_retain_;
   FieldTypeMap field_type_map_;
-  TypeRangeCache* type_range_cache_;
   CidMap feedback_cid_map_;
   FunctionFeedbackMap function_feedback_map_;
   Error& error_;
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index 8af4c60..8c861e4 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -643,6 +643,10 @@
   void AddImmediate(Register reg, const Immediate& imm);
   void SubImmediate(Register reg, const Immediate& imm);
 
+  void CompareImmediate(Register reg, int32_t immediate) {
+    cmpl(reg, Immediate(immediate));
+  }
+
   void Drop(intptr_t stack_elements);
 
   void LoadIsolate(Register dst);
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 32d0160..e73773c 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -582,6 +582,9 @@
 
   void CompareImmediate(Register reg, const Immediate& imm);
   void CompareImmediate(const Address& address, const Immediate& imm);
+  void CompareImmediate(Register reg, int32_t immediate) {
+    return CompareImmediate(reg, Immediate(immediate));
+  }
 
   void testl(Register reg, const Immediate& imm) { testq(reg, imm); }
   void testb(const Address& address, const Immediate& imm);
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 5195eba..fc33319 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -979,7 +979,7 @@
   }
 }
 
-void ConstantPropagator::VisitMintToDouble(MintToDoubleInstr* instr) {
+void ConstantPropagator::VisitInt64ToDouble(Int64ToDoubleInstr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsConstant(value) && value.IsInteger()) {
     SetValue(instr,
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index 51d2903..516db37 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -1457,8 +1457,8 @@
   return FlowGraphCompiler::SupportsUnboxedDoubles();
 }
 
-static bool CanConvertUnboxedMintToDouble() {
-  return FlowGraphCompiler::CanConvertUnboxedMintToDouble();
+static bool CanConvertInt64ToDouble() {
+  return FlowGraphCompiler::CanConvertInt64ToDouble();
 }
 
 void FlowGraph::InsertConversion(Representation from,
@@ -1488,12 +1488,12 @@
   } else if ((from == kUnboxedInt32) && (to == kUnboxedDouble)) {
     converted = new Int32ToDoubleInstr(use->CopyWithType());
   } else if ((from == kUnboxedInt64) && (to == kUnboxedDouble) &&
-             CanConvertUnboxedMintToDouble()) {
+             CanConvertInt64ToDouble()) {
     const intptr_t deopt_id = (deopt_target != NULL)
                                   ? deopt_target->DeoptimizationTarget()
                                   : Thread::kNoDeoptId;
     ASSERT(CanUnboxDouble());
-    converted = new MintToDoubleInstr(use->CopyWithType(), deopt_id);
+    converted = new Int64ToDoubleInstr(use->CopyWithType(), deopt_id);
   } else if ((from == kTagged) && Boxing::Supports(to)) {
     const intptr_t deopt_id = (deopt_target != NULL)
                                   ? deopt_target->DeoptimizationTarget()
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 94e3379..91f5bcd 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -1148,7 +1148,7 @@
   }
 }
 
-void FlowGraphCompiler::GenerateNumberTypeCheck(Register kClassIdReg,
+void FlowGraphCompiler::GenerateNumberTypeCheck(Register class_id_reg,
                                                 const AbstractType& type,
                                                 Label* is_instance_lbl,
                                                 Label* is_not_instance_lbl) {
@@ -1164,10 +1164,10 @@
   } else if (type.IsDoubleType()) {
     args.Add(kDoubleCid);
   }
-  CheckClassIds(kClassIdReg, args, is_instance_lbl, is_not_instance_lbl);
+  CheckClassIds(class_id_reg, args, is_instance_lbl, is_not_instance_lbl);
 }
 
-void FlowGraphCompiler::GenerateStringTypeCheck(Register kClassIdReg,
+void FlowGraphCompiler::GenerateStringTypeCheck(Register class_id_reg,
                                                 Label* is_instance_lbl,
                                                 Label* is_not_instance_lbl) {
   assembler()->Comment("StringTypeCheck");
@@ -1176,10 +1176,10 @@
   args.Add(kTwoByteStringCid);
   args.Add(kExternalOneByteStringCid);
   args.Add(kExternalTwoByteStringCid);
-  CheckClassIds(kClassIdReg, args, is_instance_lbl, is_not_instance_lbl);
+  CheckClassIds(class_id_reg, args, is_instance_lbl, is_not_instance_lbl);
 }
 
-void FlowGraphCompiler::GenerateListTypeCheck(Register kClassIdReg,
+void FlowGraphCompiler::GenerateListTypeCheck(Register class_id_reg,
                                               Label* is_instance_lbl) {
   assembler()->Comment("ListTypeCheck");
   Label unknown;
@@ -1187,7 +1187,7 @@
   args.Add(kArrayCid);
   args.Add(kGrowableObjectArrayCid);
   args.Add(kImmutableArrayCid);
-  CheckClassIds(kClassIdReg, args, is_instance_lbl, &unknown);
+  CheckClassIds(class_id_reg, args, is_instance_lbl, &unknown);
   assembler()->Bind(&unknown);
 }
 #endif  // !defined(TARGET_ARCH_DBC)
@@ -1813,7 +1813,7 @@
   int bias = 0;
 
   // Value is not Smi.
-  EmitTestAndCallLoadCid();
+  EmitTestAndCallLoadCid(EmitTestCidRegister());
 
   int last_check = which_case_to_skip == length - 1 ? length - 2 : length - 1;
 
@@ -1832,7 +1832,8 @@
     Label next_test;
     if (!complete || !is_last_check) {
       bias = EmitTestAndCallCheckCid(is_last_check ? failed : &next_test,
-                                     targets[i], bias);
+                                     EmitTestCidRegister(), targets[i], bias,
+                                     /*jump_on_miss =*/true);
     }
     // Do not use the code from the function, but let the code be patched so
     // that we can record the outgoing edges to other code.
@@ -1852,6 +1853,42 @@
                                 token_index, locs, try_index);
   }
 }
+
+bool FlowGraphCompiler::GenerateSubclassTypeCheck(Register class_id_reg,
+                                                  const Class& type_class,
+                                                  Label* is_subtype) {
+  HierarchyInfo* hi = Thread::Current()->hierarchy_info();
+  if (hi != NULL) {
+    // We test up to 4 different cid ranges, if we would need to test more in
+    // order to get a definite answer we fall back to the old mechanism (namely
+    // of going into the subtyping cache)
+    static const intptr_t kMaxNumberOfCidRangesToTest = 4;
+
+    const CidRangeVector& ranges = hi->SubtypeRangesForClass(type_class);
+    if (ranges.length() <= kMaxNumberOfCidRangesToTest) {
+      Label fail;
+      int bias = 0;
+      for (intptr_t i = 0; i < ranges.length(); ++i) {
+        const CidRange& range = ranges[i];
+        if (!range.IsIllegalRange()) {
+          bias = EmitTestAndCallCheckCid(is_subtype, class_id_reg, range, bias,
+                                         /*jump_on_miss=*/false);
+        }
+      }
+      __ Bind(&fail);
+      return true;
+    }
+  }
+
+  // We don't have cid-ranges for subclasses, so we'll just test against the
+  // class directly if it's non-abstract.
+  if (!type_class.is_abstract()) {
+    __ CompareImmediate(class_id_reg, type_class.id());
+    __ BranchIf(EQUAL, is_subtype);
+  }
+  return false;
+}
+
 #undef __
 #endif
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 77fc1e3..7c10118 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -276,10 +276,10 @@
   ~FlowGraphCompiler();
 
   static bool SupportsUnboxedDoubles();
-  static bool SupportsUnboxedMints();
+  static bool SupportsUnboxedInt64();
   static bool SupportsUnboxedSimd128();
   static bool SupportsHardwareDivision();
-  static bool CanConvertUnboxedMintToDouble();
+  static bool CanConvertInt64ToDouble();
 
   static bool IsUnboxedField(const Field& field);
   static bool IsPotentialUnboxedField(const Field& field);
@@ -397,6 +397,13 @@
                                Label* is_not_instance_lbl);
   void GenerateListTypeCheck(Register kClassIdReg, Label* is_instance_lbl);
 
+  // Returns true if no further checks are necessary but the code coming after
+  // the emitted code here is still required do a runtime call (for the negative
+  // case of throwing an exception).
+  bool GenerateSubclassTypeCheck(Register class_id_reg,
+                                 const Class& type_class,
+                                 Label* is_subtype_lbl);
+
   void EmitOptimizedInstanceCall(const StubEntry& stub_entry,
                                  const ICData& ic_data,
                                  intptr_t deopt_id,
@@ -651,17 +658,22 @@
                                            intptr_t max_immediate);
 
   // More helpers for EmitTestAndCall.
+
+  static Register EmitTestCidRegister();
+
   void EmitTestAndCallLoadReceiver(intptr_t count_without_type_args,
                                    const Array& arguments_descriptor);
 
   void EmitTestAndCallSmiBranch(Label* label, bool jump_if_smi);
 
-  void EmitTestAndCallLoadCid();
+  void EmitTestAndCallLoadCid(Register class_id_reg);
 
   // Returns new class-id bias.
-  int EmitTestAndCallCheckCid(Label* next_label,
+  int EmitTestAndCallCheckCid(Label* label,
+                              Register class_id_reg,
                               const CidRange& range,
-                              int bias);
+                              int bias,
+                              bool jump_on_miss = true);
 
 // DBC handles type tests differently from all other architectures due
 // to its interpreted nature.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 95f3a38..5a7e101 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -40,7 +40,7 @@
   return TargetCPUFeatures::vfp_supported() && FLAG_unbox_doubles;
 }
 
-bool FlowGraphCompiler::SupportsUnboxedMints() {
+bool FlowGraphCompiler::SupportsUnboxedInt64() {
   return FLAG_unbox_mints;
 }
 
@@ -52,7 +52,7 @@
   return TargetCPUFeatures::can_divide();
 }
 
-bool FlowGraphCompiler::CanConvertUnboxedMintToDouble() {
+bool FlowGraphCompiler::CanConvertInt64ToDouble() {
   // ARM does not have a short instruction sequence for converting int64 to
   // double.
   return false;
@@ -378,12 +378,14 @@
     __ b(is_instance_lbl, EQ);
     return true;  // Fall through
   }
-  // Compare if the classes are equal.
-  if (!type_class.is_abstract()) {
-    __ CompareImmediate(kClassIdReg, type_class.id());
-    __ b(is_instance_lbl, EQ);
+
+  // Fast case for cid-range based checks.
+  // Warning: This code destroys the contents of [kClassIdReg].
+  if (GenerateSubclassTypeCheck(kClassIdReg, type_class, is_instance_lbl)) {
+    return false;
   }
-  // Otherwise fallthrough.
+
+  // Otherwise fallthrough, result non-conclusive.
   return true;
 }
 
@@ -1156,6 +1158,10 @@
 }
 #endif
 
+Register FlowGraphCompiler::EmitTestCidRegister() {
+  return R2;
+}
+
 void FlowGraphCompiler::EmitTestAndCallLoadReceiver(
     intptr_t count_without_type_args,
     const Array& arguments_descriptor) {
@@ -1171,22 +1177,25 @@
   __ b(label, if_smi ? EQ : NE);
 }
 
-void FlowGraphCompiler::EmitTestAndCallLoadCid() {
-  __ LoadClassId(R2, R0);
+void FlowGraphCompiler::EmitTestAndCallLoadCid(Register class_id_reg) {
+  ASSERT(class_id_reg != R0);
+  __ LoadClassId(class_id_reg, R0);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* next_label,
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+                                               Register class_id_reg,
                                                const CidRange& range,
-                                               int bias) {
+                                               int bias,
+                                               bool jump_on_miss) {
   intptr_t cid_start = range.cid_start;
   if (range.IsSingleCid()) {
-    __ CompareImmediate(R2, cid_start - bias);
-    __ b(next_label, NE);
+    __ CompareImmediate(class_id_reg, cid_start - bias);
+    __ b(label, jump_on_miss ? NE : EQ);
   } else {
-    __ AddImmediate(R2, R2, bias - cid_start);
+    __ AddImmediate(class_id_reg, class_id_reg, bias - cid_start);
     bias = cid_start;
-    __ CompareImmediate(R2, range.Extent());
-    __ b(next_label, HI);  // Unsigned higher.
+    __ CompareImmediate(class_id_reg, range.Extent());
+    __ b(label, jump_on_miss ? HI : LS);  // Unsigned higher.
   }
   return bias;
 }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index b94296b..605f983 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -38,7 +38,7 @@
   return true;
 }
 
-bool FlowGraphCompiler::SupportsUnboxedMints() {
+bool FlowGraphCompiler::SupportsUnboxedInt64() {
   return false;
 }
 
@@ -46,9 +46,8 @@
   return FLAG_enable_simd_inline;
 }
 
-bool FlowGraphCompiler::CanConvertUnboxedMintToDouble() {
-  // ARM does not have a short instruction sequence for converting int64 to
-  // double.
+bool FlowGraphCompiler::CanConvertInt64ToDouble() {
+  // Unboxed int64 are not supported on ARM64.
   return false;
 }
 
@@ -365,12 +364,14 @@
     __ b(is_instance_lbl, EQ);
     return true;  // Fall through
   }
-  // Compare if the classes are equal.
-  if (!type_class.is_abstract()) {
-    __ CompareImmediate(kClassIdReg, type_class.id());
-    __ b(is_instance_lbl, EQ);
+
+  // Fast case for cid-range based checks.
+  // Warning: This code destroys the contents of [kClassIdReg].
+  if (GenerateSubclassTypeCheck(kClassIdReg, type_class, is_instance_lbl)) {
+    return false;
   }
-  // Otherwise fallthrough.
+
+  // Otherwise fallthrough, result non-conclusive.
   return true;
 }
 
@@ -1110,6 +1111,10 @@
 }
 #endif
 
+Register FlowGraphCompiler::EmitTestCidRegister() {
+  return R2;
+}
+
 void FlowGraphCompiler::EmitTestAndCallLoadReceiver(
     intptr_t count_without_type_args,
     const Array& arguments_descriptor) {
@@ -1127,22 +1132,25 @@
   }
 }
 
-void FlowGraphCompiler::EmitTestAndCallLoadCid() {
-  __ LoadClassId(R2, R0);
+void FlowGraphCompiler::EmitTestAndCallLoadCid(Register class_id_reg) {
+  ASSERT(class_id_reg != R0);
+  __ LoadClassId(class_id_reg, R0);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* next_label,
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+                                               Register class_id_reg,
                                                const CidRange& range,
-                                               int bias) {
+                                               int bias,
+                                               bool jump_on_miss) {
   intptr_t cid_start = range.cid_start;
   if (range.IsSingleCid()) {
-    __ CompareImmediate(R2, cid_start - bias);
-    __ b(next_label, NE);
+    __ CompareImmediate(class_id_reg, cid_start - bias);
+    __ b(label, jump_on_miss ? NE : EQ);
   } else {
-    __ AddImmediate(R2, bias - cid_start);
+    __ AddImmediate(class_id_reg, bias - cid_start);
     bias = cid_start;
-    __ CompareImmediate(R2, range.Extent());
-    __ b(next_label, HI);  // Unsigned higher.
+    __ CompareImmediate(class_id_reg, range.Extent());
+    __ b(label, jump_on_miss ? HI : LS);  // Unsigned higher / less-or-equal.
   }
   return bias;
 }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc b/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
index 749da72..0e9f214 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
@@ -46,7 +46,7 @@
 #endif
 }
 
-bool FlowGraphCompiler::SupportsUnboxedMints() {
+bool FlowGraphCompiler::SupportsUnboxedInt64() {
   return false;
 }
 
@@ -58,7 +58,7 @@
   return true;
 }
 
-bool FlowGraphCompiler::CanConvertUnboxedMintToDouble() {
+bool FlowGraphCompiler::CanConvertInt64ToDouble() {
   return false;
 }
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index d2b918b..12a23c2 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -43,7 +43,7 @@
   return true;
 }
 
-bool FlowGraphCompiler::SupportsUnboxedMints() {
+bool FlowGraphCompiler::SupportsUnboxedInt64() {
   return FLAG_unbox_mints;
 }
 
@@ -55,7 +55,7 @@
   return true;
 }
 
-bool FlowGraphCompiler::CanConvertUnboxedMintToDouble() {
+bool FlowGraphCompiler::CanConvertInt64ToDouble() {
   return true;
 }
 
@@ -381,12 +381,14 @@
     __ j(EQUAL, is_instance_lbl);
     return true;  // Fall through
   }
-  // Compare if the classes are equal.
-  if (!type_class.is_abstract()) {
-    __ cmpl(kClassIdReg, Immediate(type_class.id()));
-    __ j(EQUAL, is_instance_lbl);
+
+  // Fast case for cid-range based checks.
+  // Warning: This code destroys the contents of [kClassIdReg].
+  if (GenerateSubclassTypeCheck(kClassIdReg, type_class, is_instance_lbl)) {
+    return false;
   }
-  // Otherwise fallthrough.
+
+  // Otherwise fallthrough, result non-conclusive.
   return true;
 }
 
@@ -1097,6 +1099,10 @@
 }
 #endif
 
+Register FlowGraphCompiler::EmitTestCidRegister() {
+  return EDI;
+}
+
 void FlowGraphCompiler::EmitTestAndCallLoadReceiver(
     intptr_t count_without_type_args,
     const Array& arguments_descriptor) {
@@ -1112,22 +1118,25 @@
   __ j(if_smi ? ZERO : NOT_ZERO, label);
 }
 
-void FlowGraphCompiler::EmitTestAndCallLoadCid() {
-  __ LoadClassId(EDI, EAX);
+void FlowGraphCompiler::EmitTestAndCallLoadCid(Register class_id_reg) {
+  ASSERT(class_id_reg != EAX);
+  __ LoadClassId(class_id_reg, EAX);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* next_label,
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+                                               Register class_id_reg,
                                                const CidRange& range,
-                                               int bias) {
+                                               int bias,
+                                               bool jump_on_miss) {
   intptr_t cid_start = range.cid_start;
   if (range.IsSingleCid()) {
-    __ cmpl(EDI, Immediate(cid_start - bias));
-    __ j(NOT_EQUAL, next_label);
+    __ cmpl(class_id_reg, Immediate(cid_start - bias));
+    __ j(jump_on_miss ? NOT_EQUAL : EQUAL, label);
   } else {
-    __ addl(EDI, Immediate(bias - cid_start));
+    __ addl(class_id_reg, Immediate(bias - cid_start));
     bias = cid_start;
-    __ cmpl(EDI, Immediate(range.Extent()));
-    __ j(ABOVE, next_label);  // Unsigned higher.
+    __ cmpl(class_id_reg, Immediate(range.Extent()));
+    __ j(jump_on_miss ? ABOVE : BELOW_EQUAL, label);  // Unsigned higher.
   }
   return bias;
 }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 08f36a7..20fb90d 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -39,7 +39,7 @@
   return true;
 }
 
-bool FlowGraphCompiler::SupportsUnboxedMints() {
+bool FlowGraphCompiler::SupportsUnboxedInt64() {
   return FLAG_unbox_mints;
 }
 
@@ -51,8 +51,8 @@
   return true;
 }
 
-bool FlowGraphCompiler::CanConvertUnboxedMintToDouble() {
-  return false;
+bool FlowGraphCompiler::CanConvertInt64ToDouble() {
+  return true;
 }
 
 void FlowGraphCompiler::EnterIntrinsicMode() {
@@ -379,12 +379,14 @@
     __ j(EQUAL, is_instance_lbl);
     return true;
   }
-  // Compare if the classes are equal.
-  if (!type_class.is_abstract()) {
-    __ cmpl(kClassIdReg, Immediate(type_class.id()));
-    __ j(EQUAL, is_instance_lbl);
+
+  // Fast case for cid-range based checks.
+  // Warning: This code destroys the contents of [kClassIdReg].
+  if (GenerateSubclassTypeCheck(kClassIdReg, type_class, is_instance_lbl)) {
+    return false;
   }
-  // Otherwise fallthrough.
+
+  // Otherwise fallthrough, result non-conclusive.
   return true;
 }
 
@@ -1073,6 +1075,10 @@
 }
 #endif
 
+Register FlowGraphCompiler::EmitTestCidRegister() {
+  return RDI;
+}
+
 void FlowGraphCompiler::EmitTestAndCallLoadReceiver(
     intptr_t count_without_type_args,
     const Array& arguments_descriptor) {
@@ -1088,22 +1094,26 @@
   __ j(if_smi ? ZERO : NOT_ZERO, label);
 }
 
-void FlowGraphCompiler::EmitTestAndCallLoadCid() {
-  __ LoadClassId(RDI, RAX);
+void FlowGraphCompiler::EmitTestAndCallLoadCid(Register class_id_reg) {
+  ASSERT(class_id_reg != RAX);
+  __ LoadClassId(class_id_reg, RAX);
 }
 
-int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* next_label,
+int FlowGraphCompiler::EmitTestAndCallCheckCid(Label* label,
+                                               Register class_id_reg,
                                                const CidRange& range,
-                                               int bias) {
+                                               int bias,
+                                               bool jump_on_miss) {
   intptr_t cid_start = range.cid_start;
   if (range.IsSingleCid()) {
-    __ cmpl(RDI, Immediate(cid_start - bias));
-    __ j(NOT_EQUAL, next_label);
+    __ cmpl(class_id_reg, Immediate(cid_start - bias));
+    __ j(jump_on_miss ? NOT_EQUAL : EQUAL, label);
   } else {
-    __ addl(RDI, Immediate(bias - cid_start));
+    __ addl(class_id_reg, Immediate(bias - cid_start));
     bias = cid_start;
-    __ cmpl(RDI, Immediate(range.Extent()));
-    __ j(ABOVE, next_label);  // Unsigned higher.
+    __ cmpl(class_id_reg, Immediate(range.Extent()));
+    __ j(jump_on_miss ? ABOVE : BELOW_EQUAL,
+         label);  // Unsigned higher / lower-or-equal.
   }
   return bias;
 }
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 5982b24..2ed402a 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -45,6 +45,93 @@
             "Support unboxed double and float32x4 fields.");
 DECLARE_FLAG(bool, eliminate_type_checks);
 
+const CidRangeVector& HierarchyInfo::SubtypeRangesForClass(const Class& klass) {
+  ASSERT(!klass.IsGeneric());
+
+  Zone* zone = thread_->zone();
+  ClassTable* table = thread_->isolate()->class_table();
+  const intptr_t cid_count = table->NumCids();
+  if (cid_subtype_ranges_ == NULL) {
+    cid_subtype_ranges_ = new CidRangeVector[cid_count];
+  }
+
+  CidRangeVector& ranges = cid_subtype_ranges_[klass.id()];
+  if (ranges.length() == 0) {
+    // The ranges haven't been computed yet, so let's compute them.
+
+    Class& cls = Class::Handle(zone);
+    Type& dst_type = Type::Handle(zone, Type::NewNonParameterizedType(klass));
+    AbstractType& cls_type = AbstractType::Handle(zone);
+
+    intptr_t start = -1;
+    for (intptr_t cid = kInstanceCid; cid < cid_count; ++cid) {
+      // Create local zone because deep hierarchies may allocate lots of handles
+      // within one iteration of this loop.
+      StackZone stack_zone(thread_);
+      HANDLESCOPE(thread_);
+
+      if (!table->HasValidClassAt(cid)) continue;
+      if (cid == kTypeArgumentsCid) continue;
+      if (cid == kVoidCid) continue;
+      if (cid == kDynamicCid) continue;
+      if (cid == kNullCid) continue;
+      cls = table->At(cid);
+      if (cls.is_abstract()) continue;
+      if (cls.is_patch()) continue;
+      if (cls.IsTopLevel()) continue;
+
+      cls_type = cls.RareType();
+      const bool is_subtype =
+          cls_type.IsSubtypeOf(dst_type, NULL, NULL, Heap::kNew);
+      if (start == -1 && is_subtype) {
+        start = cid;
+      } else if (start != -1 && !is_subtype) {
+        CidRange range(start, cid - 1);
+        ranges.Add(range);
+        start = -1;
+      }
+    }
+
+    if (start != -1) {
+      CidRange range(start, cid_count - 1);
+      ranges.Add(range);
+    }
+
+    if (start == -1 && ranges.length() == 0) {
+      // Not implemented by any concrete class.
+      CidRange range;
+      ASSERT(range.IsIllegalRange());
+      ranges.Add(range);
+    }
+  }
+  return ranges;
+}
+
+bool HierarchyInfo::InstanceOfHasClassRange(const AbstractType& type,
+                                            intptr_t* lower_limit,
+                                            intptr_t* upper_limit) {
+  ASSERT(type.IsFinalized() && !type.IsMalformedOrMalbounded());
+
+  if (!type.IsInstantiated() || type.IsFunctionType() ||
+      type.IsDartFunctionType()) {
+    return false;
+  }
+
+  // TODO(kustermann): Support also classes like 'class Foo extends Bar<Baz> {}'
+  Zone* zone = thread_->zone();
+  const Class& type_class = Class::Handle(zone, type.type_class());
+  if (type_class.NumTypeArguments() > 0) {
+    return false;
+  }
+  const CidRangeVector& ranges = SubtypeRangesForClass(type_class);
+  if (ranges.length() == 1) {
+    *lower_limit = ranges[0].cid_start;
+    *upper_limit = ranges[0].cid_end;
+    return true;
+  }
+  return false;
+}
+
 #if defined(DEBUG)
 void Instruction::CheckField(const Field& field) const {
   ASSERT(field.IsZoneHandle());
@@ -1778,7 +1865,7 @@
     op_cid = kSmiCid;
   } else if (Isolate::Current()->strong() && FLAG_use_strong_mode_types &&
              FLAG_limit_ints_to_64_bits &&
-             FlowGraphCompiler::SupportsUnboxedMints() &&
+             FlowGraphCompiler::SupportsUnboxedInt64() &&
              // TODO(dartbug.com/30480): handle nullable types here
              left_type->IsNullableInt() && !left_type->is_nullable() &&
              right_type->IsNullableInt() && !right_type->is_nullable()) {
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index b5d4b7f..3b57ef0 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -315,6 +315,63 @@
   DISALLOW_COPY_AND_ASSIGN(Value);
 };
 
+// Represents a range of class-ids for use in class checks and polymorphic
+// dispatches.  The range includes both ends, i.e. it is [cid_start, cid_end].
+struct CidRange : public ZoneAllocated {
+  CidRange(const CidRange& o)
+      : ZoneAllocated(), cid_start(o.cid_start), cid_end(o.cid_end) {}
+  CidRange(intptr_t cid_start_arg, intptr_t cid_end_arg)
+      : cid_start(cid_start_arg), cid_end(cid_end_arg) {}
+  CidRange() : cid_start(kIllegalCid), cid_end(kIllegalCid) {}
+
+  const CidRange& operator=(const CidRange& other) {
+    cid_start = other.cid_start;
+    cid_end = other.cid_end;
+    return *this;
+  }
+
+  bool IsSingleCid() const { return cid_start == cid_end; }
+  bool Contains(intptr_t cid) { return cid_start <= cid && cid <= cid_end; }
+  int32_t Extent() const { return cid_end - cid_start; }
+
+  // The number of class ids this range covers.
+  intptr_t size() const { return cid_end - cid_start + 1; }
+
+  bool IsIllegalRange() const {
+    return cid_start == kIllegalCid && cid_end == kIllegalCid;
+  }
+
+  intptr_t cid_start;
+  intptr_t cid_end;
+};
+
+typedef MallocGrowableArray<CidRange> CidRangeVector;
+
+class HierarchyInfo : public StackResource {
+ public:
+  explicit HierarchyInfo(Thread* thread)
+      : StackResource(thread), thread_(thread), cid_subtype_ranges_(NULL) {
+    thread->set_hierarchy_info(this);
+  }
+
+  ~HierarchyInfo() {
+    thread_->set_hierarchy_info(NULL);
+
+    delete[] cid_subtype_ranges_;
+    cid_subtype_ranges_ = NULL;
+  }
+
+  const CidRangeVector& SubtypeRangesForClass(const Class& klass);
+
+  bool InstanceOfHasClassRange(const AbstractType& type,
+                               intptr_t* lower_limit,
+                               intptr_t* upper_limit);
+
+ private:
+  Thread* thread_;
+  CidRangeVector* cid_subtype_ranges_;
+};
+
 // An embedded container with N elements of type T.  Used (with partial
 // specialization for N=0) because embedded arrays cannot have size 0.
 template <typename T, intptr_t N>
@@ -428,7 +485,7 @@
   M(CheckStackOverflow)                                                        \
   M(SmiToDouble)                                                               \
   M(Int32ToDouble)                                                             \
-  M(MintToDouble)                                                              \
+  M(Int64ToDouble)                                                             \
   M(DoubleToInteger)                                                           \
   M(DoubleToSmi)                                                               \
   M(DoubleToDouble)                                                            \
@@ -545,22 +602,6 @@
 #define PRINT_OPERANDS_TO_SUPPORT
 #endif  // !PRODUCT
 
-// Represents a range of class-ids for use in class checks and polymorphic
-// dispatches.
-struct CidRange : public ZoneAllocated {
-  CidRange(const CidRange& o)
-      : ZoneAllocated(), cid_start(o.cid_start), cid_end(o.cid_end) {}
-  CidRange(intptr_t cid_start_arg, intptr_t cid_end_arg)
-      : cid_start(cid_start_arg), cid_end(cid_end_arg) {}
-
-  bool IsSingleCid() const { return cid_start == cid_end; }
-  bool Contains(intptr_t cid) { return cid_start <= cid && cid <= cid_end; }
-  int32_t Extent() const { return cid_end - cid_start; }
-
-  intptr_t cid_start;
-  intptr_t cid_end;
-};
-
 // Together with CidRange, this represents a mapping from a range of class-ids
 // to a method for a given selector (method name).  Also can contain an
 // indication of how frequently a given method has been called at a call site.
@@ -6312,16 +6353,18 @@
   DISALLOW_COPY_AND_ASSIGN(Int32ToDoubleInstr);
 };
 
-class MintToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
+class Int64ToDoubleInstr : public TemplateDefinition<1, NoThrow, Pure> {
  public:
-  MintToDoubleInstr(Value* value, intptr_t deopt_id)
-      : TemplateDefinition(deopt_id) {
+  Int64ToDoubleInstr(Value* value,
+                     intptr_t deopt_id,
+                     SpeculativeMode speculative_mode = kGuardInputs)
+      : TemplateDefinition(deopt_id), speculative_mode_(speculative_mode) {
     SetInputAt(0, value);
   }
 
   Value* value() const { return inputs_[0]; }
 
-  DECLARE_INSTRUCTION(MintToDouble)
+  DECLARE_INSTRUCTION(Int64ToDouble)
   virtual CompileType ComputeType() const;
 
   virtual Representation RequiredInputRepresentation(intptr_t index) const {
@@ -6338,10 +6381,17 @@
   }
 
   virtual bool ComputeCanDeoptimize() const { return false; }
-  virtual bool AttributesEqual(Instruction* other) const { return true; }
+
+  virtual SpeculativeMode speculative_mode() const { return speculative_mode_; }
+
+  virtual bool AttributesEqual(Instruction* other) const {
+    return speculative_mode() == other->AsInt64ToDouble()->speculative_mode();
+  }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(MintToDoubleInstr);
+  const SpeculativeMode speculative_mode_;
+
+  DISALLOW_COPY_AND_ASSIGN(Int64ToDoubleInstr);
 };
 
 class DoubleToIntegerInstr : public TemplateDefinition<1, Throws> {
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 3f48338..0cac243 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -5050,13 +5050,13 @@
   __ vcvtdi(result, STMP);
 }
 
-LocationSummary* MintToDoubleInstr::MakeLocationSummary(Zone* zone,
-                                                        bool opt) const {
+LocationSummary* Int64ToDoubleInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
   UNIMPLEMENTED();
   return NULL;
 }
 
-void MintToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int64ToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 2826114..182d697 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -4290,13 +4290,13 @@
   __ scvtfdx(result, TMP);
 }
 
-LocationSummary* MintToDoubleInstr::MakeLocationSummary(Zone* zone,
-                                                        bool opt) const {
+LocationSummary* Int64ToDoubleInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
   UNIMPLEMENTED();
   return NULL;
 }
 
-void MintToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int64ToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/compiler/backend/il_dbc.cc b/runtime/vm/compiler/backend/il_dbc.cc
index 0cdde47..bb75c7c 100644
--- a/runtime/vm/compiler/backend/il_dbc.cc
+++ b/runtime/vm/compiler/backend/il_dbc.cc
@@ -56,7 +56,7 @@
   M(GenericCheckBound)                                                         \
   M(CheckNull)                                                                 \
   M(IndirectGoto)                                                              \
-  M(MintToDouble)                                                              \
+  M(Int64ToDouble)                                                             \
   M(BinaryInt64Op)                                                             \
   M(ShiftInt64Op)                                                              \
   M(UnaryInt64Op)                                                              \
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index 52fbe2c..f8bd071 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -4515,8 +4515,8 @@
   __ cvtsi2sd(result, value);
 }
 
-LocationSummary* MintToDoubleInstr::MakeLocationSummary(Zone* zone,
-                                                        bool opt) const {
+LocationSummary* Int64ToDoubleInstr::MakeLocationSummary(Zone* zone,
+                                                         bool opt) const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* result = new (zone)
@@ -4527,7 +4527,7 @@
   return result;
 }
 
-void MintToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int64ToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   PairLocation* pair = locs()->in(0).AsPairLocation();
   Register in_lo = pair->At(0).reg();
   Register in_hi = pair->At(1).reg();
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index 31bf621..532fec3 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -4456,14 +4456,8 @@
   __ cvtsi2sdq(result, value);
 }
 
-LocationSummary* MintToDoubleInstr::MakeLocationSummary(Zone* zone,
-                                                        bool opt) const {
-  UNIMPLEMENTED();
-  return NULL;
-}
-
-void MintToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+DEFINE_BACKEND(Int64ToDouble, (FpuRegister result, Register value)) {
+  __ cvtsi2sdq(result, value);
 }
 
 LocationSummary* DoubleToIntegerInstr::MakeLocationSummary(Zone* zone,
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 5fa342f..74b9b45 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -2263,7 +2263,7 @@
 static bool CanUnboxInt32() {
   // Int32/Uint32 can be unboxed if it fits into a smi or the platform
   // supports unboxed mints.
-  return (kSmiBits >= 32) || FlowGraphCompiler::SupportsUnboxedMints();
+  return (kSmiBits >= 32) || FlowGraphCompiler::SupportsUnboxedInt64();
 }
 
 // Quick access to the current one.
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index b8042bd..2520f4b 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -1419,7 +1419,7 @@
   return CompileType::FromCid(kDoubleCid);
 }
 
-CompileType MintToDoubleInstr::ComputeType() const {
+CompileType Int64ToDoubleInstr::ComputeType() const {
   return CompileType::FromCid(kDoubleCid);
 }
 
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index 3d85d3a..da16741 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -23,8 +23,8 @@
   return FlowGraphCompiler::SupportsUnboxedDoubles();
 }
 
-static bool CanConvertUnboxedMintToDouble() {
-  return FlowGraphCompiler::CanConvertUnboxedMintToDouble();
+static bool CanConvertInt64ToDouble() {
+  return FlowGraphCompiler::CanConvertInt64ToDouble();
 }
 
 static bool IsNumberCid(intptr_t cid) {
@@ -512,7 +512,7 @@
                  call->env(), FlowGraph::kEffect);
     cid = kSmiCid;
   } else if (HasTwoMintOrSmi(ic_data) &&
-             FlowGraphCompiler::SupportsUnboxedMints()) {
+             FlowGraphCompiler::SupportsUnboxedInt64()) {
     cid = kMintCid;
   } else if (HasTwoDoubleOrSmi(ic_data) && CanUnboxDouble()) {
     // Use double comparison.
@@ -593,7 +593,7 @@
                  call->env(), FlowGraph::kEffect);
     cid = kSmiCid;
   } else if (HasTwoMintOrSmi(ic_data) &&
-             FlowGraphCompiler::SupportsUnboxedMints()) {
+             FlowGraphCompiler::SupportsUnboxedInt64()) {
     cid = kMintCid;
   } else if (HasTwoDoubleOrSmi(ic_data) && CanUnboxDouble()) {
     // Use double comparison.
@@ -640,7 +640,7 @@
                             ? kMintCid
                             : kSmiCid;
       } else if (HasTwoMintOrSmi(ic_data) &&
-                 FlowGraphCompiler::SupportsUnboxedMints()) {
+                 FlowGraphCompiler::SupportsUnboxedInt64()) {
         // Don't generate mint code if the IC data is marked because of an
         // overflow.
         if (ic_data.HasDeoptReason(ICData::kDeoptBinaryInt64Op)) return false;
@@ -750,7 +750,7 @@
                             call->deopt_id(), call->token_pos());
     ReplaceCall(call, double_bin_op);
   } else if (operands_type == kMintCid) {
-    if (!FlowGraphCompiler::SupportsUnboxedMints()) return false;
+    if (!FlowGraphCompiler::SupportsUnboxedInt64()) return false;
     if ((op_kind == Token::kSHR) || (op_kind == Token::kSHL)) {
       ShiftInt64OpInstr* shift_op = new (Z) ShiftInt64OpInstr(
           op_kind, new (Z) Value(left), new (Z) Value(right), call->deopt_id());
@@ -826,7 +826,7 @@
         UnarySmiOpInstr(op_kind, new (Z) Value(input), call->deopt_id());
   } else if ((op_kind == Token::kBIT_NOT) &&
              HasOnlySmiOrMint(*call->ic_data()) &&
-             FlowGraphCompiler::SupportsUnboxedMints()) {
+             FlowGraphCompiler::SupportsUnboxedInt64()) {
     unary_op = new (Z)
         UnaryInt64OpInstr(op_kind, new (Z) Value(input), call->deopt_id());
   } else if (HasOnlyOneDouble(*call->ic_data()) &&
@@ -1068,11 +1068,11 @@
                   new (Z) SmiToDoubleInstr(new (Z) Value(call->ArgumentAt(0)),
                                            call->token_pos()));
       return true;
-    } else if ((class_ids[0] == kMintCid) && CanConvertUnboxedMintToDouble()) {
+    } else if ((class_ids[0] == kMintCid) && CanConvertInt64ToDouble()) {
       AddReceiverCheck(call);
       ReplaceCall(call,
-                  new (Z) MintToDoubleInstr(new (Z) Value(call->ArgumentAt(0)),
-                                            call->deopt_id()));
+                  new (Z) Int64ToDoubleInstr(new (Z) Value(call->ArgumentAt(0)),
+                                             call->deopt_id()));
       return true;
     }
   }
@@ -1535,10 +1535,10 @@
                                                          call->token_pos()));
               return;
             } else if (ArgIsAlways(kMintCid, ic_data, 1) &&
-                       CanConvertUnboxedMintToDouble()) {
+                       CanConvertInt64ToDouble()) {
               Definition* arg = call->ArgumentAt(1);
-              ReplaceCall(call, new (Z) MintToDoubleInstr(new (Z) Value(arg),
-                                                          call->deopt_id()));
+              ReplaceCall(call, new (Z) Int64ToDoubleInstr(new (Z) Value(arg),
+                                                           call->deopt_id()));
               return;
             }
           }
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 7f22976..34a3d71 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -23,7 +23,6 @@
 namespace dart {
 
 DECLARE_FLAG(bool, verify_acquired_data);
-DECLARE_FLAG(bool, ignore_patch_signature_mismatch);
 DECLARE_FLAG(bool, use_dart_frontend);
 
 #ifndef PRODUCT
@@ -6321,120 +6320,6 @@
   EXPECT_EQ(42, value);
 }
 
-TEST_CASE(DartAPI_LoadPatchSignatureMismatch) {
-  // This tests the sort of APIs with intentional signature mismatches we need
-  // for typed Dart-JavaScript interop where we emulated JavaScript semantics
-  // for optional arguments.
-  const char* kLibrary1Chars = "library library1_name;";
-  const char* kSourceChars =
-      "part of library1_name;\n"
-      "external int foo([int x]);\n"
-      "class Foo<T extends Foo> {\n"
-      "  external static int addDefault10([int x, int y]);\n"
-      "}";
-  const char* kPatchChars =
-      "const _UNDEFINED = const Object();\n"
-      "@patch foo([x=_UNDEFINED]) => identical(x, _UNDEFINED) ? 42 : x;\n"
-      "@patch class Foo<T> {\n"
-      "  static addDefault10([x=_UNDEFINED, y=_UNDEFINED]) {\n"
-      "    if (identical(x, _UNDEFINED)) x = 10;\n"
-      "    if (identical(y, _UNDEFINED)) y = 10;\n"
-      "    return x + y;\n"
-      "  }\n"
-      "}";
-
-  bool old_flag_value = FLAG_ignore_patch_signature_mismatch;
-  FLAG_ignore_patch_signature_mismatch = true;
-
-  // Load up a library.
-  Dart_Handle url = NewString("library1_url");
-  Dart_Handle source = NewString(kLibrary1Chars);
-  Dart_Handle lib = Dart_LoadLibrary(url, Dart_Null(), source, 0, 0);
-  EXPECT_VALID(lib);
-  EXPECT(Dart_IsLibrary(lib));
-
-  url = NewString("source_url");
-  source = NewString(kSourceChars);
-
-  Dart_Handle result = Dart_LoadSource(lib, url, Dart_Null(), source, 0, 0);
-  EXPECT_VALID(result);
-
-  url = NewString("patch_url");
-  source = NewString(kPatchChars);
-
-  result = Dart_LibraryLoadPatch(lib, url, source);
-  EXPECT_VALID(result);
-  result = Dart_FinalizeLoading(false);
-  EXPECT_VALID(result);
-
-  // Test a top level method
-  {
-    result = Dart_Invoke(lib, NewString("foo"), 0, NULL);
-    EXPECT_VALID(result);
-    EXPECT(Dart_IsInteger(result));
-    int64_t value = 0;
-    EXPECT_VALID(Dart_IntegerToInt64(result, &value));
-    EXPECT_EQ(42, value);
-  }
-
-  {
-    Dart_Handle dart_args[1];
-    dart_args[0] = Dart_Null();
-    result = Dart_Invoke(lib, NewString("foo"), 1, dart_args);
-    EXPECT_VALID(result);
-    EXPECT(Dart_IsNull(result));
-  }
-
-  {
-    Dart_Handle dart_args[1];
-    dart_args[0] = Dart_NewInteger(100);
-    result = Dart_Invoke(lib, NewString("foo"), 1, dart_args);
-    EXPECT_VALID(result);
-    EXPECT(Dart_IsInteger(result));
-    int64_t value = 0;
-    EXPECT_VALID(Dart_IntegerToInt64(result, &value));
-    EXPECT_EQ(100, value);
-  }
-
-  // Test static method
-  Dart_Handle type = Dart_GetType(lib, NewString("Foo"), 0, NULL);
-  EXPECT_VALID(type);
-
-  {
-    result = Dart_Invoke(type, NewString("addDefault10"), 0, NULL);
-    EXPECT_VALID(result);
-    EXPECT(Dart_IsInteger(result));
-    int64_t value = 0;
-    EXPECT_VALID(Dart_IntegerToInt64(result, &value));
-    EXPECT_EQ(20, value);
-  }
-
-  {
-    Dart_Handle dart_args[1];
-    dart_args[0] = Dart_NewInteger(100);
-    result = Dart_Invoke(type, NewString("addDefault10"), 1, dart_args);
-    EXPECT_VALID(result);
-    EXPECT(Dart_IsInteger(result));
-    int64_t value = 0;
-    EXPECT_VALID(Dart_IntegerToInt64(result, &value));
-    EXPECT_EQ(110, value);
-  }
-
-  {
-    Dart_Handle dart_args[2];
-    dart_args[0] = Dart_NewInteger(100);
-    dart_args[1] = Dart_NewInteger(100);
-    result = Dart_Invoke(type, NewString("addDefault10"), 2, dart_args);
-    EXPECT_VALID(result);
-    EXPECT(Dart_IsInteger(result));
-    int64_t value = 0;
-    EXPECT_VALID(Dart_IntegerToInt64(result, &value));
-    EXPECT_EQ(200, value);
-  }
-
-  FLAG_ignore_patch_signature_mismatch = old_flag_value;
-}
-
 static void PatchNativeFunction(Dart_NativeArguments args) {
   Dart_EnterScope();
   Dart_SetReturnValue(args, Dart_Null());
diff --git a/runtime/vm/hash_table.h b/runtime/vm/hash_table.h
index 06b97d3..7045230 100644
--- a/runtime/vm/hash_table.h
+++ b/runtime/vm/hash_table.h
@@ -113,9 +113,12 @@
   // Returns a backing storage size such that 'num_occupied' distinct keys can
   // be inserted into the table.
   static intptr_t ArrayLengthForNumOccupied(intptr_t num_occupied) {
-    // The current invariant requires at least one unoccupied entry.
-    // TODO(koda): Adjust if moving to quadratic probing.
-    intptr_t num_entries = num_occupied + 1;
+    // Because we use quadratic (actually triangle number) probing it is
+    // important that the size is a power of two (otherwise we could fail to
+    // find an empty slot).  This is described in Knuth's The Art of Computer
+    // Programming Volume 2, Chapter 6.4, exercise 20 (solution in the
+    // appendix, 2nd edition).
+    intptr_t num_entries = Utils::RoundUpToPowerOfTwo(num_occupied + 1);
     return kFirstKeyIndex + (kEntrySize * num_entries);
   }
 
@@ -131,6 +134,7 @@
     data_->SetAt(kNumLT5LookupsIndex, *smi_handle_);
     data_->SetAt(kNumLT25LookupsIndex, *smi_handle_);
     data_->SetAt(kNumGT25LookupsIndex, *smi_handle_);
+    data_->SetAt(kNumProbesIndex, *smi_handle_);
 #endif  // !defined(PRODUCT)
 
     for (intptr_t i = kHeaderSize; i < data_->Length(); ++i) {
@@ -152,8 +156,9 @@
     // TODO(koda): Add salt.
     NOT_IN_PRODUCT(intptr_t collisions = 0;)
     uword hash = KeyTraits::Hash(key);
-    intptr_t probe = hash % num_entries;
-    // TODO(koda): Consider quadratic probing.
+    ASSERT(Utils::IsPowerOfTwo(num_entries));
+    intptr_t probe = hash & (num_entries - 1);
+    int probe_distance = 1;
     while (true) {
       if (IsUnused(probe)) {
         NOT_IN_PRODUCT(UpdateCollisions(collisions);)
@@ -166,9 +171,10 @@
         }
         NOT_IN_PRODUCT(collisions += 1;)
       }
-      // Advance probe.
-      probe++;
-      probe = (probe == num_entries) ? 0 : probe;
+      // Advance probe.  See ArrayLengthForNumOccupied comment for
+      // explanation of how we know this hits all slots.
+      probe = (probe + probe_distance) & (num_entries - 1);
+      probe_distance++;
     }
     UNREACHABLE();
     return -1;
@@ -185,9 +191,10 @@
     ASSERT(NumOccupied() < num_entries);
     NOT_IN_PRODUCT(intptr_t collisions = 0;)
     uword hash = KeyTraits::Hash(key);
-    intptr_t probe = hash % num_entries;
+    ASSERT(Utils::IsPowerOfTwo(num_entries));
+    intptr_t probe = hash & (num_entries - 1);
+    int probe_distance = 1;
     intptr_t deleted = -1;
-    // TODO(koda): Consider quadratic probing.
     while (true) {
       if (IsUnused(probe)) {
         *entry = (deleted != -1) ? deleted : probe;
@@ -206,9 +213,10 @@
         }
         NOT_IN_PRODUCT(collisions += 1;)
       }
-      // Advance probe.
-      probe++;
-      probe = (probe == num_entries) ? 0 : probe;
+      // Advance probe.  See ArrayLengthForNumOccupied comment for
+      // explanation of how we know this hits all slots.
+      probe = (probe + probe_distance) & (num_entries - 1);
+      probe_distance++;
     }
     UNREACHABLE();
     return false;
@@ -286,6 +294,7 @@
   intptr_t NumGT25Collisions() const {
     return GetSmiValueAt(kNumGT25LookupsIndex);
   }
+  intptr_t NumProbes() const { return GetSmiValueAt(kNumProbesIndex); }
   void UpdateGrowth() const {
     if (KeyTraits::ReportStats()) {
       AdjustSmiValueAt(kNumGrowsIndex, 1);
@@ -296,6 +305,7 @@
       if (data_->raw()->IsVMHeapObject()) {
         return;
       }
+      AdjustSmiValueAt(kNumProbesIndex, collisions + 1);
       if (collisions < 5) {
         AdjustSmiValueAt(kNumLT5LookupsIndex, 1);
       } else if (collisions < 25) {
@@ -309,17 +319,21 @@
     if (!KeyTraits::ReportStats()) {
       return;
     }
+    const intptr_t num5 = NumLT5Collisions();
+    const intptr_t num25 = NumLT25Collisions();
+    const intptr_t num_more = NumGT25Collisions();
     // clang-format off
     OS::Print("Stats for %s table :\n"
               " Size of table = %" Pd ",Number of Occupied entries = %" Pd "\n"
               " Number of Grows = %" Pd "\n"
-              " Number of look ups with < 5 collisions = %" Pd "\n"
-              " Number of look ups with < 25 collisions = %" Pd "\n"
-              " Number of look ups with > 25 collisions = %" Pd "\n",
+              " Number of lookups with < 5 collisions = %" Pd "\n"
+              " Number of lookups with < 25 collisions = %" Pd "\n"
+              " Number of lookups with > 25 collisions = %" Pd "\n"
+              " Average number of probes = %g\n",
               KeyTraits::Name(),
-              NumEntries(), NumOccupied(),
-              NumGrows(),
-              NumLT5Collisions(), NumLT25Collisions(), NumGT25Collisions());
+              NumEntries(), NumOccupied(), NumGrows(),
+              num5, num25, num_more,
+              static_cast<double>(NumProbes()) / (num5 + num25 + num_more));
     // clang-format on
   }
 #endif  // !PRODUCT
@@ -334,7 +348,8 @@
   static const intptr_t kNumLT5LookupsIndex = 3;
   static const intptr_t kNumLT25LookupsIndex = 4;
   static const intptr_t kNumGT25LookupsIndex = 5;
-  static const intptr_t kHeaderSize = kNumGT25LookupsIndex + 1;
+  static const intptr_t kNumProbesIndex = 6;
+  static const intptr_t kHeaderSize = kNumProbesIndex + 1;
 #endif
   static const intptr_t kMetaDataIndex = kHeaderSize;
   static const intptr_t kFirstKeyIndex = kHeaderSize + kMetaDataSize;
@@ -462,15 +477,28 @@
   }
 
   template <typename Table>
-  static void EnsureLoadFactor(double low, double high, const Table& table) {
-    double current = (1 + table.NumOccupied() + table.NumDeleted()) /
-                     static_cast<double>(table.NumEntries());
-    if (low <= current && current < high) {
+  static void EnsureLoadFactor(double high, const Table& table) {
+    // We count deleted elements because they take up space just
+    // like occupied slots in order to cause a rehashing.
+    const double current = (1 + table.NumOccupied() + table.NumDeleted()) /
+                           static_cast<double>(table.NumEntries());
+    const bool too_many_deleted = table.NumOccupied() <= table.NumDeleted();
+    if (current < high && !too_many_deleted) {
       return;
     }
-    double target = (low + high) / 2.0;
-    intptr_t new_capacity = (1 + table.NumOccupied()) / target;
-    Table new_table(New<Table>(new_capacity,
+    // Normally we double the size here, but if less than half are occupied
+    // then it won't grow (this would imply that there were quite a lot of
+    // deleted slots).  We don't want to constantly rehash if we are adding
+    // and deleting entries at just under the load factor limit, so we may
+    // double the size even though the number of occupied slots would not
+    // necessarily justify it.  For example if the max load factor is 71% and
+    // the table is 70% full we will double the size to avoid a rehash every
+    // time 1% has been added and deleted.
+    const intptr_t new_capacity = table.NumOccupied() * 2 + 1;
+    ASSERT(table.NumOccupied() == 0 ||
+           ((1.0 + table.NumOccupied()) /
+            Utils::RoundUpToPowerOfTwo(new_capacity)) <= high);
+    Table new_table(New<Table>(new_capacity,  // Is rounded up to power of 2.
                                table.data_->IsOld() ? Heap::kOld : Heap::kNew));
     Copy(table, new_table);
     *table.data_ = new_table.Release().raw();
@@ -579,9 +607,8 @@
 
  protected:
   void EnsureCapacity() const {
-    static const double kMaxLoadFactor = 0.75;
-    // We currently never shrink.
-    HashTables::EnsureLoadFactor(0.0, kMaxLoadFactor, *this);
+    static const double kMaxLoadFactor = 0.71;
+    HashTables::EnsureLoadFactor(kMaxLoadFactor, *this);
   }
 };
 
@@ -666,9 +693,8 @@
 
  protected:
   void EnsureCapacity() const {
-    static const double kMaxLoadFactor = 0.75;
-    // We currently never shrink.
-    HashTables::EnsureLoadFactor(0.0, kMaxLoadFactor, *this);
+    static const double kMaxLoadFactor = 0.71;
+    HashTables::EnsureLoadFactor(kMaxLoadFactor, *this);
   }
 };
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 17bbc19..92edc6f 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -189,10 +189,6 @@
   class_table()->Register(cls);
 }
 
-void Isolate::RegisterClassAt(intptr_t index, const Class& cls) {
-  class_table()->RegisterAt(index, cls);
-}
-
 #if defined(DEBUG)
 void Isolate::ValidateClassTable() {
   class_table()->Validate();
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 85e8c46..aef8f40 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -184,7 +184,6 @@
 
   // Register a newly introduced class.
   void RegisterClass(const Class& cls);
-  void RegisterClassAt(intptr_t index, const Class& cls);
 #if defined(DEBUG)
   void ValidateClassTable();
 #endif
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index f2e7227..56ed9e6 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -177,7 +177,8 @@
                0),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
-      potential_natives_(GrowableObjectArray::Handle(Z)) {
+      potential_natives_(GrowableObjectArray::Handle(Z)),
+      potential_extension_libraries_(GrowableObjectArray::Handle(Z)) {
   if (!program->is_single_program()) {
     FATAL(
         "Trying to load a concatenated dill file at a time where that is "
@@ -349,7 +350,8 @@
       builder_(&translation_helper_, script, zone_, kernel_data, 0),
       external_name_class_(Class::Handle(Z)),
       external_name_field_(Field::Handle(Z)),
-      potential_natives_(GrowableObjectArray::Handle(Z)) {
+      potential_natives_(GrowableObjectArray::Handle(Z)),
+      potential_extension_libraries_(GrowableObjectArray::Handle(Z)) {
   T.active_class_ = &active_class_;
   T.finalize_ = false;
 
@@ -435,6 +437,112 @@
   }
 }
 
+RawString* KernelLoader::DetectExternalName() {
+  builder_.ReadTag();
+  builder_.ReadPosition();
+  NameIndex annotation_class = H.EnclosingName(
+      builder_.ReadCanonicalNameReference());  // read target reference,
+  ASSERT(H.IsClass(annotation_class));
+  StringIndex class_name_index = H.CanonicalNameString(annotation_class);
+
+  // Just compare by name, do not generate the annotation class.
+  if (!H.StringEquals(class_name_index, "ExternalName")) {
+    builder_.SkipArguments();
+    return String::null();
+  }
+  ASSERT(H.IsLibrary(H.CanonicalNameParent(annotation_class)));
+  StringIndex library_name_index =
+      H.CanonicalNameString(H.CanonicalNameParent(annotation_class));
+  if (!H.StringEquals(library_name_index, "dart:_internal")) {
+    builder_.SkipArguments();
+    return String::null();
+  }
+
+  // Read arguments:
+  intptr_t total_arguments = builder_.ReadUInt();  // read argument count.
+  builder_.SkipListOfDartTypes();                  // read list of types.
+  intptr_t positional_arguments = builder_.ReadListLength();
+  ASSERT(total_arguments == 1 && positional_arguments == 1);
+
+  Tag tag = builder_.ReadTag();
+  ASSERT(tag == kStringLiteral);
+  String& result = H.DartSymbol(
+      builder_.ReadStringReference());  // read index into string table.
+
+  // List of named.
+  intptr_t list_length = builder_.ReadListLength();  // read list length.
+  ASSERT(list_length == 0);
+
+  return result.raw();
+}
+
+void KernelLoader::LoadNativeExtensionLibraries(const Array& constant_table) {
+  const intptr_t length = !potential_extension_libraries_.IsNull()
+                              ? potential_extension_libraries_.Length()
+                              : 0;
+  if (length == 0) return;
+
+  // Obtain `dart:_internal::ExternalName.name`.
+  EnsureExternalClassIsLookedUp();
+
+  Instance& constant = Instance::Handle(Z);
+  String& uri_path = String::Handle(Z);
+  Library& library = Library::Handle(Z);
+  Object& result = Object::Handle(Z);
+
+  for (intptr_t i = 0; i < length; ++i) {
+    library ^= potential_extension_libraries_.At(i);
+    builder_.SetOffset(library.kernel_offset());
+
+    LibraryHelper library_helper(&builder_);
+    library_helper.ReadUntilExcluding(LibraryHelper::kAnnotations);
+
+    const intptr_t annotation_count = builder_.ReadListLength();
+    for (intptr_t j = 0; j < annotation_count; ++j) {
+      uri_path = String::null();
+
+      const intptr_t tag = builder_.PeekTag();
+      if (tag == kConstantExpression) {
+        builder_.ReadByte();  // Skip the tag.
+
+        const intptr_t constant_table_index = builder_.ReadUInt();
+        constant ^= constant_table.At(constant_table_index);
+        if (constant.clazz() == external_name_class_.raw()) {
+          uri_path ^= constant.GetField(external_name_field_);
+        }
+      } else if (tag == kConstructorInvocation ||
+                 tag == kConstConstructorInvocation) {
+        uri_path = DetectExternalName();
+      } else {
+        builder_.SkipExpression();
+      }
+
+      if (uri_path.IsNull()) continue;
+
+      Dart_LibraryTagHandler handler = I->library_tag_handler();
+      if (handler == NULL) {
+        H.ReportError("no library handler registered.");
+      }
+
+      I->BlockClassFinalization();
+      {
+        TransitionVMToNative transition(thread_);
+        Api::Scope api_scope(thread_);
+        Dart_Handle retval = handler(Dart_kImportResolvedExtensionTag,
+                                     Api::NewHandle(thread_, library.raw()),
+                                     Api::NewHandle(thread_, uri_path.raw()));
+        result = Api::UnwrapHandle(retval);
+      }
+      I->UnblockClassFinalization();
+
+      if (result.IsError()) {
+        H.ReportError(Error::Cast(result), "library handler failed");
+      }
+    }
+  }
+  potential_extension_libraries_ = GrowableObjectArray::null();
+}
+
 Object& KernelLoader::LoadProgram(bool process_pending_classes) {
   ASSERT(kernel_program_info_.constants() == Array::null());
 
@@ -468,9 +576,10 @@
     //     b) set the native names for native functions which have been created
     //        so far (the rest will be directly set during LoadProcedure)
     AnnotateNativeProcedures(constants);
-    ASSERT(kernel_program_info_.constants() == Array::null());
+    LoadNativeExtensionLibraries(constants);
 
     //     c) update all scripts with the constants array
+    ASSERT(kernel_program_info_.constants() == Array::null());
     kernel_program_info_.set_constants(constants);
 
     NameIndex main = program_->main_method();
@@ -629,6 +738,17 @@
   const Script& script = Script::Handle(
       Z, ScriptAt(library_helper.source_uri_index_, import_uri_index));
 
+  library_helper.ReadUntilExcluding(LibraryHelper::kAnnotations);
+  intptr_t annotation_count = builder_.ReadListLength();  // read list length.
+  if (annotation_count > 0) {
+    EnsurePotentialExtensionLibraries();
+    potential_extension_libraries_.Add(library);
+  }
+  for (intptr_t i = 0; i < annotation_count; ++i) {
+    builder_.SkipExpression();  // read ith annotation.
+  }
+  library_helper.SetJustRead(LibraryHelper::kAnnotations);
+
   library_helper.ReadUntilExcluding(LibraryHelper::kDependencies);
   LoadLibraryImportsAndExports(&library);
   library_helper.SetJustRead(LibraryHelper::kDependencies);
@@ -1072,46 +1192,16 @@
     for (int i = 0; i < annotation_count; ++i) {
       const intptr_t tag = builder_.PeekTag();
       if (tag == kConstructorInvocation || tag == kConstConstructorInvocation) {
-        builder_.ReadTag();
-        builder_.ReadPosition();
-        NameIndex annotation_class = H.EnclosingName(
-            builder_.ReadCanonicalNameReference());  // read target reference,
-        ASSERT(H.IsClass(annotation_class));
-        StringIndex class_name_index = H.CanonicalNameString(annotation_class);
-        // Just compare by name, do not generate the annotation class.
-        if (!H.StringEquals(class_name_index, "ExternalName")) {
-          builder_.SkipArguments();
-          continue;
-        }
-        ASSERT(H.IsLibrary(H.CanonicalNameParent(annotation_class)));
-        StringIndex library_name_index =
-            H.CanonicalNameString(H.CanonicalNameParent(annotation_class));
-        if (!H.StringEquals(library_name_index, "dart:_internal")) {
-          builder_.SkipArguments();
-          continue;
-        }
+        String& detected_name = String::Handle(DetectExternalName());
+        if (detected_name.IsNull()) continue;
 
         is_external = false;
-        // Read arguments:
-        intptr_t total_arguments = builder_.ReadUInt();  // read argument count.
-        builder_.SkipListOfDartTypes();                  // read list of types.
-        intptr_t positional_arguments = builder_.ReadListLength();
-        ASSERT(total_arguments == 1 && positional_arguments == 1);
-
-        Tag tag = builder_.ReadTag();
-        ASSERT(tag == kStringLiteral);
-        native_name = &H.DartSymbol(
-            builder_.ReadStringReference());  // read index into string table.
-
-        // List of named.
-        intptr_t list_length = builder_.ReadListLength();  // read list length.
-        ASSERT(list_length == 0);
+        native_name = &detected_name;
 
         // Skip remaining annotations
         for (++i; i < annotation_count; ++i) {
           builder_.SkipExpression();  // read ith annotation.
         }
-        break;
       } else if (tag == kConstantExpression) {
         if (kernel_program_info_.constants() == Array::null()) {
           // We can only read in the constant table once all classes have been
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 5acf8fd..126405b 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -141,7 +141,9 @@
   static void FinishLoading(const Class& klass);
 
   const Array& ReadConstantTable();
+  RawString* DetectExternalName();
   void AnnotateNativeProcedures(const Array& constant_table);
+  void LoadNativeExtensionLibraries(const Array& constant_table);
 
   const String& DartSymbol(StringIndex index) {
     return translation_helper_.DartSymbol(index);
@@ -252,6 +254,12 @@
     }
   }
 
+  void EnsurePotentialExtensionLibraries() {
+    if (potential_extension_libraries_.IsNull()) {
+      potential_extension_libraries_ = GrowableObjectArray::New();
+    }
+  }
+
   Program* program_;
 
   Thread* thread_;
@@ -277,6 +285,7 @@
   Class& external_name_class_;
   Field& external_name_field_;
   GrowableObjectArray& potential_natives_;
+  GrowableObjectArray& potential_extension_libraries_;
 
   Mapping<Library> libraries_;
   Mapping<Class> classes_;
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 3264ed9..9287b8b 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -72,10 +72,6 @@
     "instead of showing the corresponding interface names (e.g. \"String\")");
 DEFINE_FLAG(bool, use_lib_cache, true, "Use library name cache");
 DEFINE_FLAG(bool, use_exp_cache, true, "Use library exported name cache");
-DEFINE_FLAG(bool,
-            ignore_patch_signature_mismatch,
-            false,
-            "Ignore patch file member signature mismatch.");
 
 DEFINE_FLAG(bool,
             remove_script_timestamps_for_test,
@@ -3010,8 +3006,6 @@
   Array& patch_list = Array::Handle(patch.functions());
   intptr_t patch_len = patch_list.Length();
 
-  // TODO(iposva): Verify that only patching existing methods and adding only
-  // new private methods.
   Function& func = Function::Handle();
   Function& orig_func = Function::Handle();
   // Lookup the original implicit constructor, if any.
@@ -3038,8 +3032,7 @@
         new_functions.Add(orig_func);
       }
     } else if (func.UserVisibleSignature() !=
-                   orig_func.UserVisibleSignature() &&
-               !FLAG_ignore_patch_signature_mismatch) {
+               orig_func.UserVisibleSignature()) {
       // Compare user visible signatures to ignore different implicit parameters
       // when patching a constructor with a factory.
       *error = LanguageError::NewFormatted(
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 4c030df..a9abbd7 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -86,7 +86,7 @@
 int OS::GetLocalTimeZoneAdjustmentInSeconds() {
   int32_t local_offset, dst_offset;
   zx_status_t status = GetLocalAndDstOffsetInSeconds(
-      zx_time_get(ZX_CLOCK_UTC) / ZX_SEC(1), &local_offset, &dst_offset);
+      zx_clock_get(ZX_CLOCK_UTC) / ZX_SEC(1), &local_offset, &dst_offset);
   return status == ZX_OK ? local_offset : 0;
 }
 
@@ -95,11 +95,11 @@
 }
 
 int64_t OS::GetCurrentTimeMicros() {
-  return zx_time_get(ZX_CLOCK_UTC) / kNanosecondsPerMicrosecond;
+  return zx_clock_get(ZX_CLOCK_UTC) / kNanosecondsPerMicrosecond;
 }
 
 int64_t OS::GetCurrentMonotonicTicks() {
-  return zx_time_get(ZX_CLOCK_MONOTONIC);
+  return zx_clock_get(ZX_CLOCK_MONOTONIC);
 }
 
 int64_t OS::GetCurrentMonotonicFrequency() {
@@ -113,7 +113,7 @@
 }
 
 int64_t OS::GetCurrentThreadCPUMicros() {
-  return zx_time_get(ZX_CLOCK_THREAD) / kNanosecondsPerMicrosecond;
+  return zx_clock_get(ZX_CLOCK_THREAD) / kNanosecondsPerMicrosecond;
 }
 
 // TODO(5411554):  May need to hoist these architecture dependent code
diff --git a/runtime/vm/os_thread_fuchsia.cc b/runtime/vm/os_thread_fuchsia.cc
index e5afc47..cae2552 100644
--- a/runtime/vm/os_thread_fuchsia.cc
+++ b/runtime/vm/os_thread_fuchsia.cc
@@ -57,7 +57,7 @@
 
 static void ComputeTimeSpecMicros(struct timespec* ts, int64_t micros) {
   // time in nanoseconds.
-  zx_time_t now = zx_time_get(ZX_CLOCK_MONOTONIC);
+  zx_time_t now = zx_clock_get(ZX_CLOCK_MONOTONIC);
   zx_time_t target = now + (micros * kNanosecondsPerMicrosecond);
   int64_t secs = target / kNanosecondsPerSecond;
   int64_t nanos = target - (secs * kNanosecondsPerSecond);
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index e80abb7..5ea02e7 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -60,7 +60,6 @@
 
 DECLARE_FLAG(bool, profile_vm);
 DECLARE_FLAG(bool, trace_service);
-DECLARE_FLAG(bool, ignore_patch_signature_mismatch);
 
 // Quick access to the current thread, isolate and zone.
 #define T (thread())
@@ -4895,37 +4894,35 @@
                   "class '%s' must be patched with identical type parameters",
                   class_name.ToCString());
     }
-    if (!FLAG_ignore_patch_signature_mismatch) {
-      TypeParameter& new_type_param = TypeParameter::Handle(Z);
-      TypeParameter& orig_type_param = TypeParameter::Handle(Z);
-      String& new_name = String::Handle(Z);
-      String& orig_name = String::Handle(Z);
-      AbstractType& new_bound = AbstractType::Handle(Z);
-      AbstractType& orig_bound = AbstractType::Handle(Z);
-      for (int i = 0; i < new_type_params_count; i++) {
-        new_type_param ^= new_type_parameters.TypeAt(i);
-        orig_type_param ^= orig_type_parameters.TypeAt(i);
-        new_name = new_type_param.name();
-        orig_name = orig_type_param.name();
-        if (!new_name.Equals(orig_name)) {
-          ReportError(new_type_param.token_pos(),
-                      "type parameter '%s' of patch class '%s' does not match "
-                      "original type parameter '%s'",
-                      new_name.ToCString(), class_name.ToCString(),
-                      orig_name.ToCString());
-        }
-        new_bound = new_type_param.bound();
-        orig_bound = orig_type_param.bound();
-        if (!new_bound.Equals(orig_bound)) {
-          ReportError(new_type_param.token_pos(),
-                      "bound '%s' of type parameter '%s' of patch class '%s' "
-                      "does not match original type parameter bound '%s'",
-                      String::Handle(new_bound.UserVisibleName()).ToCString(),
-                      new_name.ToCString(), class_name.ToCString(),
-                      String::Handle(orig_bound.UserVisibleName()).ToCString());
-        }
+    TypeParameter& new_type_param = TypeParameter::Handle(Z);
+    TypeParameter& orig_type_param = TypeParameter::Handle(Z);
+    String& new_name = String::Handle(Z);
+    String& orig_name = String::Handle(Z);
+    AbstractType& new_bound = AbstractType::Handle(Z);
+    AbstractType& orig_bound = AbstractType::Handle(Z);
+    for (int i = 0; i < new_type_params_count; i++) {
+      new_type_param ^= new_type_parameters.TypeAt(i);
+      orig_type_param ^= orig_type_parameters.TypeAt(i);
+      new_name = new_type_param.name();
+      orig_name = orig_type_param.name();
+      if (!new_name.Equals(orig_name)) {
+        ReportError(new_type_param.token_pos(),
+                    "type parameter '%s' of patch class '%s' does not match "
+                    "original type parameter '%s'",
+                    new_name.ToCString(), class_name.ToCString(),
+                    orig_name.ToCString());
       }
-    }
+      new_bound = new_type_param.bound();
+      orig_bound = orig_type_param.bound();
+      if (!new_bound.Equals(orig_bound)) {
+        ReportError(new_type_param.token_pos(),
+                    "bound '%s' of type parameter '%s' of patch class '%s' "
+                    "does not match original type parameter bound '%s'",
+                    String::Handle(new_bound.UserVisibleName()).ToCString(),
+                    new_name.ToCString(), class_name.ToCString(),
+                    String::Handle(orig_bound.UserVisibleName()).ToCString());
+      }
+      }
     cls.set_type_parameters(orig_type_parameters);
   }
 
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index 1f30c46..7e2e787 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -2396,6 +2396,8 @@
   }
 }
 
+static const intptr_t kRootFrameId = 0;
+
 void Profile::PrintTimelineFrameJSON(JSONObject* frames,
                                      ProfileTrieNode* current,
                                      ProfileTrieNode* parent,
@@ -2406,7 +2408,7 @@
   current->set_frame_id(id);
   ASSERT(current->frame_id() != -1);
 
-  {
+  if (id != kRootFrameId) {
     // The samples from many isolates may be merged into a single timeline,
     // so prefix frames id with the isolate.
     intptr_t isolate_id = reinterpret_cast<intptr_t>(isolate_);
@@ -2416,7 +2418,7 @@
     frame.AddProperty("category", "Dart");
     ProfileFunction* func = GetFunction(current->table_index());
     frame.AddProperty("name", func->Name());
-    if (parent != NULL) {
+    if ((parent != NULL) && (parent->frame_id() != kRootFrameId)) {
       ASSERT(parent->frame_id() != -1);
       frame.AddPropertyF("parent", "%" Pd "-%" Pd, isolate_id,
                          parent->frame_id());
@@ -2437,7 +2439,7 @@
   {
     JSONObject frames(&obj, "stackFrames");
     ProfileTrieNode* root = GetTrieRoot(kInclusiveFunction);
-    intptr_t next_id = 0;
+    intptr_t next_id = kRootFrameId;
     PrintTimelineFrameJSON(&frames, root, NULL, &next_id);
   }
   {
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 76d1c95..a18a345 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2544,7 +2544,7 @@
   writer->Write<double>(ptr()->value_[1]);
 }
 
-#define TYPED_DATA_READ(setter, type)                                          \
+#define TYPED_DATA_READ(setter, type, element_size)                            \
   for (intptr_t i = 0; i < length_in_bytes; i += element_size) {               \
     result.Set##setter(i, reader->Read<type>());                               \
   }
@@ -2575,28 +2575,37 @@
       break;
     }
     case kTypedDataInt16ArrayCid:
-      TYPED_DATA_READ(Int16, int16_t);
+      TYPED_DATA_READ(Int16, int16_t, element_size);
       break;
     case kTypedDataUint16ArrayCid:
-      TYPED_DATA_READ(Uint16, uint16_t);
+      TYPED_DATA_READ(Uint16, uint16_t, element_size);
       break;
     case kTypedDataInt32ArrayCid:
-      TYPED_DATA_READ(Int32, int32_t);
+      TYPED_DATA_READ(Int32, int32_t, element_size);
       break;
     case kTypedDataUint32ArrayCid:
-      TYPED_DATA_READ(Uint32, uint32_t);
+      TYPED_DATA_READ(Uint32, uint32_t, element_size);
       break;
     case kTypedDataInt64ArrayCid:
-      TYPED_DATA_READ(Int64, int64_t);
+      TYPED_DATA_READ(Int64, int64_t, element_size);
       break;
     case kTypedDataUint64ArrayCid:
-      TYPED_DATA_READ(Uint64, uint64_t);
+      TYPED_DATA_READ(Uint64, uint64_t, element_size);
       break;
     case kTypedDataFloat32ArrayCid:
-      TYPED_DATA_READ(Float32, float);
+      TYPED_DATA_READ(Float32, float, element_size);
       break;
     case kTypedDataFloat64ArrayCid:
-      TYPED_DATA_READ(Float64, double);
+      TYPED_DATA_READ(Float64, double, element_size);
+      break;
+    case kTypedDataInt32x4ArrayCid:
+      TYPED_DATA_READ(Int32, int32_t, sizeof(int32_t));
+      break;
+    case kTypedDataFloat32x4ArrayCid:
+      TYPED_DATA_READ(Float32, float, sizeof(float));
+      break;
+    case kTypedDataFloat64x2ArrayCid:
+      TYPED_DATA_READ(Float64, double, sizeof(double));
       break;
     default:
       UNREACHABLE();
@@ -2636,10 +2645,10 @@
   return obj.raw();
 }
 
-#define TYPED_DATA_WRITE(type)                                                 \
+#define TYPED_DATA_WRITE(type, len)                                            \
   {                                                                            \
     type* data = reinterpret_cast<type*>(ptr()->data());                       \
-    for (intptr_t i = 0; i < len; i++) {                                       \
+    for (intptr_t i = 0; i < (len); i++) {                                     \
       writer->Write(data[i]);                                                  \
     }                                                                          \
   }
@@ -2672,47 +2681,56 @@
       break;
     }
     case kTypedDataInt16ArrayCid:
-      TYPED_DATA_WRITE(int16_t);
+      TYPED_DATA_WRITE(int16_t, len);
       break;
     case kTypedDataUint16ArrayCid:
-      TYPED_DATA_WRITE(uint16_t);
+      TYPED_DATA_WRITE(uint16_t, len);
       break;
     case kTypedDataInt32ArrayCid:
-      TYPED_DATA_WRITE(int32_t);
+      TYPED_DATA_WRITE(int32_t, len);
       break;
     case kTypedDataUint32ArrayCid:
-      TYPED_DATA_WRITE(uint32_t);
+      TYPED_DATA_WRITE(uint32_t, len);
       break;
     case kTypedDataInt64ArrayCid:
-      TYPED_DATA_WRITE(int64_t);
+      TYPED_DATA_WRITE(int64_t, len);
       break;
     case kTypedDataUint64ArrayCid:
-      TYPED_DATA_WRITE(uint64_t);
+      TYPED_DATA_WRITE(uint64_t, len);
       break;
     case kTypedDataFloat32ArrayCid:
-      TYPED_DATA_WRITE(float);  // NOLINT.
+      TYPED_DATA_WRITE(float, len);  // NOLINT.
       break;
     case kTypedDataFloat64ArrayCid:
-      TYPED_DATA_WRITE(double);  // NOLINT.
+      TYPED_DATA_WRITE(double, len);  // NOLINT.
+      break;
+    case kTypedDataInt32x4ArrayCid:
+      TYPED_DATA_WRITE(int32_t, len * 4);  // NOLINT.
+      break;
+    case kTypedDataFloat32x4ArrayCid:
+      TYPED_DATA_WRITE(float, len * 4);  // NOLINT.
+      break;
+    case kTypedDataFloat64x2ArrayCid:
+      TYPED_DATA_WRITE(double, len * 2);  // NOLINT.
       break;
     default:
       UNREACHABLE();
   }
 }
 
-#define TYPED_EXT_DATA_WRITE(type)                                             \
+#define TYPED_EXT_DATA_WRITE(type, len)                                        \
   {                                                                            \
     type* data = reinterpret_cast<type*>(ptr()->data_);                        \
-    for (intptr_t i = 0; i < len; i++) {                                       \
+    for (intptr_t i = 0; i < (len); i++) {                                     \
       writer->Write(data[i]);                                                  \
     }                                                                          \
   }
 
-#define EXT_TYPED_DATA_WRITE(cid, type)                                        \
+#define EXT_TYPED_DATA_WRITE(cid, type, len)                                   \
   writer->WriteIndexedObject(cid);                                             \
   writer->WriteTags(writer->GetObjectTags(this));                              \
   writer->Write<RawObject*>(ptr()->length_);                                   \
-  TYPED_EXT_DATA_WRITE(type)
+  TYPED_EXT_DATA_WRITE(type, len)
 
 void RawExternalTypedData::WriteTo(SnapshotWriter* writer,
                                    intptr_t object_id,
@@ -2727,37 +2745,46 @@
 
   switch (cid) {
     case kExternalTypedDataInt8ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt8ArrayCid, int8_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataInt8ArrayCid, int8_t, len);
       break;
     case kExternalTypedDataUint8ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint8ArrayCid, uint8_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataUint8ArrayCid, uint8_t, len);
       break;
     case kExternalTypedDataUint8ClampedArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint8ClampedArrayCid, uint8_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataUint8ClampedArrayCid, uint8_t, len);
       break;
     case kExternalTypedDataInt16ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt16ArrayCid, int16_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataInt16ArrayCid, int16_t, len);
       break;
     case kExternalTypedDataUint16ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint16ArrayCid, uint16_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataUint16ArrayCid, uint16_t, len);
       break;
     case kExternalTypedDataInt32ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt32ArrayCid, int32_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataInt32ArrayCid, int32_t, len);
       break;
     case kExternalTypedDataUint32ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint32ArrayCid, uint32_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataUint32ArrayCid, uint32_t, len);
       break;
     case kExternalTypedDataInt64ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataInt64ArrayCid, int64_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataInt64ArrayCid, int64_t, len);
       break;
     case kExternalTypedDataUint64ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataUint64ArrayCid, uint64_t);
+      EXT_TYPED_DATA_WRITE(kTypedDataUint64ArrayCid, uint64_t, len);
       break;
     case kExternalTypedDataFloat32ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataFloat32ArrayCid, float);  // NOLINT.
+      EXT_TYPED_DATA_WRITE(kTypedDataFloat32ArrayCid, float, len);  // NOLINT.
       break;
     case kExternalTypedDataFloat64ArrayCid:
-      EXT_TYPED_DATA_WRITE(kTypedDataFloat64ArrayCid, double);  // NOLINT.
+      EXT_TYPED_DATA_WRITE(kTypedDataFloat64ArrayCid, double, len);  // NOLINT.
+      break;
+    case kExternalTypedDataInt32x4ArrayCid:
+      EXT_TYPED_DATA_WRITE(kTypedDataInt32x4ArrayCid, int32_t, len * 4);
+      break;
+    case kExternalTypedDataFloat32x4ArrayCid:
+      EXT_TYPED_DATA_WRITE(kTypedDataFloat32x4ArrayCid, float, len * 4);
+      break;
+    case kExternalTypedDataFloat64x2ArrayCid:
+      EXT_TYPED_DATA_WRITE(kTypedDataFloat64x2ArrayCid, double, len * 2);
       break;
     default:
       UNREACHABLE();
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 51f3cd9..981b1dc 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -92,6 +92,7 @@
       deferred_interrupts_(0),
       stack_overflow_count_(0),
       cha_(NULL),
+      hierarchy_info_(NULL),
       deopt_id_(0),
       pending_functions_(GrowableObjectArray::null()),
       active_exception_(Object::null()),
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 7d5d50b..ec32052 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -31,6 +31,7 @@
 class GrowableObjectArray;
 class HandleScope;
 class Heap;
+class HierarchyInfo;
 class Instance;
 class Isolate;
 class Library;
@@ -335,6 +336,18 @@
     cha_ = value;
   }
 
+  HierarchyInfo* hierarchy_info() const {
+    ASSERT(isolate_ != NULL);
+    return hierarchy_info_;
+  }
+
+  void set_hierarchy_info(HierarchyInfo* value) {
+    ASSERT(isolate_ != NULL);
+    ASSERT((hierarchy_info_ == NULL && value != NULL) ||
+           (hierarchy_info_ != NULL && value == NULL));
+    hierarchy_info_ = value;
+  }
+
   int32_t no_callback_scope_depth() const { return no_callback_scope_depth_; }
 
   void IncrementNoCallbackScopeDepth() {
@@ -774,6 +787,7 @@
 
   // Compiler state:
   CHA* cha_;
+  HierarchyInfo* hierarchy_info_;
   intptr_t deopt_id_;  // Compilation specific counter.
   RawGrowableObjectArray* pending_functions_;
 
diff --git a/sdk/lib/_internal/js_runtime/lib/io_patch.dart b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
index b71ae548..0e98946 100644
--- a/sdk/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
@@ -533,7 +533,7 @@
 @patch
 class _StdIOUtils {
   @patch
-  static Stdin _getStdioInputStream() {
+  static Stdin _getStdioInputStream(int fd) {
     throw new UnsupportedError("StdIOUtils._getStdioInputStream");
   }
 
diff --git a/sdk/lib/async/broadcast_stream_controller.dart b/sdk/lib/async/broadcast_stream_controller.dart
index 198f96c..2bcb539 100644
--- a/sdk/lib/async/broadcast_stream_controller.dart
+++ b/sdk/lib/async/broadcast_stream_controller.dart
@@ -279,10 +279,10 @@
 
   Future get done => _ensureDoneFuture();
 
-  Future addStream(Stream<T> stream, {bool cancelOnError: true}) {
+  Future addStream(Stream<T> stream, {bool cancelOnError}) {
     if (!_mayAddEvent) throw _addEventError();
     _state |= _STATE_ADDSTREAM;
-    _addStreamState = new _AddStreamState(this, stream, cancelOnError);
+    _addStreamState = new _AddStreamState(this, stream, cancelOnError ?? true);
     return _addStreamState.addStreamFuture;
   }
 
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index e64b4be..7bbc70e 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -1972,6 +1972,15 @@
 }
 
 /**
+ * Base class for implementing [StreamTransformer].
+ *
+ * Contains default implementations of every method except [bind].
+ */
+abstract class StreamTransformerBase<S, T> implements StreamTransformer<S, T> {
+  const StreamTransformerBase();
+}
+
+/**
  * An [Iterator] like interface for the values of a [Stream].
  *
  * This wraps a [Stream] and a subscription on the stream. It listens
diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
index b5fc27b..8b89163e 100644
--- a/sdk/lib/async/stream_controller.dart
+++ b/sdk/lib/async/stream_controller.dart
@@ -271,8 +271,9 @@
    * 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.
    */
-  Future addStream(Stream<T> source, {bool cancelOnError: true});
+  Future addStream(Stream<T> source, {bool cancelOnError});
 }
 
 /**
@@ -549,12 +550,12 @@
   }
 
   // StreamSink interface.
-  Future addStream(Stream<T> source, {bool cancelOnError: true}) {
+  Future addStream(Stream<T> source, {bool cancelOnError}) {
     if (!_mayAddEvent) throw _badEventState();
     if (_isCanceled) return new _Future.immediate(null);
     _StreamControllerAddStreamState<T> addState =
         new _StreamControllerAddStreamState<T>(
-            this, _varData, source, cancelOnError);
+            this, _varData, source, cancelOnError ?? true);
     _varData = addState;
     _state |= _STATE_ADDSTREAM;
     return addState.addStreamFuture;
@@ -862,7 +863,7 @@
   }
 
   Future close() => _target.close();
-  Future addStream(Stream<T> source, {bool cancelOnError: true}) =>
+  Future addStream(Stream<T> source, {bool cancelOnError}) =>
       _target.addStream(source, cancelOnError: cancelOnError);
   Future get done => _target.done;
 }
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 0eb0458..a5c6212 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -9605,6 +9605,12 @@
         options: {'create': true, 'exclusive': exclusive});
   }
 
+  DirectoryReader createReader() {
+    DirectoryReader reader = _createReader();
+    applyExtension('DirectoryReader', reader);
+    return reader;
+  }
+
   /**
    * Retrieve an already existing directory entry. The returned future will
    * result in an error if a directory at `path` does not exist or if the item
@@ -9637,9 +9643,10 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @JSName('createReader')
   @DomName('DirectoryEntry.createReader')
   @DocsEditable()
-  DirectoryReader createReader() native;
+  DirectoryReader _createReader() native;
 
   @DomName('DirectoryEntry.getDirectory')
   @DocsEditable()
@@ -9773,11 +9780,10 @@
     return completer.future;
   }
 }
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2013, 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.
 
-@DocsEditable()
 @DomName('DirectoryReader')
 // http://www.w3.org/TR/file-system-api/#the-directoryreader-interface
 @Experimental()
@@ -9794,16 +9800,16 @@
   void _readEntries(_EntriesCallback successCallback,
       [_ErrorCallback errorCallback]) native;
 
-  @JSName('readEntries')
   @DomName('DirectoryReader.readEntries')
   @DocsEditable()
   Future<List<Entry>> readEntries() {
     var completer = new Completer<List<Entry>>();
     _readEntries((value) {
-      completer.complete(value);
+      completer.complete(new List<Entry>.from(value));
     }, (error) {
       completer.completeError(error);
     });
+
     return completer.future;
   }
 }
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 430698c..0869856 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -62,10 +62,14 @@
   static String stringOf(CodeUnits u) => u._string;
 }
 
-/// Marks a function as an external implementation ("native" in the Dart VM).
+/// Marks a function or library as having an external implementation ("native"
+/// in the Dart VM).
 ///
-/// Provides a backend-specific String that can be used to identify the
-/// function's implementation.
+/// On a function, this provides a backend-specific String that can be used to
+/// identify the function's implementation.
+///
+/// On a library, it provides a Uri that can be used to locate the native
+/// library's implementation.
 class ExternalName {
   final String name;
   const ExternalName(this.name);
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index 53090f7..c0a0543 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -168,7 +168,6 @@
   }
 
   _FileStreamConsumer.fromStdio(int fd) {
-    assert(1 <= fd && fd <= 2);
     _openFuture = new Future.value(_File._openStdioSync(fd));
   }
 
diff --git a/sdk/lib/io/process.dart b/sdk/lib/io/process.dart
index 9438840..5cd5951 100644
--- a/sdk/lib/io/process.dart
+++ b/sdk/lib/io/process.dart
@@ -141,12 +141,15 @@
   /// Normal child process.
   NORMAL,
 
+  /// Stdio handles are inherited by the child process.
+  INHERIT_STDIO,
+
   /// Detached child process with no open communication channel.
   DETACHED,
 
   /// Detached child process with stdin, stdout and stderr still open
   /// for communication with the child.
-  DETACHED_WITH_STDIO
+  DETACHED_WITH_STDIO,
 }
 
 /**
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index d8fdcec..09f2698 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -29,7 +29,9 @@
  * Mixing synchronous and asynchronous reads is undefined.
  */
 class Stdin extends _StdStream implements Stream<List<int>> {
-  Stdin._(Stream<List<int>> stream) : super(stream);
+  int _fd;
+
+  Stdin._(Stream<List<int>> stream, this._fd) : super(stream);
 
   /**
    * Synchronously read a line from stdin. This call will block until a full
@@ -369,10 +371,23 @@
 Stdout _stdout;
 Stdout _stderr;
 
+// These may be set to different values by the embedder by calling
+// _setStdioFDs when initializing dart:io.
+int _stdinFD = 0;
+int _stdoutFD = 1;
+int _stderrFD = 2;
+
+// This is an embedder entrypoint.
+void _setStdioFDs(int stdin, int stdout, int stderr) {
+  _stdinFD = stdin;
+  _stdoutFD = stdout;
+  _stderrFD = stderr;
+}
+
 /// The standard input stream of data read by this program.
 Stdin get stdin {
   if (_stdin == null) {
-    _stdin = _StdIOUtils._getStdioInputStream();
+    _stdin = _StdIOUtils._getStdioInputStream(_stdinFD);
   }
   return _stdin;
 }
@@ -380,7 +395,7 @@
 /// The standard output stream of data written by this program.
 Stdout get stdout {
   if (_stdout == null) {
-    _stdout = _StdIOUtils._getStdioOutputStream(1);
+    _stdout = _StdIOUtils._getStdioOutputStream(_stdoutFD);
   }
   return _stdout;
 }
@@ -388,7 +403,7 @@
 /// The standard output stream of errors written by this program.
 Stdout get stderr {
   if (_stderr == null) {
-    _stderr = _StdIOUtils._getStdioOutputStream(2);
+    _stderr = _StdIOUtils._getStdioOutputStream(_stderrFD);
   }
   return _stderr;
 }
@@ -399,7 +414,8 @@
   if (object is _StdStream) {
     object = object._stream;
   } else if (object == stdout || object == stderr) {
-    switch (_StdIOUtils._getStdioHandleType(object == stdout ? 1 : 2)) {
+    int stdiofd = object == stdout ? _stdoutFD : _stderrFD;
+    switch (_StdIOUtils._getStdioHandleType(stdiofd)) {
       case _STDIO_HANDLE_TYPE_TERMINAL:
         return StdioType.TERMINAL;
       case _STDIO_HANDLE_TYPE_PIPE:
@@ -437,7 +453,7 @@
 
 class _StdIOUtils {
   external static _getStdioOutputStream(int fd);
-  external static Stdin _getStdioInputStream();
+  external static Stdin _getStdioInputStream(int fd);
 
   /// Returns the socket type or `null` if [socket] is not a builtin socket.
   external static int _socketType(Socket socket);
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 574c8c1..f6c1323 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -120,6 +120,10 @@
 Language/Types/Interface_Types/subtype_t27: Skip # Times out or crashes. Issue 21174
 Language/Types/Interface_Types/subtype_t28: Pass, Fail, Crash # Stack overflow. Issue 25282
 Language/Types/Interface_Types/subtype_t30: Fail # Issue 14654
+Language/Types/Type_Void/syntax_t01: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t04: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t05: MissingCompileTimeError, Crash
+Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
 Language/Variables/final_t01/01: CompileTimeError # co19 issue 77
 Language/Variables/final_t02/01: CompileTimeError # co19 issue 77
 Language/Variables/local_variable_t01: MissingCompileTimeError # Issue 21050
@@ -1252,6 +1256,26 @@
 LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: RuntimeError, Pass # Please triage this flake
 LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError, Pass # Please triage this flake
 LayoutTests/fast/canvas/webgl/triangle_t01: RuntimeError, Pass # Please triage this flake
+LayoutTests/fast/css/background-clip-text_t01: RuntimeError
+LayoutTests/fast/css/border-radius-property-value_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-clip_t01: RuntimeError
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError
+LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash_t01: RuntimeError
+LayoutTests/fast/dom/Window/getMatchedCSSRules-null-crash_t01: RuntimeError
+LayoutTests/fast/dom/Window/getMatchedCSSRules-parent-stylesheets_t01: RuntimeError
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-invalid-pseudo-elements_t01: RuntimeError
+LayoutTests/fast/dom/Window/getMatchedCSSRules-with-pseudo-elements_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/insertion-point-list-menu-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/insertion-point-shadow-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/insertion-point-video-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/nested-reprojection-inconsistent_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-aware-shadow-root_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-js-api_t01: RuntimeError
+LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError
+LayoutTests/fast/dom/shadow/style-sharing-styles-in-older-shadow-roots_t01: RuntimeError
 LayoutTests/fast/multicol/newmulticol/balance_t04: RuntimeError # Please triage this failure
 LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError # Please triage this failure
@@ -1260,6 +1284,16 @@
 LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
 LibTest/math/log_A01_t01: RuntimeError # Please triage this failure
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/composition/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/rendering-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError
 
 [ $compiler == dart2js && $runtime == chrome && $system == macos ]
 Language/Expressions/Function_Invocation/async_invokation_t04: RuntimeError # Please triage this failure
@@ -1502,7 +1536,6 @@
 LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: RuntimeError # Please triage this failure
@@ -1510,38 +1543,23 @@
 LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/canvas-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/canvas-test_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/context-lost-restored_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/context-lost-restored_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/context-lost_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/css-webkit-canvas-repaint_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/css-webkit-canvas_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/error-reporting_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/framebuffer-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/framebuffer-test_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: Pass, RuntimeError # Issue 29634
@@ -1604,101 +1622,59 @@
 LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/point-size_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/point-size_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/program-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/program-test_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/read-pixels-test_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/shader-precision-format_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/shader-precision-format_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-input-validation_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texImageTest_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/texture-active-bind_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/texture-color-profile_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texture-complete_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texture-npot_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/texture-npot_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/triangle_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/triangle_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/uniform-location_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/uninitialized-test_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-specific_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: Pass, RuntimeError # Issue 29634
-LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Skip # Times out.
 LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Skip # Times out.
 LayoutTests/fast/css-generated-content/pseudo-transition_t01: RuntimeError # Please triage this failure
@@ -2426,7 +2402,6 @@
 LayoutTests/fast/canvas/canvas-composite-canvas_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-composite-image_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/canvas/canvas-currentColor_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError # Feature is not implemented.
 LayoutTests/fast/canvas/canvas-ellipse-zero-lineto_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-empty-image-pattern_t01: RuntimeError # Please triage this failure
@@ -7063,9 +7038,6 @@
 Language/Metadata/compilation_t11: Pass # mirrors not supported, fails for the wrong reason
 WebPlatformTest/shadow-dom/testcommon: Fail # mirrors not supported
 
-[ $compiler == dart2js && $host_checked ]
-Language/Types/Function_Types/call_t01: Crash # Issue 28894
-
 [ $compiler == dart2js && $jscl ]
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError, OK # This is not rejected by V8. Issue 22200
 LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: RuntimeError # Issue 22200
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 907d7df..d599d4ec 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -9,6 +9,11 @@
 Language/Expressions/Strings/adjacent_strings_t02: RuntimeError
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t03: CompileTimeError
 Language/Metadata/before_type_param_t01: RuntimeError
+Language/Types/Type_Void/syntax_t02: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t04: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t05: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t08: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t09: MissingCompileTimeError # tests need fixing
 LibTest/isolate/Isolate/spawnUri_A01_t03: Pass, Timeout
 
 [ $compiler == dartkp ]
@@ -21,16 +26,17 @@
 Language/Expressions/Constants/depending_on_itself_t02: MissingCompileTimeError
 Language/Expressions/Constants/depending_on_itself_t02: Crash # New entries after going from kernel-service to batch-mode compilation. Please investigate.
 Language/Expressions/Constants/depending_on_itself_t03: Crash
-Language/Expressions/Null/extend_or_implement_t02: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
-Language/Expressions/Null/extend_or_implement_t03: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
-Language/Expressions/Null/extend_or_implement_t04: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
-Language/Expressions/Null/extend_or_implement_t05: MissingCompileTimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t03: CompileTimeError
 Language/Mixins/Mixin_Application/syntax_t16: RuntimeError # New entries after going from kernel-service to batch-mode compilation. Please investigate.
 Language/Overview/Scoping/hiding_declaration_t11: Crash
 Language/Overview/Scoping/hiding_declaration_t11: Pass
 Language/Overview/Scoping/hiding_declaration_t12: Crash
 Language/Overview/Scoping/hiding_declaration_t12: Pass
+Language/Types/Type_Void/syntax_t02: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t04: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t05: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t08: MissingCompileTimeError # tests need fixing
+Language/Types/Type_Void/syntax_t09: MissingCompileTimeError # tests need fixing
 
 [ $fasta ]
 Language/Mixins/Mixin_Application/syntax_t20: CompileTimeError
@@ -57,10 +63,6 @@
 Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError # Please triaage.
 Language/Classes/Superinterfaces/superclass_as_superinterface_t01: MissingCompileTimeError # Please triaage.
 Language/Classes/definition_t23: RuntimeError # Please triaage.
-Language/Expressions/Null/extend_or_implement_t02: MissingCompileTimeError # Please triaage.
-Language/Expressions/Null/extend_or_implement_t03: MissingCompileTimeError # Please triaage.
-Language/Expressions/Null/extend_or_implement_t04: MissingCompileTimeError # Please triaage.
-Language/Expressions/Null/extend_or_implement_t05: MissingCompileTimeError # Please triaage.
 Language/Expressions/Spawning_an_Isolate/*: Skip
 Language/Mixins/Mixin_Application/syntax_t16: RuntimeError # Please triaage.
 LibTest/isolate/*/*: Skip
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index b350ad7..e423b3e 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -176,6 +176,13 @@
 LibTest/collection/ListBase/ListBase_class_A01_t02: Pass, Slow
 LibTest/collection/ListMixin/ListMixin_class_A01_t02: Pass, Slow
 
+[ $fasta ]
+Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: Crash
+Language/Expressions/Constants/constant_list_t02: MissingCompileTimeError
+Language/Expressions/Constants/constant_map_t02: MissingCompileTimeError
+Language/Expressions/Instance_Creation/Const/arguments_t03: MissingCompileTimeError
+Language/Expressions/Maps/constant_map_t02: MissingCompileTimeError
+
 [ $arch == arm64 && ($compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
 LibTest/collection/ListBase/ListBase_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
 LibTest/collection/ListMixin/ListMixin_class_A01_t02: Skip # co19 issue 673, These tests take too much memory (300 MB) for our 1 GB test machine co19 issue 673. http://code.google.com/p/co19/issues/detail?id=673
diff --git a/tests/compiler/dart2js/closure/closure_test.dart b/tests/compiler/dart2js/closure/closure_test.dart
index 0e8f954..9cd4a87 100644
--- a/tests/compiler/dart2js/closure/closure_test.dart
+++ b/tests/compiler/dart2js/closure/closure_test.dart
@@ -283,7 +283,7 @@
 
   /// Compute a string representation of the data stored for [local] in [info].
   String computeLocalValue(Local local) {
-    List<String> features = <String>[];
+    Features features = new Features();
     if (scopeInfo.localIsUsedInTryOrSync(local)) {
       features.add('inTry');
       // TODO(johnniwinther,efortuna): Should this be enabled and checked?
@@ -306,11 +306,11 @@
       }
     }
     // TODO(johnniwinther,efortuna): Add more info?
-    return (features.toList()..sort()).join(',');
+    return features.getText();
   }
 
   String computeObjectValue(MemberEntity member) {
-    Map<String, String> features = <String, String>{};
+    Features features = new Features();
 
     void addLocals(String name, forEach(f(Local local, _))) {
       List<String> names = <String>[];
@@ -353,22 +353,6 @@
       }
     }
 
-    StringBuffer sb = new StringBuffer();
-    bool needsComma = false;
-    for (String name in features.keys.toList()..sort()) {
-      String value = features[name];
-      if (value != null) {
-        if (needsComma) {
-          sb.write(',');
-        }
-        sb.write(name);
-        if (value != '') {
-          sb.write('=');
-          sb.write(value);
-        }
-        needsComma = true;
-      }
-    }
-    return sb.toString();
+    return features.getText();
   }
 }
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index f9c5d2d..5ae9e53 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -36,6 +36,7 @@
 old_frontend/patch_test/bug: RuntimeError # Issue 21132
 packages/*: Skip # Skip packages folder
 quarantined/http_test: Pass, Slow
+rti/rti_need_test: Pass, Slow
 serialization/analysis1_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/analysis3_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
 serialization/analysis4_test: Skip # Skip most serialization tests. These are very slow and are no longer a priority.
diff --git a/tests/compiler/dart2js/equivalence/check_functions.dart b/tests/compiler/dart2js/equivalence/check_functions.dart
index 7b38373..a0fd52d 100644
--- a/tests/compiler/dart2js/equivalence/check_functions.dart
+++ b/tests/compiler/dart2js/equivalence/check_functions.dart
@@ -1039,15 +1039,15 @@
       verbose: verbose);
 
   checkSets(
-      emitter1.typeTestRegistry.checkedFunctionTypes,
-      emitter2.typeTestRegistry.checkedFunctionTypes,
+      emitter1.typeTestRegistry.rtiChecks.checkedFunctionTypes,
+      emitter2.typeTestRegistry.rtiChecks.checkedFunctionTypes,
       "TypeTestRegistry checked function types mismatch",
       strategy.typeEquivalence,
       verbose: verbose);
 
   checkSets(
-      emitter1.typeTestRegistry.checkedClasses,
-      emitter2.typeTestRegistry.checkedClasses,
+      emitter1.typeTestRegistry.rtiChecks.checkedClasses,
+      emitter2.typeTestRegistry.rtiChecks.checkedClasses,
       "TypeTestRegistry checked classes mismatch",
       strategy.elementEquivalence,
       verbose: verbose);
diff --git a/tests/compiler/dart2js/equivalence/check_helpers.dart b/tests/compiler/dart2js/equivalence/check_helpers.dart
index e4d9de7..a0ac080 100644
--- a/tests/compiler/dart2js/equivalence/check_helpers.dart
+++ b/tests/compiler/dart2js/equivalence/check_helpers.dart
@@ -587,3 +587,103 @@
     print(message);
   }
 }
+
+class DartTypePrinter implements DartTypeVisitor {
+  StringBuffer sb = new StringBuffer();
+
+  @override
+  visit(DartType type, [_]) {
+    type.accept(this, null);
+  }
+
+  String visitTypes(List<DartType> types) {
+    String comma = '';
+    for (DartType type in types) {
+      sb.write(comma);
+      visit(type);
+      comma = ',';
+    }
+    return comma;
+  }
+
+  @override
+  visitDynamicType(DynamicType type, _) {
+    sb.write('dynamic');
+  }
+
+  @override
+  visitTypedefType(TypedefType type, _) {
+    sb.write(type.element.name);
+    if (type.typeArguments.any((type) => !type.isDynamic)) {
+      sb.write('<');
+      visitTypes(type.typeArguments);
+      sb.write('>');
+    }
+  }
+
+  @override
+  visitInterfaceType(InterfaceType type, _) {
+    sb.write(type.element.name);
+    if (type.typeArguments.any((type) => !type.isDynamic)) {
+      sb.write('<');
+      visitTypes(type.typeArguments);
+      sb.write('>');
+    }
+  }
+
+  @override
+  visitFunctionType(FunctionType type, _) {
+    visit(type.returnType);
+    sb.write(' Function');
+    if (type.typeVariables.isNotEmpty) {
+      sb.write('<');
+      visitTypes(type.typeVariables);
+      sb.write('>');
+    }
+    sb.write('(');
+    String comma = visitTypes(type.parameterTypes);
+    if (type.optionalParameterTypes.isNotEmpty) {
+      sb.write(comma);
+      sb.write('[');
+      visitTypes(type.optionalParameterTypes);
+      sb.write(']');
+    }
+    if (type.namedParameters.isNotEmpty) {
+      sb.write(comma);
+      sb.write('{');
+      for (int index = 0; index < type.namedParameters.length; index++) {
+        sb.write(comma);
+        sb.write(type.namedParameters[index]);
+        sb.write(':');
+        visit(type.namedParameterTypes[index]);
+        comma = ',';
+      }
+      sb.write('}');
+    }
+    sb.write(')');
+  }
+
+  @override
+  visitFunctionTypeVariable(FunctionTypeVariable type, _) {
+    sb.write(type);
+  }
+
+  @override
+  visitTypeVariableType(TypeVariableType type, _) {
+    sb.write(type);
+  }
+
+  @override
+  visitVoidType(VoidType type, _) {
+    sb.write('void');
+  }
+
+  String getText() => sb.toString();
+}
+
+/// Normalized toString on types.
+String typeToString(DartType type) {
+  DartTypePrinter printer = new DartTypePrinter();
+  printer.visit(type);
+  return printer.getText();
+}
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence.dart b/tests/compiler/dart2js/equivalence/id_equivalence.dart
index d46fd7f..0794c05 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence.dart
@@ -27,6 +27,7 @@
 /// Id for a code point or element with type inference information.
 abstract class Id {
   IdKind get kind;
+  bool get isGlobal;
 }
 
 class IdValue {
@@ -67,6 +68,7 @@
     throw new UnsupportedError("Unexpected id kind: ${id.kind}");
   }
 
+  static const String globalPrefix = "global#";
   static const String elementPrefix = "element: ";
   static const String classPrefix = "class: ";
   static const String invokePrefix = "invoke: ";
@@ -82,13 +84,23 @@
       text = text.substring(elementPrefix.length);
       int colonPos = text.indexOf(':');
       if (colonPos == -1) throw "Invalid element id: '$text'";
-      id = new ElementId(text.substring(0, colonPos));
+      String name = text.substring(0, colonPos);
+      bool isGlobal = name.startsWith(globalPrefix);
+      if (isGlobal) {
+        name = name.substring(globalPrefix.length);
+      }
+      id = new ElementId(name, isGlobal: isGlobal);
       expected = text.substring(colonPos + 1);
     } else if (text.startsWith(classPrefix)) {
       text = text.substring(classPrefix.length);
       int colonPos = text.indexOf(':');
       if (colonPos == -1) throw "Invalid class id: '$text'";
-      id = new ClassId(text.substring(0, colonPos));
+      String name = text.substring(0, colonPos);
+      bool isGlobal = name.startsWith(globalPrefix);
+      if (isGlobal) {
+        name = name.substring(globalPrefix.length);
+      }
+      id = new ClassId(name, isGlobal: isGlobal);
       expected = text.substring(colonPos + 1);
     } else if (text.startsWith(invokePrefix)) {
       id = new NodeId(offset, IdKind.invoke);
@@ -117,18 +129,19 @@
 class ElementId implements Id {
   final String className;
   final String memberName;
+  final bool isGlobal;
 
-  factory ElementId(String text) {
+  factory ElementId(String text, {bool isGlobal: false}) {
     int dotPos = text.indexOf('.');
     if (dotPos != -1) {
-      return new ElementId.internal(
-          text.substring(dotPos + 1), text.substring(0, dotPos));
+      return new ElementId.internal(text.substring(dotPos + 1),
+          className: text.substring(0, dotPos), isGlobal: isGlobal);
     } else {
-      return new ElementId.internal(text);
+      return new ElementId.internal(text, isGlobal: isGlobal);
     }
   }
 
-  ElementId.internal(this.memberName, [this.className]);
+  ElementId.internal(this.memberName, {this.className, this.isGlobal: false});
 
   int get hashCode => className.hashCode * 13 + memberName.hashCode * 17;
 
@@ -148,8 +161,9 @@
 /// Id for a class.
 class ClassId implements Id {
   final String className;
+  final bool isGlobal;
 
-  ClassId(this.className);
+  ClassId(this.className, {this.isGlobal: false});
 
   int get hashCode => className.hashCode * 13;
 
@@ -174,6 +188,8 @@
 
   const NodeId(this.value, this.kind);
 
+  bool get isGlobal => false;
+
   int get hashCode => value.hashCode * 13 + kind.hashCode * 17;
 
   bool operator ==(other) {
@@ -575,7 +591,7 @@
     memberName += '=';
   }
   String className = element.enclosingClass?.name;
-  return new ElementId.internal(memberName, className);
+  return new ElementId.internal(memberName, className: className);
 }
 
 /// Compute a canonical [Id] for kernel-based nodes.
@@ -588,7 +604,7 @@
   if (node is ir.Procedure && node.kind == ir.ProcedureKind.Setter) {
     memberName += '=';
   }
-  return new ElementId.internal(memberName, className);
+  return new ElementId.internal(memberName, className: className);
 }
 
 /// Abstract IR visitor for computing data corresponding to a node or element,
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 2d85a02..b51545e 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -95,7 +95,8 @@
     bool forUserLibrariesOnly: true,
     bool skipUnprocessedMembers: false,
     bool skipFailedCompilations: false,
-    ComputeClassDataFunction computeClassData}) async {
+    ComputeClassDataFunction computeClassData,
+    Iterable<Id> globalIds: const <Id>[]}) async {
   CompilationResult result = await runCompiler(
       entryPoint: entryPoint,
       memorySourceFiles: memorySourceFiles,
@@ -111,8 +112,10 @@
   Compiler compiler = result.compiler;
   ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
   ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+  CommonElements commonElements = closedWorld.commonElements;
 
   Map<Uri, Map<Id, ActualData>> actualMaps = <Uri, Map<Id, ActualData>>{};
+  Map<Id, ActualData> globalData = <Id, ActualData>{};
 
   Map<Id, ActualData> actualMapFor(Entity entity) {
     if (entity is Element) {
@@ -127,14 +130,15 @@
     return actualMaps.putIfAbsent(uri, () => <Id, ActualData>{});
   }
 
-  void processMember(MemberEntity member) {
+  void processMember(MemberEntity member, Map<Id, ActualData> actualMap) {
     if (member.isAbstract) {
       return;
     }
     if (member is ConstructorElement && member.isRedirectingFactory) {
       return;
     }
-    if (!closedWorld.processedMembers.contains(member)) {
+    if (skipUnprocessedMembers &&
+        !closedWorld.processedMembers.contains(member)) {
       return;
     }
     if (member.enclosingClass != null) {
@@ -150,7 +154,14 @@
         return;
       }
     }
-    computeMemberData(compiler, member, actualMapFor(member), verbose: verbose);
+    computeMemberData(compiler, member, actualMap, verbose: verbose);
+  }
+
+  void processClass(ClassEntity cls, Map<Id, ActualData> actualMap) {
+    if (skipUnprocessedMembers && !closedWorld.isImplemented(cls)) {
+      return;
+    }
+    computeClassData(compiler, cls, actualMap, verbose: verbose);
   }
 
   bool excludeLibrary(LibraryEntity library) {
@@ -163,16 +174,71 @@
     for (LibraryEntity library in elementEnvironment.libraries) {
       if (excludeLibrary(library)) continue;
       elementEnvironment.forEachClass(library, (ClassEntity cls) {
-        computeClassData(compiler, cls, actualMapFor(cls), verbose: verbose);
+        processClass(cls, actualMapFor(cls));
       });
     }
   }
   for (MemberEntity member in closedWorld.processedMembers) {
     if (excludeLibrary(member.library)) continue;
-    processMember(member);
+    processMember(member, actualMapFor(member));
   }
 
-  return new CompiledData(compiler, elementEnvironment, entryPoint, actualMaps);
+  List<LibraryEntity> globalLibraries = <LibraryEntity>[
+    commonElements.coreLibrary,
+    elementEnvironment.lookupLibrary(Uri.parse('dart:collection')),
+    commonElements.interceptorsLibrary,
+    commonElements.jsHelperLibrary,
+  ];
+
+  ClassEntity getGlobalClass(String className) {
+    ClassEntity cls;
+    for (LibraryEntity library in globalLibraries) {
+      cls ??= elementEnvironment.lookupClass(library, className);
+    }
+    Expect.isNotNull(
+        cls,
+        "Global class '$className' not found in the global "
+        "libraries: ${globalLibraries.map((l) => l.canonicalUri).join(', ')}");
+    return cls;
+  }
+
+  MemberEntity getGlobalMember(String memberName) {
+    MemberEntity member;
+    for (LibraryEntity library in globalLibraries) {
+      member ??= elementEnvironment.lookupLibraryMember(library, memberName);
+    }
+    Expect.isNotNull(
+        member,
+        "Global member '$member' not found in the global "
+        "libraries: ${globalLibraries.map((l) => l.canonicalUri).join(', ')}");
+    return member;
+  }
+
+  for (Id id in globalIds) {
+    if (id is ElementId) {
+      MemberEntity member;
+      if (id.className != null) {
+        ClassEntity cls = getGlobalClass(id.className);
+        member = elementEnvironment.lookupClassMember(cls, id.memberName);
+        member ??= elementEnvironment.lookupConstructor(cls, id.memberName);
+        Expect.isNotNull(
+            member, "Global member '$member' not found in class $cls.");
+      } else {
+        member = getGlobalMember(id.memberName);
+      }
+      processMember(member, globalData);
+    } else if (id is ClassId) {
+      if (computeClassData != null) {
+        ClassEntity cls = getGlobalClass(id.className);
+        processClass(cls, globalData);
+      }
+    } else {
+      throw new UnsupportedError("Unexpected global id: $id");
+    }
+  }
+
+  return new CompiledData(
+      compiler, elementEnvironment, entryPoint, actualMaps, globalData);
 }
 
 class CompiledData {
@@ -180,9 +246,10 @@
   final ElementEnvironment elementEnvironment;
   final Uri mainUri;
   final Map<Uri, Map<Id, ActualData>> actualMaps;
+  final Map<Id, ActualData> globalData;
 
-  CompiledData(
-      this.compiler, this.elementEnvironment, this.mainUri, this.actualMaps);
+  CompiledData(this.compiler, this.elementEnvironment, this.mainUri,
+      this.actualMaps, this.globalData);
 
   Map<int, List<String>> computeAnnotations(Uri uri) {
     Map<Id, ActualData> thisMap = actualMaps[uri];
@@ -253,18 +320,19 @@
 class IdData {
   final Map<Uri, AnnotatedCode> code;
   final MemberAnnotations<IdValue> expectedMaps;
-  final CompiledData compiledData;
+  final CompiledData _compiledData;
   final MemberAnnotations<ActualData> _actualMaps = new MemberAnnotations();
 
-  IdData(this.code, this.expectedMaps, this.compiledData) {
+  IdData(this.code, this.expectedMaps, this._compiledData) {
     for (Uri uri in code.keys) {
-      _actualMaps[uri] = compiledData.actualMaps[uri] ?? <Id, ActualData>{};
+      _actualMaps[uri] = _compiledData.actualMaps[uri] ?? <Id, ActualData>{};
     }
+    _actualMaps.globalData.addAll(_compiledData.globalData);
   }
 
-  Compiler get compiler => compiledData.compiler;
-  ElementEnvironment get elementEnvironment => compiledData.elementEnvironment;
-  Uri get mainUri => compiledData.mainUri;
+  Compiler get compiler => _compiledData.compiler;
+  ElementEnvironment get elementEnvironment => _compiledData.elementEnvironment;
+  Uri get mainUri => _compiledData.mainUri;
   MemberAnnotations<ActualData> get actualMaps => _actualMaps;
 
   String actualCode(Uri uri) {
@@ -321,6 +389,9 @@
   final Map<Uri, Map<Id, DataType>> _computedDataForEachFile =
       new Map<Uri, Map<Id, DataType>>();
 
+  /// Member or class annotations that don't refer to any of the user files.
+  final Map<Id, DataType> globalData = <Id, DataType>{};
+
   void operator []=(Uri file, Map<Id, DataType> computedData) {
     _computedDataForEachFile[file] = computedData;
   }
@@ -384,10 +455,14 @@
     if (args.isNotEmpty && !args.contains(name) && !continued) continue;
     if (shouldContinue) continued = true;
     List<String> testOptions = options.toList();
+    bool strongModeOnlyTest = false;
     if (name.endsWith('_ea.dart')) {
       testOptions.add(Flags.enableAsserts);
     } else if (name.endsWith('_strong.dart')) {
+      strongModeOnlyTest = true;
       testOptions.add(Flags.strongMode);
+    } else if (name.endsWith('_checked.dart')) {
+      testOptions.add(Flags.enableCheckedMode);
     }
 
     print('----------------------------------------------------------------');
@@ -434,29 +509,33 @@
 
     if (setUpFunction != null) setUpFunction();
 
-    if (skipForAst.contains(name) || testOptions.contains(Flags.strongMode)) {
+    if (skipForAst.contains(name) || strongModeOnlyTest) {
       print('--skipped for ast-----------------------------------------------');
     } else {
       print('--from ast------------------------------------------------------');
+      MemberAnnotations<IdValue> annotations = expectedMaps[astMarker];
       CompiledData compiledData1 = await computeData(
           entryPoint, memorySourceFiles, computeFromAst,
           computeClassData: computeClassDataFromAst,
           options: testOptions,
           verbose: verbose,
-          forUserLibrariesOnly: forUserLibrariesOnly);
-      await checkCode(code, expectedMaps[astMarker], compiledData1);
+          forUserLibrariesOnly: forUserLibrariesOnly,
+          globalIds: annotations.globalData.keys);
+      await checkCode(code, annotations, compiledData1);
     }
     if (skipForKernel.contains(name)) {
       print('--skipped for kernel--------------------------------------------');
     } else {
       print('--from kernel---------------------------------------------------');
+      MemberAnnotations<IdValue> annotations = expectedMaps[kernelMarker];
       CompiledData compiledData2 = await computeData(
           entryPoint, memorySourceFiles, computeFromKernel,
           computeClassData: computeClassDataFromKernel,
           options: [Flags.useKernel]..addAll(testOptions),
           verbose: verbose,
-          forUserLibrariesOnly: forUserLibrariesOnly);
-      await checkCode(code, expectedMaps[kernelMarker], compiledData2,
+          forUserLibrariesOnly: forUserLibrariesOnly,
+          globalIds: annotations.globalData.keys);
+      await checkCode(code, annotations, compiledData2,
           filterActualData: filterActualData);
     }
   }
@@ -470,73 +549,101 @@
     MemberAnnotations<IdValue> expectedMaps, CompiledData compiledData,
     {bool filterActualData(IdValue expected, ActualData actualData)}) async {
   IdData data = new IdData(code, expectedMaps, compiledData);
+  bool hasFailure = false;
 
-  data.actualMaps.forEach((Uri uri, Map<Id, ActualData> actualMap) {
+  void checkActualMap(
+      Map<Id, ActualData> actualMap, Map<Id, IdValue> expectedMap,
+      [Uri uri]) {
+    bool hasLocalFailure = false;
     actualMap.forEach((Id id, ActualData actualData) {
       IdValue actual = actualData.value;
-      if (!data.expectedMaps[uri].containsKey(id)) {
+      if (!expectedMap.containsKey(id)) {
         if (actual.value != '') {
           reportHere(
               data.compiler.reporter,
               actualData.sourceSpan,
-              'Id $id = ${actual} for ${actualData.object} '
+              'Id $id = ${colors.red('$actual')} for ${actualData.object} '
               '(${actualData.object.runtimeType}) '
-              'not expected in ${data.expectedMaps[uri].keys}');
-          print('--annotations diff [${uri.pathSegments.last}]---------------');
-          print(data.diffCode(uri));
-          print('------------------------------------------------------------');
-        }
-        if (filterActualData == null || filterActualData(null, actualData)) {
-          Expect.equals('', actual.value);
+              'not expected in ${expectedMap.keys}');
+          if (filterActualData == null || filterActualData(null, actualData)) {
+            hasLocalFailure = true;
+          }
         }
       } else {
-        IdValue expected = data.expectedMaps[uri][id];
+        IdValue expected = expectedMap[id];
         if (actual != expected) {
           reportHere(
               data.compiler.reporter,
               actualData.sourceSpan,
-              'Object: ${actualData.object} (${actualData.object.runtimeType}), '
-              'expected: ${expected}, actual: ${actual}');
-          print('--annotations diff [${uri.pathSegments.last}]---------------');
-          print(data.diffCode(uri));
-          print('------------------------------------------------------------');
-        }
-        if (filterActualData == null ||
-            filterActualData(expected, actualData)) {
-          Expect.equals(expected, actual);
+              'Object: ${actualData.object} '
+              '(${actualData.object.runtimeType})\n '
+              'expected: ${colors.green('$expected')}\n '
+              'actual: ${colors.red('$actual')}');
+          if (filterActualData == null ||
+              filterActualData(expected, actualData)) {
+            hasLocalFailure = true;
+          }
         }
       }
     });
+    if (hasLocalFailure) {
+      hasFailure = true;
+      if (uri != null) {
+        print('--annotations diff [${uri.pathSegments.last}]-------------');
+        print(data.diffCode(uri));
+        print('----------------------------------------------------------');
+      }
+    }
+  }
+
+  data.actualMaps.forEach((Uri uri, Map<Id, ActualData> actualMap) {
+    checkActualMap(actualMap, data.expectedMaps[uri], uri);
   });
+  checkActualMap(data.actualMaps.globalData, data.expectedMaps.globalData);
 
   Set<Id> missingIds = new Set<Id>();
   StringBuffer combinedAnnotationsDiff = new StringBuffer();
-  data.expectedMaps.forEach((Uri uri, Map<Id, IdValue> expectedMap) {
+  void checkMissing(Map<Id, IdValue> expectedMap, Map<Id, ActualData> actualMap,
+      [Uri uri]) {
     expectedMap.forEach((Id id, IdValue expected) {
-      if (!data.actualMaps[uri].containsKey(id)) {
+      if (!actualMap.containsKey(id)) {
         missingIds.add(id);
         StringBuffer sb = new StringBuffer();
-        for (Id id
-            in data.actualMaps[uri].keys /*.where((d) => d.kind == id.kind)*/) {
+        for (Id id in actualMap.keys.where((d) => d.kind == id.kind)) {
           sb.write('\n  $id');
         }
-        reportHere(
-            data.compiler.reporter,
-            computeSpannable(data.elementEnvironment, uri, id),
-            'Expected $expected for id $id missing in${sb}');
+        if (uri != null) {
+          reportHere(
+              data.compiler.reporter,
+              computeSpannable(data.elementEnvironment, uri, id),
+              'Expected $expected for id $id missing in${sb}');
+        } else {
+          print('Expected $expected for id $id missing in${sb}');
+        }
       }
     });
-    if (missingIds.isNotEmpty) {
+    if (missingIds.isNotEmpty && uri != null) {
       combinedAnnotationsDiff.write('Missing in $uri:\n');
       combinedAnnotationsDiff.write('${data.diffCode(uri)}\n');
     }
+  }
+
+  data.expectedMaps.forEach((Uri uri, Map<Id, IdValue> expectedMap) {
+    checkMissing(expectedMap, data.actualMaps[uri], uri);
   });
+  checkMissing(data.expectedMaps.globalData, data.actualMaps.globalData);
   if (combinedAnnotationsDiff.isNotEmpty) {
     print('--annotations diff--------------------------------------------');
     print(combinedAnnotationsDiff.toString());
     print('--------------------------------------------------------------');
   }
-  Expect.isTrue(missingIds.isEmpty, "Ids not found: ${missingIds}.");
+  if (missingIds.isNotEmpty) {
+    print("Ids not found: ${missingIds}.");
+    hasFailure = true;
+  }
+  if (hasFailure) {
+    Expect.fail('Errors found.');
+  }
 }
 
 /// Compute a [Spannable] from an [id] in the library [mainUri].
@@ -613,11 +720,19 @@
     for (Annotation annotation in code.annotations) {
       String text = annotation.text;
       IdValue idValue = IdValue.decode(annotation.offset, text);
-      Expect.isFalse(
-          expectedValues.containsKey(idValue.id),
-          "Duplicate annotations for ${idValue.id}: ${idValue} and "
-          "${expectedValues[idValue.id]}.");
-      expectedValues[idValue.id] = idValue;
+      if (idValue.id.isGlobal) {
+        Expect.isFalse(
+            fileAnnotations.globalData.containsKey(idValue.id),
+            "Duplicate annotations for ${idValue.id}: ${idValue} and "
+            "${fileAnnotations.globalData[idValue.id]}.");
+        fileAnnotations.globalData[idValue.id] = idValue;
+      } else {
+        Expect.isFalse(
+            expectedValues.containsKey(idValue.id),
+            "Duplicate annotations for ${idValue.id}: ${idValue} and "
+            "${expectedValues[idValue.id]}.");
+        expectedValues[idValue.id] = idValue;
+      }
     }
   });
 }
@@ -737,3 +852,46 @@
     Expect.fail('Annotations mismatch');
   }
 }
+
+/// Set of features used in annotations.
+class Features {
+  Map<String, String> _features = <String, String>{};
+
+  void add(String key, {var value: ''}) {
+    _features[key] = value;
+  }
+
+  bool containsKey(String key) {
+    return _features.containsKey(key);
+  }
+
+  void operator []=(String key, String value) {
+    _features[key] = value;
+  }
+
+  String operator [](String key) => _features[key];
+
+  String remove(String key) => _features.remove(key);
+
+  /// Returns a string containing all features in a comma-separated list sorted
+  /// by feature names.
+  String getText() {
+    StringBuffer sb = new StringBuffer();
+    bool needsComma = false;
+    for (String name in _features.keys.toList()..sort()) {
+      String value = _features[name];
+      if (value != null) {
+        if (needsComma) {
+          sb.write(',');
+        }
+        sb.write(name);
+        if (value != '') {
+          sb.write('=');
+          sb.write(value);
+        }
+        needsComma = true;
+      }
+    }
+    return sb.toString();
+  }
+}
diff --git a/tests/compiler/dart2js/equivalence/show_helper.dart b/tests/compiler/dart2js/equivalence/show_helper.dart
index bb72432..46eadd0 100644
--- a/tests/compiler/dart2js/equivalence/show_helper.dart
+++ b/tests/compiler/dart2js/equivalence/show_helper.dart
@@ -23,7 +23,10 @@
 }
 
 show(ArgResults argResults, ComputeMemberDataFunction computeAstData,
-    ComputeMemberDataFunction computeKernelData) async {
+    ComputeMemberDataFunction computeKernelData,
+    {ComputeClassDataFunction computeAstClassData,
+    ComputeClassDataFunction computeKernelClassData,
+    List<String> options: const <String>[]}) async {
   if (argResults.wasParsed('colors')) {
     useColors = argResults['colors'];
   }
@@ -41,12 +44,14 @@
     show = [entryPoint.pathSegments.last];
   }
 
-  List<String> options = <String>[stopAfterTypeInference];
+  options = new List<String>.from(options);
   if (useKernel) {
     options.add(Flags.useKernel);
   }
   CompiledData data = await computeData(
       entryPoint, const {}, useKernel ? computeKernelData : computeAstData,
+      computeClassData:
+          useKernel ? computeKernelClassData : computeAstClassData,
       options: options,
       forUserLibrariesOnly: false,
       skipUnprocessedMembers: true,
diff --git a/tests/compiler/dart2js/helpers/program_lookup.dart b/tests/compiler/dart2js/helpers/program_lookup.dart
new file mode 100644
index 0000000..c3ef07a
--- /dev/null
+++ b/tests/compiler/dart2js/helpers/program_lookup.dart
@@ -0,0 +1,96 @@
+// 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 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/js_emitter/model.dart';
+
+class ProgramLookup {
+  final Program program;
+
+  ProgramLookup(Compiler compiler)
+      : this.program = compiler.backend.emitter.emitter.programForTesting;
+
+  Map<LibraryEntity, LibraryData> libraryMap;
+
+  LibraryData getLibraryData(LibraryEntity element) {
+    if (libraryMap == null) {
+      libraryMap = <LibraryEntity, LibraryData>{};
+      for (Fragment fragment in program.fragments) {
+        for (Library library in fragment.libraries) {
+          assert(!libraryMap.containsKey(library.element));
+          libraryMap[library.element] = new LibraryData(library);
+        }
+      }
+    }
+    return libraryMap[element];
+  }
+
+  Library getLibrary(LibraryEntity element) {
+    return getLibraryData(element).library;
+  }
+
+  ClassData getClassData(ClassEntity element) {
+    return getLibraryData(element.library).getClassData(element);
+  }
+
+  Class getClass(ClassEntity element) {
+    return getClassData(element).cls;
+  }
+
+  Method getMethod(FunctionEntity function) {
+    if (function.enclosingClass != null) {
+      return getClassData(function.enclosingClass).getMethod(function);
+    } else {
+      return getLibraryData(function.library).getMethod(function);
+    }
+  }
+}
+
+class LibraryData {
+  final Library library;
+  Map<ClassEntity, ClassData> _classMap;
+  Map<FunctionEntity, StaticMethod> _methodMap;
+
+  LibraryData(this.library);
+  ClassData getClassData(ClassEntity element) {
+    if (_classMap == null) {
+      _classMap = <ClassEntity, ClassData>{};
+      for (Class cls in library.classes) {
+        assert(!_classMap.containsKey(cls.element));
+        _classMap[cls.element] = new ClassData(cls);
+      }
+    }
+    return _classMap[element];
+  }
+
+  StaticMethod getMethod(FunctionEntity function) {
+    if (_methodMap == null) {
+      _methodMap = <FunctionEntity, StaticMethod>{};
+      for (StaticMethod method in library.statics) {
+        assert(!_methodMap.containsKey(method.element));
+        _methodMap[method.element] = method;
+      }
+    }
+    return _methodMap[function];
+  }
+}
+
+class ClassData {
+  final Class cls;
+  Map<FunctionEntity, Method> _methodMap;
+
+  ClassData(this.cls);
+
+  Method getMethod(FunctionEntity function) {
+    if (_methodMap == null) {
+      _methodMap = <FunctionEntity, Method>{};
+      for (Method method in cls.methods) {
+        assert(!_methodMap.containsKey(method.element));
+        _methodMap[method.element] = method;
+      }
+    }
+    return _methodMap[function];
+  }
+}
diff --git a/tests/compiler/dart2js/inference/data/super_invoke.dart b/tests/compiler/dart2js/inference/data/super_invoke.dart
index 15e2068..3950710 100644
--- a/tests/compiler/dart2js/inference/data/super_invoke.dart
+++ b/tests/compiler/dart2js/inference/data/super_invoke.dart
@@ -230,6 +230,7 @@
 /*element: Sub9.:[exact=Sub9]*/
 class Sub9 extends Super9 {
   /*element: Sub9.method:[exact=JSUInt31]*/
+  // ignore: abstract_super_member_reference
   method() => super.method();
 }
 
diff --git a/tests/compiler/dart2js/inference/show.dart b/tests/compiler/dart2js/inference/show.dart
index 3d7c465..05389ea 100644
--- a/tests/compiler/dart2js/inference/show.dart
+++ b/tests/compiler/dart2js/inference/show.dart
@@ -34,5 +34,6 @@
     astFunction = computeMemberAstTypeMasks;
     kernelFunction = computeMemberIrTypeMasks;
   }
-  await show(results, astFunction, kernelFunction);
+  await show(results, astFunction, kernelFunction,
+      options: [stopAfterTypeInference]);
 }
diff --git a/tests/compiler/dart2js/kernel/impact_test.dart b/tests/compiler/dart2js/kernel/impact_test.dart
index b59b520..42e37e7 100644
--- a/tests/compiler/dart2js/kernel/impact_test.dart
+++ b/tests/compiler/dart2js/kernel/impact_test.dart
@@ -895,7 +895,7 @@
       case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
         ConstructorElement constructor = staticUse.element;
         ConstructorElement effectiveTarget = constructor.effectiveTarget;
-        ResolutionDartType effectiveTargetType =
+        ResolutionInterfaceType effectiveTargetType =
             constructor.computeEffectiveTargetType(staticUse.type);
         ConstructorElement effectiveTargetDeclaration =
             effectiveTarget.declaration;
diff --git a/tests/compiler/dart2js/platform_config_parser_test.dart b/tests/compiler/dart2js/platform_config_parser_test.dart
index 16db3e3..c0b843e 100644
--- a/tests/compiler/dart2js/platform_config_parser_test.dart
+++ b/tests/compiler/dart2js/platform_config_parser_test.dart
@@ -18,7 +18,7 @@
 
   if (starIndex != -1) {
     Expect.equals(expectedOutput, null);
-    Expect.throws(parse, (e) {
+    Expect.throws(parse, (dynamic e) {
       Expect.isTrue(e is FormatException);
       Expect.equals(starIndex, e.offset);
       return e is FormatException;
diff --git a/tests/compiler/dart2js/rti/data/direct.dart b/tests/compiler/dart2js/rti/data/direct.dart
index e88b892b..f2069f6 100644
--- a/tests/compiler/dart2js/rti/data/direct.dart
+++ b/tests/compiler/dart2js/rti/data/direct.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: A:needsArgs,explicit=[A<int>]*/
+/*class: A:explicit=[A<int>],needsArgs*/
 class A<T> {}
 
 main() {
diff --git a/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
index 5bb8df4..c0c24b1 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
@@ -2,10 +2,10 @@
 // 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: A:explicit=[B<A>]*/
+/*class: A:explicit=[B<A>],required*/
 class A {}
 
-/*class: B:needsArgs,deps=[C],explicit=[B<A>]*/
+/*class: B:deps=[C],explicit=[B<A>],needsArgs*/
 class B<T> {}
 
 /*class: C:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_class_is.dart b/tests/compiler/dart2js/rti/data/generic_class_is.dart
index f65ea09..ad3cf6c 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_is.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_is.dart
@@ -2,11 +2,14 @@
 // 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: A:implicit=[A]*/
+import 'package:meta/dart2js.dart';
+
+/*class: A:checks=[A],implicit=[A],required*/
 class A {}
 
-/*class: B:needsArgs,test,explicit=[B.T]*/
+/*class: B:direct,explicit=[B.T],needsArgs*/
 class B<T> {
+  @noInline
   method(T t) => t is T;
 }
 
diff --git a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
index 55c0236..8fc9584 100644
--- a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
@@ -5,7 +5,8 @@
 /*class: A:explicit=[B<A>]*/
 class A {}
 
-/*class: B:needsArgs,deps=[closure],explicit=[B<A>]*/
+/*ast.class: B:deps=[closure],explicit=[B<A>],needsArgs*/
+/*kernel.class: B:deps=[closure],explicit=[B<A>],needsArgs,required*/
 class B<T> {}
 
 main() {
diff --git a/tests/compiler/dart2js/rti/data/generic_instanceof4.dart b/tests/compiler/dart2js/rti/data/generic_instanceof4.dart
new file mode 100644
index 0000000..0da5574
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_instanceof4.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.
+
+import 'package:meta/dart2js.dart';
+
+/*class: A:deps=[B],direct,explicit=[A.T],needsArgs*/
+class A<T> {
+  @noInline
+  foo(x) {
+    return x is T;
+  }
+}
+
+/*class: BB:checks=[BB],implicit=[BB],required*/
+class BB {}
+
+/*class: B:implicit=[B.T],indirect,needsArgs*/
+class B<T> implements BB {
+  @noInline
+  foo() {
+    return new A<T>().foo(new B());
+  }
+}
+
+main() {
+  new B<BB>().foo();
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart b/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart
new file mode 100644
index 0000000..836e001
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart
@@ -0,0 +1,34 @@
+// 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 'package:meta/dart2js.dart';
+
+/*class: A:deps=[B],direct,explicit=[A.T],needsArgs*/
+class A<T> {
+  @noInline
+  foo(x) {
+    return x is T;
+  }
+}
+
+// This class was previously mark as implicitly tested by the imprecise
+// computation of implicit is-tests.
+class BB {}
+
+/*class: B:implicit=[B.T],indirect,needsArgs*/
+class B<T> implements BB {
+  @noInline
+  foo() {
+    return new A<T>().foo(new B());
+  }
+}
+
+class C<T> {}
+
+class D extends C<BB> {}
+
+main() {
+  new B<int>().foo();
+  new D();
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method1_strong.dart b/tests/compiler/dart2js/rti/data/generic_method1_strong.dart
new file mode 100644
index 0000000..7549db2
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method1_strong.dart
@@ -0,0 +1,43 @@
+// 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 'package:meta/dart2js.dart';
+import "package:expect/expect.dart";
+
+/*class: A:deps=[method2],direct,explicit=[A.T],needsArgs*/
+class A<T> {
+  @noInline
+  foo(x) {
+    return x is T;
+  }
+}
+
+// TODO(johnniwinther): Should include 'required'. Update the 'checkedArguments'
+// computation to take method type arguments into account.
+/*class: BB:implicit=[BB]*/
+class BB {}
+
+/*element: method2:deps=[B],implicit=[method2.T],indirect,needsArgs*/
+@noInline
+method2<T>() => new A<T>();
+
+// TODO(johnniwinther): Should include 'checks=[BB]'.
+/*class: B:deps=[method1],implicit=[B.T],indirect,needsArgs*/
+class B<T> implements BB {
+  @noInline
+  foo() {
+    return method2<T>().foo(new B());
+  }
+}
+
+/*element: method1:implicit=[method1.T],indirect,needsArgs*/
+@noInline
+method1<T>() {
+  return new B<T>().foo();
+}
+
+main() {
+  Expect.isTrue(method1<BB>());
+  Expect.isFalse(method1<String>());
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method2_strong.dart b/tests/compiler/dart2js/rti/data/generic_method2_strong.dart
new file mode 100644
index 0000000..27a1d49
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method2_strong.dart
@@ -0,0 +1,36 @@
+// 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 'package:meta/dart2js.dart';
+import "package:expect/expect.dart";
+
+/*class: A:deps=[B],direct,explicit=[A.T],needsArgs*/
+class A<T> {
+  @noInline
+  foo(x) {
+    return x is T;
+  }
+}
+
+/*class: BB:implicit=[BB]*/
+class BB {}
+
+/*class: B:deps=[method1],implicit=[B.T],indirect,needsArgs*/
+class B<T> implements BB {
+  @noInline
+  foo() {
+    return new A<T>().foo(new B());
+  }
+}
+
+/*element: method1:implicit=[method1.T],indirect,needsArgs*/
+@noInline
+method1<T>() {
+  return new B<T>().foo();
+}
+
+main() {
+  Expect.isTrue(method1<BB>());
+  Expect.isFalse(method1<String>());
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method3_strong.dart b/tests/compiler/dart2js/rti/data/generic_method3_strong.dart
new file mode 100644
index 0000000..3e7bc03
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method3_strong.dart
@@ -0,0 +1,35 @@
+// 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 'package:meta/dart2js.dart';
+import "package:expect/expect.dart";
+
+/*class: A:deps=[method2],direct,explicit=[A.T],needsArgs*/
+class A<T> {
+  @noInline
+  foo(x) {
+    return x is T;
+  }
+}
+
+/*class: BB:checks=[BB],implicit=[BB],required*/
+class BB {}
+
+/*element: method2:deps=[B],implicit=[method2.T],indirect,needsArgs*/
+@noInline
+method2<T>() => new A<T>();
+
+// TODO(johnniwinther): Should include 'checks=[BB]'.
+/*class: B:implicit=[B.T],indirect,needsArgs*/
+class B<T> implements BB {
+  @noInline
+  foo() {
+    return method2<T>().foo(new B());
+  }
+}
+
+main() {
+  Expect.isTrue(new B<BB>().foo());
+  Expect.isFalse(new B<String>().foo());
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method4_strong.dart b/tests/compiler/dart2js/rti/data/generic_method4_strong.dart
new file mode 100644
index 0000000..9700133
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method4_strong.dart
@@ -0,0 +1,43 @@
+// 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 'package:meta/dart2js.dart';
+import "package:expect/expect.dart";
+
+/*class: A:deps=[method2],direct,explicit=[A.T],needsArgs*/
+class A<T> {
+  @noInline
+  foo(x) {
+    return x is T;
+  }
+}
+
+/*class: BB:implicit=[BB]*/
+class BB {}
+
+/*class: B:deps=[method1],implicit=[B.T],indirect,needsArgs*/
+class B<T> implements BB {
+  @noInline
+  foo(c) {
+    return c.method2<T>().foo(new B());
+  }
+}
+
+class C {
+  /*element: C.method1:implicit=[method1.T],indirect,needsArgs*/
+  @noInline
+  method1<T>() {
+    return new B<T>().foo(this);
+  }
+
+  /*element: C.method2:deps=[B],implicit=[method2.T],indirect,needsArgs*/
+  @noInline
+  method2<T>() => new A<T>();
+}
+
+main() {
+  var c = new C();
+  Expect.isTrue(c.method1<BB>());
+  Expect.isFalse(c.method1<String>());
+}
diff --git a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
index 9cf55c6..34c9ecd 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
@@ -5,7 +5,7 @@
 /*class: A:explicit=[B<A>]*/
 class A {}
 
-/*class: B:needsArgs,deps=[method],explicit=[B<A>]*/
+/*class: B:deps=[method],explicit=[B<A>],needsArgs*/
 class B<T> {}
 
 /*ast.element: method:*/
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is.dart b/tests/compiler/dart2js/rti/data/generic_method_is.dart
index 7195656..dd26b9e 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_is.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_is.dart
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*ast.element: method:explicit=[method.T]*/
-/*kernel.element: method:needsArgs,explicit=[method.T]*/
+/*ast.element: method:direct,explicit=[method.T]*/
+/*kernel.element: method:direct,explicit=[method.T],needsArgs*/
 method<T>(T t) => t is T;
 
 main() {
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart b/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart
new file mode 100644
index 0000000..db9a3f7
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/generic_method_is_strong.dart
@@ -0,0 +1,94 @@
+// 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: A1:implicit=[A1]*/
+class A1 {}
+
+class A2 {}
+
+/*class: B1:implicit=[B1]*/
+class B1 {}
+
+class B2 {}
+
+/*class: C1:implicit=[C1]*/
+class C1 {}
+
+class C2 {}
+
+class C3 {}
+
+/*class: D1:implicit=[D1]*/
+class D1 {}
+
+class D2 {}
+
+/*class: E1:implicit=[E1]*/
+class E1 {}
+
+class E2 {}
+
+/*class: F1:implicit=[F1]*/
+class F1 {}
+
+class F2 {}
+
+/*class: F3:implicit=[F3]*/
+class F3 {}
+
+/*element: topLevelMethod1:direct,explicit=[topLevelMethod1.T],needsArgs*/
+// Calls to this imply a check of the passed type arguments.
+bool topLevelMethod1<T>(T t, {a1}) => t is T;
+
+// Calls to this does _not_ imply a check of the passed type arguments.
+T topLevelMethod2<T>(T t, {a2}) => t;
+
+class Class {
+  /*element: Class.instanceMethod1:direct,explicit=[instanceMethod1.S],needsArgs*/
+  // Calls to this imply a check of the passed type arguments.
+  bool instanceMethod1<S>(S s, {b1}) => s is S;
+
+  // Calls to this does _not_ imply a check of the passed type arguments.
+  S instanceMethod2<S>(S s, {b2}) => s;
+}
+
+main() {
+  // Calls to this imply a check of the passed type arguments.
+  /*direct,explicit=[localFunction1.U],needsArgs*/
+  bool localFunction1<U>(U u, {c1}) => u is U;
+
+  // Calls to this does _not_ imply a check of the passed type arguments.
+  U localFunction2<U>(U u, {c2}) => u;
+
+  // Calls to this does _not_ imply a check of the passed type arguments. A
+  // call to the .call function on this will, though, since it has the same
+  // signature as [localFunction1] which needs its type arguments.
+  localFunction3<U>(U u, {c1}) => u;
+
+  var c = new Class();
+
+  var local1 = localFunction1;
+  var local2 = localFunction2;
+  var local3 = localFunction3;
+  var staticTearOff1 = topLevelMethod1;
+  var staticTearOff2 = topLevelMethod2;
+  var instanceTearOff1 = c.instanceMethod1;
+  var instanceTearOff2 = c.instanceMethod2;
+
+  topLevelMethod1<A1>(new A1(), a1: 0);
+  topLevelMethod2<A2>(new A2(), a2: 0);
+  c.instanceMethod1<B1>(new B1(), b1: 0);
+  c.instanceMethod2<B2>(new B2(), b2: 0);
+  localFunction1<C1>(new C1(), c1: 0);
+  localFunction2<C2>(new C2(), c2: 0);
+  localFunction3<C3>(new C3(), c1: 0);
+
+  staticTearOff1<D1>(new D1(), a1: 0);
+  staticTearOff2<D2>(new D2(), a2: 0);
+  instanceTearOff1<E1>(new E1(), b1: 0);
+  instanceTearOff2<E2>(new E2(), b2: 0);
+  local1<F1>(new F1(), c1: 0);
+  local2<F2>(new F2(), c2: 0);
+  local3<F3>(new F3(), c1: 0);
+}
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable.dart b/tests/compiler/dart2js/rti/data/is_type_variable.dart
index f83c4b1..7002e52 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: A:needsArgs,test,explicit=[A.T]*/
+/*class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
   m(T t) => t is T;
 }
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
index a8432a9..912c9df 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
@@ -4,7 +4,7 @@
 
 class A<T> {}
 
-/*class: B:needsArgs,test,explicit=[B.T],implicit=[B.T]*/
+/*class: B:direct,explicit=[B.T],needsArgs*/
 class B<T> extends A<T> {
   m(T t) => t is T;
 }
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
index 83eec30..6c526d7 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
@@ -4,7 +4,7 @@
 
 class A<T> {}
 
-/*class: B:needsArgs,test,explicit=[B.T],implicit=[List<B.T>]*/
+/*class: B:direct,explicit=[B.T],needsArgs*/
 class B<T> extends A<List<T>> {
   m(T t) => t is T;
 }
diff --git a/tests/compiler/dart2js/rti/data/list_to_set.dart b/tests/compiler/dart2js/rti/data/list_to_set.dart
new file mode 100644
index 0000000..bdb8503
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/list_to_set.dart
@@ -0,0 +1,20 @@
+// 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: global#List:deps=[Class],explicit=[List],indirect,needsArgs*/
+/*class: global#JSArray:deps=[List],explicit=[JSArray],implicit=[JSArray.E],indirect,needsArgs*/
+
+main() {
+  var c = new Class<int>();
+  var list = c.m();
+  var set = list.toSet();
+  set is Set<String>;
+}
+
+/*class: Class:implicit=[Class.T],indirect,needsArgs*/
+class Class<T> {
+  m() {
+    return <T>[];
+  }
+}
diff --git a/tests/compiler/dart2js/rti/data/map_literal.dart b/tests/compiler/dart2js/rti/data/map_literal.dart
new file mode 100644
index 0000000..8b7bb96
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/map_literal.dart
@@ -0,0 +1,12 @@
+// 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: global#Map:*/
+/*class: global#LinkedHashMap:deps=[Map]*/
+/*class: global#JsLinkedHashMap:deps=[LinkedHashMap]*/
+/*class: global#double:checks=[num],explicit=[double],required*/
+
+main() {
+  <int, double>{}[0] = 0.5;
+}
diff --git a/tests/compiler/dart2js/rti/data/map_literal_checked.dart b/tests/compiler/dart2js/rti/data/map_literal_checked.dart
new file mode 100644
index 0000000..c9f25c1
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/map_literal_checked.dart
@@ -0,0 +1,12 @@
+// 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: global#Map:explicit=[Map],indirect,needsArgs*/
+/*class: global#LinkedHashMap:deps=[Map],explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.KLinkedHashMap.V],indirect,needsArgs*/
+/*class: global#JsLinkedHashMap:deps=[LinkedHashMap],direct,explicit=[JsLinkedHashMap.KJsLinkedHashMap.VJsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V>void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.KJsLinkedHashMap.V],needsArgs*/
+/*class: global#double:checks=[double,num,Object],explicit=[double],implicit=[double],required*/
+
+main() {
+  <int, double>{}[0] = 0.5;
+}
diff --git a/tests/compiler/dart2js/rti/data/map_to_set.dart b/tests/compiler/dart2js/rti/data/map_to_set.dart
new file mode 100644
index 0000000..2d79522
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/map_to_set.dart
@@ -0,0 +1,22 @@
+// 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: global#Map:deps=[Class],needsArgs*/
+/*class: global#LinkedHashMap:deps=[Map],needsArgs*/
+/*class: global#JsLinkedHashMap:deps=[LinkedHashMap],implicit=[JsLinkedHashMap.K],needsArgs*/
+/*class: global#double:checks=[num],explicit=[double],required*/
+
+main() {
+  var c = new Class<double, int>();
+  var map = c.m();
+  var set = map.keys.toSet();
+  set is Set<String>;
+}
+
+/*class: Class:needsArgs*/
+class Class<T, S> {
+  m() {
+    return <T, S>{};
+  }
+}
diff --git a/tests/compiler/dart2js/rti/data/subclass.dart b/tests/compiler/dart2js/rti/data/subclass.dart
index cd04108..2631e8e 100644
--- a/tests/compiler/dart2js/rti/data/subclass.dart
+++ b/tests/compiler/dart2js/rti/data/subclass.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: A:needsArgs,explicit=[A<int>]*/
+/*class: A:explicit=[A<int>],needsArgs*/
 class A<T> {}
 
 /*class: B:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/subclass_fixed.dart b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
index 42badb5..3dcf303 100644
--- a/tests/compiler/dart2js/rti/data/subclass_fixed.dart
+++ b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*class: A:needsArgs,explicit=[A<int>]*/
+/*class: A:explicit=[A<int>],needsArgs*/
 class A<T> {}
 
 class B extends A<int> {}
diff --git a/tests/compiler/dart2js/rti/data/superclass.dart b/tests/compiler/dart2js/rti/data/superclass.dart
index 86e533c..bc3c6ff 100644
--- a/tests/compiler/dart2js/rti/data/superclass.dart
+++ b/tests/compiler/dart2js/rti/data/superclass.dart
@@ -4,7 +4,7 @@
 
 class A<T> {}
 
-/*class: B:needsArgs,explicit=[B<int>]*/
+/*class: B:explicit=[B<int>],needsArgs*/
 class B<T> extends A<T> {}
 
 main() {
diff --git a/tests/compiler/dart2js/rti/data/type_literal.dart b/tests/compiler/dart2js/rti/data/type_literal.dart
index 4cc8c0b..972268e 100644
--- a/tests/compiler/dart2js/rti/data/type_literal.dart
+++ b/tests/compiler/dart2js/rti/data/type_literal.dart
@@ -2,68 +2,12 @@
 // 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: A:needsArgs,exp*/
+/*class: A:exp,needsArgs*/
 class A<T> {
   instanceMethod() => T;
-
-  /*ast.element: A.staticMethod:exp*/
-  /*kernel.element: A.staticMethod:needsArgs,exp*/
-  static staticMethod<S>() => S;
-
-  /*ast.element: A.staticMethodNested:exp*/
-  /*kernel.element: A.staticMethodNested:needsArgs,exp*/
-  static staticMethodNested<S>() {
-    var inner = () => S;
-    return inner();
-  }
-
-  /*ast.element: A.genericMethod:exp*/
-  /*kernel.element: A.genericMethod:needsArgs,exp*/
-  genericMethod<S>() => S;
-
-  /*ast.element: A.genericMethodNested:exp*/
-  /*kernel.element: A.genericMethodNested:needsArgs,exp*/
-  genericMethodNested<S>() {
-    var inner = () => S;
-    return inner();
-  }
-
-  localFunction() {
-    /*ast.exp*/ /*kernel.needsArgs,exp*/ local<S>() => S;
-
-    return local<bool>();
-  }
-
-  localFunctionNested() {
-    /*ast.exp*/ /*kernel.needsArgs,exp*/ local<S>() {
-      var inner = () => S;
-      return inner();
-    }
-
-    return local<bool>();
-  }
-}
-
-/*ast.element: topLevelMethod:exp*/
-/*kernel.element: topLevelMethod:needsArgs,exp*/
-topLevelMethod<S>() => S;
-
-/*ast.element: topLevelMethodNested:exp*/
-/*kernel.element: topLevelMethodNested:needsArgs,exp*/
-topLevelMethodNested<S>() {
-  var inner = () => S;
-  return inner();
 }
 
 main() {
   var a = new A<int>();
   a.instanceMethod();
-  a.genericMethod<String>();
-  a.genericMethodNested<String>();
-  a.localFunction();
-  a.localFunctionNested();
-  A.staticMethod<double>();
-  A.staticMethodNested<double>();
-  topLevelMethod<num>();
-  topLevelMethodNested<num>();
 }
diff --git a/tests/compiler/dart2js/rti/data/type_literal_strong.dart b/tests/compiler/dart2js/rti/data/type_literal_strong.dart
new file mode 100644
index 0000000..f90943a
--- /dev/null
+++ b/tests/compiler/dart2js/rti/data/type_literal_strong.dart
@@ -0,0 +1,63 @@
+// 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: A:exp,needsArgs*/
+class A<T> {
+  instanceMethod() => T;
+
+  /*element: A.staticMethod:exp,needsArgs*/
+  static staticMethod<S>() => S;
+
+  /*element: A.staticMethodNested:exp,needsArgs*/
+  static staticMethodNested<S>() {
+    var inner = () => S;
+    return inner();
+  }
+
+  /*element: A.genericMethod:exp,needsArgs*/
+  genericMethod<S>() => S;
+
+  /*element: A.genericMethodNested:exp,needsArgs*/
+  genericMethodNested<S>() {
+    var inner = () => S;
+    return inner();
+  }
+
+  localFunction() {
+    /*exp,needsArgs*/ local<S>() => S;
+
+    return local<bool>();
+  }
+
+  localFunctionNested() {
+    /*exp,needsArgs*/ local<S>() {
+      var inner = () => S;
+      return inner();
+    }
+
+    return local<bool>();
+  }
+}
+
+/*element: topLevelMethod:exp,needsArgs*/
+topLevelMethod<S>() => S;
+
+/*element: topLevelMethodNested:exp,needsArgs*/
+topLevelMethodNested<S>() {
+  var inner = () => S;
+  return inner();
+}
+
+main() {
+  var a = new A<int>();
+  a.instanceMethod();
+  a.genericMethod<String>();
+  a.genericMethodNested<String>();
+  a.localFunction();
+  a.localFunctionNested();
+  A.staticMethod<double>();
+  A.staticMethodNested<double>();
+  topLevelMethod<num>();
+  topLevelMethodNested<num>();
+}
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
index 18981ca..ab733d8 100644
--- a/tests/compiler/dart2js/rti/disable_rti_test.dart
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -11,6 +11,7 @@
 import 'package:compiler/src/js_emitter/model.dart';
 import 'package:compiler/src/world.dart';
 import 'package:expect/expect.dart';
+import '../helpers/program_lookup.dart';
 import '../memory_compiler.dart';
 
 const String code = '''
@@ -20,6 +21,15 @@
 class D<T> implements B<int> {}
 class E<T> extends B<T> {}
 class F<T> extends B<List<T>>{}
+class G {
+  call() {}
+} 
+class H implements G {
+  call() {}
+}
+class I<T> {
+  call(T t) {}
+}
 
 main() {
   new A();
@@ -27,6 +37,8 @@
   new D();
   new E();
   new F();
+  new H();
+  new I();
 }
 ''';
 
@@ -38,6 +50,9 @@
   'D': const <String>[r'$isB', r'$asB'],
   'E': const <String>[],
   'F': const <String>[r'$asB'],
+  'G': const <String>[r'$isFunction'],
+  'H': const <String>[r'$isFunction', r'$isG'],
+  'I': const <String>[r'$isFunction', r'$signature'],
 };
 
 main() {
@@ -51,13 +66,14 @@
     ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
     ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
     RuntimeTypesNeed rtiNeed = closedWorld.rtiNeed;
-    ProgramLookup programLookup =
-        new ProgramLookup(compiler.backend.emitter.emitter.programForTesting);
+    ProgramLookup programLookup = new ProgramLookup(compiler);
 
     void processMember(MemberEntity element) {
       if (element is FunctionEntity) {
-        Expect.isTrue(rtiNeed.methodNeedsTypeArguments(element));
-        Expect.isTrue(rtiNeed.methodNeedsSignature(element));
+        Expect.isTrue(rtiNeed.methodNeedsTypeArguments(element),
+            "Expected $element to need type arguments.");
+        Expect.isTrue(rtiNeed.methodNeedsSignature(element),
+            "Expected $element to need signature.");
       }
     }
 
@@ -90,38 +106,3 @@
     await runTest(useKernel: true);
   });
 }
-
-class ProgramLookup {
-  final Program program;
-
-  ProgramLookup(this.program);
-
-  Map<LibraryEntity, Library> libraryMap;
-  Map<ClassEntity, Class> classMap = <ClassEntity, Class>{};
-
-  Library getLibrary(LibraryEntity element) {
-    if (libraryMap == null) {
-      libraryMap = <LibraryEntity, Library>{};
-      for (Fragment fragment in program.fragments) {
-        for (Library library in fragment.libraries) {
-          assert(!libraryMap.containsKey(library.element));
-          libraryMap[library.element] = library;
-        }
-      }
-    }
-    return libraryMap[element];
-  }
-
-  Class getClass(ClassEntity element) {
-    Class cls = classMap[element];
-    if (cls == null) {
-      Library library = getLibrary(element.library);
-      for (Class cls in library.classes) {
-        assert(!classMap.containsKey(cls.element));
-        classMap[cls.element] = cls;
-      }
-      cls = classMap[element];
-    }
-    return cls;
-  }
-}
diff --git a/tests/compiler/dart2js/rti/instance_call_test.dart b/tests/compiler/dart2js/rti/instance_call_test.dart
new file mode 100644
index 0000000..6c6da99
--- /dev/null
+++ b/tests/compiler/dart2js/rti/instance_call_test.dart
@@ -0,0 +1,217 @@
+// 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 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common_elements.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/names.dart';
+import 'package:compiler/src/js_backend/runtime_types.dart';
+import 'package:compiler/src/js_emitter/model.dart';
+import 'package:compiler/src/js/js.dart' as js;
+import 'package:compiler/src/world.dart';
+import 'package:compiler/src/universe/call_structure.dart';
+import 'package:compiler/src/universe/selector.dart';
+import 'package:expect/expect.dart';
+import '../helpers/program_lookup.dart';
+import '../memory_compiler.dart';
+
+const String code = '''
+import 'package:meta/dart2js.dart';
+
+class A {
+  // Both method1 implementations need type arguments.
+  @noInline
+  method1<T>(T t) => t is T;
+
+  // One of the method2 implementations need type arguments.
+  @noInline
+  method2<T>(T t) => t is T;
+
+  // None of the method3 implementations need type arguments.
+  @noInline
+  method3<T>(T t) => false;
+}
+
+class B {
+  @noInline
+  method1<T>(T t) => t is T;
+  @noInline
+  method2<T>(T t) => true;
+  @noInline
+  method3<T>(T t) => true;
+}
+
+// A call to either A.method1 or B.method1.
+@noInline
+call1(c) => c.method1<int>(0);
+
+// A call to A.method1.
+@noInline
+call1a() => new A().method1<int>(0);
+
+// A call to B.method1.
+@noInline
+call1b() => new B().method1<int>(0);
+
+// A call to either A.method2 or B.method2.
+@noInline
+call2(c) => c.method2<int>(0);
+
+// A call to A.method2.
+@noInline
+call2a() => new A().method2<int>(0);
+
+// A call to B.method2.
+@noInline
+call2b() => new B().method2<int>(0);
+
+// A call to either A.method3 or B.method3.
+@noInline
+call3(c) => c.method3<int>(0);
+
+// A call to A.method3.
+@noInline
+call3a() => new A().method3<int>(0);
+
+// A call to B.method3.
+@noInline
+call3b() => new B().method3<int>(0);
+
+main() {
+  call1(new A());
+  call1(new B());
+  call1a();
+  call1b();
+  call2(new A());
+  call2(new B());
+  call2a();
+  call2b();
+  call3(new A());
+  call3(new B());
+  call3a();
+  call3b();
+}
+''';
+
+main() {
+  asyncTest(() async {
+    CompilationResult result = await runCompiler(
+        memorySourceFiles: {'main.dart': code},
+        options: [Flags.strongMode, Flags.useKernel]);
+    Expect.isTrue(result.isSuccess);
+    Compiler compiler = result.compiler;
+    ClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
+    RuntimeTypesNeed rtiNeed = closedWorld.rtiNeed;
+    ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
+    ProgramLookup programLookup = new ProgramLookup(compiler);
+
+    FunctionEntity getFunctionEntity(String name) {
+      FunctionEntity function;
+      int dotIndex = name.indexOf('.');
+      if (dotIndex != -1) {
+        String className = name.substring(0, dotIndex);
+        name = name.substring(dotIndex + 1);
+        ClassEntity cls = elementEnvironment.lookupClass(
+            elementEnvironment.mainLibrary, className);
+        function = elementEnvironment.lookupClassMember(cls, name);
+      } else {
+        function = elementEnvironment.lookupLibraryMember(
+            elementEnvironment.mainLibrary, name);
+      }
+      return function;
+    }
+
+    CallStructure callStructure = new CallStructure(1, const <String>[], 1);
+
+    js.Name getName(String name) {
+      return compiler.backend.namer.invocationName(
+          new Selector.call(new PublicName(name), callStructure));
+    }
+
+    void checkParameters(String name,
+        {int expectedParameterCount, bool needsTypeArguments}) {
+      FunctionEntity function = getFunctionEntity(name);
+
+      Expect.equals(
+          needsTypeArguments,
+          rtiNeed.methodNeedsTypeArguments(function),
+          "Unexpected type argument need for $function.");
+      Method method = programLookup.getMethod(function);
+
+      js.Fun fun = method.code;
+      Expect.equals(expectedParameterCount, fun.params.length,
+          "Unexpected parameter count on $function: ${js.nodeToString(fun)}");
+    }
+
+    // The declarations should have type parameters only when needed.
+    checkParameters('A.method1',
+        expectedParameterCount: 2, needsTypeArguments: true);
+    checkParameters('B.method1',
+        expectedParameterCount: 2, needsTypeArguments: true);
+    checkParameters('A.method2',
+        expectedParameterCount: 2, needsTypeArguments: true);
+    checkParameters('B.method2',
+        expectedParameterCount: 1, needsTypeArguments: false);
+    checkParameters('A.method3',
+        expectedParameterCount: 1, needsTypeArguments: false);
+    checkParameters('B.method3',
+        expectedParameterCount: 1, needsTypeArguments: false);
+
+    checkArguments(String name, String targetName,
+        {int expectedTypeArguments}) {
+      FunctionEntity function = getFunctionEntity(name);
+      Method method = programLookup.getMethod(function);
+
+      js.Fun fun = method.code;
+
+      js.Name selector = getName(targetName);
+      bool callFound = false;
+      forEachCall(fun, (js.Call node) {
+        js.Expression target = node.target;
+        if (target is js.PropertyAccess && target.selector == selector) {
+          callFound = true;
+          Expect.equals(
+              expectedTypeArguments,
+              node.arguments.length,
+              "Unexpected argument count in $function call to $targetName: "
+              "${js.nodeToString(fun)}");
+        }
+      });
+      Expect.isTrue(callFound, "No call to $targetName in $function found.");
+    }
+
+    // The declarations should have type parameters only when needed by the
+    // selector.
+    checkArguments('call1', 'method1', expectedTypeArguments: 2);
+    checkArguments('call1a', 'method1', expectedTypeArguments: 2);
+    checkArguments('call1b', 'method1', expectedTypeArguments: 2);
+    checkArguments('call2', 'method2', expectedTypeArguments: 2);
+    checkArguments('call2a', 'method2', expectedTypeArguments: 2);
+    checkArguments('call2b', 'method2', expectedTypeArguments: 2);
+    // TODO(johnniwinther): Avoid passing type arguments to selectors that
+    // never need type arguments.
+    checkArguments('call3', 'method3', expectedTypeArguments: 2 /*1*/);
+    checkArguments('call3a', 'method3', expectedTypeArguments: 2 /*1*/);
+    checkArguments('call3b', 'method3', expectedTypeArguments: 2 /*1*/);
+  });
+}
+
+void forEachCall(js.Node root, void f(js.Call node)) {
+  CallVisitor visitor = new CallVisitor(f);
+  root.accept(visitor);
+}
+
+class CallVisitor extends js.BaseVisitor {
+  final void Function(js.Call) callback;
+
+  CallVisitor(this.callback);
+
+  @override
+  visitCall(js.Call node) {
+    callback(node);
+    super.visitCall(node);
+  }
+}
diff --git a/tests/compiler/dart2js/rti/rti_need_test.dart b/tests/compiler/dart2js/rti/rti_need_test.dart
index 67de10c..bcac3f2 100644
--- a/tests/compiler/dart2js/rti/rti_need_test.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test.dart
@@ -21,6 +21,7 @@
 import 'package:compiler/src/ssa/builder.dart' as ast;
 import 'package:compiler/src/universe/world_builder.dart';
 import 'package:kernel/ast.dart' as ir;
+import '../equivalence/check_helpers.dart';
 import '../equivalence/id_equivalence.dart';
 import '../equivalence/id_equivalence_helper.dart';
 
@@ -60,6 +61,19 @@
   new RtiClassNeedAstComputer(compiler, actualMap).computeClassValue(cls);
 }
 
+class Tags {
+  static const String needsTypeArguments = 'needsArgs';
+  static const String needsSignature = 'needsSignature';
+  static const String dependencies = 'deps';
+  static const String explicitTypeCheck = 'explicit';
+  static const String implicitTypeCheck = 'implicit';
+  static const String directTypeArgumentTest = 'direct';
+  static const String indirectTypeArgumentTest = 'indirect';
+  static const String typeLiteral = 'exp';
+  static const String requiredArgumentClass = 'required';
+  static const String typeChecks = 'checks';
+}
+
 abstract class ComputeValueMixin<T> {
   Compiler get compiler;
 
@@ -68,13 +82,19 @@
   RuntimeTypesNeedBuilderImpl get rtiNeedBuilder =>
       compiler.frontendStrategy.runtimeTypesNeedBuilderForTesting;
   RuntimeTypesNeed get rtiNeed => compiler.backendClosedWorldForTesting.rtiNeed;
-
+  RuntimeTypesChecks get rtiChecks =>
+      compiler.backend.emitter.typeTestRegistry.rtiChecks;
+  TypeChecks get requiredChecks =>
+      // TODO(johnniwinther): This should have been
+      //   rtiChecks.requiredChecks;
+      // but it is incomplete and extended? by this:
+      compiler.backend.emitter.typeTestRegistry.requiredChecks;
   ClassEntity getFrontendClass(ClassEntity cls);
   MemberEntity getFrontendMember(MemberEntity member);
   Local getFrontendClosure(MemberEntity member);
 
-  String findChecks(StringBuffer sb, String comma, String prefix, Entity entity,
-      Set<DartType> checks) {
+  void findChecks(
+      Features features, String key, Entity entity, Set<DartType> checks) {
     Set<DartType> types = new Set<DartType>();
     FindTypeVisitor finder = new FindTypeVisitor(entity);
     for (DartType type in checks) {
@@ -82,97 +102,103 @@
         types.add(type);
       }
     }
-    List<String> list = types.map((t) => t.toString()).toList()..sort();
+    List<String> list = types.map(typeToString).toList()..sort();
     if (list.isNotEmpty) {
-      sb.write('${comma}$prefix=[${list.join('')}]');
-      comma = ',';
+      features[key] = '[${list.join('')}]';
     }
-    return comma;
   }
 
-  String findDependencies(StringBuffer sb, String comma, Entity entity) {
-    Iterable<String> dependencies;
-    if (rtiNeedBuilder.typeArgumentDependencies.containsKey(entity)) {
-      dependencies = rtiNeedBuilder.typeArgumentDependencies[entity]
-          .map((d) => d.name)
-          .toList()
-            ..sort();
+  void findDependencies(Features features, Entity entity) {
+    Iterable<Entity> dependencies =
+        rtiNeedBuilder.typeVariableTests.getTypeArgumentDependencies(entity);
+    if (dependencies.isNotEmpty) {
+      List<String> names = dependencies.map((d) => d.name).toList()..sort();
+      features[Tags.dependencies] = '[${names.join(',')}]';
     }
-    if (dependencies != null && dependencies.isNotEmpty) {
-      sb.write('${comma}deps=[${dependencies.join(',')}]');
-      comma = ',';
-    }
-    return comma;
   }
 
   String getClassValue(ClassEntity backendClass) {
-    StringBuffer sb = new StringBuffer();
-    String comma = '';
+    Features features = new Features();
 
     if (rtiNeed.classNeedsTypeArguments(backendClass)) {
-      sb.write('${comma}needsArgs');
-      comma = ',';
+      features.add(Tags.needsTypeArguments);
     }
     ClassEntity frontendClass = getFrontendClass(backendClass);
-    comma = findDependencies(sb, comma, frontendClass);
+    findDependencies(features, frontendClass);
     if (rtiNeedBuilder.classesUsingTypeVariableLiterals
         .contains(frontendClass)) {
-      sb.write('${comma}exp');
-      comma = ',';
+      features.add(Tags.typeLiteral);
     }
-    if (rtiNeedBuilder.classesUsingTypeVariableTests.contains(frontendClass)) {
-      sb.write('${comma}test');
-      comma = ',';
+    if (rtiNeedBuilder.typeVariableTests.directClassTests
+        .contains(frontendClass)) {
+      features.add(Tags.directTypeArgumentTest);
+    } else if (rtiNeedBuilder.typeVariableTests.classTests
+        .contains(frontendClass)) {
+      features.add(Tags.indirectTypeArgumentTest);
     }
-    comma = findChecks(
-        sb, comma, 'explicit', frontendClass, rtiNeedBuilder.isChecks);
-    comma = findChecks(
-        sb, comma, 'implicit', frontendClass, rtiNeedBuilder.implicitIsChecks);
-    return sb.toString();
+    findChecks(features, Tags.explicitTypeCheck, frontendClass,
+        rtiNeedBuilder.typeVariableTests.explicitIsChecks);
+    findChecks(features, Tags.implicitTypeCheck, frontendClass,
+        rtiNeedBuilder.typeVariableTests.implicitIsChecks);
+    if (rtiChecks.getRequiredArgumentClasses().contains(backendClass)) {
+      features.add(Tags.requiredArgumentClass);
+    }
+    Iterable<TypeCheck> checks = requiredChecks[backendClass];
+    if (checks.isNotEmpty) {
+      features[Tags.typeChecks] =
+          '[${checks.map((c) => c.cls.name).join(',')}]';
+    }
+    return features.getText();
   }
 
   String getMemberValue(MemberEntity backendMember) {
     MemberEntity frontendMember = getFrontendMember(backendMember);
     Local frontendClosure = getFrontendClosure(backendMember);
 
-    StringBuffer sb = new StringBuffer();
-    String comma = '';
+    Features features = new Features();
 
     if (backendMember is FunctionEntity) {
       if (rtiNeed.methodNeedsTypeArguments(backendMember)) {
-        sb.write('${comma}needsArgs');
-        comma = ',';
+        features.add(Tags.needsTypeArguments);
       }
       if (rtiNeed.methodNeedsSignature(backendMember)) {
-        sb.write('${comma}needsSignature');
-        comma = ',';
+        features.add(Tags.needsSignature);
       }
+
+      void addFrontendData(Entity entity) {
+        findDependencies(features, entity);
+        if (rtiNeedBuilder.typeVariableTests.directMethodTests
+            .contains(entity)) {
+          features.add(Tags.directTypeArgumentTest);
+        } else if (rtiNeedBuilder.typeVariableTests.methodTests
+            .contains(entity)) {
+          features.add(Tags.indirectTypeArgumentTest);
+        }
+        findChecks(features, Tags.explicitTypeCheck, entity,
+            rtiNeedBuilder.typeVariableTests.explicitIsChecks);
+        findChecks(features, Tags.implicitTypeCheck, entity,
+            rtiNeedBuilder.typeVariableTests.implicitIsChecks);
+      }
+
       if (frontendClosure != null) {
         if (frontendClosure is LocalFunctionElement &&
             rtiNeed.localFunctionNeedsSignature(frontendClosure)) {
-          sb.write('${comma}needsSignature');
-          comma = ',';
+          features.add(Tags.needsSignature);
         }
+        addFrontendData(frontendClosure);
         if (rtiNeedBuilder.localFunctionsUsingTypeVariableLiterals
             .contains(frontendClosure)) {
-          sb.write('${comma}exp');
-          comma = ',';
+          features.add(Tags.typeLiteral);
         }
-      }
-      if (frontendMember != null) {
+      } else if (frontendMember != null) {
+        addFrontendData(frontendMember);
         if (rtiNeedBuilder.methodsUsingTypeVariableLiterals
             .contains(frontendMember)) {
-          sb.write('${comma}exp');
-          comma = ',';
+          features.add(Tags.typeLiteral);
         }
-        comma = findDependencies(sb, comma, frontendMember);
-        comma = findChecks(
-            sb, comma, 'explicit', frontendMember, rtiNeedBuilder.isChecks);
-        comma = findChecks(sb, comma, 'implicit', frontendMember,
-            rtiNeedBuilder.implicitIsChecks);
       }
     }
-    return sb.toString();
+    return features.getText();
   }
 }
 
diff --git a/tests/compiler/dart2js/rti/show.dart b/tests/compiler/dart2js/rti/show.dart
new file mode 100644
index 0000000..49ab795
--- /dev/null
+++ b/tests/compiler/dart2js/rti/show.dart
@@ -0,0 +1,17 @@
+// 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.
+
+/// Helper program that shows the rti data on a dart program.
+
+import 'package:args/args.dart';
+import '../equivalence/show_helper.dart';
+import 'rti_need_test.dart';
+
+main(List<String> args) async {
+  ArgParser argParser = createArgParser();
+  ArgResults results = argParser.parse(args);
+  await show(results, computeAstRtiMemberNeed, computeKernelRtiMemberNeed,
+      computeAstClassData: computeAstRtiClassNeed,
+      computeKernelClassData: computeKernelRtiClassNeed);
+}
diff --git a/tests/compiler/dart2js_extra/31803_test.dart b/tests/compiler/dart2js_extra/31803_test.dart
new file mode 100644
index 0000000..03c1f7c
--- /dev/null
+++ b/tests/compiler/dart2js_extra/31803_test.dart
@@ -0,0 +1,34 @@
+// 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 'package:expect/expect.dart';
+
+// Tests that the compiler doesn't crash on an annotation with fields
+
+class Annotation {
+  final Object obj;
+  const Annotation(this.obj);
+}
+
+class UnusedClass {
+  final Object x;
+
+  const factory UnusedClass(UnusedArgumentClass x) = UnusedClass._;
+
+  const UnusedClass._(this.x);
+}
+
+class UnusedArgumentClass {
+  const UnusedArgumentClass();
+}
+
+@Annotation(const UnusedClass(arg))
+class A {}
+
+const arg = const UnusedArgumentClass();
+
+main() {
+  var a = new A();
+  Expect.isTrue(a != null);
+}
diff --git a/tests/compiler/dart2js_extra/call_signature_test.dart b/tests/compiler/dart2js_extra/call_signature_test.dart
new file mode 100644
index 0000000..8c78e9a
--- /dev/null
+++ b/tests/compiler/dart2js_extra/call_signature_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.
+
+// Regression test. Crash occured when trying to create a signature function
+// for the non-live 'call' method on the live class 'A'.
+
+import 'package:expect/expect.dart';
+
+class A<T> {
+  /// Weird signature to ensure it isn't match by any call selector.
+  call(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, {T t}) {}
+}
+
+class B<T> {
+  @NoInline()
+  m(f) => f is Function(T);
+}
+
+@NoInline()
+create() => new B<A<int>>();
+
+main() {
+  var o = create();
+  new A();
+  Expect.isTrue(o.m((A<int> i) => i));
+  Expect.isFalse(o.m((A<String> i) => i));
+}
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index dfa1d84..5065972 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -8,14 +8,12 @@
 [ $compiler == dart2js ]
 class_test: Fail
 constant_javascript_semantics4_test: Fail, OK
-dummy_compiler_test: Slow, Pass
 local_function_call_test: RuntimeError # Issue 31879
 mirror_printer_test: Pass, Slow # Issue 25940, 16473
 mirrors_used_closure_test: Fail # Issue 17939
 no_such_method_test: Fail # Wrong Invocation.memberName.
-recursive_import_test: Slow, Pass
 statements_test: Fail
-typed_locals_test: Fail
+typed_locals_test: Pass, Fail
 
 [ $runtime == jsshell ]
 deferred/load_in_correct_order_test: SkipByDesign # jsshell preamble does not support this test.
@@ -44,10 +42,18 @@
 [ $compiler == dart2js && $runtime == chromeOnAndroid ]
 no_such_method_mirrors_test: Pass, Slow # TODO(kasperl): Please triage.
 
-[ $compiler == dart2js && $runtime == d8 && $host_checked ]
+[ $compiler == dart2js && !$host_checked ]
+dummy_compiler_test: Slow, Pass
+recursive_import_test: Slow, Pass
+
+[ $compiler == dart2js && $host_checked ]
 dummy_compiler_test: Skip # Issue 30773
 recursive_import_test: Skip # Issue 30773
 
+[ $compiler == dart2js && $browser ]
+dummy_compiler_test: Skip
+recursive_import_test: Skip
+
 [ $compiler == dart2js && $runtime == drt && $csp ]
 deferred/load_in_correct_order_test: SkipByDesign # Purposely uses `eval`
 
@@ -60,10 +66,6 @@
 [ $compiler == dart2js && $runtime == safari ]
 deferred_fail_and_retry_worker_test: Timeout # Issue 22106
 
-[ $compiler == dart2js && $browser ]
-dummy_compiler_test: Skip
-recursive_import_test: Skip
-
 [ $compiler == dart2js && $checked ]
 variable_type_test/01: Fail, OK
 variable_type_test/03: Fail, OK
@@ -109,7 +111,6 @@
 private_symbol_literal_test/04: MissingCompileTimeError
 private_symbol_literal_test/05: MissingCompileTimeError
 private_symbol_literal_test/06: MissingCompileTimeError
-recursive_import_test: CompileTimeError
 reflect_native_types_test: RuntimeError
 regress/4562_test/none: CompileTimeError
 type_constant_switch_test/01: MissingCompileTimeError
@@ -121,11 +122,6 @@
 deferred_fail_and_retry_worker_test: SkipByDesign # Uses eval to simulate failed loading.
 js_interop_test: RuntimeError # Issue 31082
 
-[ $compiler == dart2js && $dart2js_with_kernel ]
-dummy_compiler_test: Crash # Issue 31715
-recursive_import_test: Crash # Issue 31715
-typevariable_typedef_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(A.T) in (local(A.foo#func)) for j:constructor(B.).
-
 [ $compiler == dart2js && $dart2js_with_kernel && $fast_startup ]
 23056_test: Pass
 closure_capture2_test: RuntimeError
@@ -136,7 +132,6 @@
 deferred/reflect_multiple_default_arg_test: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
 deferred_fail_and_retry_test: RuntimeError
 deferred_fail_and_retry_worker_test: Fail
-dummy_compiler_test: CompileTimeError
 label_test/06: MissingCompileTimeError
 mirror_enqueuer_regression_test: Pass
 private_symbol_literal_test/01: MissingCompileTimeError
@@ -145,7 +140,6 @@
 private_symbol_literal_test/04: MissingCompileTimeError
 private_symbol_literal_test/05: MissingCompileTimeError
 private_symbol_literal_test/06: MissingCompileTimeError
-recursive_import_test: CompileTimeError
 regress/4562_test/none: CompileTimeError
 type_constant_switch_test/01: MissingCompileTimeError
 unconditional_dartio_import_test: RuntimeError
@@ -153,6 +147,7 @@
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked ]
 21666_test: CompileTimeError
 23056_test: CompileTimeError
+23264_test: RuntimeError
 closure_capture2_test: RuntimeError
 closure_type_reflection2_test: CompileTimeError
 closure_type_reflection_test: CompileTimeError
@@ -201,6 +196,7 @@
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
 21666_test: CompileTimeError
 23056_test: CompileTimeError
+23264_test: RuntimeError
 closure_type_reflection2_test: CompileTimeError
 closure_type_reflection_test: CompileTimeError
 constant_javascript_semantics_test/01: MissingCompileTimeError
@@ -240,7 +236,6 @@
 private_symbol_literal_test/04: MissingCompileTimeError
 private_symbol_literal_test/05: MissingCompileTimeError
 private_symbol_literal_test/06: MissingCompileTimeError
-recursive_import_test: CompileTimeError
 reflect_native_types_test: CompileTimeError
 regress/4562_test/none: CompileTimeError
 type_constant_switch_test/01: MissingCompileTimeError
@@ -296,7 +291,7 @@
 mirrors_used_warning_test/minif: Fail, OK # Tests warning that minified code will be broken.
 runtime_type_test: Fail, OK # Tests extected output of Type.toString().
 to_string_test: Fail # Issue 7179.
-typevariable_typedef_test: Fail, OK # Tests extected output of Type.toString().
+typevariable_typedef_test: Fail, OK # Tests expected output of Type.toString().
 
 [ $compiler == dart2js && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == drt || $runtime == ff || $runtime == safari) ]
 isolate2_test/01: Fail # Issue 14458.
diff --git a/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart b/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart
new file mode 100644
index 0000000..cb5e219
--- /dev/null
+++ b/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart
@@ -0,0 +1,29 @@
+// 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.
+
+// Ensure that we prepare type variables for inlined mixin fields.
+
+import 'package:expect/expect.dart';
+
+class A<T> {}
+
+class Mixin<T> {
+  var field = new A<T>();
+
+  m1() => field is A<int>;
+  m2() => field is A<String>;
+}
+
+class SuperClass<T> extends Object with Mixin<T> {}
+
+class Class extends SuperClass<int> {}
+
+@NoInline()
+createClass() => new Class();
+
+main() {
+  var c = createClass();
+  Expect.isTrue(c.m1());
+  Expect.isFalse(c.m2());
+}
diff --git a/tests/compiler/dart2js_extra/generic_in_redirect_test.dart b/tests/compiler/dart2js_extra/generic_in_redirect_test.dart
new file mode 100644
index 0000000..6da3750
--- /dev/null
+++ b/tests/compiler/dart2js_extra/generic_in_redirect_test.dart
@@ -0,0 +1,32 @@
+// 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.
+
+// Ensure that we prepare type variables for inlined redirecting constructor
+// calls.
+
+import 'package:expect/expect.dart';
+
+class A<T> {}
+
+class SuperClass<T> {
+  var field;
+
+  SuperClass() : this._(new A<T>());
+
+  SuperClass._(this.field);
+
+  m1() => field is A<int>;
+  m2() => field is A<String>;
+}
+
+class Class extends SuperClass<int> {}
+
+@NoInline()
+createClass() => new Class();
+
+main() {
+  var c = createClass();
+  Expect.isTrue(c.m1());
+  Expect.isFalse(c.m2());
+}
diff --git a/tests/compiler/dart2js_extra/generic_in_super_test.dart b/tests/compiler/dart2js_extra/generic_in_super_test.dart
new file mode 100644
index 0000000..a4f52d4
--- /dev/null
+++ b/tests/compiler/dart2js_extra/generic_in_super_test.dart
@@ -0,0 +1,33 @@
+// 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.
+
+// Ensure that we prepare type variables for inlined super constructor calls.
+
+import 'package:expect/expect.dart';
+
+class A<T> {}
+
+class SuperSuperClass<T> {
+  var field;
+
+  SuperSuperClass(this.field);
+
+  m1() => field is A<int>;
+  m2() => field is A<String>;
+}
+
+class SuperClass<T> extends SuperSuperClass<T> {
+  SuperClass() : super(new A<T>());
+}
+
+class Class extends SuperClass<int> {}
+
+@NoInline()
+createClass() => new Class();
+
+main() {
+  var c = createClass();
+  Expect.isTrue(c.m1());
+  Expect.isFalse(c.m2());
+}
diff --git a/tests/compiler/dart2js_extra/map_to_set_test.dart b/tests/compiler/dart2js_extra/map_to_set_test.dart
new file mode 100644
index 0000000..1bad856
--- /dev/null
+++ b/tests/compiler/dart2js_extra/map_to_set_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+// Regression test for a missing RTI dependency between Map and JsLinkedHashMap.
+
+import 'package:expect/expect.dart';
+
+main() {
+  var c = new Class<double, int>();
+  var map = c.m();
+  var set = map.keys.toSet();
+  Expect.isFalse(set is Set<String>);
+}
+
+class Class<T, S> {
+  m() {
+    return <T, S>{};
+  }
+}
diff --git a/tests/corelib_2/compare_to2_test.dart b/tests/corelib_2/compare_to2_test.dart
index 81a8dca..f9d66fb 100644
--- a/tests/corelib_2/compare_to2_test.dart
+++ b/tests/corelib_2/compare_to2_test.dart
@@ -23,16 +23,18 @@
   var two53p1 = two53 + 1;
   var maxFiniteAsDouble = 1.7976931348623157e+308;
   var maxFiniteAsInt = maxFiniteAsDouble.truncate();
-  int huge = 1 << 2000;
-  int hugeP1 = huge + 1;
   var inf = double.infinity;
   var nan = double.nan;
   var mnan = negate(nan);
+  var minInt64 = -0x8000000000000000;
+  var minInt64AsDouble = minInt64.toDouble();
+  var maxInt64 = 0x7fffffffffffffff;
+  var maxInt64AsDouble = maxInt64.toDouble(); // 1 << 63
   var matrix = [
     -inf,
-    -hugeP1,
-    -huge,
-    [-maxFiniteAsDouble, -maxFiniteAsInt],
+    -maxFiniteAsDouble,
+    [minInt64, minInt64AsDouble],
+    [-maxInt64, -maxFiniteAsInt],
     -two53p1,
     [-two53, -maxExactIntAsInt, -maxExactIntAsDouble],
     -maxNonInt,
@@ -57,9 +59,9 @@
     maxNonInt,
     [two53, maxExactIntAsInt, maxExactIntAsDouble],
     two53p1,
-    [maxFiniteAsDouble, maxFiniteAsInt],
-    huge,
-    hugeP1,
+    [maxInt64, maxFiniteAsInt],
+    maxInt64AsDouble,
+    maxFiniteAsDouble,
     inf,
     [nan, mnan],
   ];
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 2021a13..a5abcca 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -7,12 +7,6 @@
 iterable_element_at_test/static: Pass
 num_sign_test: Crash, Pass # Issue 31768
 
-[ $compiler == dart2js ]
-date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
-hash_set_test/01: RuntimeError # Issue 11551
-integer_to_radix_string_test: RuntimeError # Issue 29921
-string_static_test: MissingCompileTimeError
-
 [ $compiler != dartdevc ]
 error_stack_trace_test/static: MissingCompileTimeError
 
@@ -21,7 +15,6 @@
 bool_from_environment2_test/03: Crash
 int_modulo_arith_test/modPow: RuntimeError
 int_modulo_arith_test/none: RuntimeError
-iterable_reduce_test/01: CompileTimeError
 map_test: Crash # crash in front_end.
 null_nosuchmethod_test/01: CompileTimeError
 null_nosuchmethod_test/none: CompileTimeError
@@ -119,7 +112,7 @@
 symbol_reserved_word_test/05: MissingCompileTimeError # Issue 30245
 
 # All static_tests have expected compile-time errors.
-[ $compiler != dart2analyzer && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
+[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $strong ]
 core_runtime_types_static_test: MissingCompileTimeError
 splay_tree_test/01: MissingCompileTimeError
 splay_tree_test/02: MissingCompileTimeError
@@ -131,13 +124,22 @@
 list_as_map_test: Pass, Slow # TODO(kasperl): Please triage.
 string_trimlr_test/unicode63: RuntimeError # Uses Unicode 6.2.0 or earlier.
 
-[ $compiler == dart2js && $runtime == d8 ]
+[ $compiler == dart2js && $runtime == d8 && !$dart2js_with_kernel ]
 uri_base_test: RuntimeError # D8 uses a custom uri scheme for Uri.base
 
-[ $compiler == dart2js && $runtime == drt && $csp && $minified ]
+[ $compiler == dart2js && $runtime == drt && $csp && !$dart2js_with_kernel && $minified ]
 core_runtime_types_test: Pass, Fail # Issue 27913
 
+[ $compiler == dart2js && $runtime != none && !$checked && !$dart2js_with_kernel ]
+growable_list_test: RuntimeError # Concurrent modifications test always runs
+splay_tree_from_iterable_test: RuntimeError
+string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
+
 [ $compiler == dart2js && $runtime != none ]
+regexp/pcre_test: Pass, Slow # Issue 21593
+
+[ $compiler == dart2js && $runtime != none && !$dart2js_with_kernel ]
+error_stack_trace1_test: RuntimeError # Issue 12399
 int_parse_radix_test/01: RuntimeError
 int_parse_radix_test/02: RuntimeError
 integer_to_string_test/01: RuntimeError
@@ -145,18 +147,6 @@
 list_concurrent_modify_test: RuntimeError # dart2js does not fully implement these
 list_test/*: RuntimeError # dart2js doesn't implement strong mode covariance checks
 nan_infinity_test/01: RuntimeError
-regexp/pcre_test: Pass, Slow # Issue 21593
-
-[ $compiler == dart2js && $runtime != none && !$checked ]
-growable_list_test: RuntimeError # Concurrent modifications test always runs
-splay_tree_from_iterable_test: RuntimeError
-string_split_test/checkedstore: RuntimeError # Issue 30548: does not check stores into List<String>
-
-[ $compiler == dart2js && $runtime != none && $dart2js_with_kernel ]
-list_concurrent_modify_test: Crash # Issue 30559
-
-[ $compiler == dart2js && $runtime != none && !$dart2js_with_kernel ]
-error_stack_trace1_test: RuntimeError # Issue 12399
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 
 [ $compiler == dart2js && $runtime == safari ]
@@ -229,85 +219,169 @@
 *: SkipByDesign
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && $strong ]
+apply2_test: RuntimeError
 apply3_test: CompileTimeError
+apply_test: RuntimeError
 cast_test: RuntimeError
+collection_length_test: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [HRef(phi 55), HRef(literal: NullConstant)].
+collection_removes_test: RuntimeError
 dynamic_nosuchmethod_test: CompileTimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
+growable_list_test: RuntimeError
+int_parse_radix_test/01: RuntimeError
+int_parse_radix_test/02: RuntimeError
+integer_to_radix_string_test/01: RuntimeError
+integer_to_radix_string_test/02: RuntimeError
+integer_to_radix_string_test/none: RuntimeError
+integer_to_string_test/01: RuntimeError
+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_to_list_test/01: RuntimeError
-list_test/01: Crash # Unsupported operation: Unsupported type parameter type node T.
-list_test/none: Crash # Unsupported operation: Unsupported type parameter type node T.
+iterable_return_type_test/none: RuntimeError
+iterable_to_list_test/01: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic getter: selector=Selector(getter, length, arity=0), mask=Container([exact=JSExtendableArray], element: [null|subclass=Object], length: null), literal: NullConstant].
+iterable_to_list_test/none: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [HRef(phi 48), HRef(parameter E)].
+iterable_to_set_test: RuntimeError
+linked_hash_map_from_iterable_test: RuntimeError
+linked_hash_map_from_iterables_test: RuntimeError
+list_concurrent_modify_test: RuntimeError
+list_filled_type_argument_test: RuntimeError
+list_insert_all_test: RuntimeError
+list_test/01: RuntimeError
+list_test/none: RuntimeError
+list_unmodifiable_test: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic getter: selector=Selector(getter, length, arity=0), mask=[subtype=SetMixin], HTypeInfoReadVariable(SetMixin.E)].
+map_from_iterable_test: RuntimeError
+map_from_iterables_test: RuntimeError
+map_keys2_test: RuntimeError
 map_test: Crash # type 'DillClassBuilder' is not a subtype of type 'SourceClassBuilder' of 'named' where
-null_nosuchmethod_test/01: RuntimeError
-null_nosuchmethod_test/none: 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
+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
 symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/05: MissingCompileTimeError
 symbol_reserved_word_test/07: MissingCompileTimeError
 symbol_reserved_word_test/10: MissingCompileTimeError
 symbol_test/02: MissingCompileTimeError
 symbol_test/03: MissingCompileTimeError
+uri_base_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && !$strong ]
 *: SkipByDesign
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
+apply2_test: RuntimeError
 apply3_test: CompileTimeError
+apply_test: RuntimeError
 cast_test: RuntimeError
+collection_length_test: Crash # Wrong number of template arguments, given 2, expected 1
+collection_removes_test: RuntimeError
 dynamic_nosuchmethod_test: CompileTimeError
 error_stack_trace1_test: RuntimeError
+growable_list_test: RuntimeError
 hash_set_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_CustomHashSet.#x), local(_CustomHashSet.#)) for j:closure_call(_CustomHashSet__CustomHashSet_closure.call).
-iterable_element_at_test/static: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_LinkedCustomHashSet.#x), local(_LinkedCustomHashSet.#)) for j:closure_call(_LinkedCustomHashSet__LinkedCustomHashSet_closure.call).
-iterable_mapping_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_LinkedCustomHashSet.#x), local(_LinkedCustomHashSet.#)) for j:closure_call(_LinkedCustomHashSet__LinkedCustomHashSet_closure.call).
+int_parse_radix_test/01: RuntimeError
+int_parse_radix_test/02: RuntimeError
+integer_to_radix_string_test/01: RuntimeError
+integer_to_radix_string_test/02: RuntimeError
+integer_to_radix_string_test/none: RuntimeError
+integer_to_string_test/01: RuntimeError
+iterable_empty_test: RuntimeError
+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_to_list_test/01: RuntimeError
-iterable_to_set_test: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(_LinkedCustomHashSet.#x), local(_LinkedCustomHashSet.#)) for j:closure_call(_LinkedCustomHashSet__LinkedCustomHashSet_closure.call).
-list_test/01: Crash # Unsupported operation: Unsupported type parameter type node T.
-list_test/none: Crash # Unsupported operation: Unsupported type parameter type node T.
+iterable_return_type_test/none: RuntimeError
+iterable_to_list_test/01: Crash # Wrong number of template arguments, given 2, expected 1
+iterable_to_list_test/none: Crash # Wrong number of template arguments, given 2, expected 1
+iterable_to_set_test: RuntimeError
+linked_hash_map_from_iterable_test: RuntimeError
+linked_hash_map_from_iterables_test: RuntimeError
+list_concurrent_modify_test: RuntimeError
+list_filled_type_argument_test: RuntimeError
+list_insert_all_test: RuntimeError
+list_test/01: RuntimeError
+list_test/none: RuntimeError
+list_unmodifiable_test: Crash # Wrong number of template arguments, given 2, expected 1
+map_from_iterable_test: RuntimeError
+map_from_iterables_test: RuntimeError
+map_keys2_test: RuntimeError
 map_test: Crash # tests/map_test.dart:870:7: Internal problem: Unhandled Null in installDefaultConstructor.
-null_nosuchmethod_test/01: RuntimeError
-null_nosuchmethod_test/none: RuntimeError
-splay_tree_from_iterable_test: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(SplayTreeMap.#v), local(SplayTreeMap.#)) for j:closure_call(SplayTreeMap_SplayTreeMap_closure.call).
-splay_tree_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(SplayTreeSet.#v), local(SplayTreeSet.#)) for j:closure_call(SplayTreeSet_SplayTreeSet_closure.call).
-splay_tree_test/02: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in (local(SplayTreeSet.#v), local(SplayTreeSet.#)) for j:closure_call(SplayTreeSet_SplayTreeSet_closure.call).
+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
+queue_test: RuntimeError
+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_operator_test/03: RuntimeError
 symbol_operator_test/none: RuntimeError
 symbol_reserved_word_test/03: RuntimeError
 symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/05: MissingCompileTimeError
 symbol_reserved_word_test/07: MissingCompileTimeError
 symbol_reserved_word_test/10: MissingCompileTimeError
 symbol_test/02: MissingCompileTimeError
 symbol_test/03: MissingCompileTimeError
-uri_base_test: Crash # RangeError (index): Invalid value: Valid value range is empty: 0
+uri_base_test: RuntimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && !$strong ]
 *: SkipByDesign
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
+date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
+from_environment_const_type_undefined_test/09: MissingCompileTimeError
+from_environment_const_type_undefined_test/11: MissingCompileTimeError
+from_environment_const_type_undefined_test/12: MissingCompileTimeError
+from_environment_const_type_undefined_test/13: MissingCompileTimeError
+from_environment_const_type_undefined_test/14: MissingCompileTimeError
+from_environment_const_type_undefined_test/16: MissingCompileTimeError
+hash_set_test/01: RuntimeError # Issue 11551
+int_parse_radix_bad_handler_test: MissingCompileTimeError
+integer_to_radix_string_test: RuntimeError # Issue 29921
+iterable_element_at_test/static: MissingCompileTimeError
+iterable_mapping_test/01: MissingCompileTimeError
 iterable_return_type_test/01: RuntimeError # Issue 20085
 iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
 iterable_to_list_test/01: RuntimeError # Issue 26501
 list_unmodifiable_test: Pass, RuntimeError # Issue 28712
+map_keys2_test: RuntimeError # needs Dart 2 is checks
+string_base_vm_static_test: MissingCompileTimeError
+string_static_test: MissingCompileTimeError
 
 [ $compiler == dart2js && $fast_startup ]
 apply3_test: Fail # mirrors not supported
 dynamic_nosuchmethod_test: Fail # mirrors not supported
 
-[ $compiler == dartdevc && $runtime != none ]
-symbol_operator_test: RuntimeError # Issue 29921
-
-[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp ]
+[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp ]
 iterable_element_at_test/static: MissingCompileTimeError
 
-[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $runtime != none ]
+[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $runtime != none ]
 map_keys2_test: RuntimeError # needs Dart 2 is checks
 
-[ $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && ($compiler != dart2analyzer || !$strong) ]
+[ $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && ($compiler != dart2analyzer || !$strong) ]
 iterable_mapping_test/01: MissingCompileTimeError
 
+[ $compiler == dartdevc && $runtime != none ]
+symbol_operator_test: RuntimeError # Issue 29921
+
 [ $compiler != dartdevc && $compiler != dartdevk && $checked && !$strong ]
 core_runtime_types_static_test: MissingCompileTimeError
 splay_tree_test/01: MissingCompileTimeError
@@ -330,10 +404,6 @@
 [ $compiler == dartk && $runtime == vm && $strong ]
 apply3_test: CompileTimeError # Issue 31402 (Invocation arguments)
 bool_from_environment2_test/03: MissingCompileTimeError
-compare_to2_test: RuntimeError
-iterable_fold_test/02: RuntimeError
-iterable_reduce_test/01: CompileTimeError # Issue 31533
-iterable_reduce_test/none: RuntimeError
 iterable_to_list_test/01: RuntimeError
 iterable_to_list_test/none: RuntimeError
 json_map_test: RuntimeError
@@ -357,10 +427,6 @@
 # ===== dartkp + dart_precompiled status lines =====
 [ $compiler == dartkp && $runtime == dart_precompiled && $strong ]
 bool_from_environment2_test/03: MissingCompileTimeError
-compare_to2_test: RuntimeError
-iterable_fold_test/02: RuntimeError
-iterable_reduce_test/01: CompileTimeError # Issue 31533
-iterable_reduce_test/none: RuntimeError
 iterable_to_list_test/01: RuntimeError
 iterable_to_list_test/none: RuntimeError
 json_map_test: RuntimeError
@@ -387,6 +453,15 @@
 string_from_environment3_test: Skip
 string_from_environment_test: Skip
 
+[ $compiler == none && $runtime == vm ]
+from_environment_const_type_undefined_test/09: MissingCompileTimeError
+from_environment_const_type_undefined_test/11: MissingCompileTimeError
+from_environment_const_type_undefined_test/12: MissingCompileTimeError
+from_environment_const_type_undefined_test/13: MissingCompileTimeError
+from_environment_const_type_undefined_test/14: MissingCompileTimeError
+from_environment_const_type_undefined_test/16: MissingCompileTimeError
+string_base_vm_static_test: MissingCompileTimeError
+
 [ $compiler == none && ($runtime == flutter || $runtime == vm) ]
 iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
 
@@ -439,9 +514,6 @@
 integer_parsed_arith_vm_test: RuntimeError # Issue 29921
 integer_to_radix_string_test: RuntimeError # Issue 29921
 integer_to_string_test/01: RuntimeError # Issue 29921
-iterable_fold_test/02: RuntimeError # different type inference problem
-iterable_reduce_test/01: RuntimeError
-iterable_reduce_test/none: RuntimeError
 iterable_return_type_test/02: RuntimeError # Issue 29921
 iterable_to_list_test/*: RuntimeError
 json_map_test: RuntimeError # Issue 29921
@@ -500,21 +572,7 @@
 symbol_test/none: RuntimeError # Issue 29921
 typed_data_with_limited_ints_test: Skip # dartdevc doesn't know about --limit-ints-to-64-bits
 
-[ !$checked && !$strong ]
-core_runtime_types_static_test: MissingCompileTimeError
-splay_tree_test/01: MissingCompileTimeError
-splay_tree_test/02: MissingCompileTimeError
-string_base_vm_static_test: MissingCompileTimeError
-string_replace_static_test: MissingCompileTimeError
-string_static_test: MissingCompileTimeError
-
-# We no longer expect Dart2 tests to run with the standalone VM without the new
-# common front end, but for now we get better coverage by still running them in
-# checked mode, which is mostly Dart2-compatible.
-[ !$checked && ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
-*: Skip
-
-[ !$checked && ($compiler == dart2js || $compiler == none && $runtime == vm) ]
+[ !$checked && !$dart2js_with_kernel && ($compiler == dart2js || $compiler == none && $runtime == vm) ]
 from_environment_const_type_test/02: MissingCompileTimeError
 from_environment_const_type_test/03: MissingCompileTimeError
 from_environment_const_type_test/04: MissingCompileTimeError
@@ -535,6 +593,20 @@
 from_environment_const_type_undefined_test/08: MissingCompileTimeError
 iterable_generate_test/01: RuntimeError
 
+[ !$checked && !$strong ]
+core_runtime_types_static_test: MissingCompileTimeError
+splay_tree_test/01: MissingCompileTimeError
+splay_tree_test/02: MissingCompileTimeError
+string_base_vm_static_test: MissingCompileTimeError
+string_replace_static_test: MissingCompileTimeError
+string_static_test: MissingCompileTimeError
+
+# We no longer expect Dart2 tests to run with the standalone VM without the new
+# common front end, but for now we get better coverage by still running them in
+# checked mode, which is mostly Dart2-compatible.
+[ !$checked && ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
+*: SkipByDesign
+
 # Sections for dartk and dartkp.
 #
 # Note: these sections are normalized so we can update them with automated
@@ -552,11 +624,8 @@
 [ $arch == simdbc || $arch == simdbc64 ]
 regexp/stack-overflow_test: RuntimeError, OK # Smaller limit with irregex interpreter
 
-[ $compiler == app_jit || $compiler == dart2js || $compiler == none || $compiler == precompiler ]
-int_parse_radix_bad_handler_test: MissingCompileTimeError
-
 [ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-compare_to2_test: Fail # Issue 4018
+int_parse_radix_bad_handler_test: MissingCompileTimeError
 symbol_operator_test/03: Fail # Issue 11669
 symbol_reserved_word_test/06: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
 symbol_reserved_word_test/09: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
@@ -599,22 +668,12 @@
 from_environment_const_type_undefined_test/16: MissingCompileTimeError
 iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
 
-[ $compiler == dart2js || $compiler == none && $runtime == vm ]
-from_environment_const_type_undefined_test/09: MissingCompileTimeError
-from_environment_const_type_undefined_test/11: MissingCompileTimeError
-from_environment_const_type_undefined_test/12: MissingCompileTimeError
-from_environment_const_type_undefined_test/13: MissingCompileTimeError
-from_environment_const_type_undefined_test/14: MissingCompileTimeError
-from_environment_const_type_undefined_test/16: MissingCompileTimeError
-string_base_vm_static_test: MissingCompileTimeError
-
 [ $compiler == dartdevc || $compiler == dart2analyzer && $strong ]
 double_parse_test/01: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/02: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/03: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/04: Skip # Temporarily disable the following tests until we figure out why they started failing.
 double_parse_test/none: Skip # Temporarily disable the following tests until we figure out why they started failing.
-iterable_reduce_test/01: CompileTimeError # Issue 31533
 
 [ $compiler == dartkp || $compiler == precompiler ]
 apply3_test: SkipByDesign
diff --git a/tests/corelib_2/iterable_fold_test.dart b/tests/corelib_2/iterable_fold_test.dart
index 205b4db..b531ccc 100644
--- a/tests/corelib_2/iterable_fold_test.dart
+++ b/tests/corelib_2/iterable_fold_test.dart
@@ -19,7 +19,7 @@
   operator []=(index, val) => list[index] = val;
 }
 
-Iterable id (Iterable x) => x;
+Iterable id(Iterable x) => x;
 
 main() {
   for (dynamic iterable in [
@@ -35,10 +35,10 @@
     new List.generate(3, (x) => x + 1),
     [0, 1, 2, 3].where((x) => x > 0),
     [0, 1, 2].map((x) => x + 1),
-    [ //# 01: ok
-      [1, 2], //# 01: ok
-      [3] //# 01: ok
-    ].expand(id), //# 01: ok
+    [
+      [1, 2],
+      [3]
+    ].expand(id),
     [3, 2, 1].reversed,
     [0, 1, 2, 3].skip(1),
     [1, 2, 3, 4].take(3),
@@ -93,7 +93,7 @@
     new List.generate(0, (x) => x + 1),
     [0, 1, 2, 3].where((x) => false),
     [].map((x) => x + 1),
-    [[], []].expand(id), //# 01: ok
+    [[], []].expand(id),
     [].reversed,
     [0, 1, 2, 3].skip(4),
     [1, 2, 3, 4].take(0),
@@ -123,18 +123,18 @@
     new List.generate(1, (x) => x + 1),
     [0, 1, 2, 3].where((x) => x == 1),
     [0].map((x) => x + 1),
-    [ //# 01: ok
-      [], //# 01: ok
-      [1] //# 01: ok
-    ].expand(id), //# 01: ok
+    [
+      [],
+      [1]
+    ].expand(id),
     [1].reversed,
     [0, 1].skip(1),
     [1, 2, 3, 4].take(1),
     new Uint8List(1)..[0] = 1,
     (new HashMap()..[1] = 0).keys,
-    (new HashMap()..[0] = 1).values, //# 02: ok
+    (new HashMap()..[0] = 1).values,
     (new SplayTreeMap()..[1] = 0).keys,
-    (new SplayTreeMap()..[0] = 1).values, //# 02: ok
+    (new SplayTreeMap()..[0] = 1).values,
     new HashSet()..add(1),
     new LinkedHashSet()..add(1),
     new SplayTreeSet()..add(1),
@@ -160,23 +160,27 @@
     collection.add(4);
   }
 
+  void addListOf4(collection) {
+    collection.add([4]);
+  }
+
   void put4(map) {
     map[4] = 4;
   }
 
-  testModification([1, 2, 3], add4, id); //# 02: ok
-  testModification(new HashSet()..add(1)..add(2)..add(3), add4, id); //# 02: ok
-  testModification(new LinkedHashSet()..add(1)..add(2)..add(3), add4, id); //# 02: ok
-  testModification(new SplayTreeSet()..add(1)..add(2)..add(3), add4, id); //# 02: ok
-  testModification(new MyList([1, 2, 3]), add4, id); //# 02: ok
+  testModification([1, 2, 3], add4, id);
+  testModification(new HashSet()..add(1)..add(2)..add(3), add4, id);
+  testModification(new LinkedHashSet()..add(1)..add(2)..add(3), add4, id);
+  testModification(new SplayTreeSet()..add(1)..add(2)..add(3), add4, id);
+  testModification(new MyList([1, 2, 3]), add4, id);
 
-  testModification([0, 1, 2, 3], add4, (x) => x.where((x) => x > 0)); //# 02: ok
-  testModification([0, 1, 2], add4, (x) => x.map((x) => x + 1)); //# 02: ok
-  testModification([ //# 02: ok
-    [1, 2], //# 02: ok
-    [3] //# 02: ok
-  ], add4, (x) => x.expand((x) => x)); //# 02: ok
-  testModification([3, 2, 1], add4, (x) => x.reversed); //# 02: ok
+  testModification([0, 1, 2, 3], add4, (x) => x.where((int x) => x > 0));
+  testModification([0, 1, 2], add4, (x) => x.map((x) => x + 1));
+  testModification([
+    [1, 2],
+    [3]
+  ], addListOf4, (x) => x.expand((List<int> x) => x));
+  testModification([3, 2, 1], add4, (x) => x.reversed);
   testModification({1: 1, 2: 2, 3: 3}, put4, (x) => x.keys);
   testModification({1: 1, 2: 2, 3: 3}, put4, (x) => x.values);
   var hashMap = new HashMap()
diff --git a/tests/corelib_2/iterable_reduce_test.dart b/tests/corelib_2/iterable_reduce_test.dart
index 6731c87..6ee66d0 100644
--- a/tests/corelib_2/iterable_reduce_test.dart
+++ b/tests/corelib_2/iterable_reduce_test.dart
@@ -23,7 +23,7 @@
 
 main() {
   // Test functionality.
-  for (var iterable in [
+  for (dynamic iterable in [
     const [1, 2, 3],
     [1, 2, 3],
     new List(3)
@@ -36,10 +36,10 @@
     new List.generate(3, (x) => x + 1),
     [0, 1, 2, 3].where((x) => x > 0),
     [0, 1, 2].map((x) => x + 1),
-    [ //# 01: ok
-      [1, 2], //# 01: ok
-      [3]  //# 01: ok
-    ].expand(id), //# 01: ok
+    [
+      [1, 2],
+      [3]
+    ].expand(id),
     [3, 2, 1].reversed,
     [0, 1, 2, 3].skip(1),
     [1, 2, 3, 4].take(3),
@@ -75,12 +75,13 @@
     new MyList([1, 2, 3]),
   ]) {
     int callCount = 0;
-    var result = iterable.reduce((x, y) { //# 01: ok
-      callCount++; //# 01: ok
-      return x + y; //# 01: ok
-    }); //# 01: ok
-    Expect.equals(6, result, "${iterable.runtimeType}"); //# 01: ok
-    Expect.equals(2, callCount); //# 01: ok
+    var result = iterable.reduce((x, y) {
+      callCount++;
+      // Return type of reduce() callback should match element type.
+      return (x + y) as int;
+    });
+    Expect.equals(6, result, "${iterable.runtimeType}");
+    Expect.equals(2, callCount);
   }
 
   // Empty iterables not allowed.
@@ -94,7 +95,7 @@
     new List.generate(0, (x) => x + 1),
     [0, 1, 2, 3].where((x) => false),
     [].map((x) => x + 1),
-    [[], []].expand(id), //# 01: ok
+    [[], []].expand(id),
     [].reversed,
     [0, 1, 2, 3].skip(4),
     [1, 2, 3, 4].take(0),
@@ -110,12 +111,12 @@
     "".runes,
     new MyList([]),
   ]) {
-    Expect.throwsStateError(
-        () => iterable.reduce((x, y) => throw "Unreachable"));
+    Expect
+        .throwsStateError(() => iterable.reduce((x, y) => throw "Unreachable"));
   }
 
   // Singleton iterables not calling reduce function.
-  for (var iterable in [
+  for (dynamic iterable in [
     const [1],
     [1],
     new List(1)..[0] = 1,
@@ -125,10 +126,10 @@
     new List.generate(1, (x) => x + 1),
     [0, 1, 2, 3].where((x) => x == 1),
     [0].map((x) => x + 1),
-    [ //# 01: ok
-      [], //# 01: ok
-      [1] //# 01: ok
-    ].expand(id), //# 01: ok
+    [
+      [],
+      [1]
+    ].expand(id),
     [1].reversed,
     [0, 1].skip(1),
     [1, 2, 3, 4].take(1),
@@ -144,7 +145,7 @@
     "\x01".runes,
     new MyList([1]),
   ]) {
-    Expect.equals(1, iterable.reduce((x, y) => throw "Unreachable")); //# 01: ok
+    Expect.equals(1, iterable.reduce((x, y) => throw "Unreachable"));
   }
 
   // Concurrent modifications not allowed.
@@ -153,7 +154,8 @@
     Expect.throws(() {
       iterable.reduce((x, y) {
         modify(base);
-        return x + y;
+        // Return type of reduce() callback should match element type.
+        return (x + y) as int;
       });
     }, (e) => e is ConcurrentModificationError);
   }
@@ -162,6 +164,10 @@
     collection.add(4);
   }
 
+  void addListOf4(collection) {
+    collection.add([4]);
+  }
+
   void put4(map) {
     map[4] = 4;
   }
@@ -172,12 +178,12 @@
   testModification(new SplayTreeSet()..add(1)..add(2)..add(3), add4, id);
   testModification(new MyList([1, 2, 3]), add4, id);
 
-  testModification([0, 1, 2, 3], add4, (x) => x.where((x) => x > 0));
+  testModification([0, 1, 2, 3], add4, (x) => x.where((int x) => x > 0));
   testModification([0, 1, 2], add4, (x) => x.map((x) => x + 1));
   testModification([
     [1, 2],
     [3]
-  ], add4, (x) => x.expand((x) => x));
+  ], addListOf4, (x) => x.expand((List<int> x) => x));
   testModification([3, 2, 1], add4, (x) => x.reversed);
   testModification({1: 1, 2: 2, 3: 3}, put4, (x) => x.keys);
   testModification({1: 1, 2: 2, 3: 3}, put4, (x) => x.values);
diff --git a/tests/html/html.status b/tests/html/html.status
index a61443a..1b449b0 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -154,6 +154,11 @@
 webgl_1_test: Pass, Fail # Issue 8219
 worker_api_test: Skip # Issue 13221
 
+# The html tests were moved to lib_2/html, and there they should be made strong
+# mode compliant. There's no sense in running the old versions here.
+[ $strong ]
+*: SkipByDesign
+
 [ $builder_tag == strong && $compiler == dart2analyzer ]
 *: Skip # Issue 28649
 
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 1365973..9ff8edb 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -27,12 +27,6 @@
 spawn_uri_vm_test: SkipByDesign # Test uses a ".dart" URI.
 stacktrace_message_test: RuntimeError # Fails to send stacktrace object.
 
-[ $compiler == dartk ]
-message3_test/int32x4: Crash
-
-[ $compiler == dartkp ]
-message3_test/int32x4: Crash
-
 [ $mode == product ]
 issue_24243_parent_isolate_test: Skip # Requires checked mode
 
@@ -48,6 +42,12 @@
 [ $jscl ]
 spawn_uri_multi_test/none: RuntimeError # Issue 13544
 
+# The isolate tests were moved to lib_2/isolate, and there they should be
+# made strong mode compliant. There's no sense in running the old versions
+# here.
+[ $strong ]
+*: SkipByDesign
+
 [ $builder_tag == strong && $compiler == dart2analyzer ]
 *: Skip # Issue 28649
 
@@ -106,34 +106,6 @@
 [ $compiler == dart2js && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == drt || $runtime == ff || $runtime == safari) ]
 isolate_stress_test: Pass, Slow # Issue 10697
 
-[ $compiler == dartk && $system == windows && $strong ]
-issue_22778_test: Fail
-message3_test/int32x4: Fail
-
-[ $compiler == dartk && $system == windows && !$strong ]
-message3_test/int32x4: Fail
-
-[ $compiler == dartk && $system != windows && $strong ]
-issue_22778_test: Crash
-
-[ $compiler == dartk && $strong ]
-issue_21398_parent_isolate1_test: RuntimeError
-message3_test/byteBuffer: RuntimeError
-message3_test/constInstance: RuntimeError
-message3_test/constList: RuntimeError
-message3_test/constList_identical: RuntimeError
-message3_test/constMap: RuntimeError
-message3_test/fun: RuntimeError
-message3_test/int32x4: RuntimeError
-message3_test/none: RuntimeError
-message_test: CompileTimeError
-mint_maker_test: CompileTimeError
-spawn_function_custom_class_test: CompileTimeError
-spawn_uri_nested_vm_test: CompileTimeError
-static_function_test: CompileTimeError, Timeout
-typed_message_test: CompileTimeError
-unresolved_ports_test: CompileTimeError, Pass, Timeout # Fails to compile on opt counter builder (#31838)
-
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
@@ -183,7 +155,6 @@
 [ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
 compile_time_error_test/01: Skip # Issue 12587
 kill3_test: Pass, Fail # Bad test: expects total message order
-message3_test/int32x4: Fail, Crash, Timeout # Issue 21818
 ping_pause_test: Skip # Resolve test issues
 ping_test: Skip # Resolve test issues
 
diff --git a/tests/language/generic_instanceof4_test.dart b/tests/language/generic_instanceof4_test.dart
index 95ff9bb..936e82d 100644
--- a/tests/language/generic_instanceof4_test.dart
+++ b/tests/language/generic_instanceof4_test.dart
@@ -1,6 +1,7 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // Test that instanceof works correctly with type variables.
 
 import "package:expect/expect.dart";
diff --git a/tests/language/language.status b/tests/language/language.status
index dfa920b..25f3407 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -310,6 +310,9 @@
 [ $arch == ia32 && ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
 vm/regress_24517_test: Pass, Fail # Issue 24517.
 
+[ $compiler == app_jit && $mode == debug && $runtime == vm ]
+cyclic_type_test/03: Pass, Crash # Issue 31945
+
 [ $compiler == app_jit && $runtime == vm && !$checked ]
 assertion_initializer_const_error_test/01: MissingCompileTimeError
 assertion_initializer_const_function_error_test/01: MissingCompileTimeError
@@ -458,6 +461,9 @@
 vm/causal_async_exception_stack2_test: SkipByDesign # Causal async stacks are not supported in product mode
 vm/causal_async_exception_stack_test: SkipByDesign # Causal async stacks are not supported in product mode
 
+[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
+cyclic_type_test/03: Pass, Fail, Crash # Issue 31944
+
 [ $runtime == dart_precompiled || $runtime == vm ]
 arithmetic_test: CompileTimeError # Large integer literal
 bit_operations_test: CompileTimeError # Large integer literal
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 632499c..d88c1e5 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -8,7 +8,6 @@
 # VM specific tests that should not be run by dart2js.
 [ $compiler == dart2js ]
 assertion_initializer_test: Crash
-generalized_void_syntax_test: CompileTimeError
 local_function_test: RuntimeError # Issue 31879
 vm/*: Skip # Issue 12699
 
@@ -235,7 +234,6 @@
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -603,7 +601,6 @@
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -802,11 +799,15 @@
 branches_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.
 call_function_apply_test: RuntimeError
 call_nonexistent_constructor_test/01: RuntimeError
+call_type_literal_test/01: RuntimeError
 canonical_const2_test: RuntimeError
 canonical_const3_test: CompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
+class_literal_test/01: RuntimeError
+class_literal_test/03: RuntimeError
+class_literal_test/07: RuntimeError
 closure_in_field_test/01: RuntimeError
 closure_in_field_test/02: RuntimeError
 closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
@@ -827,6 +828,7 @@
 constructor3_test: RuntimeError
 constructor5_test: RuntimeError
 constructor6_test: RuntimeError
+constructor_call_as_function_test/01: MissingRuntimeError
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test: Crash # Issue 30856
 constructor_redirect2_negative_test: Crash # Issue 30856
@@ -913,7 +915,6 @@
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -1102,6 +1103,8 @@
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
 type_checks_in_factory_method_test: RuntimeError
+type_literal_prefix_call_test/00: RuntimeError
+type_variable_conflict2_test/02: MissingCompileTimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified ]
 assertion_initializer_const_error2_test/none: CompileTimeError
@@ -1120,11 +1123,15 @@
 branch_canonicalization_test: RuntimeError
 call_function_apply_test: RuntimeError
 call_nonexistent_constructor_test/01: RuntimeError
+call_type_literal_test/01: RuntimeError
 canonical_const2_test: RuntimeError
 canonical_const3_test: CompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
+class_literal_test/01: RuntimeError
+class_literal_test/03: RuntimeError
+class_literal_test/07: RuntimeError
 closure_in_field_test/01: RuntimeError
 closure_in_field_test/02: RuntimeError
 config_import_test: RuntimeError
@@ -1144,6 +1151,7 @@
 constructor3_test: RuntimeError
 constructor5_test: RuntimeError
 constructor6_test: RuntimeError
+constructor_call_as_function_test/01: MissingRuntimeError
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test: Crash # Issue 30856
 constructor_redirect2_negative_test: Crash # Issue 30856
@@ -1244,7 +1252,6 @@
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -1433,6 +1440,8 @@
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
 type_checks_in_factory_method_test: RuntimeError
+type_literal_prefix_call_test/00: RuntimeError
+type_variable_conflict2_test/02: MissingCompileTimeError
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
 accessor_conflict_export2_test: Crash # Issue 25626
@@ -1473,6 +1482,7 @@
 full_stacktrace1_test: Pass, RuntimeError # Issue 12698
 full_stacktrace2_test: Pass, RuntimeError # Issue 12698
 full_stacktrace3_test: Pass, RuntimeError # Issue 12698
+generalized_void_syntax_test: CompileTimeError
 generic_field_mixin4_test: Crash # Issue 18651
 generic_field_mixin5_test: Crash # Issue 18651
 generic_function_typedef2_test/00: Crash # Issue 28214
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index acb42e5..d8dd7aa 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -2,6 +2,9 @@
 # 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.
 
+[ $fasta ]
+regress_22976_test/*: CompileTimeError # Issue 31935
+
 # We skip all the Dart 1.0 tests in dartk and dartkp mode as these
 # modes are intended only for Dart 2.0 with strong mode enabled.
 [ $compiler == dartk || $compiler == dartkp ]
diff --git a/tests/language_2/async_or_generator_return_type_stacktrace_test.dart b/tests/language_2/async_or_generator_return_type_stacktrace_test.dart
index 612cf8b..f5bd334 100644
--- a/tests/language_2/async_or_generator_return_type_stacktrace_test.dart
+++ b/tests/language_2/async_or_generator_return_type_stacktrace_test.dart
@@ -4,8 +4,8 @@
 
 import "package:expect/expect.dart";
 
-void badReturnTypeAsync() async {} // //# 01: compile-time error
-void badReturnTypeAsyncStar() async* {} // //# 02: compile-time error
-void badReturnTypeSyncStar() sync* {} // //# 03: compile-time error
+int badReturnTypeAsync() async {} // //# 01: compile-time error
+int badReturnTypeAsyncStar() async* {} // //# 02: compile-time error
+int badReturnTypeSyncStar() sync* {} // //# 03: compile-time error
 
 void main() {}
diff --git a/tests/language_2/call_type_literal_test.dart b/tests/language_2/call_type_literal_test.dart
index 43cea9b..9e09bbe 100644
--- a/tests/language_2/call_type_literal_test.dart
+++ b/tests/language_2/call_type_literal_test.dart
@@ -2,12 +2,10 @@
 // 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 "package:expect/expect.dart";
-
 class C {
   void a() {}
 }
 
 void main() {
-  C().a(); //# 01: compile-time error
+  C().a();
 }
diff --git a/tests/language_2/class_literal_static_test.dart b/tests/language_2/class_literal_static_test.dart
index 8d86d6c..27b6149 100644
--- a/tests/language_2/class_literal_static_test.dart
+++ b/tests/language_2/class_literal_static_test.dart
@@ -14,13 +14,13 @@
 
 main() {
   // Verify that dereferencing a class literal is a compile-time error.
-  Class(); //# 01: compile-time error
+  Class();
   Class[0]; //# 02: compile-time error
-  var x = Class(); //# 03: compile-time error
+  var x = Class();
   var y = Class[0]; //# 04: compile-time error
   var z = Class[0].field; //# 05: compile-time error
   var w = Class[0].method(); //# 06: compile-time error
-  foo(Class()); //# 07: compile-time error
+  foo(Class());
   foo(Class[0]); //# 08: compile-time error
   foo(Class[0].field); //# 09: compile-time error
   foo(Class[0].method()); //# 10: compile-time error
diff --git a/tests/language_2/class_literal_test.dart b/tests/language_2/class_literal_test.dart
index 8a3347e..5b1c12a 100644
--- a/tests/language_2/class_literal_test.dart
+++ b/tests/language_2/class_literal_test.dart
@@ -18,42 +18,36 @@
 
   // Verify references to a class literal are allowed.
   Class;
-  var x = Class;
+  dynamic x = Class;
   foo(Class);
   Expect.isFalse(Class == null);
 
-  // Verify that dereferencing a class literal is a compile-time error.
-  // TODO(jcollins-g): several tests here seem to depend on being in their
-  // own namespace, but others do not.  More tests seem to also depend on
-  // the complexities of Expect.throws() for other, unknown reasons to trigger
-  // bugs in the VM as of this writing.
-  //
-  // Remove the legacy Expect.throws and namespaces around statements that don't
-  // need it after a careful examination of each case.
-  Expect.throwsNoSuchMethodError(() { Class(); }); //# 01: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class[0]; }); //# 02: compile-time error
-  Expect.throwsNoSuchMethodError(() { var x = Class();}); //# 03: compile-time error
-  Expect.throwsNoSuchMethodError(() { var x = Class[0]; }); //# 04: compile-time error
-  Expect.throwsNoSuchMethodError(() { var x = Class[0].field; }); //# 05: compile-time error
-  Expect.throwsNoSuchMethodError(() { var x = Class[0].method(); }); //# 06: compile-time error
-  Expect.throwsNoSuchMethodError(() { foo(Class()); }); //# 07: compile-time error
-  Expect.throwsNoSuchMethodError(() { foo(Class[0]); }); //# 08: compile-time error
-  Expect.throwsNoSuchMethodError(() { foo(Class[0].field); }); //# 09: compile-time error
-  Expect.throwsNoSuchMethodError(() { foo(Class[0].method()); }); //# 10: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class[0] = 91; }); //# 11: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class++; }); //# 12: compile-time error
-  Expect.throwsNoSuchMethodError(() { ++Class; }); //# 13: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class[0] += 3; }); //# 14: compile-time error
-  Expect.throwsNoSuchMethodError(() { ++Class[0]; }); //# 15: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class[0]++; }); //# 16: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class.method(); }); //# 17: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class.field; }); //# 18: compile-time error
-  Expect.throwsNoSuchMethodError(() { var x = Class.method(); }); //# 19: compile-time error
-  Expect.throwsNoSuchMethodError(() { var x = Class.field; }); //# 20: compile-time error
-  Expect.throwsNoSuchMethodError(() { foo(Class.method()); }); //# 21: compile-time error
-  Expect.throwsNoSuchMethodError(() { foo(Class.field); }); //# 22: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class / 3; }); //# 23: compile-time error
-  Expect.throwsNoSuchMethodError(() { Class += 3; }); //# 24: compile-time error
+  // Verify that dereferencing a class literal is a compile-time error if it
+  // isn't used as a constructor.
+  Class();
+  Class[0]; //# 02: compile-time error
+  x = Class();
+  x = Class[0]; //# 04: compile-time error
+  x = Class[0].field; //# 05: compile-time error
+  x = Class[0].method(); //# 06: compile-time error
+  foo(Class());
+  foo(Class[0]); //# 08: compile-time error
+  foo(Class[0].field); //# 09: compile-time error
+  foo(Class[0].method()); //# 10: compile-time error
+  Class[0] = 91; //# 11: compile-time error
+  Class++; //# 12: compile-time error
+  ++Class; //# 13: compile-time error
+  Class[0] += 3; //# 14: compile-time error
+  ++Class[0]; //# 15: compile-time error
+  Class[0]++; //# 16: compile-time error
+  Class.method(); //# 17: compile-time error
+  Class.field; //# 18: compile-time error
+  x = Class.method(); //# 19: compile-time error
+  x = Class.field; //# 20: compile-time error
+  foo(Class.method()); //# 21: compile-time error
+  foo(Class.field); //# 22: compile-time error
+  Class / 3; //# 23: compile-time error
+  Class += 3; //# 24: compile-time error
 
   // Verify that a class literal isn't a string literal.
   Expect.notEquals(Class, "Class");
@@ -63,5 +57,5 @@
   var y = Class;
   Expect.isTrue(y.toString() is String);
 
-  Expect.throwsNoSuchMethodError(() => Class.toString()); //# 25: compile-time error
+  Class.toString(); //# 25: compile-time error
 }
diff --git a/tests/language_2/constructor_call_as_function_test.dart b/tests/language_2/constructor_call_as_function_test.dart
index 0a94731..cb1dbda 100644
--- a/tests/language_2/constructor_call_as_function_test.dart
+++ b/tests/language_2/constructor_call_as_function_test.dart
@@ -1,8 +1,6 @@
 // Copyright (c) 2011, 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.
-// Dart test program to make sure we catch missing new or const
-// when allocating a new object.
 
 class Point {
   const Point(this.x, this.y);
@@ -11,5 +9,5 @@
 }
 
 main() {
-  Point p = Point(1, 2); //# 01: compile-time error, static type warning, runtime error
+  Point p = Point(1, 2);
 }
diff --git a/tests/language_2/covariance_setter_test.dart b/tests/language_2/covariance_setter_test.dart
index 49ba723..1a19dca 100644
--- a/tests/language_2/covariance_setter_test.dart
+++ b/tests/language_2/covariance_setter_test.dart
@@ -55,4 +55,36 @@
 
   // This calls should have any arguments marked "covariant" type checked.
   Expect.throwsTypeError(() => b.s5 = new Object()); //# 05: ok
+
+  testMixin(); //# 06: ok
+}
+
+abstract class D<T> {
+  void set m1(T x);
+}
+
+class E {
+  void set m1(A x) {}
+}
+
+class F = Object with E implements D<A>;
+class G = C with E implements D<A>;
+
+class H extends Object with E implements D<A> {}
+
+class I extends Object with F {}
+
+void testMixin() {
+  D<Object> f = new F();
+  f.m1 = new A();
+  Expect.throwsTypeError(() => f.m1 = new Object());
+  f = new G();
+  f.m1 = new A();
+  Expect.throwsTypeError(() => f.m1 = new Object());
+  f = new H();
+  f.m1 = new A();
+  Expect.throwsTypeError(() => f.m1 = new Object());
+  f = new I();
+  f.m1 = new A();
+  Expect.throwsTypeError(() => f.m1 = new Object());
 }
diff --git a/tests/language_2/dynamic_test.dart b/tests/language_2/dynamic_test.dart
index 5fe8529..e89b44e 100644
--- a/tests/language_2/dynamic_test.dart
+++ b/tests/language_2/dynamic_test.dart
@@ -26,30 +26,34 @@
 }
 
 main() {
+  // dynamic is a top-type, equivalent to Object at runtime.
   Expect.isTrue(dynamic is Type);
   Expect.equals(dynamic, dynamic);
 
+  // dynamic is not a subtype of num or String.
   M1<dynamic, dynamic> m1 = new M1<dynamic, dynamic>();
-  Expect.isTrue(m1 is Iface<dynamic, num>);
-  Expect.isTrue(m1 is Iface<String, dynamic>);
-  Expect.isTrue(m1 is Iface<String, num>);
-  Expect.isTrue(m1 is Iface<num, String>);
+  Expect.isFalse(m1 is Iface<dynamic, num>);
+  Expect.isFalse(m1 is Iface<String, dynamic>);
+  Expect.isFalse(m1 is Iface<String, num>);
+  Expect.isFalse(m1 is Iface<num, String>);
 
-  M2<dynamic> m2 = new M2<dynamic>();
-  Expect.isTrue(m2 is Iface<dynamic, num>);
-  Expect.isTrue(m2 is Iface<String, dynamic>);
-  Expect.isTrue(m2 is Iface<String, num>);
-  Expect.isTrue(m2 is Iface<num, String>);
+  M2<dynamic> m2 = new M2<dynamic>(); // is Iface<dynamic, dynamic>.
+  Expect.isFalse(m2 is Iface<dynamic, num>);
+  Expect.isFalse(m2 is Iface<String, dynamic>);
+  Expect.isFalse(m2 is Iface<String, num>);
+  Expect.isFalse(m2 is Iface<num, String>);
 
-  M3 m3 = new M3();
-  Expect.isTrue(m3 is Iface<dynamic, num>);
+  M3 m3 = new M3(); // is IFace<String, dynamic>.
+  Expect.isFalse(m3 is Iface<dynamic, num>);
   Expect.isTrue(m3 is Iface<String, dynamic>);
-  Expect.isTrue(m3 is Iface<String, num>);
+  Expect.isFalse(m3 is Iface<String, num>);
   Expect.isTrue(m3 is! Iface<num, String>);
 
-  F1<int> f1 = (dynamic s, int i) => s[i];
+  F1<int> f1 = (dynamic s, int i) => s[i]; // is dynamic Function(dynamic, int).
   Expect.isTrue(f1 is F1<int>);
 
+  // "dynamic" is not a reserved word or built-in identifier.
+
   HasFieldDynamic has_field = new HasFieldDynamic();
   Expect.equals("dynamic", has_field.dynamic);
 
diff --git a/tests/language_2/first_class_types_test.dart b/tests/language_2/first_class_types_test.dart
index 6b65f5a..91a6b85 100644
--- a/tests/language_2/first_class_types_test.dart
+++ b/tests/language_2/first_class_types_test.dart
@@ -32,8 +32,8 @@
   sameType(1.2, d);
   sameType(false, b);
 
-  var l = [1, 2, 3];
-  var m = {'a': 1, 'b': 2};
+  List l = [1, 2, 3];
+  Map m = {'a': 1, 'b': 2};
   sameType([], l);
   sameType({}, m);
 
diff --git a/tests/language_2/generic_list_checked_test.dart b/tests/language_2/generic_list_checked_test.dart
index 131b45b..6dc688a 100644
--- a/tests/language_2/generic_list_checked_test.dart
+++ b/tests/language_2/generic_list_checked_test.dart
@@ -6,6 +6,6 @@
 
 main() {
   Expect.throws(() {
-    List<int> t = new List<String>();
+    List<int> t = (<String>[] as Object);
   });
 }
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart
new file mode 100644
index 0000000..05f81c4
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_named_test.dart
@@ -0,0 +1,52 @@
+// 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 "package:expect/expect.dart";
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C<T> {
+  final T x;
+  const C.named(this.x);
+
+  // Static const.
+  static const staticConst = C<int>.named(42);
+}
+
+// Top-level const.
+const topConst = C<int>.named(42);
+
+main() {
+  const c0 = const C<int>.named(42);  // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = C<int>.named(42);
+
+  // Inside const expression.
+  var c2 = (const [C<int>.named(42)])[0]; // List element.
+  var c3 = (const {C<int>.named(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: C<int>.named(42)}).values.first; // Map value.
+  var c5 = (const C(C<int>.named(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case C<int>.named(42): break;
+    default: Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(C<int>.named(42))
+  void foo() {}
+  foo();  // avoid "unused" hints.
+}
\ No newline at end of file
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart
new file mode 100644
index 0000000..aeb663b
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_generic_test.dart
@@ -0,0 +1,54 @@
+// 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 "package:expect/expect.dart";
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C<T> {
+  final T x;
+  const C(this.x);
+
+  // Static const.
+  static const staticConst = C<int>(42);
+}
+
+// Top-level const.
+const topConst = C<int>(42);
+
+main() {
+  const c0 = const C<int>(42); // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = C<int>(42);
+
+  // Inside const expression.
+  var c2 = (const [C<int>(42)])[0]; // List element.
+  var c3 = (const {C<int>(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: C<int>(42)}).values.first; // Map value.
+  var c5 = (const C(C<int>(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case C<int>(42):
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(C<int>(42))
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart
new file mode 100644
index 0000000..54fed54
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_named_test.dart
@@ -0,0 +1,54 @@
+// 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 "package:expect/expect.dart";
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C {
+  final Object x;
+  const C.named(this.x);
+
+  // Static const.
+  static const staticConst = C.named(42);
+}
+
+// Top-level const.
+const topConst = C.named(42);
+
+main() {
+  const c0 = const C.named(42); // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = C.named(42);
+
+  // Inside const expression.
+  var c2 = (const [C.named(42)])[0]; // List element.
+  var c3 = (const {C.named(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: C.named(42)}).values.first; // Map value.
+  var c5 = (const C(C.named(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case C.named(42):
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(C.named(42))
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart b/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart
new file mode 100644
index 0000000..6d24997
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_constructor_test.dart
@@ -0,0 +1,54 @@
+// 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 "package:expect/expect.dart";
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C {
+  final Object x;
+  const C(this.x);
+
+  // Static const.
+  static const staticConst = C(42);
+}
+
+// Top-level const.
+const topConst = C(42);
+
+main() {
+  const c0 = const C(42); // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = C(42);
+
+  // Inside const expression.
+  var c2 = (const [C(42)])[0]; // List element.
+  var c3 = (const {C(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: C(42)}).values.first; // Map value.
+  var c5 = (const C(C(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case C(42):
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(C(42))
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_list_test.dart b/tests/language_2/implicit_creation/implicit_const_context_list_test.dart
new file mode 100644
index 0000000..442cf74
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_list_test.dart
@@ -0,0 +1,63 @@
+// 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 "package:expect/expect.dart";
+
+// Test that list literals are constant when evaluated in a const context.
+
+class C {
+  final Object x;
+  const C(this.x);
+
+  // Static const.
+  static const staticConst = <int>[42];
+}
+
+// Top-level const.
+const topConst = <int>[42];
+
+main() {
+  const c0 = const <int>[42]; // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = <int>[42];
+
+  // Inside const expression.
+  var c2 = (const [
+    <int>[42]
+  ])[0]; // List element.
+  var c3 = (const {
+    <int>[42]: 0
+  })
+      .keys
+      .first; // Map key.
+  var c4 = (const {
+    0: <int>[42]
+  })
+      .values
+      .first; // Map value.
+  var c5 = (const C(<int>[42])).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case <int>[42]:
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(<int>[42])
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_map_test.dart b/tests/language_2/implicit_creation/implicit_const_context_map_test.dart
new file mode 100644
index 0000000..1ed8fe5
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_map_test.dart
@@ -0,0 +1,63 @@
+// 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 "package:expect/expect.dart";
+
+// Test that map literals are constant when evaluated in a const context.
+
+class C {
+  final Object x;
+  const C(this.x);
+
+  // Static const.
+  static const staticConst = <int, int>{37: 87};
+}
+
+// Top-level const.
+const topConst = <int, int>{37: 87};
+
+main() {
+  const c0 = const <int, int>{37: 87}; // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = <int, int>{37: 87};
+
+  // Inside const expression.
+  var c2 = (const [
+    <int, int>{37: 87}
+  ])[0]; // List element.
+  var c3 = (const {
+    <int, int>{37: 87}: 0
+  })
+      .keys
+      .first; // Map key.
+  var c4 = (const {
+    0: <int, int>{37: 87}
+  })
+      .values
+      .first; // Map value.
+  var c5 = (const C(<int, int>{37: 87})).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case <int, int>{37: 87}:
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(<int, int>{37: 87})
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart
new file mode 100644
index 0000000..7115352
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_named_test.dart
@@ -0,0 +1,55 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_const_context_prefix_construct_generic_named_test.dart"
+    as prefix;
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C<T> {
+  final T x;
+  const C.named(this.x);
+
+  // Static const.
+  static const staticConst = prefix.C<int>.named(42);
+}
+
+// Top-level const.
+const topConst = prefix.C<int>.named(42);
+
+main() {
+  const c0 = const prefix.C<int>.named(42);  // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = prefix.C<int>.named(42);
+
+  // Inside const expression.
+  var c2 = (const [prefix.C<int>.named(42)])[0]; // List element.
+  var c3 = (const {prefix.C<int>.named(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: prefix.C<int>.named(42)}).values.first; // Map value.
+  var c5 = (const C(prefix.C<int>.named(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case prefix.C<int>.named(42): break;
+    default: Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(prefix.C<int>.named(42))
+  void foo() {}
+  foo();  // avoid "unused" hints.
+}
\ No newline at end of file
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart
new file mode 100644
index 0000000..2933b77
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_generic_test.dart
@@ -0,0 +1,56 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_const_context_prefix_constructor_generic_test.dart" as prefix;
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C<T> {
+  final T x;
+  const C(this.x);
+
+  // Static const.
+  static const staticConst = prefix.C<int>(42);
+}
+
+// Top-level const.
+const topConst = prefix.C<int>(42);
+
+main() {
+  const c0 = const prefix.C<int>(42); // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = prefix.C<int>(42);
+
+  // Inside const expression.
+  var c2 = (const [prefix.C<int>(42)])[0]; // List element.
+  var c3 = (const {prefix.C<int>(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: prefix.C<int>(42)}).values.first; // Map value.
+  var c5 = (const C(prefix.C<int>(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case prefix.C<int>(42):
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(prefix.C<int>(42))
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart
new file mode 100644
index 0000000..4990bb8
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_named_test.dart
@@ -0,0 +1,56 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_const_context_prefix_constructor_named_test.dart" as prefix;
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C {
+  final Object x;
+  const C.named(this.x);
+
+  // Static const.
+  static const staticConst = prefix.C.named(42);
+}
+
+// Top-level const.
+const topConst = prefix.C.named(42);
+
+main() {
+  const c0 = const prefix.C.named(42); // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = prefix.C.named(42);
+
+  // Inside const expression.
+  var c2 = (const [prefix.C.named(42)])[0]; // List element.
+  var c3 = (const {prefix.C.named(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: prefix.C.named(42)}).values.first; // Map value.
+  var c5 = (const C(prefix.C.named(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case prefix.C.named(42):
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(prefix.C.named(42))
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart
new file mode 100644
index 0000000..95edd04
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_const_context_prefix_constructor_test.dart
@@ -0,0 +1,56 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_const_context_prefix_constructor_test.dart" as prefix;
+
+// Test that constructor invocations are constant
+// when evaluated in a const context.
+
+class C {
+  final Object x;
+  const C(this.x);
+
+  // Static const.
+  static const staticConst = prefix.C(42);
+}
+
+// Top-level const.
+const topConst = prefix.C(42);
+
+main() {
+  const c0 = const prefix.C(42); // Explicit const.
+
+  // RHS of const local variable.
+  const c1 = prefix.C(42);
+
+  // Inside const expression.
+  var c2 = (const [prefix.C(42)])[0]; // List element.
+  var c3 = (const {prefix.C(42): 0}).keys.first; // Map key.
+  var c4 = (const {0: prefix.C(42)}).values.first; // Map value.
+  var c5 = (const C(prefix.C(42))).x; // Constructor argument.
+
+  Expect.identical(c0, c1);
+  Expect.identical(c0, c2);
+  Expect.identical(c0, c3);
+  Expect.identical(c0, c4);
+  Expect.identical(c0, c5);
+  Expect.identical(c0, C.staticConst);
+  Expect.identical(c0, topConst);
+
+  // Switch case expression.
+  switch (c0) {
+    case prefix.C(42):
+      break;
+    default:
+      Expect.fail("Didn't match constant");
+  }
+
+  // Annotation argument.
+  // (Cannot check that it's const, just that it's accepted).
+  @C(prefix.C(42))
+  void foo() {}
+  foo(); // avoid "unused" hints.
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart
new file mode 100644
index 0000000..45dc880
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_constructor_generic_named_test.dart
@@ -0,0 +1,71 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_generic_class_test.dart" as prefix;
+
+// Test that an omitted `new` is allowed for a generic constructor invocation.
+
+class C<T> {
+  final T x;
+  C(this.x);  // Not const constructor.
+  const C.c(this.x);  // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C<T> get self => this;
+  C<T> method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C<int>.c(42); // Canonicalized.
+  var x = 42; // Avoid constant parameter for constant constructor.
+  var c0 = new C<int>.c(x);  // Original syntax.
+
+  // Uses of `C<int>.c(x)` in various contexts.
+  var c1 = C<int>.c(x);
+  var c2 = [C<int>.c(x)][0];
+  var c3 = {C<int>.c(x): 0}.keys.first;
+  var c4 = {0: C<int>.c(x)}.values.first;
+  var c5 = id(C<int>.c(x));
+  var c6 = C<int>.c(x).self;
+  var c7 = C<int>.c(x).method();
+  var c8 = C(C<int>.c(x)).x;
+  var c9 = -C<int>.c(x);
+  var c10 = C<int>.c(x) < 9;
+  var c11 = C(null) > C<int>.c(x);
+  var c12 = (c10 == c11) ? null : C<int>.c(x);
+  var c13 = C<int>.c(x)..method();
+  var c14;
+  try {
+    throw C<int>.c(x);
+  } catch (e) {
+    c14 = e;
+  }
+
+  switch (C<int>.c(x)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+      // Success.
+  }
+
+  for (C<int>.c(x); false; C<int>.c(x), C<int>.c(x)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values =
+      [cc, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C<int>);
+    Expect.equals(42, (value as C<int>).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart
new file mode 100644
index 0000000..4621a7c
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_constructor_generic_test.dart
@@ -0,0 +1,87 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_generic_class_test.dart" as prefix;
+
+// Test that an omitted `new` is allowed for a generic constructor invocation.
+
+class C<T> {
+  final T x;
+  C(this.x); // Not const constructor.
+  const C.c(this.x); // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C<T> get self => this;
+  C<T> method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C<int>.c(42); // Canonicalized.
+
+  var c0 = new C<int>(42); // Original syntax.
+
+  // Uses of `C<int>(42)` in various contexts.
+  var c1 = C<int>(42);
+  var c2 = [C<int>(42)][0];
+  var c3 = {C<int>(42): 0}.keys.first;
+  var c4 = {0: C<int>(42)}.values.first;
+  var c5 = id(C<int>(42));
+  var c6 = C<int>(42).self;
+  var c7 = C<int>(42).method();
+  var c8 = C(C<int>(42)).x;
+  var c9 = -C<int>(42);
+  var c10 = C<int>(42) < 9;
+  var c11 = C(null) > C<int>(42);
+  var c12 = (c10 == c11) ? null : C<int>(42);
+  var c13 = C<int>(42)..method();
+  var c14;
+  try {
+    throw C<int>(42);
+  } catch (e) {
+    c14 = e;
+  }
+
+  switch (C<int>(42)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (C<int>(42); false; C<int>(42), C<int>(42)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C<int>);
+    Expect.equals(42, (value as C<int>).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_constructor_named_test.dart b/tests/language_2/implicit_creation/implicit_new_constructor_named_test.dart
new file mode 100644
index 0000000..2b45bd5
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_constructor_named_test.dart
@@ -0,0 +1,86 @@
+// 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 "package:expect/expect.dart";
+
+// Test that an omitted `new` is allowed for a non-generic class.
+
+class C {
+  final Object x;
+  C(this.x); // Not const constructor.
+  const C.c(this.x); // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C get self => this;
+  C method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C.c(42); // Canonicalized.
+  var x = 42; // Avoid constant parameter.
+  var c0 = new C.c(x); // Original syntax.
+
+  // Uses of `C.c(x)` in various contexts.
+  var c1 = C.c(x);
+  var c2 = [C.c(x)][0];
+  var c3 = {C.c(x): 0}.keys.first;
+  var c4 = {0: C.c(x)}.values.first;
+  var c5 = id(C.c(x));
+  var c6 = C.c(x).self;
+  var c7 = C.c(x).method();
+  var c8 = C(C.c(x)).x;
+  var c9 = -C.c(x);
+  var c10 = C.c(x) < 9;
+  var c11 = C(null) > C.c(x);
+  var c12 = (c10 == c11) ? null : C.c(x);
+  var c13 = C.c(x)..method();
+  var c14;
+  try {
+    throw C.c(x);
+  } catch (e) {
+    c14 = e;
+  }
+  Expect.isNotNull(c12);
+
+  switch (C.c(x)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (C.c(x); false; C.c(x), C.c(x)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C);
+    Expect.equals(42, (value as C).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_constructor_test.dart b/tests/language_2/implicit_creation/implicit_new_constructor_test.dart
new file mode 100644
index 0000000..ff7cc4c
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_constructor_test.dart
@@ -0,0 +1,149 @@
+// 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 "package:expect/expect.dart";
+
+// Test that an omitted `new` is allowed for a non-generic class.
+
+class C {
+  final Object x;
+  C(this.x); // Not const constructor.
+  const C.c(this.x); // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C get self => this;
+  C method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C.c(42); // Canonicalized.
+
+  var c0 = new C(42); // Original syntax.
+
+  // Uses of `C(42)` in various contexts.
+  var c1 = C(42);
+  var c2 = [C(42)][0];
+  var c3 = {C(42): 0}.keys.first;
+  var c4 = {0: C(42)}.values.first;
+  var c5 = id(C(42));
+  var c6 = C(42).self;
+  var c7 = C(42).method();
+  var c8 = C(C(42)).x;
+  var c9 = -C(42);
+  var c10 = C(42) < 9;
+  var c11 = C(null) > C(42);
+  var c12 = (c10 == c11) ? null : C(42);
+  var c13 = C(42)..method();
+  var c14;
+  try {
+    throw C(42);
+  } catch (e) {
+    c14 = e;
+  }
+
+  switch (C(42)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (C(42); false; C(42), C(42)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C);
+    Expect.equals(42, (value as C).x);
+  }
+}
+
+void testNamed() {
+  const cc = const C.c(42); // Canonicalized.
+  var x = 42; // Avoid constant parameter.
+  var c0 = new C.c(x); // Original syntax.
+
+  // Uses of `C.c(x)` in various contexts.
+  var c1 = C.c(x);
+  var c2 = [C.c(x)][0];
+  var c3 = {C.c(x): 0}.keys.first;
+  var c4 = {0: C.c(x)}.values.first;
+  var c5 = id(C.c(x));
+  var c6 = C.c(x).self;
+  var c7 = C.c(x).method();
+  var c8 = C(C.c(x)).x;
+  var c9 = -C.c(x);
+  var c10 = C.c(x) < 9;
+  var c11 = C(null) > C.c(x);
+  var c12 = (c10 == c11) ? null : C.c(x);
+  var c13 = C.c(x)..method();
+  var c14;
+  try {
+    throw C.c(x);
+  } catch (e) {
+    c14 = e;
+  }
+  Expect.isNotNull(c12);
+
+  switch (C.c(x)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (C.c(x); false; C.c(x), C.c(x)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C);
+    Expect.equals(42, (value as C).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart b/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
new file mode 100644
index 0000000..31813f2
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_or_const_composite_test.dart
@@ -0,0 +1,268 @@
+// 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 "package:expect/expect.dart";
+
+// Tests that const/new-insertion does the right thing for
+// composite object creations.
+//
+// The right thing is that map and list literals are only constant
+// if in a constant context.
+// Object creation is const if constructor is const and all arguments are const.
+//
+// Not testing inference, so all type arguments are explicit.
+
+main() {
+  var x = 42;
+  const cc42 = const C(42);
+  var c42 = cc42;
+
+  const clist = const <int>[37];
+  var list = clist;
+  const cmap = const <int, int>{19: 87};
+  var map = cmap;
+
+  {
+    // Constructor inside constructor.
+    var d42 = const D<int>(42);
+
+    const cd1 = const C(const D<int>(42));
+    const cd2 = C(D<int>(42)); // Const context.
+    var cd3 = C(D<int>(42)); // All constant, even in non-const context.
+    var cd4 = C(D<int>(x)); // x is a non-constant expression, so `new`.
+    var cd5 = C(d42); //  d42 is a non-constant expression, so `new`.
+
+    Expect.identical(cd1, cd2);
+    Expect.identical(cd1, cd3);
+    Expect.allDistinct([cd1, cd3, cd4]);
+  }
+
+  {
+    // List inside other constructor
+    const cl1 = const C(const <int>[37]);
+    const cl2 = C(clist); // Constant context.
+    const cl3 = C(const <int>[37]); // Constant context.
+    const cl4 = C(<int>[37]);
+    var cl5 = C(clist); // Constant argument, so const.
+    var cl6 = C(const <int>[37]); // Constant arg, so const.
+    var cl7 = C(list); // Non-constant arg.
+    var cl8 = C(<int>[37]); // Same if literal.
+
+    Expect.identical(cl1, cl2);
+    Expect.identical(cl1, cl3);
+    Expect.identical(cl1, cl4);
+    Expect.identical(cl1, cl5);
+    Expect.identical(cl1, cl6);
+    Expect.allDistinct([cl1, cl7, cl8]);
+  }
+
+  {
+    // Map inside other constructor.
+    const cm1 = C(cmap); // Constant context.
+    const cm2 = C(const <int, int>{19: 87}); // Constant context.
+    const cm3 = C(<int, int>{19: 87}); // Constant context.
+    var cm4 = C(cmap); // Constant argument, so const.
+    var cm5 = C(const <int, int>{19: 87}); // Constant arg, so const.
+    var cm6 = C(map); // Non-constant arg, non-const context.
+    var cm7 = C(<int, int>{19: 87}); // Same if literal.
+
+    Expect.identical(cm1, cm2);
+    Expect.identical(cm1, cm3);
+    Expect.identical(cm1, cm4);
+    Expect.identical(cm1, cm5);
+    Expect.allDistinct([cm1, cm6, cm7]);
+  }
+
+  {
+    // Composite with more than one sub-expression.
+    const n1 = N(clist, cmap);
+    const n2 = N(const <int>[37], const <int, int>{19: 87});
+    const n3 = N(<int>[37], <int, int>{19: 87});
+    var n4 = N(const <int>[37], const <int, int>{19: 87});
+    var n5 = N(<int>[37], const <int, int>{19: 87});
+    var n6 = N(const <int>[37], <int, int>{19: 87});
+    var n7 = N(<int>[37], <int, int>{19: 87});
+    var n8 = N(clist, cmap);
+    var n9 = N(<int>[37], cmap);
+    var n10 = N(clist, <int, int>{19: 87});
+    var n11 = N(<int>[37], <int, int>{19: 87});
+    var n12 = N(list, cmap);
+    var n13 = N(clist, map);
+    var n14 = N(list, map);
+
+    Expect.identical(n1, n2);
+    Expect.identical(n1, n3);
+    Expect.identical(n1, n4);
+    Expect.identical(n1, n8);
+    Expect.allDistinct([n1, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14]);
+
+    Expect.identical(clist, n6.left);
+    Expect.identical(clist, n10.left);
+    Expect.identical(clist, n12.left);
+    Expect.identical(clist, n13.left);
+    Expect.identical(clist, n14.left);
+    Expect.allDistinct([n5.left, n7.left, n9.left, n11.left]);
+
+    Expect.identical(cmap, n5.right);
+    Expect.identical(cmap, n9.right);
+    Expect.identical(cmap, n12.right);
+    Expect.identical(cmap, n13.right);
+    Expect.identical(cmap, n14.right);
+    Expect.allDistinct([n6.right, n7.right, n10.right, n11.right]);
+
+    const n20 = const N(const C(42), const <int>[37]);
+    const n21 = N(const C(42), const <int>[37]);
+    const n22 = N(C(42), const <int>[37]);
+    const n23 = N(C(42), clist);
+    const n24 = N(C(42), <int>[37]);
+    var n25 = N(const C(42), const <int>[37]);
+    var n26 = N(C(42), const <int>[37]);
+    var n27 = N(C(42), clist);
+    var n28 = N(C(42), <int>[37]);
+    var n29 = N(C(42), list);
+    var n30 = N(c42, clist);
+    var n31 = N(cc42, list);
+
+    Expect.identical(n20, n21);
+    Expect.identical(n20, n22);
+    Expect.identical(n20, n23);
+    Expect.identical(n20, n24);
+    Expect.identical(n20, n25);
+    Expect.identical(n20, n26);
+    Expect.identical(n20, n27);
+    Expect.allDistinct([n28, n29, n30, n31]);
+    Expect.identical(cc42, n28.left);
+    Expect.identical(cc42, n29.left);
+    Expect.identical(cc42, n30.left);
+    Expect.identical(cc42, n31.left);
+    Expect.identical(clist, n29.right);
+    Expect.identical(clist, n30.right);
+    Expect.identical(clist, n31.right);
+    Expect.notIdentical(clist, n28.right);
+  }
+
+  {
+    // List literals.
+    const l20 = const [
+      const C(42),
+      const <int>[37]
+    ];
+    const l21 = [
+      const C(42),
+      const <int>[37]
+    ];
+    const l22 = [
+      C(42),
+      const <int>[37]
+    ];
+    var l23 = const [C(42), clist];
+    const l24 = [
+      C(42),
+      <int>[37]
+    ];
+    var l25 = [
+      const C(42),
+      const <int>[37]
+    ];
+    var l26 = [
+      C(42),
+      const <int>[37]
+    ];
+    var l27 = [C(42), clist];
+    var l28 = [
+      C(42),
+      <int>[37]
+    ];
+    var l29 = [C(42), list];
+    var l30 = [c42, clist];
+    var l31 = [cc42, list];
+
+    Expect.identical(l20, l21);
+    Expect.identical(l20, l22);
+    Expect.identical(l20, l23);
+    Expect.identical(l20, l24);
+    // List literals are never const unless in const context.
+    Expect.allDistinct([l25, l26, l27, l28, l29, l30, l31]);
+    Expect.identical(cc42, l25[0]);
+    Expect.identical(cc42, l26[0]);
+    Expect.identical(cc42, l27[0]);
+    Expect.identical(cc42, l28[0]);
+    Expect.identical(cc42, l29[0]);
+    Expect.identical(cc42, l30[0]);
+    Expect.identical(cc42, l31[0]);
+    Expect.identical(clist, l25[1]);
+    Expect.identical(clist, l26[1]);
+    Expect.identical(clist, l27[1]);
+    Expect.identical(clist, l29[1]);
+    Expect.identical(clist, l30[1]);
+    Expect.identical(clist, l31[1]);
+    Expect.notIdentical(clist, l28[1]);
+  }
+
+  {
+    // Map literals.
+    const m20 = const <C, List<int>>{
+      const C(42): const <int>[37]
+    };
+    const m21 = {
+      const C(42): const <int>[37]
+    };
+    const m22 = {
+      C(42): const <int>[37]
+    };
+    var m23 = const {C(42): clist};
+    const m24 = {
+      C(42): <int>[37]
+    };
+    var m25 = {
+      const C(42): const <int>[37]
+    };
+    var m26 = {
+      C(42): const <int>[37]
+    };
+    var m27 = {C(42): clist};
+    var m28 = {
+      C(42): <int>[37]
+    };
+    var m29 = {C(42): list};
+    var m30 = {c42: clist};
+    var m31 = {cc42: list};
+
+    Expect.identical(m20, m21);
+    Expect.identical(m20, m22);
+    Expect.identical(m20, m23);
+    Expect.identical(m20, m24);
+    // Map literals are never const unless in const context.
+    Expect.allDistinct([m25, m26, m27, m28, m29, m30, m31]);
+    Expect.identical(cc42, m25.keys.first);
+    Expect.identical(cc42, m26.keys.first);
+    Expect.identical(cc42, m27.keys.first);
+    Expect.identical(cc42, m28.keys.first);
+    Expect.identical(cc42, m29.keys.first);
+    Expect.identical(cc42, m30.keys.first);
+    Expect.identical(cc42, m31.keys.first);
+    Expect.identical(clist, m25.values.first);
+    Expect.identical(clist, m26.values.first);
+    Expect.identical(clist, m27.values.first);
+    Expect.identical(clist, m29.values.first);
+    Expect.identical(clist, m30.values.first);
+    Expect.identical(clist, m31.values.first);
+    Expect.notIdentical(clist, m28.values.first);
+  }
+}
+
+class C {
+  final Object x;
+  const C(this.x);
+}
+
+class D<T> {
+  final T x;
+  const D(this.x);
+}
+
+class N {
+  final Object left, right;
+  const N(this.left, this.right);
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart b/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart
new file mode 100644
index 0000000..1a4de2d
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_or_const_generic_test.dart
@@ -0,0 +1,125 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+import "implicit_new_or_const_generic_test.dart" as prefix;
+
+// Test that const constructors with const arguments become const,
+// and non-const constructors or const-constructors with non-const arguments
+// do not (except in a const context, which is tested elsewhere).
+
+// This test uses a generic class, which requires new syntax.
+
+main() {
+  // Various valid object creation expressions.
+  var x = 42;  // non constant variable.
+
+  // Various valid object creation expressions of a generic constructor.
+  // (Requires inference to infer `<int>` for the invocations of `D`.)
+  var instances = <Object>[
+    new D(x),
+    new D(42),
+    const D(42),
+    D(x),
+    D(42),
+
+    new D.named(x),
+    new D.named(42),
+    const D.named(42),
+    D.named(x),
+    D.named(42),
+
+    new prefix.D(x),
+    new prefix.D(42),
+    const prefix.D(42),
+    prefix.D(x),
+    prefix.D(42),
+
+    new prefix.D.named(x),
+    new prefix.D.named(42),
+    const prefix.D.named(42),
+    prefix.D.named(x),
+    prefix.D.named(42),
+
+    new D<int>(x),
+    new D<int>(42),
+    const D<int>(42),
+    D<int>(x),
+    D<int>(42),
+
+    new D<int>.named(x),
+    new D<int>.named(42),
+    const D<int>.named(42),
+    D<int>.named(x),
+    D<int>.named(42),
+
+    new prefix.D<int>(x),
+    new prefix.D<int>(42),
+    const prefix.D<int>(42),
+    prefix.D<int>(x),
+    prefix.D<int>(42),
+
+    new prefix.D<int>.named(x),
+    new prefix.D<int>.named(42),
+    const prefix.D<int>.named(42),
+    prefix.D<int>.named(x),
+    prefix.D<int>.named(42),
+  ];
+
+  const d42 = const D<int>(42);
+  for (var i = 0; i < instances.length; i++) {
+    var d = instances[i];
+    Expect.equals(d42, d);
+    if (i % 5 == 2 || i % 5 == 4) {
+      // The cases of D(42) without "new" are all constant.
+      Expect.identical(d42, d, "$i");
+    } else {
+      // The rest are not.
+      Expect.notIdentical(d42, d, "$i");
+    }
+  }
+
+  // Test instance creation with type parameters.
+  new G<int>().testWithT();
+}
+
+class D<T> {
+  final T x;
+
+  const D(this.x);
+  const D.named(this.x);
+
+  int get hashCode => x.hashCode;
+  bool operator==(Object other) => other is D<Object> && x == other.x;
+}
+
+class G<T> {
+  // Tests creation of D<T> where T is a type variable.
+  void testWithT() {
+    // Cannot create constants referencing T or x.
+    var instances = [
+      new D<T>(null),
+      D<T>(null),
+
+      new D<T>.named(null),
+      D<T>.named(null),
+
+      new prefix.D<T>(null),
+      prefix.D<T>(null),
+
+      new prefix.D<T>.named(null),
+      prefix.D<T>.named(null),
+    ];
+
+    const dx = const D<T>(null);
+    Expect.allDistinct([dx]..addAll(instances));
+    for (var i = 0; i < instances.length; i++) {
+      var d = instances[i];
+      Expect.isTrue(d is D<T>);
+      Expect.isTrue(d is! D<Null>);
+      Expect.equals(dx, d, "$i");
+    }
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_or_const_test.dart b/tests/language_2/implicit_creation/implicit_new_or_const_test.dart
new file mode 100644
index 0000000..3a0a7b0
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_or_const_test.dart
@@ -0,0 +1,64 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_or_const_test.dart" as prefix;
+
+// Test that const constructors with const arguments become const,
+// and non-const constructors or const-constructors with non-const arguments
+// do not (except in a const context, which is tested elsewhere).
+
+main() {
+  // Various valid object creation expressions.
+  var x = 42; // non constant variable.
+
+  var instances = <Object>[
+    new C(x),
+    new C(42),
+    const C(42),
+    C(x),
+    C(42),
+    new C.named(x),
+    new C.named(42),
+    const C.named(42),
+    C.named(x),
+    C.named(42),
+    new prefix.C(x),
+    new prefix.C(42),
+    const prefix.C(42),
+    prefix.C(x),
+    prefix.C(42),
+    new prefix.C.named(x),
+    new prefix.C.named(42),
+    const prefix.C.named(42),
+    prefix.C.named(x),
+    prefix.C.named(42),
+  ];
+
+  // Test that the correct ones are constant, and the rest are not.
+  const c42 = const C(42); // Reference constant.
+
+  for (var i = 0; i < instances.length; i++) {
+    var c = instances[i];
+    Expect.equals(c42, c);
+    if (i % 5 == 2 || i % 5 == 4) {
+      // The cases of C(42) without "new" are all constant.
+      Expect.identical(c42, c, "$i");
+    } else {
+      // The rest are not.
+      Expect.notIdentical(c42, c, "$i");
+    }
+  }
+}
+
+class C {
+  final Object x;
+
+  const C(this.x);
+  const C.named(this.x);
+
+  int get hashCode => x.hashCode;
+  bool operator ==(Object other) => other is C && x == other.x;
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_prefix_constructor_generic_named_test.dart b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_generic_named_test.dart
new file mode 100644
index 0000000..600537c
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_generic_named_test.dart
@@ -0,0 +1,71 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_prefix_constructor_generic_named_test.dart" as prefix;
+
+// Test that an omitted `new` is allowed for a generic constructor invocation.
+
+class C<T> {
+  final T x;
+  C(this.x);  // Not const constructor.
+  const C.c(this.x);  // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C<T> get self => this;
+  C<T> method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C<int>.c(42); // Canonicalized.
+  var x = 42; // Avoid constant parameter.
+  var c0 = new prefix.C<int>.c(x);  // Original syntax.
+
+  // Uses of `prefix.C<int>.c(x)` in various contexts.
+  var c1 = prefix.C<int>.c(x);
+  var c2 = [prefix.C<int>.c(x)][0];
+  var c3 = {prefix.C<int>.c(x): 0}.keys.first;
+  var c4 = {0: prefix.C<int>.c(x)}.values.first;
+  var c5 = id(prefix.C<int>.c(x));
+  var c6 = prefix.C<int>.c(x).self;
+  var c7 = prefix.C<int>.c(x).method();
+  var c8 = C(prefix.C<int>.c(x)).x;
+  var c9 = -prefix.C<int>.c(x);
+  var c10 = prefix.C<int>.c(x) < 9;
+  var c11 = C(null) > prefix.C<int>.c(x);
+  var c12 = (c10 == c11) ? null : prefix.C<int>.c(x);
+  var c13 = prefix.C<int>.c(x)..method();
+  var c14;
+  try {
+    throw prefix.C<int>.c(x);
+  } catch (e) {
+    c14 = e;
+  }
+
+  switch (prefix.C<int>.c(x)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+      // Success.
+  }
+
+  for (prefix.C<int>.c(x); false; prefix.C<int>.c(x), prefix.C<int>.c(x)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values =
+      [cc, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C<int>);
+    Expect.equals(42, (value as C<int>).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_prefix_constructor_generic_test.dart b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_generic_test.dart
new file mode 100644
index 0000000..3487d90
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_generic_test.dart
@@ -0,0 +1,87 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_prefix_constructor_generic_test.dart" as prefix;
+
+// Test that an omitted `new` is allowed for a generic constructor invocation.
+
+class C<T> {
+  final T x;
+  C(this.x); // Not const constructor.
+  const C.c(this.x); // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C<T> get self => this;
+  C<T> method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C<int>.c(42); // Canonicalized.
+
+  var c0 = new prefix.C<int>(42); // Original syntax.
+
+  // Uses of `prefix.C<int>(42)` in various contexts.
+  var c1 = prefix.C<int>(42);
+  var c2 = [prefix.C<int>(42)][0];
+  var c3 = {prefix.C<int>(42): 0}.keys.first;
+  var c4 = {0: prefix.C<int>(42)}.values.first;
+  var c5 = id(prefix.C<int>(42));
+  var c6 = prefix.C<int>(42).self;
+  var c7 = prefix.C<int>(42).method();
+  var c8 = C(prefix.C<int>(42)).x;
+  var c9 = -prefix.C<int>(42);
+  var c10 = prefix.C<int>(42) < 9;
+  var c11 = C(null) > prefix.C<int>(42);
+  var c12 = (c10 == c11) ? null : prefix.C<int>(42);
+  var c13 = prefix.C<int>(42)..method();
+  var c14;
+  try {
+    throw prefix.C<int>(42);
+  } catch (e) {
+    c14 = e;
+  }
+
+  switch (prefix.C<int>(42)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (prefix.C<int>(42); false; prefix.C<int>(42), prefix.C<int>(42)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C<int>);
+    Expect.equals(42, (value as C<int>).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_prefix_constructor_named_test.dart b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_named_test.dart
new file mode 100644
index 0000000..b230342
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_named_test.dart
@@ -0,0 +1,88 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_prefix_constructor_named_test.dart" as prefix;
+
+// Test that an omitted `new` is allowed for a non-generic class.
+
+class C {
+  final Object x;
+  C(this.x); // Not const constructor.
+  const C.c(this.x); // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C get self => this;
+  C method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C.c(42); // Canonicalized.
+  var x = 42; // Avoid constant parameter.
+  var c0 = new prefix.C.c(x); // Original syntax.
+
+  // Uses of `prefix.C.c(x)` in various contexts.
+  var c1 = prefix.C.c(x);
+  var c2 = [prefix.C.c(x)][0];
+  var c3 = {prefix.C.c(x): 0}.keys.first;
+  var c4 = {0: prefix.C.c(x)}.values.first;
+  var c5 = id(prefix.C.c(x));
+  var c6 = prefix.C.c(x).self;
+  var c7 = prefix.C.c(x).method();
+  var c8 = C(prefix.C.c(x)).x;
+  var c9 = -prefix.C.c(x);
+  var c10 = prefix.C.c(x) < 9;
+  var c11 = C(null) > prefix.C.c(x);
+  var c12 = (c10 == c11) ? null : prefix.C.c(x);
+  var c13 = prefix.C.c(x)..method();
+  var c14;
+  try {
+    throw prefix.C.c(x);
+  } catch (e) {
+    c14 = e;
+  }
+  Expect.isNotNull(c12);
+
+  switch (prefix.C.c(x)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (prefix.C.c(x); false; prefix.C.c(x), prefix.C.c(x)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C);
+    Expect.equals(42, (value as C).x);
+  }
+}
diff --git a/tests/language_2/implicit_creation/implicit_new_prefix_constructor_test.dart b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_test.dart
new file mode 100644
index 0000000..3205294
--- /dev/null
+++ b/tests/language_2/implicit_creation/implicit_new_prefix_constructor_test.dart
@@ -0,0 +1,88 @@
+// 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 "package:expect/expect.dart";
+
+import "implicit_new_prefix_constructor_test.dart" as prefix;
+
+// Test that an omitted `new` is allowed for a non-generic class.
+
+class C {
+  final Object x;
+  C(this.x); // Not const constructor.
+  const C.c(this.x); // Const constructor.
+
+  operator <(other) => this;
+  operator >(other) => other;
+  operator -() => this;
+
+  C get self => this;
+  C method() => self;
+}
+
+T id<T>(T x) => x;
+
+main() {
+  const cc = const C.c(42); // Canonicalized.
+
+  var c0 = new prefix.C(42); // Original syntax.
+
+  // Uses of `prefix.C(42)` in various contexts.
+  var c1 = prefix.C(42);
+  var c2 = [prefix.C(42)][0];
+  var c3 = {prefix.C(42): 0}.keys.first;
+  var c4 = {0: prefix.C(42)}.values.first;
+  var c5 = id(prefix.C(42));
+  var c6 = prefix.C(42).self;
+  var c7 = prefix.C(42).method();
+  var c8 = C(prefix.C(42)).x;
+  var c9 = -prefix.C(42);
+  var c10 = prefix.C(42) < 9;
+  var c11 = C(null) > prefix.C(42);
+  var c12 = (c10 == c11) ? null : prefix.C(42);
+  var c13 = prefix.C(42)..method();
+  var c14;
+  try {
+    throw prefix.C(42);
+  } catch (e) {
+    c14 = e;
+  }
+  Expect.isNotNull(c12);
+
+  switch (prefix.C(42)) {
+    case cc:
+      Expect.fail("Should not be const");
+      break;
+    default:
+    // Success.
+  }
+
+  for (prefix.C(42); false; prefix.C(42), prefix.C(42)) {
+    Expect.fail("Unreachable");
+  }
+
+  var values = [
+    cc,
+    c0,
+    c1,
+    c2,
+    c3,
+    c4,
+    c5,
+    c6,
+    c7,
+    c8,
+    c9,
+    c10,
+    c11,
+    c12,
+    c13,
+    c14
+  ];
+  Expect.allDistinct(values); // Non of them create constants.
+  for (var value in values) {
+    Expect.isTrue(value is C);
+    Expect.equals(42, (value as C).x);
+  }
+}
diff --git a/tests/language_2/issue31596_implement_covariant_test.dart b/tests/language_2/issue31596_implement_covariant_test.dart
new file mode 100644
index 0000000..901308c
--- /dev/null
+++ b/tests/language_2/issue31596_implement_covariant_test.dart
@@ -0,0 +1,47 @@
+// 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 "package:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+class B2 extends A {}
+
+class C {
+  void f(covariant B x) {}
+}
+
+abstract class I {
+  void f(A x);
+}
+
+// This class does not require a forwarding stub; the interface of D.f is (A) ->
+// void and the implementation has signature (covariant B) -> void.  The
+// implementation satisfies the interface thanks to the presence of the
+// "covariant" keyword.
+class D extends C implements I {}
+
+main() {
+  var d = new D();
+  I i = d;
+  A a = new A();
+  B b = new B();
+  B2 b2Null = null;
+
+  // The following two lines are statically ok because the type B2 is assignable
+  // to the type A.  There should be no runtime error because the actual value
+  // at runtime is `null`, which may be assigned to A.
+  d.f(b2Null);
+  i.f(b2Null);
+
+  void Function(Object) g = d.f; // Ok; D.f reified as (Object) -> void
+  Expect.throwsTypeError(() {
+    d.f(a);
+  });
+  Expect.throwsTypeError(() {
+    i.f(a);
+  });
+}
diff --git a/tests/language_2/issue31596_override_test.dart b/tests/language_2/issue31596_override_test.dart
new file mode 100644
index 0000000..5fd37d8
--- /dev/null
+++ b/tests/language_2/issue31596_override_test.dart
@@ -0,0 +1,49 @@
+// 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 I0 {}
+
+class A {}
+
+class B extends A implements I0 {}
+
+class B2 extends A {}
+
+class C {
+  void f(B x) {}
+}
+
+abstract class I1 {
+  void f(covariant A x);
+}
+
+// This class contains a forwarding stub for f to allow it to satisfy the
+// interface I, while still ensuring that the x argument is type checked before
+// C.f is executed.
+//
+// For purposes of override checking, the forwarding stub is ignored.
+class D extends C implements I1 {}
+
+class Test extends D {
+  // Valid override - A assignable to A and B
+  void f(A x) {} //# 01: ok
+  void f(covariant A x) {} //# 02: ok
+
+  // Valid override - B assignable to A and B
+  void f(B x) {} //# 03: ok
+  void f(covariant B x) {} //# 04: ok
+
+  // Invalid override - I0 not assignable to A
+  void f(I0 x) {} //# 05: compile-time error
+  void f(covariant I0 x) {} //# 06: compile-time error
+
+  // Invalid override - B2 not assignable to B
+  void f(B2 x) {} //# 07: compile-time error
+  void f(covariant B2 x) {} //# 08: compile-time error
+}
+
+main() {
+  // Make sure that Test is compiled.
+  new Test();
+}
diff --git a/tests/language_2/issue31596_super_test.dart b/tests/language_2/issue31596_super_test.dart
new file mode 100644
index 0000000..875e4f3
--- /dev/null
+++ b/tests/language_2/issue31596_super_test.dart
@@ -0,0 +1,60 @@
+// 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 "package:expect/expect.dart";
+
+class I0 {}
+
+class A {}
+
+class B extends A implements I0 {}
+
+class B2 extends A {}
+
+class C {
+  void f(B x) {}
+}
+
+abstract class I {
+  void f(covariant A x);
+}
+
+// This class contains a forwarding stub for f to allow it to satisfy the
+// interface I, while still ensuring that the x argument is type checked before
+// C.f is executed.
+//
+// Super calls in a derived class resolve directly to C.f, and are type checked
+// accordingly at compile time.
+class D extends C implements I {}
+
+class E extends D {
+  void test() {
+    I0 i0 = null;
+    B2 b2 = null;
+
+    // ok since I0 is assignable to B
+    super.f(i0); //# 01: ok
+
+    // not ok since B2 is not assignable to B
+    super.f(b2); //# 02: compile-time error
+
+    var superF = super.f; // Inferred type: (B) -> void
+
+    // ok since I0 is assignable to B
+    superF(i0); //# 03: ok
+
+    // not ok since B2 is not assignable to B
+    superF(b2); //# 04: compile-time error
+
+    // Should pass since superF's runtime type is (B) -> void
+    Expect.isTrue(superF is void Function(B)); //# 05: ok
+    Expect.isTrue(superF is! void Function(I0)); //# 05: continued
+    Expect.isTrue(superF is! void Function(A)); //# 05: continued
+    Expect.isTrue(superF is! void Function(Object)); //# 05: continued
+  }
+}
+
+main() {
+  new E().test();
+}
diff --git a/tests/language_2/issue31596_tearoff_test.dart b/tests/language_2/issue31596_tearoff_test.dart
new file mode 100644
index 0000000..4feba46
--- /dev/null
+++ b/tests/language_2/issue31596_tearoff_test.dart
@@ -0,0 +1,48 @@
+// 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 "package:expect/expect.dart";
+
+class A {}
+
+class B extends A {}
+
+class B2 extends A {}
+
+class C {
+  void f(B x) {}
+}
+
+abstract class I {
+  void f(covariant A x);
+}
+
+// This class contains a forwarding stub for f to allow it to satisfy the
+// interface I, while still ensuring that the x argument is type checked before
+// C.f is executed.
+//
+// For purposes of static type checking, the interface of the class D is
+// considered to contain a method f with signature (A) -> void.  For purposes of
+// runtime behavior, a tearoff of D.f is considered to have the reified runtime
+// type (Object) -> void.
+class D extends C implements I {}
+
+main() {
+  var d = new D();
+  B2 b2Null = null;
+  B2 b2 = new B2();
+
+  // Since the compile-time type of D.f is (A) -> void, it is assignable to (B2)
+  // -> void.  Since the runtime type is (Object) -> void, the assignment is
+  // allowed at runtime as well.
+  void Function(B2) g = d.f;
+
+  // However, the tear-off performs a runtime check of its argument, so it
+  // accepts a value of `null`, but it does not accept a value whose runtime
+  // type is B2.
+  g(b2Null);
+  Expect.throwsTypeError(() {
+    g(b2);
+  });
+}
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 1b8fbc9..9f38477 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -34,6 +34,12 @@
 issue_25671b_test/01: CompileTimeError
 type_promotion_more_specific_test/04: CompileTimeError # Issue 30906.
 
+[ $compiler != dart2js && !$fasta && !$strong ]
+implicit_creation/implicit_new_constructor_generic_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_constructor_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_prefix_constructor_generic_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_prefix_constructor_test: Fail # No support for implicit creation.
+
 [ $compiler != dartdevc && !$checked ]
 function_type/*: Skip # Needs checked mode.
 
@@ -174,15 +180,60 @@
 # common front end, but for now we get better coverage by still running them in
 # checked mode, which is mostly Dart2-compatible.
 [ !$checked && ($compiler == app_jit || $compiler == none || $compiler == precompiler) && ($runtime == dart_precompiled || $runtime == vm) ]
-*: Skip
+*: SkipByDesign
 
 [ !$dart2js_with_kernel && $minified ]
 regress_21795_test: RuntimeError # Issue 12605
 stack_trace_test: Fail, OK # Stack trace not preserved in minified code.
 
+[ !$fasta && $strong ]
+implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_named_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_test: CompileTimeError
+implicit_creation/implicit_const_context_list_test: CompileTimeError
+implicit_creation/implicit_const_context_map_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_named_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_test: CompileTimeError
+implicit_creation/implicit_new_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_new_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_new_constructor_named_test: CompileTimeError
+implicit_creation/implicit_new_constructor_test: CompileTimeError
+implicit_creation/implicit_new_or_const_composite_test: CompileTimeError
+implicit_creation/implicit_new_or_const_generic_test: CompileTimeError
+implicit_creation/implicit_new_or_const_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_named_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_test: CompileTimeError
+
+[ !$fasta && !$strong ]
+implicit_creation/implicit_const_context_constructor_generic_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_constructor_generic_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_constructor_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_constructor_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_list_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_map_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_prefix_constructor_generic_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_prefix_constructor_generic_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_prefix_constructor_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_const_context_prefix_constructor_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_constructor_generic_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_constructor_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_or_const_composite_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_or_const_generic_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_or_const_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_prefix_constructor_generic_named_test: Fail # No support for implicit creation.
+implicit_creation/implicit_new_prefix_constructor_named_test: Fail # No support for implicit creation.
+
 [ $compiler == app_jit || $compiler == none ]
 library_env_test/has_no_mirror_support: RuntimeError, OK
 
+[ $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
+cyclic_type_test/03: Pass, Fail, Crash # Issue 31944
+
 [ $hot_reload || $hot_reload_rollback ]
 cha_deopt1_test: Crash # Requires deferred libraries
 cha_deopt2_test: Crash # Requires deferred libraries
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 09d1afc..73292b2e 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -14,10 +14,14 @@
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28813
 built_in_identifier_type_annotation_test/85: Crash # Issue 28813
+call_type_literal_test: CompileTimeError
 cascade_test/none: Fail # Issue 11577
+class_literal_static_test/none: CompileTimeError
+class_literal_test/none: CompileTimeError
 config_import_corelib_test: StaticWarning, OK
 conflicting_type_variable_and_setter_test: CompileTimeError # Issue 25525
 const_for_in_variable_test/01: MissingCompileTimeError # Issue 25161
+constructor_call_as_function_test: CompileTimeError
 constructor_call_wrong_argument_count_negative_test: Fail # Issue 11585
 deep_nesting1_negative_test: CompileTimeError # Issue 25558
 deep_nesting2_negative_test: CompileTimeError # Issue 25558
@@ -36,7 +40,6 @@
 fuzzy_arrows_test/01: MissingCompileTimeError
 generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 30929
 generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 30929
-generic_list_checked_test: StaticWarning
 generic_local_functions_test: CompileTimeError # Issue 28515
 generic_methods_generic_function_parameter_test: CompileTimeError # Issue 28515
 generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
@@ -144,6 +147,7 @@
 try_catch_on_syntax_test/10: MissingCompileTimeError
 try_catch_on_syntax_test/11: MissingCompileTimeError
 type_inference_inconsistent_inheritance_test: MissingCompileTimeError
+type_literal_prefix_call_test: CompileTimeError
 type_variable_scope_test/none: Fail # Issue 11578
 type_variable_static_context_negative_test: Fail # Issue 12161
 vm/debug_break_enabled_vm_test: Skip
@@ -151,6 +155,206 @@
 vm/lazy_deopt_with_exception_test: Pass
 vm/reflect_core_vm_test: CompileTimeError
 vm/regress_27201_test: SkipByDesign # Loads bad library, so will always crash.
+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 == dart2analyzer && $runtime == none ]
 assertion_initializer_const_function_test/01: CompileTimeError
@@ -322,7 +526,6 @@
 function_type_call_getter2_test/03: MissingCompileTimeError
 function_type_call_getter2_test/04: MissingCompileTimeError
 function_type_call_getter2_test/05: MissingCompileTimeError
-generic_list_checked_test: CompileTimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_dynamic_test/01: MissingCompileTimeError
 generic_methods_dynamic_test/03: MissingCompileTimeError
@@ -1038,7 +1241,6 @@
 error_stacktrace_test/00: Pass
 field3a_negative_test: StaticWarning # Issue 28823
 forwarding_stub_tearoff_test: CompileTimeError
-generic_list_checked_test: CompileTimeError
 generic_methods_generic_function_result_test/none: CompileTimeError # Issue #30207
 generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29070
 generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29070
@@ -1051,6 +1253,18 @@
 int64_literal_test/03: MissingCompileTimeError # http://dartbug.com/31479
 int64_literal_test/30: MissingCompileTimeError # http://dartbug.com/31479
 interceptor6_test: CompileTimeError
+issue13673_test: StaticWarning # Issue 31925
+issue31596_implement_covariant_test: CompileTimeError
+issue31596_override_test/01: CompileTimeError
+issue31596_override_test/02: CompileTimeError
+issue31596_override_test/03: CompileTimeError
+issue31596_override_test/04: CompileTimeError
+issue31596_override_test/none: CompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue31596_super_test/05: CompileTimeError
+issue31596_super_test/none: CompileTimeError
+issue31596_tearoff_test: CompileTimeError
 issue31596_test: CompileTimeError
 malformed2_test: Pass, MissingCompileTimeError # Issue 31056.
 mixin_super_2_test/01: MissingCompileTimeError
@@ -1132,53 +1346,6 @@
 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
-void_type_override_test/none: CompileTimeError # Issue 30177
-void_type_usage_test/call_as: CompileTimeError # Issue 30177
-void_type_usage_test/call_for: CompileTimeError # Issue 30177
-void_type_usage_test/call_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/call_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/field_assign: CompileTimeError # Issue 30177
-void_type_usage_test/field_assign2: CompileTimeError # Issue 30177
-void_type_usage_test/final_local_as: CompileTimeError # Issue 30177
-void_type_usage_test/final_local_for: CompileTimeError # Issue 30177
-void_type_usage_test/final_local_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/final_local_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/global_as: CompileTimeError # Issue 30177
-void_type_usage_test/global_for: CompileTimeError # Issue 30177
-void_type_usage_test/global_for_in2: CompileTimeError # Issue 30177
-void_type_usage_test/global_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/global_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/instance2_as: CompileTimeError # Issue 30177
-void_type_usage_test/instance2_for: CompileTimeError # Issue 30177
-void_type_usage_test/instance2_for_in3: CompileTimeError # Issue 30177
-void_type_usage_test/instance2_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/instance2_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/instance3_as: CompileTimeError # Issue 30177
-void_type_usage_test/instance3_for: CompileTimeError # Issue 30177
-void_type_usage_test/instance3_for_in3: CompileTimeError # Issue 30177
-void_type_usage_test/instance3_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/instance3_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/instance_as: CompileTimeError # Issue 30177
-void_type_usage_test/instance_for: CompileTimeError # Issue 30177
-void_type_usage_test/instance_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/instance_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/local_as: CompileTimeError # Issue 30177
-void_type_usage_test/local_assign: CompileTimeError # Issue 30177
-void_type_usage_test/local_for: CompileTimeError # Issue 30177
-void_type_usage_test/local_for_in2: CompileTimeError # Issue 30177
-void_type_usage_test/local_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/local_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/none: CompileTimeError # Issue 30177
-void_type_usage_test/param_as: CompileTimeError # Issue 30177
-void_type_usage_test/param_for: CompileTimeError # Issue 30177
-void_type_usage_test/param_for_in2: CompileTimeError # Issue 30177
-void_type_usage_test/param_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/param_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/paren_as: CompileTimeError # Issue 30177
-void_type_usage_test/paren_for: CompileTimeError # Issue 30177
-void_type_usage_test/paren_return_to_void: CompileTimeError # Issue 30177
-void_type_usage_test/paren_stmt: CompileTimeError # Issue 30177
-void_type_usage_test/setter_assign: CompileTimeError # Issue 30177
 
 [ $compiler == dart2analyzer && !$strong ]
 accessor_conflict_export2_test: StaticWarning # Issue 25626
@@ -1220,12 +1387,14 @@
 built_in_identifier_type_annotation_test/72: MissingCompileTimeError # Issue 28813
 built_in_identifier_type_annotation_test/78: MissingCompileTimeError # Issue 28813
 built_in_identifier_type_annotation_test/81: MissingCompileTimeError # Issue 28813
+call_type_literal_test: StaticWarning
 cast_test/04: MissingCompileTimeError
 cast_test/05: MissingCompileTimeError
 checked_null_test/01: MissingCompileTimeError
 checked_setter3_test/01: MissingCompileTimeError
 checked_setter3_test/02: MissingCompileTimeError
 checked_setter3_test/03: MissingCompileTimeError
+class_literal_static_test/none: StaticWarning
 class_literal_test/01: MissingCompileTimeError
 class_literal_test/02: MissingCompileTimeError
 class_literal_test/03: MissingCompileTimeError
@@ -1251,6 +1420,7 @@
 class_literal_test/23: MissingCompileTimeError
 class_literal_test/24: MissingCompileTimeError
 class_literal_test/25: MissingCompileTimeError
+class_literal_test/none: StaticWarning
 closure_type_test: Pass
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
@@ -1312,6 +1482,7 @@
 const_types_test/40: MissingCompileTimeError
 constructor13_test/01: MissingCompileTimeError
 constructor13_test/02: MissingCompileTimeError
+constructor_call_as_function_test: StaticWarning
 constructor_duplicate_final_test/03: MissingCompileTimeError
 create_unresolved_type_test/01: MissingCompileTimeError
 generic_constructor_mixin2_test/01: MissingCompileTimeError
@@ -1375,6 +1546,12 @@
 invalid_cast_test/11: MissingCompileTimeError
 invocation_mirror_test: StaticWarning
 issue13179_test: StaticWarning
+issue31596_override_test/05: MissingCompileTimeError
+issue31596_override_test/06: MissingCompileTimeError
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
 known_identifier_prefix_error_test/*: MissingCompileTimeError # Error only in strong mode.
 known_identifier_prefix_error_test/none: Pass
 least_upper_bound_expansive_test/01: MissingCompileTimeError
@@ -1501,9 +1678,11 @@
 named_parameters_type_test/02: MissingCompileTimeError
 named_parameters_type_test/03: MissingCompileTimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError # Strong mode error
+nsm5_test: MissingCompileTimeError
 object_has_no_call_method_test/02: MissingCompileTimeError
 object_has_no_call_method_test/05: MissingCompileTimeError
 object_has_no_call_method_test/08: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 positional_parameters_type_test/01: MissingCompileTimeError
 positional_parameters_type_test/02: MissingCompileTimeError
 prefix13_negative_test: CompileTimeError, OK
@@ -1574,6 +1753,7 @@
 type_inference_accessor_ref_test/03: MissingCompileTimeError
 type_inference_accessor_ref_test/06: MissingCompileTimeError
 type_inference_circularity_test: MissingCompileTimeError
+type_literal_prefix_call_test: StaticWarning
 type_promotion_functions_test/01: MissingCompileTimeError
 type_promotion_functions_test/05: MissingCompileTimeError
 type_promotion_functions_test/06: MissingCompileTimeError
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index a753676..8c77d68 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -3,760 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 # Sections in this file should contain "$compiler == dart2js".
 
-[ $compiler == dart2js ]
-abstract_beats_arguments_test: MissingCompileTimeError
-abstract_exact_selector_test/01: MissingCompileTimeError
-abstract_factory_constructor_test/00: MissingCompileTimeError
-abstract_getter_test/01: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
-abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
-abstract_syntax_test/00: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
-additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
-additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
-argument_assignability_function_typed_test/01: MissingCompileTimeError
-argument_assignability_function_typed_test/02: MissingCompileTimeError
-argument_assignability_function_typed_test/03: RuntimeError
-argument_assignability_function_typed_test/04: RuntimeError
-argument_assignability_function_typed_test/05: RuntimeError
-assign_static_type_test/01: MissingCompileTimeError
-assign_static_type_test/02: MissingCompileTimeError
-assign_static_type_test/03: MissingCompileTimeError
-assign_static_type_test/04: MissingCompileTimeError
-assign_static_type_test/05: MissingCompileTimeError
-assign_static_type_test/06: MissingCompileTimeError
-assign_to_type_test/01: MissingCompileTimeError
-assign_to_type_test/02: MissingCompileTimeError
-assign_to_type_test/03: MissingCompileTimeError
-assign_to_type_test/04: MissingCompileTimeError
-assign_top_method_test: MissingCompileTimeError
-async_await_syntax_test/a10a: MissingCompileTimeError
-async_await_syntax_test/b10a: MissingCompileTimeError
-async_await_syntax_test/c10a: MissingCompileTimeError
-async_await_syntax_test/d08b: MissingCompileTimeError
-async_await_syntax_test/d10a: MissingCompileTimeError
-async_congruence_local_test/01: MissingCompileTimeError
-async_congruence_local_test/02: MissingCompileTimeError
-async_congruence_local_test/none: RuntimeError
-async_congruence_method_test/01: MissingCompileTimeError
-async_congruence_method_test/none: RuntimeError
-async_congruence_top_level_test: RuntimeError
-async_congruence_unnamed_test/01: MissingCompileTimeError
-async_congruence_unnamed_test/02: MissingCompileTimeError
-async_congruence_unnamed_test/none: RuntimeError
-async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
-async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
-async_return_types_test/nestedFuture: MissingCompileTimeError
-async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
-async_return_types_test/wrongReturnType: MissingCompileTimeError
-async_return_types_test/wrongTypeParameter: MissingCompileTimeError
-bad_named_parameters2_test/01: MissingCompileTimeError
-bad_named_parameters_test/01: MissingCompileTimeError
-bad_named_parameters_test/02: MissingCompileTimeError
-bad_named_parameters_test/03: MissingCompileTimeError
-bad_named_parameters_test/04: MissingCompileTimeError
-bad_named_parameters_test/05: MissingCompileTimeError
-bad_override_test/01: MissingCompileTimeError
-bad_override_test/02: MissingCompileTimeError
-bad_override_test/06: MissingCompileTimeError
-built_in_identifier_prefix_test: CompileTimeError
-call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
-call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
-call_non_method_field_test/01: MissingCompileTimeError
-call_non_method_field_test/02: MissingCompileTimeError
-call_nonexistent_constructor_test/01: MissingCompileTimeError
-call_nonexistent_constructor_test/02: MissingCompileTimeError
-call_nonexistent_static_test/01: MissingCompileTimeError
-call_nonexistent_static_test/02: MissingCompileTimeError
-call_nonexistent_static_test/03: MissingCompileTimeError
-call_nonexistent_static_test/04: MissingCompileTimeError
-call_nonexistent_static_test/05: MissingCompileTimeError
-call_nonexistent_static_test/06: MissingCompileTimeError
-call_nonexistent_static_test/07: MissingCompileTimeError
-call_nonexistent_static_test/08: MissingCompileTimeError
-call_nonexistent_static_test/09: MissingCompileTimeError
-call_nonexistent_static_test/10: MissingCompileTimeError
-call_through_getter_test/01: MissingCompileTimeError
-call_through_getter_test/02: MissingCompileTimeError
-call_type_literal_test/01: MissingCompileTimeError
-callable_test/00: MissingCompileTimeError
-callable_test/01: MissingCompileTimeError
-cast_test/04: MissingCompileTimeError
-cast_test/05: MissingCompileTimeError
-check_member_static_test/01: MissingCompileTimeError
-check_method_override_test/01: MissingCompileTimeError
-check_method_override_test/02: MissingCompileTimeError
-checked_null_test/01: MissingCompileTimeError
-checked_setter3_test/01: MissingCompileTimeError
-checked_setter3_test/02: MissingCompileTimeError
-checked_setter3_test/03: MissingCompileTimeError
-class_literal_test/01: MissingCompileTimeError
-class_literal_test/02: MissingCompileTimeError
-class_literal_test/03: MissingCompileTimeError
-class_literal_test/04: MissingCompileTimeError
-class_literal_test/05: MissingCompileTimeError
-class_literal_test/06: MissingCompileTimeError
-class_literal_test/07: MissingCompileTimeError
-class_literal_test/08: MissingCompileTimeError
-class_literal_test/09: MissingCompileTimeError
-class_literal_test/10: MissingCompileTimeError
-class_literal_test/11: MissingCompileTimeError
-class_literal_test/12: MissingCompileTimeError
-class_literal_test/13: MissingCompileTimeError
-class_literal_test/14: MissingCompileTimeError
-class_literal_test/15: MissingCompileTimeError
-class_literal_test/16: MissingCompileTimeError
-class_literal_test/17: MissingCompileTimeError
-class_literal_test/18: MissingCompileTimeError
-class_literal_test/19: MissingCompileTimeError
-class_literal_test/20: MissingCompileTimeError
-class_literal_test/21: MissingCompileTimeError
-class_literal_test/22: MissingCompileTimeError
-class_literal_test/23: MissingCompileTimeError
-class_literal_test/24: MissingCompileTimeError
-class_literal_test/25: MissingCompileTimeError
-constructor13_test/01: MissingCompileTimeError
-constructor13_test/02: MissingCompileTimeError
-constructor_call_as_function_test/01: MissingCompileTimeError
-covariance_type_parameter_test/01: RuntimeError
-covariance_type_parameter_test/02: RuntimeError
-covariance_type_parameter_test/03: RuntimeError
-create_unresolved_type_test/01: MissingCompileTimeError
-cyclic_type_variable_test/01: MissingCompileTimeError
-cyclic_type_variable_test/02: MissingCompileTimeError
-cyclic_type_variable_test/03: MissingCompileTimeError
-cyclic_type_variable_test/04: MissingCompileTimeError
-cyclic_typedef_test/13: MissingCompileTimeError
-default_factory2_test/01: MissingCompileTimeError
-default_factory_test/01: MissingCompileTimeError
-deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-dynamic_field_test/01: MissingCompileTimeError
-dynamic_field_test/02: MissingCompileTimeError
-dynamic_prefix_core_test/01: MissingCompileTimeError
-empty_block_case_test: MissingCompileTimeError
-enum_private_test/02: MissingCompileTimeError
-error_stacktrace_test/00: MissingCompileTimeError
-example_constructor_test: RuntimeError
-external_test/21: CompileTimeError
-external_test/24: CompileTimeError
-extract_type_arguments_test: RuntimeError # Issue 31371
-f_bounded_quantification_test/01: MissingCompileTimeError
-f_bounded_quantification_test/02: MissingCompileTimeError
-factory1_test/00: MissingCompileTimeError
-factory1_test/01: MissingCompileTimeError
-factory2_test/03: MissingCompileTimeError
-factory2_test/none: MissingCompileTimeError
-factory3_test/none: MissingCompileTimeError
-factory4_test/00: MissingCompileTimeError
-factory5_test/00: MissingCompileTimeError
-factory6_test/00: MissingCompileTimeError
-factory_redirection_test/01: MissingCompileTimeError
-factory_redirection_test/02: MissingCompileTimeError
-factory_redirection_test/03: MissingCompileTimeError
-factory_redirection_test/05: MissingCompileTimeError
-factory_redirection_test/06: MissingCompileTimeError
-factory_redirection_test/08: MissingCompileTimeError
-factory_redirection_test/09: MissingCompileTimeError
-factory_redirection_test/10: MissingCompileTimeError
-factory_redirection_test/11: MissingCompileTimeError
-factory_redirection_test/12: MissingCompileTimeError
-factory_redirection_test/13: MissingCompileTimeError
-factory_redirection_test/14: MissingCompileTimeError
-factory_redirection_test/none: MissingCompileTimeError
-factory_return_type_checked_test/00: MissingCompileTimeError
-field3_test/01: MissingCompileTimeError
-field_initialization_order_test/01: MissingCompileTimeError
-field_initialization_order_test/none: RuntimeError
-field_method4_test: MissingCompileTimeError
-field_override2_test: MissingCompileTimeError
-field_override_test/00: MissingCompileTimeError
-field_override_test/01: MissingCompileTimeError
-field_override_test/02: MissingCompileTimeError
-field_override_test/none: MissingCompileTimeError
-field_type_check_test/01: MissingCompileTimeError
-final_for_in_variable_test: MissingCompileTimeError
-final_param_test: MissingCompileTimeError
-final_super_field_set_test: MissingCompileTimeError
-final_syntax_test/10: MissingCompileTimeError
-final_variable_assignment_test/01: MissingCompileTimeError
-final_variable_assignment_test/02: MissingCompileTimeError
-final_variable_assignment_test/03: MissingCompileTimeError
-final_variable_assignment_test/04: MissingCompileTimeError
-first_class_types_literals_test/03: MissingCompileTimeError
-first_class_types_literals_test/04: MissingCompileTimeError
-first_class_types_literals_test/05: MissingCompileTimeError
-first_class_types_literals_test/06: MissingCompileTimeError
-first_class_types_literals_test/07: MissingCompileTimeError
-first_class_types_literals_test/08: MissingCompileTimeError
-first_class_types_literals_test/09: MissingCompileTimeError
-first_class_types_literals_test/10: MissingCompileTimeError
-first_class_types_literals_test/11: MissingCompileTimeError
-first_class_types_literals_test/12: MissingCompileTimeError
-flatten_test/05: MissingRuntimeError
-flatten_test/08: MissingRuntimeError
-flatten_test/09: MissingRuntimeError
-flatten_test/12: MissingRuntimeError
-for_in3_test: MissingCompileTimeError
-for_in_side_effects_test/01: MissingCompileTimeError
-function_malformed_result_type_test/00: MissingCompileTimeError
-function_type_call_getter2_test/00: MissingCompileTimeError
-function_type_call_getter2_test/01: MissingCompileTimeError
-function_type_call_getter2_test/02: MissingCompileTimeError
-function_type_call_getter2_test/03: MissingCompileTimeError
-function_type_call_getter2_test/04: MissingCompileTimeError
-function_type_call_getter2_test/05: MissingCompileTimeError
-fuzzy_arrows_test/01: MissingCompileTimeError
-fuzzy_arrows_test/03: RuntimeError
-generic_constructor_mixin2_test/01: MissingCompileTimeError
-generic_constructor_mixin3_test/01: MissingCompileTimeError
-generic_constructor_mixin_test/01: MissingCompileTimeError
-generic_field_mixin6_test/01: MissingCompileTimeError
-generic_function_bounds_test: RuntimeError
-generic_function_dcall_test: RuntimeError
-generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 30930
-generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 30930
-generic_function_typedef2_test/04: MissingCompileTimeError
-generic_method_types_test/01: RuntimeError
-generic_method_types_test/02: RuntimeError
-generic_methods_bounds_test/01: MissingCompileTimeError
-generic_methods_bounds_test/02: MissingRuntimeError
-generic_methods_dynamic_test/01: MissingCompileTimeError
-generic_methods_dynamic_test/02: MissingRuntimeError
-generic_methods_dynamic_test/03: MissingCompileTimeError
-generic_methods_dynamic_test/04: MissingRuntimeError
-generic_methods_generic_class_tearoff_test: RuntimeError
-generic_methods_generic_function_result_test/01: MissingCompileTimeError # Issue #30208
-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_overriding_test/03: MissingCompileTimeError
-generic_methods_recursive_bound_test/02: MissingCompileTimeError
-generic_methods_reuse_type_variables_test: RuntimeError
-generic_methods_simple_as_expression_test/02: MissingRuntimeError
-generic_methods_simple_is_expression_test: RuntimeError
-generic_methods_tearoff_specialization_test: RuntimeError
-generic_methods_type_expression_test: RuntimeError
-generic_methods_unused_parameter_test: RuntimeError
-generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
-generic_no_such_method_dispatcher_test: RuntimeError
-generic_tearoff_test: RuntimeError
-getter_no_setter2_test/00: MissingCompileTimeError
-getter_no_setter2_test/01: MissingCompileTimeError
-getter_no_setter2_test/03: MissingCompileTimeError
-getter_no_setter_test/00: MissingCompileTimeError
-getter_no_setter_test/01: MissingCompileTimeError
-getter_no_setter_test/03: MissingCompileTimeError
-getter_override_test/03: MissingCompileTimeError
-getters_setters2_test/02: MissingCompileTimeError
-identical_const_test/01: MissingCompileTimeError
-identical_const_test/02: MissingCompileTimeError
-identical_const_test/03: MissingCompileTimeError
-identical_const_test/04: MissingCompileTimeError
-if_null_assignment_behavior_test/03: MissingCompileTimeError
-if_null_assignment_behavior_test/13: MissingCompileTimeError
-if_null_assignment_behavior_test/15: MissingCompileTimeError
-if_null_assignment_static_test/02: MissingCompileTimeError
-if_null_assignment_static_test/04: MissingCompileTimeError
-if_null_assignment_static_test/06: MissingCompileTimeError
-if_null_assignment_static_test/07: MissingCompileTimeError
-if_null_assignment_static_test/09: MissingCompileTimeError
-if_null_assignment_static_test/11: MissingCompileTimeError
-if_null_assignment_static_test/13: MissingCompileTimeError
-if_null_assignment_static_test/14: MissingCompileTimeError
-if_null_assignment_static_test/16: MissingCompileTimeError
-if_null_assignment_static_test/18: MissingCompileTimeError
-if_null_assignment_static_test/20: MissingCompileTimeError
-if_null_assignment_static_test/21: MissingCompileTimeError
-if_null_assignment_static_test/23: MissingCompileTimeError
-if_null_assignment_static_test/25: MissingCompileTimeError
-if_null_assignment_static_test/27: MissingCompileTimeError
-if_null_assignment_static_test/28: MissingCompileTimeError
-if_null_assignment_static_test/30: MissingCompileTimeError
-if_null_assignment_static_test/32: MissingCompileTimeError
-if_null_assignment_static_test/34: MissingCompileTimeError
-if_null_assignment_static_test/35: MissingCompileTimeError
-if_null_assignment_static_test/37: MissingCompileTimeError
-if_null_assignment_static_test/39: MissingCompileTimeError
-if_null_assignment_static_test/41: MissingCompileTimeError
-if_null_assignment_static_test/42: MissingCompileTimeError
-if_null_precedence_test/06: MissingCompileTimeError
-if_null_precedence_test/07: MissingCompileTimeError
-implicit_this_test/01: MissingCompileTimeError
-implicit_this_test/02: MissingCompileTimeError
-implicit_this_test/04: MissingCompileTimeError
-import_combinators2_test/00: MissingCompileTimeError
-import_self_test/01: MissingCompileTimeError
-inferrer_constructor5_test/01: MissingCompileTimeError
-initializing_formal_final_test: MissingCompileTimeError
-initializing_formal_type_test: MissingCompileTimeError
-int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
-interface_test/00: MissingCompileTimeError
-least_upper_bound_expansive_test/01: MissingCompileTimeError
-least_upper_bound_expansive_test/02: MissingCompileTimeError
-least_upper_bound_expansive_test/03: MissingCompileTimeError
-least_upper_bound_expansive_test/04: MissingCompileTimeError
-least_upper_bound_expansive_test/05: MissingCompileTimeError
-least_upper_bound_expansive_test/06: MissingCompileTimeError
-least_upper_bound_expansive_test/07: MissingCompileTimeError
-least_upper_bound_expansive_test/08: MissingCompileTimeError
-least_upper_bound_expansive_test/09: MissingCompileTimeError
-least_upper_bound_expansive_test/10: MissingCompileTimeError
-least_upper_bound_expansive_test/11: MissingCompileTimeError
-least_upper_bound_expansive_test/12: MissingCompileTimeError
-least_upper_bound_test/03: MissingCompileTimeError
-least_upper_bound_test/04: MissingCompileTimeError
-least_upper_bound_test/10: MissingCompileTimeError
-least_upper_bound_test/19: MissingCompileTimeError
-least_upper_bound_test/20: MissingCompileTimeError
-least_upper_bound_test/23: MissingCompileTimeError
-least_upper_bound_test/24: MissingCompileTimeError
-least_upper_bound_test/29: MissingCompileTimeError
-least_upper_bound_test/30: MissingCompileTimeError
-least_upper_bound_test/32: MissingCompileTimeError
-library_ambiguous_test/00: MissingCompileTimeError
-library_ambiguous_test/01: MissingCompileTimeError
-library_ambiguous_test/02: MissingCompileTimeError
-library_ambiguous_test/03: MissingCompileTimeError
-library_ambiguous_test/04: MissingCompileTimeError
-library_env_test/has_no_html_support: RuntimeError, OK
-library_env_test/has_no_io_support: RuntimeError, OK
-library_env_test/has_no_mirror_support: RuntimeError, OK
-local_function2_test/01: MissingCompileTimeError
-local_function2_test/02: MissingCompileTimeError
-local_function2_test/none: RuntimeError
-local_function3_test/01: MissingCompileTimeError
-local_function3_test/none: RuntimeError
-local_function_test/01: MissingCompileTimeError
-local_function_test/02: MissingCompileTimeError
-local_function_test/03: MissingCompileTimeError
-local_function_test/04: MissingCompileTimeError
-local_function_test/none: RuntimeError
-logical_expression3_test: MissingCompileTimeError
-main_test/03: RuntimeError
-malbounded_instantiation_test/01: MissingCompileTimeError
-malbounded_instantiation_test/02: MissingCompileTimeError
-malbounded_instantiation_test/03: MissingCompileTimeError
-malbounded_redirecting_factory_test/02: MissingCompileTimeError
-malbounded_redirecting_factory_test/03: MissingCompileTimeError
-malbounded_redirecting_factory_test/04: MissingCompileTimeError
-malbounded_redirecting_factory_test/05: MissingCompileTimeError
-malbounded_type_cast2_test: MissingCompileTimeError
-malbounded_type_cast_test/00: MissingCompileTimeError
-malbounded_type_cast_test/01: MissingCompileTimeError
-malbounded_type_cast_test/02: MissingCompileTimeError
-malbounded_type_cast_test/none: RuntimeError
-malbounded_type_literal_test/00: MissingCompileTimeError
-malbounded_type_test2_test/00: MissingCompileTimeError
-malbounded_type_test_test/00: MissingCompileTimeError
-malbounded_type_test_test/01: MissingCompileTimeError
-malbounded_type_test_test/02: MissingCompileTimeError
-malbounded_type_test_test/none: RuntimeError
-malformed2_test/01: MissingCompileTimeError
-malformed2_test/02: MissingCompileTimeError
-malformed2_test/03: MissingCompileTimeError
-malformed2_test/04: MissingCompileTimeError
-malformed2_test/05: MissingCompileTimeError
-malformed2_test/06: MissingCompileTimeError
-malformed2_test/07: MissingCompileTimeError
-malformed2_test/08: MissingCompileTimeError
-malformed2_test/09: MissingCompileTimeError
-malformed2_test/10: MissingCompileTimeError
-malformed2_test/11: MissingCompileTimeError
-malformed2_test/12: MissingCompileTimeError
-malformed2_test/13: MissingCompileTimeError
-malformed_bound_test/00: MissingCompileTimeError
-malformed_bound_test/01: MissingCompileTimeError
-malformed_inheritance_test/01: MissingCompileTimeError
-malformed_inheritance_test/03: MissingCompileTimeError
-malformed_inheritance_test/05: MissingCompileTimeError
-malformed_test/00: MissingCompileTimeError
-malformed_test/01: MissingCompileTimeError
-malformed_test/02: MissingCompileTimeError
-malformed_test/03: MissingCompileTimeError
-malformed_test/04: MissingCompileTimeError
-malformed_test/05: MissingCompileTimeError
-malformed_test/06: MissingCompileTimeError
-malformed_test/07: MissingCompileTimeError
-malformed_test/08: MissingCompileTimeError
-malformed_test/09: MissingCompileTimeError
-malformed_test/10: MissingCompileTimeError
-malformed_test/11: MissingCompileTimeError
-malformed_test/12: MissingCompileTimeError
-malformed_test/13: MissingCompileTimeError
-malformed_test/14: MissingCompileTimeError
-malformed_test/15: MissingCompileTimeError
-malformed_test/16: MissingCompileTimeError
-malformed_test/17: MissingCompileTimeError
-malformed_test/18: MissingCompileTimeError
-malformed_test/19: MissingCompileTimeError
-malformed_test/20: MissingCompileTimeError
-malformed_test/21: MissingCompileTimeError
-malformed_test/22: MissingCompileTimeError
-malformed_test/23: MissingCompileTimeError
-malformed_test/24: MissingCompileTimeError
-malformed_type_test: MissingCompileTimeError
-method_name_test: Pass
-method_override2_test/*: MissingCompileTimeError
-method_override2_test/none: Pass
-method_override3_test/*: MissingCompileTimeError
-method_override3_test/none: Pass
-method_override4_test/*: MissingCompileTimeError
-method_override4_test/none: Pass
-method_override5_test/*: MissingCompileTimeError
-method_override5_test/none: Pass
-method_override6_test/*: MissingCompileTimeError
-method_override6_test/none: Pass
-method_override7_test/03: MissingCompileTimeError
-method_override8_test/03: MissingCompileTimeError
-method_override_test: RuntimeError
-mixin_illegal_constructor_test/13: MissingCompileTimeError
-mixin_illegal_constructor_test/14: MissingCompileTimeError
-mixin_illegal_constructor_test/15: MissingCompileTimeError
-mixin_illegal_constructor_test/16: MissingCompileTimeError
-mixin_illegal_static_access_test/01: MissingCompileTimeError
-mixin_illegal_static_access_test/02: MissingCompileTimeError
-mixin_illegal_syntax_test/13: MissingCompileTimeError
-mixin_invalid_bound2_test/02: MissingCompileTimeError
-mixin_invalid_bound2_test/03: MissingCompileTimeError
-mixin_invalid_bound2_test/04: MissingCompileTimeError
-mixin_invalid_bound2_test/05: MissingCompileTimeError
-mixin_invalid_bound2_test/06: MissingCompileTimeError
-mixin_invalid_bound2_test/07: MissingCompileTimeError
-mixin_invalid_bound2_test/08: MissingCompileTimeError
-mixin_invalid_bound2_test/09: MissingCompileTimeError
-mixin_invalid_bound2_test/10: MissingCompileTimeError
-mixin_invalid_bound2_test/11: MissingCompileTimeError
-mixin_invalid_bound2_test/12: MissingCompileTimeError
-mixin_invalid_bound2_test/13: MissingCompileTimeError
-mixin_invalid_bound2_test/14: MissingCompileTimeError
-mixin_invalid_bound2_test/15: MissingCompileTimeError
-mixin_invalid_bound_test/02: MissingCompileTimeError
-mixin_invalid_bound_test/03: MissingCompileTimeError
-mixin_invalid_bound_test/04: MissingCompileTimeError
-mixin_invalid_bound_test/05: MissingCompileTimeError
-mixin_invalid_bound_test/06: MissingCompileTimeError
-mixin_invalid_bound_test/07: MissingCompileTimeError
-mixin_invalid_bound_test/08: MissingCompileTimeError
-mixin_invalid_bound_test/09: MissingCompileTimeError
-mixin_invalid_bound_test/10: MissingCompileTimeError
-mixin_super_bound_test/01: MissingCompileTimeError
-mixin_super_bound_test/02: MissingCompileTimeError
-mixin_supertype_subclass_test/01: CompileTimeError
-mixin_supertype_subclass_test/03: CompileTimeError
-mixin_supertype_subclass_test/04: CompileTimeError
-mixin_supertype_subclass_test/none: CompileTimeError
-mixin_type_parameters_errors_test/01: MissingCompileTimeError
-mixin_type_parameters_errors_test/02: MissingCompileTimeError
-mixin_type_parameters_errors_test/03: MissingCompileTimeError
-mixin_type_parameters_errors_test/04: MissingCompileTimeError
-mixin_type_parameters_errors_test/05: MissingCompileTimeError
-mixin_type_parameters_mixin_extends_test: RuntimeError
-mixin_type_parameters_mixin_test: RuntimeError
-mixin_type_parameters_super_extends_test: RuntimeError
-mixin_with_two_implicit_constructors_test: MissingCompileTimeError
-named_constructor_test/01: MissingCompileTimeError
-named_constructor_test/03: MissingCompileTimeError
-named_parameters2_test: MissingCompileTimeError
-named_parameters3_test: MissingCompileTimeError
-named_parameters4_test: MissingCompileTimeError
-named_parameters_aggregated_test/05: MissingCompileTimeError
-named_parameters_test/01: MissingCompileTimeError
-named_parameters_test/02: MissingCompileTimeError
-named_parameters_test/03: MissingCompileTimeError
-named_parameters_test/04: MissingCompileTimeError
-named_parameters_test/05: MissingCompileTimeError
-named_parameters_test/06: MissingCompileTimeError
-named_parameters_test/07: MissingCompileTimeError
-named_parameters_test/08: MissingCompileTimeError
-named_parameters_test/09: MissingCompileTimeError
-named_parameters_test/10: MissingCompileTimeError
-named_parameters_type_test/01: MissingCompileTimeError
-named_parameters_type_test/02: MissingCompileTimeError
-named_parameters_type_test/03: MissingCompileTimeError
-nested_generic_closure_test: RuntimeError
-new_expression_type_args_test/00: MissingCompileTimeError
-new_expression_type_args_test/01: MissingCompileTimeError
-new_expression_type_args_test/02: MissingCompileTimeError
-new_prefix_test/01: MissingCompileTimeError
-no_such_constructor_test/01: MissingCompileTimeError
-no_such_method_mock_test: RuntimeError
-optional_named_parameters_test/01: MissingCompileTimeError
-optional_named_parameters_test/02: MissingCompileTimeError
-optional_named_parameters_test/03: MissingCompileTimeError
-optional_named_parameters_test/04: MissingCompileTimeError
-optional_named_parameters_test/05: MissingCompileTimeError
-optional_named_parameters_test/06: MissingCompileTimeError
-optional_named_parameters_test/07: MissingCompileTimeError
-optional_named_parameters_test/08: MissingCompileTimeError
-optional_named_parameters_test/09: MissingCompileTimeError
-override_field_test/02: MissingCompileTimeError
-override_field_test/03: MissingCompileTimeError
-override_inheritance_abstract_test/02: MissingCompileTimeError
-override_inheritance_abstract_test/03: MissingCompileTimeError
-override_inheritance_abstract_test/04: MissingCompileTimeError
-override_inheritance_abstract_test/08: MissingCompileTimeError
-override_inheritance_abstract_test/09: MissingCompileTimeError
-override_inheritance_abstract_test/10: MissingCompileTimeError
-override_inheritance_abstract_test/11: MissingCompileTimeError
-override_inheritance_abstract_test/12: MissingCompileTimeError
-override_inheritance_abstract_test/13: MissingCompileTimeError
-override_inheritance_abstract_test/14: MissingCompileTimeError
-override_inheritance_abstract_test/17: MissingCompileTimeError
-override_inheritance_abstract_test/19: MissingCompileTimeError
-override_inheritance_abstract_test/20: MissingCompileTimeError
-override_inheritance_abstract_test/21: MissingCompileTimeError
-override_inheritance_abstract_test/22: MissingCompileTimeError
-override_inheritance_abstract_test/23: MissingCompileTimeError
-override_inheritance_abstract_test/24: MissingCompileTimeError
-override_inheritance_abstract_test/25: MissingCompileTimeError
-override_inheritance_abstract_test/26: MissingCompileTimeError
-override_inheritance_abstract_test/28: MissingCompileTimeError
-override_inheritance_field_test/05: MissingCompileTimeError
-override_inheritance_field_test/07: MissingCompileTimeError
-override_inheritance_field_test/08: MissingCompileTimeError
-override_inheritance_field_test/09: MissingCompileTimeError
-override_inheritance_field_test/10: MissingCompileTimeError
-override_inheritance_field_test/11: MissingCompileTimeError
-override_inheritance_field_test/28: MissingCompileTimeError
-override_inheritance_field_test/30: MissingCompileTimeError
-override_inheritance_field_test/31: MissingCompileTimeError
-override_inheritance_field_test/32: MissingCompileTimeError
-override_inheritance_field_test/33: MissingCompileTimeError
-override_inheritance_field_test/33a: MissingCompileTimeError
-override_inheritance_field_test/34: MissingCompileTimeError
-override_inheritance_field_test/44: MissingCompileTimeError
-override_inheritance_field_test/47: MissingCompileTimeError
-override_inheritance_field_test/48: MissingCompileTimeError
-override_inheritance_field_test/53: MissingCompileTimeError
-override_inheritance_field_test/54: MissingCompileTimeError
-override_inheritance_generic_test/04: MissingCompileTimeError
-override_inheritance_generic_test/06: MissingCompileTimeError
-override_inheritance_generic_test/07: MissingCompileTimeError
-override_inheritance_generic_test/08: MissingCompileTimeError
-override_inheritance_generic_test/09: MissingCompileTimeError
-override_inheritance_generic_test/10: MissingCompileTimeError
-override_inheritance_method_test/04: MissingCompileTimeError
-override_inheritance_method_test/05: MissingCompileTimeError
-override_inheritance_method_test/06: MissingCompileTimeError
-override_inheritance_method_test/11: MissingCompileTimeError
-override_inheritance_method_test/12: MissingCompileTimeError
-override_inheritance_method_test/13: MissingCompileTimeError
-override_inheritance_method_test/14: MissingCompileTimeError
-override_inheritance_method_test/19: MissingCompileTimeError
-override_inheritance_method_test/20: MissingCompileTimeError
-override_inheritance_method_test/21: MissingCompileTimeError
-override_inheritance_method_test/27: MissingCompileTimeError
-override_inheritance_method_test/30: MissingCompileTimeError
-override_inheritance_method_test/31: MissingCompileTimeError
-override_inheritance_method_test/32: MissingCompileTimeError
-override_inheritance_method_test/33: MissingCompileTimeError
-override_inheritance_mixed_test/06: MissingCompileTimeError
-override_inheritance_mixed_test/07: MissingCompileTimeError
-override_inheritance_no_such_method_test/01: MissingCompileTimeError
-override_inheritance_no_such_method_test/02: MissingCompileTimeError
-override_inheritance_no_such_method_test/06: MissingCompileTimeError
-override_inheritance_no_such_method_test/07: MissingCompileTimeError
-override_inheritance_no_such_method_test/09: MissingCompileTimeError
-override_inheritance_no_such_method_test/10: MissingCompileTimeError
-override_inheritance_no_such_method_test/12: MissingCompileTimeError
-override_inheritance_no_such_method_test/13: MissingCompileTimeError
-override_method_with_field_test/02: MissingCompileTimeError
-part2_test/01: MissingCompileTimeError
-prefix16_test/00: MissingCompileTimeError
-prefix16_test/01: MissingCompileTimeError
-prefix22_test/00: MissingCompileTimeError
-prefix23_test/00: MissingCompileTimeError
-private_access_test/01: MissingCompileTimeError
-private_access_test/02: MissingCompileTimeError
-private_access_test/03: MissingCompileTimeError
-private_access_test/04: MissingCompileTimeError
-private_access_test/05: MissingCompileTimeError
-private_access_test/06: MissingCompileTimeError
-recursive_generic_test: RuntimeError
-regress_12561_test: MissingCompileTimeError
-regress_13494_test: MissingCompileTimeError
-regress_17382_test: MissingCompileTimeError
-regress_19413_test: MissingCompileTimeError
-regress_19728_test: MissingCompileTimeError
-regress_21793_test/01: MissingCompileTimeError
-regress_21912_test/01: MissingCompileTimeError
-regress_21912_test/02: MissingCompileTimeError
-regress_22438_test: MissingCompileTimeError
-regress_22936_test: MissingCompileTimeError
-regress_23089_test: MissingCompileTimeError
-regress_23408_test: RuntimeError
-regress_26133_test: MissingCompileTimeError
-regress_27572_test: MissingCompileTimeError
-regress_30516_test: CompileTimeError # Issue 30515.
-regress_31057_test: RuntimeError
-regress_31591_test: RuntimeError, OK # strong mode only
-return_type_test: MissingCompileTimeError
-rewrite_implicit_this_test/01: MissingCompileTimeError
-runtime_type_function_test: RuntimeError
-setter4_test: MissingCompileTimeError
-setter_override_test/01: MissingCompileTimeError
-setter_override_test/02: MissingCompileTimeError
-static_field1_test/01: MissingCompileTimeError
-static_field1a_test/01: MissingCompileTimeError
-static_field3_test/01: MissingCompileTimeError
-static_field3_test/02: MissingCompileTimeError
-static_field3_test/03: MissingCompileTimeError
-static_field3_test/04: MissingCompileTimeError
-static_field_test/01: MissingCompileTimeError
-static_field_test/02: MissingCompileTimeError
-static_field_test/03: MissingCompileTimeError
-static_field_test/04: MissingCompileTimeError
-static_final_field2_test/01: MissingCompileTimeError
-static_getter_no_setter1_test/01: MissingCompileTimeError
-static_getter_no_setter2_test/01: MissingCompileTimeError
-static_initializer_type_error_test: MissingCompileTimeError
-static_setter_get_test/01: MissingCompileTimeError
-string_interpolation_test/01: MissingCompileTimeError
-string_no_operator_test/01: MissingCompileTimeError
-string_no_operator_test/02: MissingCompileTimeError
-string_no_operator_test/03: MissingCompileTimeError
-string_no_operator_test/04: MissingCompileTimeError
-string_no_operator_test/05: MissingCompileTimeError
-string_no_operator_test/06: MissingCompileTimeError
-string_no_operator_test/07: MissingCompileTimeError
-string_no_operator_test/08: MissingCompileTimeError
-string_no_operator_test/09: MissingCompileTimeError
-string_no_operator_test/10: MissingCompileTimeError
-string_no_operator_test/11: MissingCompileTimeError
-string_no_operator_test/12: MissingCompileTimeError
-string_no_operator_test/13: MissingCompileTimeError
-string_no_operator_test/14: MissingCompileTimeError
-string_no_operator_test/15: MissingCompileTimeError
-string_no_operator_test/16: MissingCompileTimeError
-string_test/01: MissingCompileTimeError
-substring_test/01: MissingCompileTimeError
-super_assign_test/01: MissingCompileTimeError
-super_bound_closure_test/01: MissingCompileTimeError
-super_operator_index_test/01: MissingCompileTimeError
-super_operator_index_test/02: MissingCompileTimeError
-super_operator_index_test/03: MissingCompileTimeError
-super_operator_index_test/04: MissingCompileTimeError
-super_operator_index_test/05: MissingCompileTimeError
-super_operator_index_test/06: MissingCompileTimeError
-super_operator_index_test/07: MissingCompileTimeError
-super_test: RuntimeError
-switch_fallthru_test/01: MissingCompileTimeError
-sync_generator1_test/01: MissingCompileTimeError
-top_level_getter_no_setter1_test: MissingCompileTimeError
-top_level_getter_no_setter2_test: MissingCompileTimeError
-transitive_private_library_access_test: MissingCompileTimeError
-try_catch_on_syntax_test/07: MissingCompileTimeError
-try_catch_on_syntax_test/10: MissingCompileTimeError
-try_catch_on_syntax_test/11: MissingCompileTimeError
-try_catch_syntax_test/08: MissingCompileTimeError
-type_checks_in_factory_method_test/01: MissingCompileTimeError
-type_promotion_functions_test/01: MissingCompileTimeError
-type_promotion_functions_test/05: MissingCompileTimeError
-type_promotion_functions_test/06: MissingCompileTimeError
-type_promotion_functions_test/07: MissingCompileTimeError
-type_promotion_functions_test/08: MissingCompileTimeError
-type_promotion_functions_test/10: MissingCompileTimeError
-type_promotion_parameter_test/01: MissingCompileTimeError
-type_promotion_parameter_test/02: MissingCompileTimeError
-type_promotion_parameter_test/03: MissingCompileTimeError
-type_promotion_parameter_test/04: MissingCompileTimeError
-type_promotion_parameter_test/05: MissingCompileTimeError
-type_promotion_parameter_test/06: MissingCompileTimeError
-type_promotion_parameter_test/07: MissingCompileTimeError
-type_promotion_parameter_test/08: MissingCompileTimeError
-type_promotion_parameter_test/09: MissingCompileTimeError
-type_promotion_parameter_test/10: MissingCompileTimeError
-type_promotion_parameter_test/11: MissingCompileTimeError
-type_promotion_parameter_test/12: MissingCompileTimeError
-type_promotion_parameter_test/13: MissingCompileTimeError
-type_promotion_parameter_test/14: MissingCompileTimeError
-type_promotion_parameter_test/15: MissingCompileTimeError
-type_promotion_parameter_test/16: MissingCompileTimeError
-type_promotion_parameter_test/17: MissingCompileTimeError
-type_promotion_parameter_test/18: MissingCompileTimeError
-type_promotion_parameter_test/19: MissingCompileTimeError
-type_promotion_parameter_test/20: MissingCompileTimeError
-type_promotion_parameter_test/21: MissingCompileTimeError
-type_promotion_parameter_test/22: MissingCompileTimeError
-type_promotion_parameter_test/23: MissingCompileTimeError
-type_promotion_parameter_test/24: MissingCompileTimeError
-type_promotion_parameter_test/25: MissingCompileTimeError
-type_promotion_parameter_test/26: MissingCompileTimeError
-type_promotion_parameter_test/27: MissingCompileTimeError
-type_promotion_parameter_test/28: MissingCompileTimeError
-type_promotion_parameter_test/29: MissingCompileTimeError
-type_promotion_parameter_test/30: MissingCompileTimeError
-type_promotion_parameter_test/31: MissingCompileTimeError
-type_promotion_parameter_test/32: MissingCompileTimeError
-type_promotion_parameter_test/33: MissingCompileTimeError
-type_promotion_parameter_test/34: MissingCompileTimeError
-type_promotion_parameter_test/35: MissingCompileTimeError
-type_promotion_parameter_test/36: MissingCompileTimeError
-type_promotion_parameter_test/37: MissingCompileTimeError
-type_promotion_parameter_test/38: MissingCompileTimeError
-type_promotion_parameter_test/39: MissingCompileTimeError
-type_promotion_parameter_test/40: MissingCompileTimeError
-type_promotion_parameter_test/41: MissingCompileTimeError
-type_promotion_parameter_test/42: MissingCompileTimeError
-type_promotion_parameter_test/43: MissingCompileTimeError
-type_promotion_parameter_test/44: MissingCompileTimeError
-type_promotion_parameter_test/45: MissingCompileTimeError
-type_promotion_parameter_test/46: MissingCompileTimeError
-type_promotion_parameter_test/47: MissingCompileTimeError
-type_promotion_parameter_test/48: MissingCompileTimeError
-type_promotion_parameter_test/49: MissingCompileTimeError
-type_promotion_parameter_test/50: MissingCompileTimeError
-type_promotion_parameter_test/51: MissingCompileTimeError
-type_promotion_parameter_test/52: MissingCompileTimeError
-type_promotion_parameter_test/54: MissingCompileTimeError
-type_promotion_parameter_test/55: MissingCompileTimeError
-type_promotion_parameter_test/56: MissingCompileTimeError
-type_variable_bounds2_test: MissingCompileTimeError
-type_variable_bounds3_test/00: MissingCompileTimeError
-type_variable_bounds4_test/01: MissingCompileTimeError
-type_variable_bounds_test/00: MissingCompileTimeError
-type_variable_bounds_test/01: MissingCompileTimeError
-type_variable_bounds_test/02: MissingCompileTimeError
-type_variable_bounds_test/03: MissingCompileTimeError
-type_variable_bounds_test/04: MissingCompileTimeError
-type_variable_bounds_test/05: MissingCompileTimeError
-type_variable_bounds_test/06: MissingCompileTimeError
-type_variable_bounds_test/07: MissingCompileTimeError
-type_variable_bounds_test/08: MissingCompileTimeError
-type_variable_bounds_test/09: MissingCompileTimeError
-type_variable_bounds_test/10: MissingCompileTimeError
-type_variable_bounds_test/11: MissingCompileTimeError
-type_variable_conflict2_test/01: MissingCompileTimeError
-type_variable_conflict2_test/03: MissingCompileTimeError
-type_variable_conflict2_test/04: MissingCompileTimeError
-type_variable_conflict2_test/05: MissingCompileTimeError
-type_variable_conflict2_test/07: MissingCompileTimeError
-type_variable_conflict2_test/09: MissingCompileTimeError
-type_variable_identifier_expression_test: MissingCompileTimeError
-type_variable_nested_test/01: RuntimeError
-type_variable_promotion_test: RuntimeError
-type_variable_scope2_test: MissingCompileTimeError
-type_variable_scope_test/00: MissingCompileTimeError
-type_variable_scope_test/01: MissingCompileTimeError
-type_variable_scope_test/02: MissingCompileTimeError
-type_variable_scope_test/03: MissingCompileTimeError
-type_variable_scope_test/04: MissingCompileTimeError
-type_variable_scope_test/05: MissingCompileTimeError
-type_variable_static_context_test: MissingCompileTimeError
-typed_selector2_test: MissingCompileTimeError
-unbound_getter_test: MissingCompileTimeError
-unresolved_default_constructor_test/01: MissingCompileTimeError
-unresolved_in_factory_test: MissingCompileTimeError
-unresolved_top_level_method_test: MissingCompileTimeError
-unresolved_top_level_var_test: MissingCompileTimeError
-vm/*: SkipByDesign # Tests for the VM.
-void_block_return_test/00: MissingCompileTimeError
-wrong_number_type_arguments_test/*: MissingCompileTimeError
-
 [ $compiler != dart2js ]
 minify_closure_variable_collision_test: SkipByDesign # Regression test for dart2js
 
@@ -781,6 +27,9 @@
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 
+[ $compiler == dart2js && $runtime == d8 && !$checked && !$strong ]
+generic_list_checked_test: RuntimeError
+
 [ $compiler == dart2js && $runtime == d8 && $dart2js_with_kernel ]
 assertion_test: RuntimeError
 
@@ -1032,6 +281,7 @@
 invalid_cast_test/09: MissingCompileTimeError
 invalid_cast_test/10: MissingCompileTimeError
 invalid_cast_test/11: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
 many_generic_instanceof_test: RuntimeError
 map_literal8_test: RuntimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError # Issue 15101
@@ -1041,7 +291,9 @@
 not_enough_positional_arguments_test/03: MissingCompileTimeError
 not_enough_positional_arguments_test/06: MissingCompileTimeError
 not_enough_positional_arguments_test/07: MissingCompileTimeError
+nsm5_test: MissingCompileTimeError
 null_test/mirrors: Skip # Uses mirrors.
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 ref_before_declaration_test/00: MissingCompileTimeError
 ref_before_declaration_test/01: MissingCompileTimeError
 ref_before_declaration_test/02: MissingCompileTimeError
@@ -1273,6 +525,7 @@
 issue23244_test: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
+list_is_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 list_literal4_test/00: MissingCompileTimeError
 list_literal4_test/01: MissingCompileTimeError
@@ -1292,7 +545,6 @@
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -1392,8 +644,6 @@
 not_enough_positional_arguments_test/05: MissingCompileTimeError
 not_enough_positional_arguments_test/06: MissingCompileTimeError
 not_enough_positional_arguments_test/07: MissingCompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
@@ -1504,9 +754,9 @@
 covariance_setter_test/03: RuntimeError
 covariance_setter_test/04: RuntimeError
 covariance_setter_test/05: RuntimeError
+covariance_setter_test/06: RuntimeError
 recursive_mixin_test: RuntimeError # no check without --checked
 type_argument_in_super_type_test: RuntimeError
-type_check_const_function_typedef2_test: MissingCompileTimeError
 
 [ $compiler == dart2js && !$checked && $dart2js_with_kernel ]
 assertion_initializer_const_error2_test/*: CompileTimeError # Issue #31321
@@ -1544,7 +794,15 @@
 implicit_downcast_during_super_method_invocation_test: RuntimeError
 implicit_downcast_during_variable_declaration_test: RuntimeError
 implicit_downcast_during_while_statement_test: RuntimeError
+issue31596_implement_covariant_test: RuntimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
+issue31596_tearoff_test: RuntimeError
 issue31596_test: RuntimeError
+list_is_test: RuntimeError
+nsm5_test: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 
 [ $compiler == dart2js && !$checked && !$dart2js_with_kernel ]
 bool_check_test: RuntimeError # Issue 29647
@@ -1566,8 +824,10 @@
 forwarding_stub_tearoff_test: RuntimeError
 function_subtype_inline2_test: RuntimeError
 generic_test: RuntimeError, OK
+issue31596_implement_covariant_test: RuntimeError
 issue31596_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
+type_check_const_function_typedef2_test: MissingCompileTimeError
 
 [ $compiler == dart2js && !$checked && !$dart2js_with_kernel && $minified ]
 function_subtype_inline2_test: RuntimeError
@@ -1610,23 +870,6 @@
 instantiate_tearoff_after_contravariance_check_test: RuntimeError
 instantiate_tearoff_of_call_test: RuntimeError
 instantiate_tearoff_test: RuntimeError
-invalid_cast_test/01: MissingCompileTimeError
-invalid_cast_test/02: MissingCompileTimeError
-invalid_cast_test/03: MissingCompileTimeError
-invalid_cast_test/04: MissingCompileTimeError
-invalid_cast_test/07: MissingCompileTimeError
-invalid_cast_test/08: MissingCompileTimeError
-invalid_cast_test/09: MissingCompileTimeError
-invalid_cast_test/10: MissingCompileTimeError
-invalid_cast_test/11: MissingCompileTimeError
-library_env_test/has_no_mirror_support: Pass
-object_has_no_call_method_test/02: MissingCompileTimeError
-object_has_no_call_method_test/05: MissingCompileTimeError
-object_has_no_call_method_test/08: MissingCompileTimeError
-type_inference_accessor_ref_test/03: MissingCompileTimeError
-type_inference_accessor_ref_test/06: MissingCompileTimeError
-type_inference_circularity_test: MissingCompileTimeError
-type_inference_inconsistent_inheritance_test: MissingCompileTimeError
 
 [ $compiler == dart2js && $dart2js_with_kernel && $fast_startup && $strong ]
 assertion_initializer_const_error2_test/none: CompileTimeError
@@ -1778,6 +1021,7 @@
 duplicate_implements_test/03: MissingCompileTimeError
 duplicate_implements_test/04: MissingCompileTimeError
 dynamic_prefix_core_test/none: RuntimeError
+dynamic_test: RuntimeError
 enum_mirror_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
@@ -1845,6 +1089,8 @@
 getters_setters2_test/none: RuntimeError
 identical_closure2_test: RuntimeError
 if_null_precedence_test/none: RuntimeError
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
 infinity_test: RuntimeError
 instance_creation_in_function_annotation_test: RuntimeError
@@ -1860,6 +1106,7 @@
 issue23244_test: RuntimeError
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
+list_is_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 list_literal4_test/00: MissingCompileTimeError
 list_literal4_test/01: MissingCompileTimeError
@@ -1879,7 +1126,6 @@
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -1980,8 +1226,6 @@
 not_enough_positional_arguments_test/05: MissingCompileTimeError
 not_enough_positional_arguments_test/06: MissingCompileTimeError
 not_enough_positional_arguments_test/07: MissingCompileTimeError
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
 null_test/mirrors: RuntimeError
 null_test/none: RuntimeError
 number_identity2_test: RuntimeError
@@ -2040,194 +1284,224 @@
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
 type_literal_test: RuntimeError
+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 ]
-assertion_initializer_const_function_test/01: MissingCompileTimeError
+abstract_factory_constructor_test/00: MissingCompileTimeError
+abstract_getter_test/01: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
+abstract_syntax_test/00: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
+additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
+argument_assignability_function_typed_test/03: RuntimeError
+argument_assignability_function_typed_test/04: RuntimeError
+argument_assignability_function_typed_test/05: RuntimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_test/02: RuntimeError
+async_and_or_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).
+async_await_catch_regression_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).
+async_await_foreign_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).
+async_await_syntax_test/a01a: 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).
+async_await_syntax_test/a02a: 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).
+async_await_syntax_test/a03a: 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).
+async_await_syntax_test/a03b: 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).
+async_await_syntax_test/a05a: 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).
+async_await_syntax_test/a05b: 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).
+async_await_syntax_test/a06a: 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).
+async_await_syntax_test/a09a: 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).
+async_await_syntax_test/a11c: 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).
+async_await_syntax_test/a11d: 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).
+async_await_syntax_test/a12g: 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).
+async_await_syntax_test/b01a: 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).
+async_await_syntax_test/b02a: 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).
+async_await_syntax_test/b03a: 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).
+async_await_syntax_test/b05a: 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).
+async_await_syntax_test/b06a: 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).
+async_await_syntax_test/b09a: 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).
+async_await_syntax_test/b11c: 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).
+async_await_syntax_test/b11d: 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).
+async_await_syntax_test/b12g: 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).
+async_await_syntax_test/c01a: 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).
+async_await_syntax_test/c02a: 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).
+async_await_syntax_test/c03a: 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).
+async_await_syntax_test/c05a: 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).
+async_await_syntax_test/c06a: 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).
+async_await_syntax_test/c09a: 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).
+async_await_syntax_test/c10a: 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).
+async_await_syntax_test/d01a: 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).
+async_await_syntax_test/d02a: 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).
+async_await_syntax_test/d03a: 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).
+async_await_syntax_test/d05a: 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).
+async_await_syntax_test/d06a: 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).
+async_await_syntax_test/d08b: MissingCompileTimeError
+async_await_syntax_test/d09a: 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).
+async_await_syntax_test/d10a: 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).
+async_await_test/02: 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).
+async_await_test/03: 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).
+async_await_test/none: 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).
+async_break_in_finally_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).
+async_call_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).
+async_cascade_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).
+async_congruence_local_test/none: 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).
+async_congruence_method_test/none: 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).
+async_congruence_top_level_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).
+async_congruence_unnamed_test/none: 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).
+async_continue_label_test/await_in_body: 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).
+async_continue_label_test/await_in_condition: 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).
+async_continue_label_test/await_in_init: 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).
+async_continue_label_test/await_in_update: 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).
+async_continue_label_test/none: 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).
+async_control_structures_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).
+async_finally_rethrow_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).
+async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
+async_regression_23058_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).
+async_rethrow_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).
+async_return_types_test/nestedFuture: 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).
+async_return_types_test/none: 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).
+async_return_types_test/tooManyTypeParameters: 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).
+async_return_types_test/wrongReturnType: 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).
+async_star_await_pauses_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).
+async_star_cancel_and_throw_in_finally_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).
+async_star_cancel_while_paused_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).
+async_star_no_cancel2_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).
+async_star_no_cancel_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).
+async_star_pause_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).
+async_star_regression_2238_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).
+async_star_regression_23116_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).
+async_star_regression_fisk_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).
+async_star_stream_take_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).
+async_star_take_reyield_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).
+async_star_test/01: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_star_test/02: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_star_test/03: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_star_test/04: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_star_test/05: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_star_test/none: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+async_switch_test/none: 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).
+async_switch_test/withDefault: 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).
+async_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).
+async_this_bound_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).
+async_throw_in_catch_test/forceAwait: 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).
+async_throw_in_catch_test/none: 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).
+asyncstar_concat_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).
+asyncstar_throw_in_catch_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).
+asyncstar_yield_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).
+asyncstar_yieldstar_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).
+await_and_ifnull_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).
+await_backwards_compatibility_test/none: 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).
+await_exceptions_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).
+await_for_cancel_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).
+await_for_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).
+await_for_use_local_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).
+await_future_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).
+await_in_cascade_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).
+await_nonfuture_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).
+await_not_started_immediately_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).
+await_null_aware_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).
+await_postfix_expr_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).
+await_regression_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).
+await_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).
+bad_named_parameters2_test/01: MissingCompileTimeError
+bad_named_parameters_test/01: MissingCompileTimeError
+bad_named_parameters_test/02: MissingCompileTimeError
+bad_named_parameters_test/03: MissingCompileTimeError
+bad_named_parameters_test/04: MissingCompileTimeError
+bad_named_parameters_test/05: MissingCompileTimeError
+bad_override_test/01: MissingCompileTimeError
+bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
 bit_operations_test: RuntimeError
 bool_check_test: RuntimeError
 bool_condition_check_test: RuntimeError
+bool_test: RuntimeError
 branch_canonicalization_test: RuntimeError
 branches_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.
-call_function_apply_test: RuntimeError
-callable_test/none: RuntimeError
+call_function2_test: CompileTimeError
+call_function_apply_test: CompileTimeError
+call_function_test: CompileTimeError
+call_non_method_field_test/01: MissingCompileTimeError
+call_non_method_field_test/02: MissingCompileTimeError
+call_with_no_such_method_test: CompileTimeError
+callable_test/none: CompileTimeError
 canonical_const2_test: RuntimeError
+cha_deopt1_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).
+cha_deopt2_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).
+cha_deopt3_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).
+check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
 class_literal_static_test/01: MissingCompileTimeError
-class_literal_static_test/02: MissingCompileTimeError
 class_literal_static_test/03: MissingCompileTimeError
-class_literal_static_test/04: MissingCompileTimeError
-class_literal_static_test/05: MissingCompileTimeError
-class_literal_static_test/06: MissingCompileTimeError
 class_literal_static_test/07: MissingCompileTimeError
-class_literal_static_test/08: MissingCompileTimeError
-class_literal_static_test/09: MissingCompileTimeError
-class_literal_static_test/10: MissingCompileTimeError
-class_literal_static_test/11: MissingCompileTimeError
-class_literal_static_test/12: MissingCompileTimeError
-class_literal_static_test/13: MissingCompileTimeError
-class_literal_static_test/14: MissingCompileTimeError
-class_literal_static_test/15: MissingCompileTimeError
-class_literal_static_test/16: MissingCompileTimeError
-class_literal_static_test/17: MissingCompileTimeError
-class_literal_static_test/18: MissingCompileTimeError
-class_literal_static_test/19: MissingCompileTimeError
-class_literal_static_test/20: MissingCompileTimeError
-class_literal_static_test/21: MissingCompileTimeError
-class_literal_static_test/22: MissingCompileTimeError
-class_literal_static_test/23: MissingCompileTimeError
-class_literal_static_test/24: MissingCompileTimeError
-class_literal_static_test/25: MissingCompileTimeError
-class_override_test: MissingCompileTimeError
-closure_internals_test/01: MissingCompileTimeError
-closure_internals_test/02: MissingCompileTimeError
-closure_internals_test/03: MissingCompileTimeError
+classes_static_method_clash_test: RuntimeError
+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.
 closure_type_test: RuntimeError
+compile_time_constant_d_test: CompileTimeError
+compile_time_constant_e_test: CompileTimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
 compile_time_constant_k_test/02: MissingCompileTimeError
 compile_time_constant_k_test/03: MissingCompileTimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
-compile_time_constant_static2_test/01: MissingCompileTimeError
-compile_time_constant_static2_test/02: MissingCompileTimeError
-compile_time_constant_static2_test/03: MissingCompileTimeError
 compile_time_constant_static2_test/04: MissingCompileTimeError
-compile_time_constant_static2_test/05: MissingCompileTimeError
-compile_time_constant_static2_test/06: MissingCompileTimeError
-compile_time_constant_static3_test/01: MissingCompileTimeError
-compile_time_constant_static3_test/02: MissingCompileTimeError
-compile_time_constant_static3_test/03: MissingCompileTimeError
 compile_time_constant_static3_test/04: MissingCompileTimeError
-compile_time_constant_static3_test/05: MissingCompileTimeError
-compile_time_constant_static3_test/06: MissingCompileTimeError
-compile_time_constant_static4_test/01: MissingCompileTimeError
-compile_time_constant_static4_test/02: MissingCompileTimeError
-compile_time_constant_static4_test/03: MissingCompileTimeError
-compile_time_constant_static5_test/03: MissingCompileTimeError
-compile_time_constant_static5_test/04: MissingCompileTimeError
-compile_time_constant_static5_test/05: MissingCompileTimeError
-compile_time_constant_static5_test/06: MissingCompileTimeError
-compile_time_constant_static5_test/07: MissingCompileTimeError
-compile_time_constant_static5_test/08: MissingCompileTimeError
-compile_time_constant_static5_test/09: MissingCompileTimeError
-compile_time_constant_static5_test/10: MissingCompileTimeError
-compile_time_constant_static5_test/12: MissingCompileTimeError
-compile_time_constant_static5_test/13: MissingCompileTimeError
-compile_time_constant_static5_test/14: MissingCompileTimeError
-compile_time_constant_static5_test/15: MissingCompileTimeError
-compile_time_constant_static5_test/17: MissingCompileTimeError
-compile_time_constant_static5_test/18: MissingCompileTimeError
-compile_time_constant_static5_test/19: MissingCompileTimeError
-compile_time_constant_static5_test/20: MissingCompileTimeError
-compile_time_constant_static5_test/22: MissingCompileTimeError
-compile_time_constant_static5_test/24: MissingCompileTimeError
-compile_time_constant_static5_test/25: MissingCompileTimeError
-compile_time_constant_static_test/01: MissingCompileTimeError
-compile_time_constant_static_test/02: MissingCompileTimeError
-compile_time_constant_static_test/03: MissingCompileTimeError
-conditional_method_invocation_test/05: MissingCompileTimeError
-conditional_method_invocation_test/06: MissingCompileTimeError
-conditional_method_invocation_test/07: MissingCompileTimeError
-conditional_method_invocation_test/08: MissingCompileTimeError
-conditional_method_invocation_test/12: MissingCompileTimeError
-conditional_method_invocation_test/13: MissingCompileTimeError
-conditional_method_invocation_test/18: MissingCompileTimeError
-conditional_method_invocation_test/19: MissingCompileTimeError
-conditional_property_access_test/04: MissingCompileTimeError
-conditional_property_access_test/05: MissingCompileTimeError
-conditional_property_access_test/06: MissingCompileTimeError
-conditional_property_access_test/10: MissingCompileTimeError
-conditional_property_access_test/11: MissingCompileTimeError
-conditional_property_access_test/16: MissingCompileTimeError
-conditional_property_access_test/17: MissingCompileTimeError
-conditional_property_assignment_test/04: MissingCompileTimeError
-conditional_property_assignment_test/05: MissingCompileTimeError
-conditional_property_assignment_test/06: MissingCompileTimeError
-conditional_property_assignment_test/10: MissingCompileTimeError
-conditional_property_assignment_test/11: MissingCompileTimeError
-conditional_property_assignment_test/12: MissingCompileTimeError
-conditional_property_assignment_test/13: MissingCompileTimeError
-conditional_property_assignment_test/27: MissingCompileTimeError
-conditional_property_assignment_test/28: MissingCompileTimeError
-conditional_property_assignment_test/32: MissingCompileTimeError
-conditional_property_assignment_test/33: MissingCompileTimeError
-conditional_property_assignment_test/34: MissingCompileTimeError
-conditional_property_assignment_test/35: MissingCompileTimeError
-conditional_property_increment_decrement_test/04: MissingCompileTimeError
-conditional_property_increment_decrement_test/08: MissingCompileTimeError
-conditional_property_increment_decrement_test/12: MissingCompileTimeError
-conditional_property_increment_decrement_test/16: MissingCompileTimeError
-conditional_property_increment_decrement_test/21: MissingCompileTimeError
-conditional_property_increment_decrement_test/22: MissingCompileTimeError
-conditional_property_increment_decrement_test/27: MissingCompileTimeError
-conditional_property_increment_decrement_test/28: MissingCompileTimeError
-conditional_property_increment_decrement_test/33: MissingCompileTimeError
-conditional_property_increment_decrement_test/34: MissingCompileTimeError
-conditional_property_increment_decrement_test/39: MissingCompileTimeError
-conditional_property_increment_decrement_test/40: MissingCompileTimeError
+compile_time_constant_static5_test/11: CompileTimeError
+compile_time_constant_static5_test/16: CompileTimeError
+compile_time_constant_static5_test/21: CompileTimeError
+compile_time_constant_static5_test/23: CompileTimeError
+conditional_import_string_test: CompileTimeError
+conditional_import_test: CompileTimeError
+conditional_rewrite_test: RuntimeError
+config_import_corelib_test: CompileTimeError
 config_import_test: RuntimeError
-const_constructor2_test/05: MissingCompileTimeError
-const_constructor2_test/06: MissingCompileTimeError
-const_constructor2_test/13: MissingCompileTimeError
-const_constructor2_test/14: MissingCompileTimeError
-const_constructor2_test/15: MissingCompileTimeError
-const_constructor2_test/16: MissingCompileTimeError
-const_constructor2_test/17: MissingCompileTimeError
-const_constructor2_test/18: MissingCompileTimeError
+const_constructor2_test/11: CompileTimeError
+const_constructor2_test/12: CompileTimeError
 const_constructor2_test/20: MissingCompileTimeError
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
-const_constructor3_test/02: MissingCompileTimeError
-const_constructor3_test/04: MissingCompileTimeError
+const_constructor3_test/03: CompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test/01: CompileTimeError
 const_evaluation_test/none: CompileTimeError
 const_factory_with_body_test/01: MissingCompileTimeError
-const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
+const_list_test: RuntimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
+const_map4_test: RuntimeError
+const_redirecting_factory_test: CompileTimeError
 const_switch2_test/01: MissingCompileTimeError
 const_switch_test/02: RuntimeError
 const_switch_test/04: RuntimeError
-const_types_test/01: MissingCompileTimeError
-const_types_test/02: MissingCompileTimeError
-const_types_test/03: MissingCompileTimeError
-const_types_test/04: MissingCompileTimeError
-const_types_test/05: MissingCompileTimeError
-const_types_test/06: MissingCompileTimeError
-const_types_test/13: MissingCompileTimeError
 const_types_test/34: MissingCompileTimeError
 const_types_test/35: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
 const_types_test/40: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
-constructor_duplicate_final_test/01: MissingCompileTimeError
-constructor_duplicate_final_test/02: MissingCompileTimeError
-constructor_named_arguments_test/01: MissingCompileTimeError
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test/01: Crash # Stack Overflow
-constructor_redirect1_negative_test/none: MissingCompileTimeError
 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
+covariance_type_parameter_test/02: RuntimeError
+covariance_type_parameter_test/03: RuntimeError
 covariant_override/runtime_check_test: RuntimeError
 covariant_subtyping_tearoff1_test: RuntimeError
 covariant_subtyping_tearoff2_test: RuntimeError
@@ -2236,76 +1510,130 @@
 covariant_subtyping_unsafe_call1_test: RuntimeError
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
-crash_6725_test/01: MissingCompileTimeError
+ct_const_test: CompileTimeError
+custom_await_stack_trace_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).
 cyclic_constructor_test/01: Crash # Issue 30856
+cyclic_default_values_test: RuntimeError
+cyclic_type_variable_test/01: MissingCompileTimeError
+cyclic_type_variable_test/02: MissingCompileTimeError
+cyclic_type_variable_test/03: MissingCompileTimeError
+cyclic_type_variable_test/04: MissingCompileTimeError
+cyclic_typedef_test/10: Crash # Stack Overflow
+cyclic_typedef_test/11: Crash # Stack Overflow
+default_factory2_test/01: MissingCompileTimeError
+default_factory_test/01: MissingCompileTimeError
+deferred_closurize_load_library_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).
+deferred_constant_list_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).
 deferred_constraints_constants_test/none: CompileTimeError
 deferred_constraints_constants_test/reference_after_load: CompileTimeError
-deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
-deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
+deferred_constraints_type_annotation_test/as_operation: 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).
+deferred_constraints_type_annotation_test/catch_check: 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).
+deferred_constraints_type_annotation_test/is_check: 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).
+deferred_constraints_type_annotation_test/new: 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).
+deferred_constraints_type_annotation_test/new_before_load: 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).
+deferred_constraints_type_annotation_test/new_generic1: 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).
+deferred_constraints_type_annotation_test/new_generic2: 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).
+deferred_constraints_type_annotation_test/new_generic3: 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).
+deferred_constraints_type_annotation_test/none: 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).
+deferred_constraints_type_annotation_test/static_method: 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).
+deferred_constraints_type_annotation_test/type_annotation1: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic1: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic2: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic3: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic4: 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).
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: 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).
+deferred_constraints_type_annotation_test/type_annotation_null: 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).
+deferred_constraints_type_annotation_test/type_annotation_top_level: 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).
+deferred_function_type_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).
+deferred_global_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).
+deferred_import_core_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).
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
-deferred_load_constants_test/none: RuntimeError
-deferred_load_library_wrong_args_test/01: MissingRuntimeError
+deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deferred_inlined_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).
+deferred_load_constants_test/none: 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).
+deferred_load_inval_code_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).
+deferred_load_library_wrong_args_test/01: CompileTimeError
+deferred_load_library_wrong_args_test/none: 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).
+deferred_mixin_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).
+deferred_no_such_method_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).
 deferred_not_loaded_check_test: RuntimeError
-deferred_redirecting_factory_test: RuntimeError
-deferred_super_dependency_test/01: MissingCompileTimeError
+deferred_only_constant_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).
+deferred_optimized_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).
+deferred_redirecting_factory_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).
+deferred_regression_22995_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).
+deferred_regression_28678_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).
+deferred_shadow_load_library_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).
+deferred_shared_and_unshared_classes_test: CompileTimeError
+deferred_static_seperate_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).
+deferred_super_dependency_test/none: 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).
+deferred_type_dependency_test/as: 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).
+deferred_type_dependency_test/is: 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).
+deferred_type_dependency_test/none: 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).
+deferred_type_dependency_test/type_annotation: 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).
 double_int_to_string_test: RuntimeError
-double_to_string_as_exponential2_test/01: MissingCompileTimeError
-double_to_string_as_exponential2_test/02: MissingCompileTimeError
-double_to_string_as_exponential2_test/03: MissingCompileTimeError
-double_to_string_as_fixed2_test/01: MissingCompileTimeError
-double_to_string_as_fixed2_test/02: MissingCompileTimeError
-double_to_string_as_fixed2_test/03: MissingCompileTimeError
-double_to_string_as_precision2_test/01: MissingCompileTimeError
-double_to_string_as_precision2_test/02: MissingCompileTimeError
-double_to_string_as_precision2_test/03: MissingCompileTimeError
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
-duplicate_implements_test/03: MissingCompileTimeError
-duplicate_implements_test/04: MissingCompileTimeError
-dynamic_prefix_core_test/none: RuntimeError
+dynamic_prefix_core_test/none: CompileTimeError
+dynamic_test: RuntimeError
+emit_const_fields_test: CompileTimeError
 enum_mirror_test: CompileTimeError
-enum_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
+example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
-factory_redirection_test/07: MissingCompileTimeError
+external_test/21: CompileTimeError
+external_test/24: CompileTimeError
+extract_type_arguments_test: RuntimeError
+f_bounded_quantification_test/01: MissingCompileTimeError
+f_bounded_quantification_test/02: MissingCompileTimeError
+factory2_test/03: MissingCompileTimeError
+factory4_test/00: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
+field3_test/01: MissingCompileTimeError
 field_increment_bailout_test: CompileTimeError
+field_initialization_order_test/01: MissingCompileTimeError
+field_initialization_order_test/none: RuntimeError
+field_method4_test: MissingCompileTimeError
+field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
 field_override3_test/03: MissingCompileTimeError
 field_override4_test/02: MissingCompileTimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test/02: MissingCompileTimeError
+field_override_test/00: MissingCompileTimeError
+field_override_test/01: MissingCompileTimeError
+flatten_test/01: 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).
+flatten_test/02: 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).
+flatten_test/03: 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).
+flatten_test/04: 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).
+flatten_test/05: 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).
+flatten_test/06: 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).
+flatten_test/07: 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).
+flatten_test/08: 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).
+flatten_test/09: 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).
+flatten_test/10: 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).
+flatten_test/11: 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).
+flatten_test/12: 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).
+flatten_test/none: 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).
 full_stacktrace1_test: RuntimeError
 full_stacktrace2_test: RuntimeError
 full_stacktrace3_test: RuntimeError
+function_propagation_test: CompileTimeError
 function_subtype_bound_closure3_test: RuntimeError
 function_subtype_bound_closure4_test: RuntimeError
-function_subtype_bound_closure7_test: RuntimeError
+function_subtype_bound_closure7_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
 function_subtype_call1_test: RuntimeError
 function_subtype_call2_test: RuntimeError
 function_subtype_cast1_test: RuntimeError
 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
@@ -2324,130 +1652,146 @@
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generalized_void_syntax_test: CompileTimeError
+fuzzy_arrows_test/03: RuntimeError
+generic_async_star_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).
+generic_async_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).
 generic_closure_test/01: RuntimeError
 generic_closure_test/none: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
-generic_function_bounds_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+generic_function_bounds_test: CompileTimeError
 generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+generic_function_type_as_type_argument_test/01: MissingCompileTimeError
+generic_function_type_as_type_argument_test/02: MissingCompileTimeError
 generic_function_typedef_test/01: RuntimeError
 generic_instanceof_test: RuntimeError
-generic_list_checked_test: RuntimeError
-generic_methods_generic_function_parameter_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
-generic_methods_simple_as_expression_test/01: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
-generic_methods_simple_as_expression_test/02: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
-generic_methods_type_expression_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
+generic_method_types_test/02: RuntimeError
+generic_methods_bounds_test/01: MissingCompileTimeError
+generic_methods_bounds_test/02: MissingRuntimeError
+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_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
+generic_methods_simple_as_expression_test/02: MissingRuntimeError
+generic_methods_tearoff_specialization_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+generic_methods_type_expression_test: RuntimeError
+generic_methods_unused_parameter_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+generic_no_such_method_dispatcher_simple_test: CompileTimeError
+generic_no_such_method_dispatcher_test: CompileTimeError
 generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_test: RuntimeError
-generic_typedef_test: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
 getter_override_test/02: MissingCompileTimeError
+getter_override_test/03: MissingCompileTimeError
 getters_setters2_test/01: RuntimeError
 getters_setters2_test/none: RuntimeError
 identical_closure2_test: RuntimeError
+identical_const_test/01: MissingCompileTimeError
+identical_const_test/02: MissingCompileTimeError
+identical_const_test/03: MissingCompileTimeError
+identical_const_test/04: MissingCompileTimeError
 if_null_precedence_test/none: RuntimeError
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
+implicit_downcast_during_return_async_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).
+implicit_this_test/01: MissingCompileTimeError
+implicit_this_test/04: MissingCompileTimeError
 inferrer_synthesized_constructor_test: RuntimeError
 infinity_test: RuntimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: CompileTimeError
 instanceof2_test: RuntimeError
-instanceof4_test/01: RuntimeError
-instanceof4_test/none: RuntimeError
+instantiate_tearoff_after_contravariance_check_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+instantiate_tearoff_of_call_test: CompileTimeError
+instantiate_tearoff_test: Crash # Assertion failure: kind=special,memberName=instantiate,callStructure:CallStructure(arity=0, types=1)
+instantiate_type_variable_test/01: CompileTimeError
+int64_literal_test/01: RuntimeError
+int64_literal_test/02: RuntimeError
+int64_literal_test/03: MissingCompileTimeError
+int64_literal_test/04: RuntimeError
+int64_literal_test/05: RuntimeError
+int64_literal_test/10: RuntimeError
+int64_literal_test/20: RuntimeError
+int64_literal_test/30: MissingCompileTimeError
+int64_literal_test/40: RuntimeError
+int64_literal_test/none: RuntimeError
 integer_division_by_zero_test: RuntimeError
-interface_test/00: Crash # 'package:front_end/src/fasta/kernel/body_builder.dart': Failed assertion: line 2218 pos 14: '!target.enclosingClass.isAbstract': is not true.
 internal_library_test/02: Crash # type 'DillLibraryBuilder' is not a subtype of type 'SourceLibraryBuilder<KernelTypeBuilder, Library>' of 'value' where
 invocation_mirror2_test: CompileTimeError
 invocation_mirror_invoke_on2_test: CompileTimeError
 invocation_mirror_invoke_on_test: CompileTimeError
-is_malformed_type_test/94: MissingCompileTimeError
-is_malformed_type_test/95: MissingCompileTimeError
-is_malformed_type_test/96: MissingCompileTimeError
-is_malformed_type_test/97: MissingCompileTimeError
-is_malformed_type_test/98: MissingCompileTimeError
-is_malformed_type_test/99: MissingCompileTimeError
-is_not_class2_test/01: MissingCompileTimeError
-isnot_malformed_type_test/01: MissingCompileTimeError
-issue11724_test/01: MissingCompileTimeError
-issue1363_test/01: MissingCompileTimeError
-issue15606_test/01: MissingCompileTimeError
-issue18628_1_test/01: MissingCompileTimeError
+invocation_mirror_test: CompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: CompileTimeError
-issue23244_test: RuntimeError
-known_identifier_prefix_error_test/01: MissingCompileTimeError
-known_identifier_prefix_error_test/02: MissingCompileTimeError
-known_identifier_prefix_error_test/03: MissingCompileTimeError
-known_identifier_prefix_error_test/04: MissingCompileTimeError
-known_identifier_prefix_error_test/05: MissingCompileTimeError
-known_identifier_prefix_error_test/06: MissingCompileTimeError
-known_identifier_prefix_error_test/07: MissingCompileTimeError
-known_identifier_prefix_error_test/08: MissingCompileTimeError
-known_identifier_prefix_error_test/09: MissingCompileTimeError
-known_identifier_prefix_error_test/10: MissingCompileTimeError
-known_identifier_prefix_error_test/11: MissingCompileTimeError
-known_identifier_prefix_error_test/12: MissingCompileTimeError
-known_identifier_prefix_error_test/13: MissingCompileTimeError
-known_identifier_prefix_error_test/14: MissingCompileTimeError
-known_identifier_prefix_error_test/15: MissingCompileTimeError
-known_identifier_prefix_error_test/16: MissingCompileTimeError
-known_identifier_prefix_error_test/17: MissingCompileTimeError
-known_identifier_prefix_error_test/18: MissingCompileTimeError
-known_identifier_prefix_error_test/19: MissingCompileTimeError
-known_identifier_prefix_error_test/20: MissingCompileTimeError
-known_identifier_prefix_error_test/21: MissingCompileTimeError
-known_identifier_prefix_error_test/22: MissingCompileTimeError
-known_identifier_prefix_error_test/23: MissingCompileTimeError
-known_identifier_prefix_error_test/24: MissingCompileTimeError
+issue23244_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).
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue_1751477_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).
+issue_25671a_test/01: CompileTimeError
+issue_25671b_test/01: CompileTimeError
+known_identifier_usage_error_test/none: 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).
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
-list_literal1_test/01: MissingCompileTimeError
-list_literal4_test/00: MissingCompileTimeError
-list_literal4_test/01: MissingCompileTimeError
-list_literal4_test/03: MissingCompileTimeError
-list_literal4_test/04: MissingCompileTimeError
-list_literal4_test/05: MissingCompileTimeError
-list_literal_syntax_test/01: MissingCompileTimeError
-list_literal_syntax_test/02: MissingCompileTimeError
-list_literal_syntax_test/03: MissingCompileTimeError
-malformed2_test/00: MissingCompileTimeError
+library_env_test/has_no_html_support: RuntimeError
+library_env_test/has_no_io_support: RuntimeError
+library_prefixes_test: CompileTimeError
+list_is_test: RuntimeError
+local_function2_test/none: RuntimeError
+local_function3_test/none: RuntimeError
+local_function_test/01: MissingCompileTimeError
+local_function_test/02: MissingCompileTimeError
+local_function_test/none: RuntimeError
+main_test/03: RuntimeError
+malbounded_instantiation_test/01: MissingCompileTimeError
+malbounded_instantiation_test/02: MissingCompileTimeError
+malbounded_instantiation_test/03: MissingCompileTimeError
+malbounded_redirecting_factory_test/02: MissingCompileTimeError
+malbounded_redirecting_factory_test/03: MissingCompileTimeError
+malbounded_redirecting_factory_test/04: MissingCompileTimeError
+malbounded_redirecting_factory_test/05: MissingCompileTimeError
+malbounded_type_cast2_test: MissingCompileTimeError
+malbounded_type_cast_test/00: MissingCompileTimeError
+malbounded_type_cast_test/01: MissingCompileTimeError
+malbounded_type_cast_test/02: MissingCompileTimeError
+malbounded_type_cast_test/none: RuntimeError
+malbounded_type_literal_test/00: MissingCompileTimeError
+malbounded_type_test2_test/00: MissingCompileTimeError
+malbounded_type_test_test/00: MissingCompileTimeError
+malbounded_type_test_test/01: MissingCompileTimeError
+malbounded_type_test_test/02: MissingCompileTimeError
+malbounded_type_test_test/none: RuntimeError
 many_generic_instanceof_test: RuntimeError
 many_overridden_no_such_method_test: CompileTimeError
 map_literal11_test/none: MissingRuntimeError
-map_literal1_test/01: MissingCompileTimeError
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
 map_literal3_test/03: MissingCompileTimeError
-map_literal3_test/04: MissingCompileTimeError
-map_literal4_test/01: MissingCompileTimeError
-map_literal4_test/02: MissingCompileTimeError
-map_literal4_test/03: MissingCompileTimeError
-map_literal4_test/04: MissingCompileTimeError
-map_literal4_test/05: MissingCompileTimeError
-map_literal4_test/06: MissingCompileTimeError
 map_literal7_test: RuntimeError
-map_literal8_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
 method_override7_test/01: MissingCompileTimeError
 method_override7_test/02: MissingCompileTimeError
+method_override7_test/03: MissingCompileTimeError
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
+method_override8_test/03: MissingCompileTimeError
+method_override_test: CompileTimeError
+minify_closure_variable_collision_test: CompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
 mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
 mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
 mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
 mixin_illegal_super_use_test/10: MissingCompileTimeError
 mixin_illegal_super_use_test/11: MissingCompileTimeError
 mixin_illegal_superclass_test/01: MissingCompileTimeError
@@ -2480,6 +1824,29 @@
 mixin_illegal_superclass_test/28: MissingCompileTimeError
 mixin_illegal_superclass_test/29: MissingCompileTimeError
 mixin_illegal_superclass_test/30: MissingCompileTimeError
+mixin_invalid_bound2_test/02: MissingCompileTimeError
+mixin_invalid_bound2_test/03: MissingCompileTimeError
+mixin_invalid_bound2_test/04: MissingCompileTimeError
+mixin_invalid_bound2_test/05: MissingCompileTimeError
+mixin_invalid_bound2_test/06: MissingCompileTimeError
+mixin_invalid_bound2_test/07: MissingCompileTimeError
+mixin_invalid_bound2_test/08: MissingCompileTimeError
+mixin_invalid_bound2_test/09: MissingCompileTimeError
+mixin_invalid_bound2_test/10: MissingCompileTimeError
+mixin_invalid_bound2_test/11: MissingCompileTimeError
+mixin_invalid_bound2_test/12: MissingCompileTimeError
+mixin_invalid_bound2_test/13: MissingCompileTimeError
+mixin_invalid_bound2_test/14: MissingCompileTimeError
+mixin_invalid_bound2_test/15: MissingCompileTimeError
+mixin_invalid_bound_test/02: MissingCompileTimeError
+mixin_invalid_bound_test/03: MissingCompileTimeError
+mixin_invalid_bound_test/04: MissingCompileTimeError
+mixin_invalid_bound_test/05: MissingCompileTimeError
+mixin_invalid_bound_test/06: MissingCompileTimeError
+mixin_invalid_bound_test/07: MissingCompileTimeError
+mixin_invalid_bound_test/08: MissingCompileTimeError
+mixin_invalid_bound_test/09: MissingCompileTimeError
+mixin_invalid_bound_test/10: MissingCompileTimeError
 mixin_issue10216_2_test: RuntimeError
 mixin_mixin2_test: RuntimeError
 mixin_mixin3_test: RuntimeError
@@ -2493,6 +1860,8 @@
 mixin_mixin_type_arguments_test: RuntimeError
 mixin_of_mixin_test/none: CompileTimeError
 mixin_super_2_test/none: CompileTimeError
+mixin_super_bound_test/01: MissingCompileTimeError
+mixin_super_bound_test/02: MissingCompileTimeError
 mixin_super_constructor_named_test/01: MissingCompileTimeError
 mixin_super_constructor_positionals_test/01: MissingCompileTimeError
 mixin_super_test: CompileTimeError
@@ -2516,6 +1885,18 @@
 mixin_supertype_subclass4_test/04: CompileTimeError
 mixin_supertype_subclass4_test/05: CompileTimeError
 mixin_supertype_subclass4_test/none: CompileTimeError
+mixin_supertype_subclass_test/01: CompileTimeError
+mixin_supertype_subclass_test/03: CompileTimeError
+mixin_supertype_subclass_test/04: CompileTimeError
+mixin_supertype_subclass_test/none: CompileTimeError
+mixin_type_parameters_errors_test/01: MissingCompileTimeError
+mixin_type_parameters_errors_test/02: MissingCompileTimeError
+mixin_type_parameters_errors_test/03: MissingCompileTimeError
+mixin_type_parameters_errors_test/04: MissingCompileTimeError
+mixin_type_parameters_errors_test/05: MissingCompileTimeError
+mixin_type_parameters_mixin_extends_test: RuntimeError
+mixin_type_parameters_mixin_test: RuntimeError
+mixin_type_parameters_super_extends_test: RuntimeError
 mixin_type_parameters_super_test: RuntimeError
 modulo_test: RuntimeError
 multiline_newline_test/04: MissingCompileTimeError
@@ -2524,55 +1905,94 @@
 multiline_newline_test/05r: MissingCompileTimeError
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
+named_constructor_test/01: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
+named_parameters_test/02: MissingCompileTimeError
+named_parameters_test/04: MissingCompileTimeError
+named_parameters_test/06: MissingCompileTimeError
+named_parameters_test/08: MissingCompileTimeError
+named_parameters_test/10: MissingCompileTimeError
 nan_identical_test: RuntimeError
-nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
+nested_generic_closure_test: RuntimeError
 no_main_test/01: CompileTimeError
+no_such_method_mock_test: RuntimeError
 no_such_method_test: CompileTimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/02: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
-not_enough_positional_arguments_test/00: MissingCompileTimeError
-not_enough_positional_arguments_test/01: MissingCompileTimeError
-not_enough_positional_arguments_test/02: MissingCompileTimeError
-not_enough_positional_arguments_test/03: MissingCompileTimeError
-not_enough_positional_arguments_test/05: MissingCompileTimeError
-not_enough_positional_arguments_test/06: MissingCompileTimeError
-not_enough_positional_arguments_test/07: MissingCompileTimeError
+null_no_such_method_test: CompileTimeError
 null_test/mirrors: CompileTimeError
 null_test/none: CompileTimeError
-number_identifier_test/05: MissingCompileTimeError
-number_identifier_test/08: MissingCompileTimeError
-number_identifier_test/09: MissingCompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
-on_catch_malformed_type_test: MissingCompileTimeError
-operator5_test: MissingCompileTimeError
-operator_equals_test: MissingCompileTimeError
+operator4_test: RuntimeError
 operator_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.
-optimized_constant_array_string_access_test: MissingCompileTimeError
+optional_named_parameters_test/02: MissingCompileTimeError
+optional_named_parameters_test/04: MissingCompileTimeError
+optional_named_parameters_test/06: MissingCompileTimeError
+optional_named_parameters_test/08: MissingCompileTimeError
 overridden_no_such_method_test: CompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
 override_field_method5_negative_test: Fail
 override_field_test/01: MissingCompileTimeError
+override_field_test/02: MissingCompileTimeError
+override_field_test/03: MissingCompileTimeError
+override_inheritance_abstract_test/02: MissingCompileTimeError
+override_inheritance_abstract_test/03: MissingCompileTimeError
+override_inheritance_abstract_test/04: MissingCompileTimeError
+override_inheritance_abstract_test/08: MissingCompileTimeError
+override_inheritance_abstract_test/09: MissingCompileTimeError
+override_inheritance_abstract_test/10: MissingCompileTimeError
+override_inheritance_abstract_test/11: MissingCompileTimeError
+override_inheritance_abstract_test/12: MissingCompileTimeError
+override_inheritance_abstract_test/13: MissingCompileTimeError
+override_inheritance_abstract_test/14: MissingCompileTimeError
+override_inheritance_abstract_test/17: MissingCompileTimeError
+override_inheritance_abstract_test/19: MissingCompileTimeError
+override_inheritance_abstract_test/20: MissingCompileTimeError
+override_inheritance_abstract_test/21: MissingCompileTimeError
+override_inheritance_abstract_test/22: MissingCompileTimeError
+override_inheritance_abstract_test/23: MissingCompileTimeError
+override_inheritance_abstract_test/24: MissingCompileTimeError
+override_inheritance_abstract_test/25: MissingCompileTimeError
+override_inheritance_abstract_test/26: MissingCompileTimeError
+override_inheritance_field_test/04: CompileTimeError
+override_inheritance_field_test/06: CompileTimeError
+override_inheritance_field_test/26: CompileTimeError
+override_inheritance_field_test/29: CompileTimeError
+override_inheritance_field_test/44: MissingCompileTimeError
+override_inheritance_field_test/47: MissingCompileTimeError
+override_inheritance_field_test/48: MissingCompileTimeError
+override_inheritance_field_test/53: MissingCompileTimeError
+override_inheritance_field_test/54: MissingCompileTimeError
+override_inheritance_generic_test/02: CompileTimeError
+override_inheritance_method_test/17: CompileTimeError
+override_inheritance_method_test/18: CompileTimeError
+override_inheritance_method_test/28: CompileTimeError
+override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/01: MissingCompileTimeError
 override_inheritance_mixed_test/02: MissingCompileTimeError
 override_inheritance_mixed_test/03: MissingCompileTimeError
 override_inheritance_mixed_test/04: MissingCompileTimeError
+override_inheritance_mixed_test/06: MissingCompileTimeError
+override_inheritance_mixed_test/07: MissingCompileTimeError
 override_inheritance_mixed_test/08: MissingCompileTimeError
 override_inheritance_mixed_test/09: MissingCompileTimeError
+override_inheritance_no_such_method_test/01: MissingCompileTimeError
+override_inheritance_no_such_method_test/02: MissingCompileTimeError
+override_inheritance_no_such_method_test/06: MissingCompileTimeError
+override_inheritance_no_such_method_test/07: MissingCompileTimeError
+override_inheritance_no_such_method_test/09: MissingCompileTimeError
+override_inheritance_no_such_method_test/10: MissingCompileTimeError
+override_inheritance_no_such_method_test/12: MissingCompileTimeError
+override_inheritance_no_such_method_test/13: MissingCompileTimeError
 override_method_with_field_test/01: MissingCompileTimeError
-positional_parameters_type_test/01: MissingCompileTimeError
-positional_parameters_type_test/02: 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.
-private_super_constructor_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_default_values_test/03: MissingCompileTimeError
-redirecting_factory_incompatible_signature_test/01: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
@@ -2580,34 +2000,82 @@
 regress_13462_0_test: CompileTimeError
 regress_13462_1_test: CompileTimeError
 regress_18535_test: CompileTimeError
-regress_20394_test/01: MissingCompileTimeError
-regress_23408_test: Crash # Assertion failure: Missing scope info for j:method(_loadLibraryWrapper).
+regress_22443_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).
+regress_22445_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).
+regress_22579_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).
+regress_22728_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).
+regress_22777_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).
+regress_23089_test: Crash # Stack Overflow
+regress_23408_test: CompileTimeError
+regress_23498_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).
+regress_23500_test/01: 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).
+regress_23500_test/02: 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).
+regress_23500_test/none: 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).
+regress_23650_test: RuntimeError
+regress_23996_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).
 regress_24283_test: RuntimeError
+regress_24935_test/01: 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).
+regress_24935_test/none: 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).
+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).
+regress_26668_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).
+regress_26948_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).
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28217_test/01: MissingCompileTimeError
-regress_28217_test/none: MissingCompileTimeError
+regress_27659_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).
 regress_28255_test: CompileTimeError
-regress_28341_test: RuntimeError
+regress_28278_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).
+regress_29025_test: CompileTimeError
+regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ok).
 regress_29784_test/02: MissingCompileTimeError # Issue 29784
-regress_31057_test: Crash # Unsupported operation: Unsupported type parameter type node B.
+regress_30339_test: CompileTimeError
+regress_31591_test: RuntimeError
+runtime_type_function_test: RuntimeError
+setter4_test: MissingCompileTimeError
+setter_no_getter_call_test/01: CompileTimeError
+setter_no_getter_test/01: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
+setter_override_test/01: MissingCompileTimeError
+setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
+shadow_parameter_and_local_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).
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/none: RuntimeError
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError
 stacktrace_rethrow_nonerror_test: RuntimeError
 stacktrace_test: RuntimeError # Issue 12698
+string_interpolate_test: CompileTimeError
+string_interpolation_and_buffer_test: RuntimeError
+string_split_test: CompileTimeError
+string_supertype_checked_test: CompileTimeError
+super_bound_closure_test/none: CompileTimeError
 super_call4_test: CompileTimeError
 super_getter_setter_test: CompileTimeError
+super_in_async1_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).
+super_in_async2_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).
+super_in_async3_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).
+super_in_async4_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).
+super_in_async5_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).
+super_in_async6_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).
+super_no_such_method1_test: CompileTimeError
+super_no_such_method2_test: CompileTimeError
+super_no_such_method3_test: CompileTimeError
+super_no_such_method4_test: CompileTimeError
+super_no_such_method5_test: CompileTimeError
+super_operator_index5_test: CompileTimeError
+super_operator_index6_test: CompileTimeError
+super_operator_index7_test: CompileTimeError
+super_operator_index8_test: CompileTimeError
+super_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
-symbol_literal_test/01: MissingCompileTimeError
 sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
+sync_generator2_test/none: 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).
+syncstar_yieldstar_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).
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
@@ -2617,113 +2085,69 @@
 tearoff_dynamic_test: RuntimeError
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
+type_error_test: RuntimeError
 type_literal_prefix_call_test/00: MissingCompileTimeError
 type_literal_test: RuntimeError
-type_parameter_test/01: MissingCompileTimeError
-type_parameter_test/02: MissingCompileTimeError
-type_parameter_test/03: MissingCompileTimeError
-type_parameter_test/04: MissingCompileTimeError
-type_parameter_test/05: MissingCompileTimeError
-type_parameter_test/06: MissingCompileTimeError
-type_parameter_test/07: MissingCompileTimeError
-type_parameter_test/08: MissingCompileTimeError
-type_parameter_test/09: MissingCompileTimeError
-type_promotion_assign_test/01: MissingCompileTimeError
-type_promotion_assign_test/02: MissingCompileTimeError
-type_promotion_assign_test/03: MissingCompileTimeError
-type_promotion_assign_test/04: MissingCompileTimeError
-type_promotion_closure_test/01: MissingCompileTimeError
-type_promotion_closure_test/02: MissingCompileTimeError
-type_promotion_closure_test/03: MissingCompileTimeError
-type_promotion_closure_test/04: MissingCompileTimeError
-type_promotion_closure_test/06: MissingCompileTimeError
-type_promotion_closure_test/07: MissingCompileTimeError
-type_promotion_closure_test/09: MissingCompileTimeError
-type_promotion_closure_test/10: MissingCompileTimeError
-type_promotion_closure_test/11: MissingCompileTimeError
-type_promotion_closure_test/12: MissingCompileTimeError
-type_promotion_closure_test/13: MissingCompileTimeError
-type_promotion_closure_test/14: MissingCompileTimeError
-type_promotion_closure_test/15: MissingCompileTimeError
-type_promotion_closure_test/16: MissingCompileTimeError
-type_promotion_local_test/01: MissingCompileTimeError
-type_promotion_local_test/02: MissingCompileTimeError
-type_promotion_local_test/03: MissingCompileTimeError
-type_promotion_local_test/04: MissingCompileTimeError
-type_promotion_local_test/05: MissingCompileTimeError
-type_promotion_local_test/06: MissingCompileTimeError
-type_promotion_local_test/07: MissingCompileTimeError
-type_promotion_local_test/08: MissingCompileTimeError
-type_promotion_local_test/09: MissingCompileTimeError
-type_promotion_local_test/10: MissingCompileTimeError
-type_promotion_local_test/11: MissingCompileTimeError
-type_promotion_local_test/12: MissingCompileTimeError
-type_promotion_local_test/13: MissingCompileTimeError
-type_promotion_local_test/14: MissingCompileTimeError
-type_promotion_local_test/15: MissingCompileTimeError
-type_promotion_local_test/16: MissingCompileTimeError
-type_promotion_local_test/17: MissingCompileTimeError
-type_promotion_local_test/18: MissingCompileTimeError
-type_promotion_local_test/19: MissingCompileTimeError
-type_promotion_local_test/20: MissingCompileTimeError
-type_promotion_local_test/21: MissingCompileTimeError
-type_promotion_local_test/22: MissingCompileTimeError
-type_promotion_local_test/23: MissingCompileTimeError
-type_promotion_local_test/24: MissingCompileTimeError
-type_promotion_local_test/25: MissingCompileTimeError
-type_promotion_local_test/26: MissingCompileTimeError
-type_promotion_local_test/27: MissingCompileTimeError
-type_promotion_local_test/28: MissingCompileTimeError
-type_promotion_local_test/29: MissingCompileTimeError
-type_promotion_local_test/30: MissingCompileTimeError
-type_promotion_local_test/31: MissingCompileTimeError
-type_promotion_local_test/32: MissingCompileTimeError
-type_promotion_local_test/33: MissingCompileTimeError
-type_promotion_local_test/34: MissingCompileTimeError
-type_promotion_local_test/35: MissingCompileTimeError
-type_promotion_local_test/36: MissingCompileTimeError
-type_promotion_local_test/37: MissingCompileTimeError
-type_promotion_local_test/38: MissingCompileTimeError
-type_promotion_local_test/39: MissingCompileTimeError
-type_promotion_local_test/40: MissingCompileTimeError
-type_promotion_local_test/41: MissingCompileTimeError
+type_parameter_test/none: RuntimeError
+type_promotion_functions_test/02: CompileTimeError
+type_promotion_functions_test/03: CompileTimeError
+type_promotion_functions_test/04: CompileTimeError
+type_promotion_functions_test/09: CompileTimeError
+type_promotion_functions_test/11: CompileTimeError
+type_promotion_functions_test/12: CompileTimeError
+type_promotion_functions_test/13: CompileTimeError
+type_promotion_functions_test/14: CompileTimeError
+type_promotion_functions_test/none: CompileTimeError
 type_promotion_logical_and_test/01: MissingCompileTimeError
-type_promotion_logical_and_test/02: MissingCompileTimeError
-type_promotion_logical_and_test/03: MissingCompileTimeError
-type_promotion_more_specific_test/02: MissingCompileTimeError
-type_promotion_more_specific_test/06: MissingCompileTimeError
-type_promotion_more_specific_test/07: MissingCompileTimeError
-type_promotion_more_specific_test/09: MissingCompileTimeError
-type_promotion_multiple_test/01: MissingCompileTimeError
-type_promotion_multiple_test/02: MissingCompileTimeError
-type_promotion_multiple_test/03: MissingCompileTimeError
-type_promotion_multiple_test/04: MissingCompileTimeError
-type_promotion_multiple_test/05: MissingCompileTimeError
-type_promotion_multiple_test/06: MissingCompileTimeError
-type_promotion_multiple_test/07: MissingCompileTimeError
-type_promotion_multiple_test/08: MissingCompileTimeError
-type_promotion_multiple_test/09: MissingCompileTimeError
-type_promotion_multiple_test/10: MissingCompileTimeError
-type_promotion_multiple_test/11: MissingCompileTimeError
-type_promotion_multiple_test/12: MissingCompileTimeError
-type_promotion_multiple_test/13: MissingCompileTimeError
-type_promotion_multiple_test/14: MissingCompileTimeError
-type_promotion_multiple_test/15: MissingCompileTimeError
-type_promotion_multiple_test/16: MissingCompileTimeError
-type_promotion_multiple_test/17: MissingCompileTimeError
-type_promotion_multiple_test/18: MissingCompileTimeError
-type_promotion_multiple_test/19: MissingCompileTimeError
-type_promotion_multiple_test/20: MissingCompileTimeError
-type_promotion_multiple_test/21: MissingCompileTimeError
-type_promotion_multiple_test/22: MissingCompileTimeError
+type_promotion_more_specific_test/04: CompileTimeError
+type_variable_bounds2_test: MissingCompileTimeError
+type_variable_bounds3_test/00: MissingCompileTimeError
+type_variable_bounds4_test/01: MissingCompileTimeError
+type_variable_bounds_test/01: MissingCompileTimeError
+type_variable_bounds_test/02: Crash # NoSuchMethodError: The method 'accept' was called on null.
+type_variable_bounds_test/03: MissingCompileTimeError
+type_variable_bounds_test/04: MissingCompileTimeError
+type_variable_bounds_test/05: MissingCompileTimeError
+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
 typevariable_substitution2_test/02: RuntimeError
-void_type_callbacks_test/none: CompileTimeError
-void_type_function_types_test/none: CompileTimeError
-void_type_override_test/none: CompileTimeError
-void_type_usage_test/call_as: CompileTimeError
-void_type_usage_test/call_for: CompileTimeError
-void_type_usage_test/call_return_to_void: CompileTimeError
-void_type_usage_test/call_stmt: CompileTimeError
+unused_overridden_async_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/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)].
+vm/causal_async_exception_stack_test: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
+vm/debug_break_enabled_vm_test/01: CompileTimeError
+vm/debug_break_enabled_vm_test/none: CompileTimeError
+vm/integer_type_propagation_test: RuntimeError
+vm/math_vm_test: RuntimeError
+vm/no_such_args_error_message_vm_test: RuntimeError
+vm/no_such_method_error_message_callable_vm_test: RuntimeError
+vm/no_such_method_error_message_vm_test: RuntimeError
+vm/optimization_test: RuntimeError
+vm/optimized_await_regress_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/optimized_guarded_field_isolates_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/optimized_list_constructor_test: RuntimeError
+vm/reflect_core_vm_test: CompileTimeError
+vm/regress_22480_test: RuntimeError
+vm/regress_23238_test: RuntimeError
+vm/regress_27201_test: CompileTimeError
+vm/regress_28325_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/regress_29145_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/store_to_load_forwarding_phis_vm_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/type_cast_vm_test: RuntimeError
+vm/type_vm_test/28: MissingRuntimeError
+vm/type_vm_test/30: MissingRuntimeError
+vm/type_vm_test/31: MissingRuntimeError
+vm/type_vm_test/32: MissingRuntimeError
+vm/uint32_right_shift_test: RuntimeError
+vm/uint32_shift_test: RuntimeError
+vm/unaligned_integer_access_literal_index_test: RuntimeError
+vm/unaligned_integer_access_register_index_test: RuntimeError
+void_block_return_test/00: MissingCompileTimeError
 void_type_usage_test/conditional2_argument: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_conditional: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_dynamic_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -2734,7 +2158,7 @@
 void_type_usage_test/conditional2_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/conditional2_return_to_void: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 192 pos 12: 'false': is not true.
+void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional2_stmt: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_throw: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional2_void_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
@@ -2751,245 +2175,235 @@
 void_type_usage_test/conditional3_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_parens: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_return: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/conditional3_return_to_void: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 192 pos 12: 'false': is not true.
+void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional3_stmt: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_throw: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional3_void_init: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional_do_while: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 void_type_usage_test/conditional_for_in: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
+void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 void_type_usage_test/conditional_while: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/field_assign: CompileTimeError
-void_type_usage_test/field_assign2: CompileTimeError
-void_type_usage_test/final_local_as: CompileTimeError
-void_type_usage_test/final_local_for: CompileTimeError
-void_type_usage_test/final_local_return_to_void: CompileTimeError
-void_type_usage_test/final_local_stmt: CompileTimeError
-void_type_usage_test/global_as: CompileTimeError
-void_type_usage_test/global_for: CompileTimeError
-void_type_usage_test/global_for_in2: CompileTimeError
 void_type_usage_test/global_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/global_return_to_void: CompileTimeError
-void_type_usage_test/global_stmt: CompileTimeError
-void_type_usage_test/instance2_as: CompileTimeError
-void_type_usage_test/instance2_for: CompileTimeError
-void_type_usage_test/instance2_for_in3: CompileTimeError
-void_type_usage_test/instance2_return_to_void: CompileTimeError
-void_type_usage_test/instance2_stmt: CompileTimeError
-void_type_usage_test/instance3_as: CompileTimeError
-void_type_usage_test/instance3_for: CompileTimeError
-void_type_usage_test/instance3_for_in3: CompileTimeError
-void_type_usage_test/instance3_return_to_void: CompileTimeError
-void_type_usage_test/instance3_stmt: CompileTimeError
-void_type_usage_test/instance_as: CompileTimeError
-void_type_usage_test/instance_for: CompileTimeError
-void_type_usage_test/instance_return_to_void: CompileTimeError
-void_type_usage_test/instance_stmt: CompileTimeError
-void_type_usage_test/local_as: CompileTimeError
-void_type_usage_test/local_assign: CompileTimeError
-void_type_usage_test/local_for: CompileTimeError
-void_type_usage_test/local_for_in2: CompileTimeError
 void_type_usage_test/local_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/local_return_to_void: CompileTimeError
-void_type_usage_test/local_stmt: CompileTimeError
-void_type_usage_test/none: CompileTimeError
-void_type_usage_test/param_as: CompileTimeError
-void_type_usage_test/param_for: CompileTimeError
-void_type_usage_test/param_for_in2: CompileTimeError
 void_type_usage_test/param_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/param_return_to_void: CompileTimeError
-void_type_usage_test/param_stmt: CompileTimeError
-void_type_usage_test/paren_as: CompileTimeError
-void_type_usage_test/paren_for: CompileTimeError
 void_type_usage_test/paren_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
-void_type_usage_test/paren_return_to_void: CompileTimeError
-void_type_usage_test/paren_stmt: CompileTimeError
-void_type_usage_test/setter_assign: CompileTimeError
+wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
+yieldstar_pause_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).
 
 [ $compiler == dart2js && $dart2js_with_kernel && $host_checked && !$strong ]
 *: SkipByDesign
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && $strong ]
-assertion_initializer_const_function_test/01: MissingCompileTimeError
+abstract_factory_constructor_test/00: MissingCompileTimeError
+abstract_getter_test/01: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
+abstract_syntax_test/00: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
+additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
+argument_assignability_function_typed_test/03: RuntimeError
+argument_assignability_function_typed_test/04: RuntimeError
+argument_assignability_function_typed_test/05: RuntimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_star_cancel_while_paused_test: RuntimeError
-async_star_test/02: RuntimeError
+async_and_or_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).
+async_await_catch_regression_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).
+async_await_foreign_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).
+async_await_syntax_test/a01a: 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).
+async_await_syntax_test/a02a: 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).
+async_await_syntax_test/a03a: 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).
+async_await_syntax_test/a03b: 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).
+async_await_syntax_test/a05a: 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).
+async_await_syntax_test/a05b: 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).
+async_await_syntax_test/a06a: 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).
+async_await_syntax_test/a09a: 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).
+async_await_syntax_test/a11c: 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).
+async_await_syntax_test/a11d: 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).
+async_await_syntax_test/a12g: 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).
+async_await_syntax_test/b01a: 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).
+async_await_syntax_test/b02a: 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).
+async_await_syntax_test/b03a: 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).
+async_await_syntax_test/b05a: 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).
+async_await_syntax_test/b06a: 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).
+async_await_syntax_test/b09a: 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).
+async_await_syntax_test/b11c: 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).
+async_await_syntax_test/b11d: 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).
+async_await_syntax_test/b12g: 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).
+async_await_syntax_test/c01a: 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).
+async_await_syntax_test/c02a: 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).
+async_await_syntax_test/c03a: 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).
+async_await_syntax_test/c05a: 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).
+async_await_syntax_test/c06a: 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).
+async_await_syntax_test/c09a: 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).
+async_await_syntax_test/c10a: 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).
+async_await_syntax_test/d01a: 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).
+async_await_syntax_test/d02a: 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).
+async_await_syntax_test/d03a: 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).
+async_await_syntax_test/d05a: 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).
+async_await_syntax_test/d06a: 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).
+async_await_syntax_test/d08b: MissingCompileTimeError
+async_await_syntax_test/d09a: 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).
+async_await_syntax_test/d10a: 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).
+async_await_test/02: 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).
+async_await_test/03: 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).
+async_await_test/none: 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).
+async_break_in_finally_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).
+async_call_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).
+async_cascade_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).
+async_congruence_local_test/none: 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).
+async_congruence_method_test/none: 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).
+async_congruence_top_level_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).
+async_congruence_unnamed_test/none: 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).
+async_continue_label_test/await_in_body: 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).
+async_continue_label_test/await_in_condition: 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).
+async_continue_label_test/await_in_init: 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).
+async_continue_label_test/await_in_update: 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).
+async_continue_label_test/none: 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).
+async_control_structures_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).
+async_finally_rethrow_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).
+async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
+async_regression_23058_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).
+async_rethrow_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).
+async_return_types_test/nestedFuture: 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).
+async_return_types_test/none: 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).
+async_return_types_test/tooManyTypeParameters: 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).
+async_return_types_test/wrongReturnType: 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).
+async_star_await_pauses_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).
+async_star_cancel_and_throw_in_finally_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).
+async_star_cancel_while_paused_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).
+async_star_no_cancel2_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).
+async_star_no_cancel_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).
+async_star_pause_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).
+async_star_regression_2238_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).
+async_star_regression_23116_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).
+async_star_regression_fisk_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).
+async_star_stream_take_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).
+async_star_take_reyield_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).
+async_star_test/01: Crash # Wrong number of template arguments, given 2, expected 1
+async_star_test/02: Crash # Wrong number of template arguments, given 2, expected 1
+async_star_test/03: Crash # Wrong number of template arguments, given 2, expected 1
+async_star_test/04: Crash # Wrong number of template arguments, given 2, expected 1
+async_star_test/05: Crash # Wrong number of template arguments, given 2, expected 1
+async_star_test/none: Crash # Wrong number of template arguments, given 2, expected 1
+async_switch_test/none: 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).
+async_switch_test/withDefault: 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).
+async_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).
+async_this_bound_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).
+async_throw_in_catch_test/forceAwait: 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).
+async_throw_in_catch_test/none: 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).
+asyncstar_concat_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).
+asyncstar_throw_in_catch_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).
+asyncstar_yield_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).
+asyncstar_yieldstar_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).
+await_and_ifnull_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).
+await_backwards_compatibility_test/none: 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).
+await_exceptions_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).
+await_for_cancel_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).
+await_for_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).
+await_for_use_local_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).
+await_future_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).
+await_in_cascade_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).
+await_nonfuture_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).
+await_not_started_immediately_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).
+await_null_aware_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).
+await_postfix_expr_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).
+await_regression_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).
+await_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).
+bad_named_parameters2_test/01: MissingCompileTimeError
+bad_named_parameters_test/01: MissingCompileTimeError
+bad_named_parameters_test/02: MissingCompileTimeError
+bad_named_parameters_test/03: MissingCompileTimeError
+bad_named_parameters_test/04: MissingCompileTimeError
+bad_named_parameters_test/05: MissingCompileTimeError
+bad_override_test/01: MissingCompileTimeError
+bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
 bit_operations_test: RuntimeError
 bool_check_test: RuntimeError
 bool_condition_check_test: RuntimeError
+bool_test: RuntimeError
 branch_canonicalization_test: RuntimeError
-call_function_apply_test: RuntimeError
-callable_test/none: RuntimeError
+call_function2_test: CompileTimeError
+call_function_apply_test: CompileTimeError
+call_function_test: CompileTimeError
+call_non_method_field_test/01: MissingCompileTimeError
+call_non_method_field_test/02: MissingCompileTimeError
+call_with_no_such_method_test: CompileTimeError
+callable_test/none: CompileTimeError
 canonical_const2_test: RuntimeError
+cha_deopt1_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).
+cha_deopt2_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).
+cha_deopt3_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).
+check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
 class_cycle_test/03: MissingCompileTimeError
 class_literal_static_test/01: MissingCompileTimeError
-class_literal_static_test/02: MissingCompileTimeError
 class_literal_static_test/03: MissingCompileTimeError
-class_literal_static_test/04: MissingCompileTimeError
-class_literal_static_test/05: MissingCompileTimeError
-class_literal_static_test/06: MissingCompileTimeError
 class_literal_static_test/07: MissingCompileTimeError
-class_literal_static_test/08: MissingCompileTimeError
-class_literal_static_test/09: MissingCompileTimeError
-class_literal_static_test/10: MissingCompileTimeError
-class_literal_static_test/11: MissingCompileTimeError
-class_literal_static_test/12: MissingCompileTimeError
-class_literal_static_test/13: MissingCompileTimeError
-class_literal_static_test/14: MissingCompileTimeError
-class_literal_static_test/15: MissingCompileTimeError
-class_literal_static_test/16: MissingCompileTimeError
-class_literal_static_test/17: MissingCompileTimeError
-class_literal_static_test/18: MissingCompileTimeError
-class_literal_static_test/19: MissingCompileTimeError
-class_literal_static_test/20: MissingCompileTimeError
-class_literal_static_test/21: MissingCompileTimeError
-class_literal_static_test/22: MissingCompileTimeError
-class_literal_static_test/23: MissingCompileTimeError
-class_literal_static_test/24: MissingCompileTimeError
-class_literal_static_test/25: MissingCompileTimeError
-class_override_test: MissingCompileTimeError
-closure_internals_test/01: MissingCompileTimeError
-closure_internals_test/02: MissingCompileTimeError
-closure_internals_test/03: MissingCompileTimeError
+classes_static_method_clash_test: RuntimeError
+closure_in_constructor_test: RuntimeError
 closure_invoked_through_interface_target_field_test: MissingCompileTimeError
 closure_invoked_through_interface_target_getter_test: MissingCompileTimeError
 closure_type_test: RuntimeError
+compile_time_constant_d_test: CompileTimeError
+compile_time_constant_e_test: CompileTimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
 compile_time_constant_k_test/02: MissingCompileTimeError
 compile_time_constant_k_test/03: MissingCompileTimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
-compile_time_constant_static2_test/01: MissingCompileTimeError
-compile_time_constant_static2_test/02: MissingCompileTimeError
-compile_time_constant_static2_test/03: MissingCompileTimeError
 compile_time_constant_static2_test/04: MissingCompileTimeError
-compile_time_constant_static2_test/05: MissingCompileTimeError
-compile_time_constant_static2_test/06: MissingCompileTimeError
-compile_time_constant_static3_test/01: MissingCompileTimeError
-compile_time_constant_static3_test/02: MissingCompileTimeError
-compile_time_constant_static3_test/03: MissingCompileTimeError
 compile_time_constant_static3_test/04: MissingCompileTimeError
-compile_time_constant_static3_test/05: MissingCompileTimeError
-compile_time_constant_static3_test/06: MissingCompileTimeError
-compile_time_constant_static4_test/01: MissingCompileTimeError
-compile_time_constant_static4_test/02: MissingCompileTimeError
-compile_time_constant_static4_test/03: MissingCompileTimeError
-compile_time_constant_static5_test/03: MissingCompileTimeError
-compile_time_constant_static5_test/04: MissingCompileTimeError
-compile_time_constant_static5_test/05: MissingCompileTimeError
-compile_time_constant_static5_test/06: MissingCompileTimeError
-compile_time_constant_static5_test/07: MissingCompileTimeError
-compile_time_constant_static5_test/08: MissingCompileTimeError
-compile_time_constant_static5_test/09: MissingCompileTimeError
-compile_time_constant_static5_test/10: MissingCompileTimeError
-compile_time_constant_static5_test/12: MissingCompileTimeError
-compile_time_constant_static5_test/13: MissingCompileTimeError
-compile_time_constant_static5_test/14: MissingCompileTimeError
-compile_time_constant_static5_test/15: MissingCompileTimeError
-compile_time_constant_static5_test/17: MissingCompileTimeError
-compile_time_constant_static5_test/18: MissingCompileTimeError
-compile_time_constant_static5_test/19: MissingCompileTimeError
-compile_time_constant_static5_test/20: MissingCompileTimeError
-compile_time_constant_static5_test/22: MissingCompileTimeError
-compile_time_constant_static5_test/24: MissingCompileTimeError
-compile_time_constant_static5_test/25: MissingCompileTimeError
-compile_time_constant_static_test/01: MissingCompileTimeError
-compile_time_constant_static_test/02: MissingCompileTimeError
-compile_time_constant_static_test/03: MissingCompileTimeError
-conditional_method_invocation_test/05: MissingCompileTimeError
-conditional_method_invocation_test/06: MissingCompileTimeError
-conditional_method_invocation_test/07: MissingCompileTimeError
-conditional_method_invocation_test/08: MissingCompileTimeError
-conditional_method_invocation_test/12: MissingCompileTimeError
-conditional_method_invocation_test/13: MissingCompileTimeError
-conditional_method_invocation_test/18: MissingCompileTimeError
-conditional_method_invocation_test/19: MissingCompileTimeError
-conditional_property_access_test/04: MissingCompileTimeError
-conditional_property_access_test/05: MissingCompileTimeError
-conditional_property_access_test/06: MissingCompileTimeError
-conditional_property_access_test/10: MissingCompileTimeError
-conditional_property_access_test/11: MissingCompileTimeError
-conditional_property_access_test/16: MissingCompileTimeError
-conditional_property_access_test/17: MissingCompileTimeError
-conditional_property_assignment_test/04: MissingCompileTimeError
-conditional_property_assignment_test/05: MissingCompileTimeError
-conditional_property_assignment_test/06: MissingCompileTimeError
-conditional_property_assignment_test/10: MissingCompileTimeError
-conditional_property_assignment_test/11: MissingCompileTimeError
-conditional_property_assignment_test/12: MissingCompileTimeError
-conditional_property_assignment_test/13: MissingCompileTimeError
-conditional_property_assignment_test/27: MissingCompileTimeError
-conditional_property_assignment_test/28: MissingCompileTimeError
-conditional_property_assignment_test/32: MissingCompileTimeError
-conditional_property_assignment_test/33: MissingCompileTimeError
-conditional_property_assignment_test/34: MissingCompileTimeError
-conditional_property_assignment_test/35: MissingCompileTimeError
-conditional_property_increment_decrement_test/04: MissingCompileTimeError
-conditional_property_increment_decrement_test/08: MissingCompileTimeError
-conditional_property_increment_decrement_test/12: MissingCompileTimeError
-conditional_property_increment_decrement_test/16: MissingCompileTimeError
-conditional_property_increment_decrement_test/21: MissingCompileTimeError
-conditional_property_increment_decrement_test/22: MissingCompileTimeError
-conditional_property_increment_decrement_test/27: MissingCompileTimeError
-conditional_property_increment_decrement_test/28: MissingCompileTimeError
-conditional_property_increment_decrement_test/33: MissingCompileTimeError
-conditional_property_increment_decrement_test/34: MissingCompileTimeError
-conditional_property_increment_decrement_test/39: MissingCompileTimeError
-conditional_property_increment_decrement_test/40: MissingCompileTimeError
+compile_time_constant_static5_test/11: CompileTimeError
+compile_time_constant_static5_test/16: CompileTimeError
+compile_time_constant_static5_test/21: CompileTimeError
+compile_time_constant_static5_test/23: CompileTimeError
+conditional_import_string_test: CompileTimeError
+conditional_import_test: CompileTimeError
+conditional_rewrite_test: RuntimeError
+config_import_corelib_test: CompileTimeError
 config_import_test: RuntimeError
-const_constructor2_test/05: MissingCompileTimeError
-const_constructor2_test/06: MissingCompileTimeError
-const_constructor2_test/13: MissingCompileTimeError
-const_constructor2_test/14: MissingCompileTimeError
-const_constructor2_test/15: MissingCompileTimeError
-const_constructor2_test/16: MissingCompileTimeError
-const_constructor2_test/17: MissingCompileTimeError
-const_constructor2_test/18: MissingCompileTimeError
+const_constructor2_test/11: CompileTimeError
+const_constructor2_test/12: CompileTimeError
 const_constructor2_test/20: MissingCompileTimeError
 const_constructor2_test/22: MissingCompileTimeError
 const_constructor2_test/24: MissingCompileTimeError
-const_constructor3_test/02: MissingCompileTimeError
-const_constructor3_test/04: MissingCompileTimeError
+const_constructor3_test/03: CompileTimeError
 const_dynamic_type_literal_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/02: MissingCompileTimeError
-const_error_multiply_initialized_test/04: MissingCompileTimeError
 const_evaluation_test/01: CompileTimeError
 const_evaluation_test/none: CompileTimeError
 const_factory_with_body_test/01: MissingCompileTimeError
-const_init2_test/02: MissingCompileTimeError
 const_instance_field_test/01: MissingCompileTimeError
+const_list_test: RuntimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
+const_map4_test: RuntimeError
+const_redirecting_factory_test: CompileTimeError
 const_switch2_test/01: MissingCompileTimeError
 const_switch_test/02: RuntimeError
 const_switch_test/04: RuntimeError
-const_types_test/01: MissingCompileTimeError
-const_types_test/02: MissingCompileTimeError
-const_types_test/03: MissingCompileTimeError
-const_types_test/04: MissingCompileTimeError
-const_types_test/05: MissingCompileTimeError
-const_types_test/06: MissingCompileTimeError
-const_types_test/13: MissingCompileTimeError
 const_types_test/34: MissingCompileTimeError
 const_types_test/35: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
 const_types_test/40: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
-constructor_duplicate_final_test/01: MissingCompileTimeError
-constructor_duplicate_final_test/02: MissingCompileTimeError
-constructor_named_arguments_test/01: MissingCompileTimeError
 constructor_named_arguments_test/none: RuntimeError
 constructor_redirect1_negative_test/01: Crash # Stack Overflow
-constructor_redirect1_negative_test/none: MissingCompileTimeError
 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
+covariance_type_parameter_test/02: RuntimeError
+covariance_type_parameter_test/03: RuntimeError
 covariant_override/runtime_check_test: RuntimeError
 covariant_subtyping_tearoff1_test: RuntimeError
 covariant_subtyping_tearoff2_test: RuntimeError
@@ -2998,67 +2412,121 @@
 covariant_subtyping_unsafe_call1_test: RuntimeError
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
-crash_6725_test/01: MissingCompileTimeError
+ct_const_test: CompileTimeError
+custom_await_stack_trace_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).
 cyclic_constructor_test/01: Crash # Issue 30856
+cyclic_default_values_test: RuntimeError
+cyclic_type_variable_test/01: MissingCompileTimeError
+cyclic_type_variable_test/02: MissingCompileTimeError
+cyclic_type_variable_test/03: MissingCompileTimeError
+cyclic_type_variable_test/04: MissingCompileTimeError
+cyclic_typedef_test/10: Crash # Stack Overflow
+cyclic_typedef_test/11: Crash # Stack Overflow
+default_factory2_test/01: MissingCompileTimeError
+default_factory_test/01: MissingCompileTimeError
+deferred_closurize_load_library_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).
+deferred_constant_list_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).
 deferred_constraints_constants_test/none: CompileTimeError
 deferred_constraints_constants_test/reference_after_load: CompileTimeError
-deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
-deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_before_load: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/new_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic1: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic2: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic3: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
-deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
+deferred_constraints_type_annotation_test/as_operation: 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).
+deferred_constraints_type_annotation_test/catch_check: 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).
+deferred_constraints_type_annotation_test/is_check: 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).
+deferred_constraints_type_annotation_test/new: 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).
+deferred_constraints_type_annotation_test/new_before_load: 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).
+deferred_constraints_type_annotation_test/new_generic1: 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).
+deferred_constraints_type_annotation_test/new_generic2: 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).
+deferred_constraints_type_annotation_test/new_generic3: 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).
+deferred_constraints_type_annotation_test/none: 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).
+deferred_constraints_type_annotation_test/static_method: 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).
+deferred_constraints_type_annotation_test/type_annotation1: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic1: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic2: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic3: 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).
+deferred_constraints_type_annotation_test/type_annotation_generic4: 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).
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: 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).
+deferred_constraints_type_annotation_test/type_annotation_null: 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).
+deferred_constraints_type_annotation_test/type_annotation_top_level: 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).
+deferred_function_type_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).
+deferred_global_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).
+deferred_import_core_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).
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
-deferred_load_constants_test/none: RuntimeError
-deferred_load_library_wrong_args_test/01: MissingRuntimeError
+deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
+deferred_inlined_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).
+deferred_load_constants_test/none: 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).
+deferred_load_inval_code_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).
+deferred_load_library_wrong_args_test/01: CompileTimeError
+deferred_load_library_wrong_args_test/none: 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).
+deferred_mixin_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).
+deferred_no_such_method_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).
 deferred_not_loaded_check_test: RuntimeError
-deferred_redirecting_factory_test: RuntimeError
-deferred_super_dependency_test/01: MissingCompileTimeError
+deferred_only_constant_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).
+deferred_optimized_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).
+deferred_redirecting_factory_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).
+deferred_regression_22995_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).
+deferred_regression_28678_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).
+deferred_shadow_load_library_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).
+deferred_shared_and_unshared_classes_test: CompileTimeError
+deferred_static_seperate_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).
+deferred_super_dependency_test/none: 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).
+deferred_type_dependency_test/as: 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).
+deferred_type_dependency_test/is: 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).
+deferred_type_dependency_test/none: 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).
+deferred_type_dependency_test/type_annotation: 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).
 double_int_to_string_test: RuntimeError
-double_to_string_as_exponential2_test/01: MissingCompileTimeError
-double_to_string_as_exponential2_test/02: MissingCompileTimeError
-double_to_string_as_exponential2_test/03: MissingCompileTimeError
-double_to_string_as_fixed2_test/01: MissingCompileTimeError
-double_to_string_as_fixed2_test/02: MissingCompileTimeError
-double_to_string_as_fixed2_test/03: MissingCompileTimeError
-double_to_string_as_precision2_test/01: MissingCompileTimeError
-double_to_string_as_precision2_test/02: MissingCompileTimeError
-double_to_string_as_precision2_test/03: MissingCompileTimeError
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
-duplicate_implements_test/03: MissingCompileTimeError
-duplicate_implements_test/04: MissingCompileTimeError
-dynamic_prefix_core_test/none: RuntimeError
+dynamic_prefix_core_test/none: CompileTimeError
+dynamic_test: RuntimeError
+emit_const_fields_test: CompileTimeError
 enum_mirror_test: CompileTimeError
+example_constructor_test: RuntimeError
 expect_test: RuntimeError
 external_test/10: MissingRuntimeError
 external_test/13: MissingRuntimeError
 external_test/20: MissingRuntimeError
+external_test/21: CompileTimeError
+external_test/24: CompileTimeError
+extract_type_arguments_test: RuntimeError
 f_bounded_quantification4_test: RuntimeError
-factory_redirection_test/07: MissingCompileTimeError
+f_bounded_quantification_test/01: MissingCompileTimeError
+f_bounded_quantification_test/02: MissingCompileTimeError
+factory2_test/03: MissingCompileTimeError
+factory4_test/00: MissingCompileTimeError
 fauxverride_test/03: MissingCompileTimeError
 fauxverride_test/05: MissingCompileTimeError
+field3_test/01: MissingCompileTimeError
 field_increment_bailout_test: CompileTimeError
+field_initialization_order_test/01: MissingCompileTimeError
+field_initialization_order_test/none: RuntimeError
+field_method4_test: MissingCompileTimeError
+field_override2_test: MissingCompileTimeError
 field_override3_test/00: MissingCompileTimeError
 field_override3_test/01: MissingCompileTimeError
 field_override3_test/02: MissingCompileTimeError
 field_override3_test/03: MissingCompileTimeError
 field_override4_test/02: MissingCompileTimeError
-final_attempt_reinitialization_test/01: MissingCompileTimeError
-final_attempt_reinitialization_test/02: MissingCompileTimeError
+field_override_test/00: MissingCompileTimeError
+field_override_test/01: MissingCompileTimeError
+flatten_test/01: 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).
+flatten_test/02: 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).
+flatten_test/03: 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).
+flatten_test/04: 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).
+flatten_test/05: 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).
+flatten_test/06: 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).
+flatten_test/07: 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).
+flatten_test/08: 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).
+flatten_test/09: 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).
+flatten_test/10: 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).
+flatten_test/11: 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).
+flatten_test/12: 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).
+flatten_test/none: 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).
 full_stacktrace1_test: RuntimeError # Issue 12698
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
+function_propagation_test: CompileTimeError
 function_subtype_bound_closure3_test: RuntimeError
 function_subtype_bound_closure4_test: RuntimeError
 function_subtype_bound_closure7_test: RuntimeError
@@ -3068,6 +2536,7 @@
 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
@@ -3086,125 +2555,143 @@
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generalized_void_syntax_test: CompileTimeError
+fuzzy_arrows_test/03: RuntimeError
+generic_async_star_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).
+generic_async_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).
 generic_field_mixin6_test/none: RuntimeError
-generic_function_bounds_test: Crash # Unsupported operation: Unsupported type parameter type node T.
-generic_function_dcall_test: Crash # Unsupported operation: Unsupported type parameter type node T.
+generic_function_bounds_test: CompileTimeError
+generic_function_dcall_test: RuntimeError
+generic_function_type_as_type_argument_test/01: MissingCompileTimeError
+generic_function_type_as_type_argument_test/02: MissingCompileTimeError
 generic_function_typedef_test/01: RuntimeError
 generic_instanceof_test: RuntimeError
-generic_list_checked_test: RuntimeError
+generic_method_types_test/02: RuntimeError
+generic_methods_bounds_test/01: MissingCompileTimeError
+generic_methods_bounds_test/02: MissingRuntimeError
+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_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
+generic_methods_simple_as_expression_test/02: MissingRuntimeError
+generic_methods_tearoff_specialization_test: RuntimeError
+generic_methods_type_expression_test: RuntimeError
+generic_methods_unused_parameter_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [Instance of 'LiteralNull', null]
+generic_no_such_method_dispatcher_simple_test: CompileTimeError
+generic_no_such_method_dispatcher_test: CompileTimeError
 generic_tearoff_test: Crash # Unsupported operation: Unsupported type parameter type node T.
 generic_test: RuntimeError
-generic_typedef_test: RuntimeError
 getter_override2_test/02: MissingCompileTimeError
 getter_override_test/00: MissingCompileTimeError
 getter_override_test/01: MissingCompileTimeError
 getter_override_test/02: MissingCompileTimeError
+getter_override_test/03: MissingCompileTimeError
 getters_setters2_test/01: RuntimeError
 getters_setters2_test/none: RuntimeError
 identical_closure2_test: RuntimeError
+identical_const_test/01: MissingCompileTimeError
+identical_const_test/02: MissingCompileTimeError
+identical_const_test/03: MissingCompileTimeError
+identical_const_test/04: MissingCompileTimeError
 if_null_precedence_test/none: RuntimeError
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
+implicit_downcast_during_return_async_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).
+implicit_this_test/01: MissingCompileTimeError
+implicit_this_test/04: MissingCompileTimeError
 inferrer_synthesized_constructor_test: RuntimeError
 infinity_test: RuntimeError
 initializing_formal_type_annotation_test/01: MissingCompileTimeError
 initializing_formal_type_annotation_test/02: MissingCompileTimeError
 instance_creation_in_function_annotation_test: CompileTimeError
 instanceof2_test: RuntimeError
-instanceof4_test/01: RuntimeError
-instanceof4_test/none: RuntimeError
+instantiate_tearoff_of_call_test: CompileTimeError
+instantiate_type_variable_test/01: CompileTimeError
+int64_literal_test/01: RuntimeError
+int64_literal_test/02: RuntimeError
+int64_literal_test/03: MissingCompileTimeError
+int64_literal_test/04: RuntimeError
+int64_literal_test/05: RuntimeError
+int64_literal_test/10: RuntimeError
+int64_literal_test/20: RuntimeError
+int64_literal_test/30: MissingCompileTimeError
+int64_literal_test/40: RuntimeError
+int64_literal_test/none: RuntimeError
 integer_division_by_zero_test: RuntimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
 invocation_mirror2_test: CompileTimeError
 invocation_mirror_invoke_on2_test: CompileTimeError
 invocation_mirror_invoke_on_test: CompileTimeError
-invocation_mirror_test: RuntimeError
-is_malformed_type_test/94: MissingCompileTimeError
-is_malformed_type_test/95: MissingCompileTimeError
-is_malformed_type_test/96: MissingCompileTimeError
-is_malformed_type_test/97: MissingCompileTimeError
-is_malformed_type_test/98: MissingCompileTimeError
-is_malformed_type_test/99: MissingCompileTimeError
-is_not_class2_test/01: MissingCompileTimeError
-isnot_malformed_type_test/01: MissingCompileTimeError
-issue11724_test/01: MissingCompileTimeError
-issue1363_test/01: MissingCompileTimeError
-issue15606_test/01: MissingCompileTimeError
-issue18628_1_test/01: MissingCompileTimeError
+invocation_mirror_test: CompileTimeError
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: CompileTimeError
-issue23244_test: RuntimeError
-known_identifier_prefix_error_test/01: MissingCompileTimeError
-known_identifier_prefix_error_test/02: MissingCompileTimeError
-known_identifier_prefix_error_test/03: MissingCompileTimeError
-known_identifier_prefix_error_test/04: MissingCompileTimeError
-known_identifier_prefix_error_test/05: MissingCompileTimeError
-known_identifier_prefix_error_test/06: MissingCompileTimeError
-known_identifier_prefix_error_test/07: MissingCompileTimeError
-known_identifier_prefix_error_test/08: MissingCompileTimeError
-known_identifier_prefix_error_test/09: MissingCompileTimeError
-known_identifier_prefix_error_test/10: MissingCompileTimeError
-known_identifier_prefix_error_test/11: MissingCompileTimeError
-known_identifier_prefix_error_test/12: MissingCompileTimeError
-known_identifier_prefix_error_test/13: MissingCompileTimeError
-known_identifier_prefix_error_test/14: MissingCompileTimeError
-known_identifier_prefix_error_test/15: MissingCompileTimeError
-known_identifier_prefix_error_test/16: MissingCompileTimeError
-known_identifier_prefix_error_test/17: MissingCompileTimeError
-known_identifier_prefix_error_test/18: MissingCompileTimeError
-known_identifier_prefix_error_test/19: MissingCompileTimeError
-known_identifier_prefix_error_test/20: MissingCompileTimeError
-known_identifier_prefix_error_test/21: MissingCompileTimeError
-known_identifier_prefix_error_test/22: MissingCompileTimeError
-known_identifier_prefix_error_test/23: MissingCompileTimeError
-known_identifier_prefix_error_test/24: MissingCompileTimeError
+issue23244_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).
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue_1751477_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).
+issue_25671a_test/01: CompileTimeError
+issue_25671b_test/01: CompileTimeError
+known_identifier_usage_error_test/none: 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).
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError
-list_literal1_test/01: MissingCompileTimeError
-list_literal4_test/00: MissingCompileTimeError
-list_literal4_test/01: MissingCompileTimeError
-list_literal4_test/03: MissingCompileTimeError
-list_literal4_test/04: MissingCompileTimeError
-list_literal4_test/05: MissingCompileTimeError
-list_literal_syntax_test/01: MissingCompileTimeError
-list_literal_syntax_test/02: MissingCompileTimeError
-list_literal_syntax_test/03: MissingCompileTimeError
-malformed2_test/00: MissingCompileTimeError
+library_env_test/has_no_html_support: RuntimeError
+library_env_test/has_no_io_support: RuntimeError
+library_prefixes_test: CompileTimeError
+list_is_test: RuntimeError
+local_function2_test/none: RuntimeError
+local_function3_test/none: RuntimeError
+local_function_test/01: MissingCompileTimeError
+local_function_test/02: MissingCompileTimeError
+local_function_test/none: RuntimeError
+main_test/03: RuntimeError
+malbounded_instantiation_test/01: MissingCompileTimeError
+malbounded_instantiation_test/02: MissingCompileTimeError
+malbounded_instantiation_test/03: MissingCompileTimeError
+malbounded_redirecting_factory_test/02: MissingCompileTimeError
+malbounded_redirecting_factory_test/03: MissingCompileTimeError
+malbounded_redirecting_factory_test/04: MissingCompileTimeError
+malbounded_redirecting_factory_test/05: MissingCompileTimeError
+malbounded_type_cast2_test: MissingCompileTimeError
+malbounded_type_cast_test/00: MissingCompileTimeError
+malbounded_type_cast_test/01: MissingCompileTimeError
+malbounded_type_cast_test/02: MissingCompileTimeError
+malbounded_type_cast_test/none: RuntimeError
+malbounded_type_literal_test/00: MissingCompileTimeError
+malbounded_type_test2_test/00: MissingCompileTimeError
+malbounded_type_test_test/00: MissingCompileTimeError
+malbounded_type_test_test/01: MissingCompileTimeError
+malbounded_type_test_test/02: MissingCompileTimeError
+malbounded_type_test_test/none: RuntimeError
 many_generic_instanceof_test: RuntimeError
 many_overridden_no_such_method_test: CompileTimeError
 map_literal11_test/none: MissingRuntimeError
-map_literal1_test/01: MissingCompileTimeError
 map_literal3_test/01: MissingCompileTimeError
 map_literal3_test/02: MissingCompileTimeError
 map_literal3_test/03: MissingCompileTimeError
-map_literal3_test/04: MissingCompileTimeError
-map_literal4_test/01: MissingCompileTimeError
-map_literal4_test/02: MissingCompileTimeError
-map_literal4_test/03: MissingCompileTimeError
-map_literal4_test/04: MissingCompileTimeError
-map_literal4_test/05: MissingCompileTimeError
-map_literal4_test/06: MissingCompileTimeError
 map_literal7_test: RuntimeError
-map_literal8_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
 method_override7_test/01: MissingCompileTimeError
 method_override7_test/02: MissingCompileTimeError
+method_override7_test/03: MissingCompileTimeError
 method_override8_test/00: MissingCompileTimeError
 method_override8_test/01: MissingCompileTimeError
+method_override8_test/03: MissingCompileTimeError
+method_override_test: CompileTimeError
+minify_closure_variable_collision_test: CompileTimeError
 mint_arithmetic_test: RuntimeError
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
 mixin_generic_test: RuntimeError
 mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/02: MissingCompileTimeError
-mixin_illegal_super_use_test/03: MissingCompileTimeError
 mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/05: MissingCompileTimeError
-mixin_illegal_super_use_test/06: MissingCompileTimeError
 mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/08: MissingCompileTimeError
-mixin_illegal_super_use_test/09: MissingCompileTimeError
 mixin_illegal_super_use_test/10: MissingCompileTimeError
 mixin_illegal_super_use_test/11: MissingCompileTimeError
 mixin_illegal_superclass_test/01: MissingCompileTimeError
@@ -3237,12 +2724,37 @@
 mixin_illegal_superclass_test/28: MissingCompileTimeError
 mixin_illegal_superclass_test/29: MissingCompileTimeError
 mixin_illegal_superclass_test/30: MissingCompileTimeError
+mixin_invalid_bound2_test/02: MissingCompileTimeError
+mixin_invalid_bound2_test/03: MissingCompileTimeError
+mixin_invalid_bound2_test/04: MissingCompileTimeError
+mixin_invalid_bound2_test/05: MissingCompileTimeError
+mixin_invalid_bound2_test/06: MissingCompileTimeError
+mixin_invalid_bound2_test/07: MissingCompileTimeError
+mixin_invalid_bound2_test/08: MissingCompileTimeError
+mixin_invalid_bound2_test/09: MissingCompileTimeError
+mixin_invalid_bound2_test/10: MissingCompileTimeError
+mixin_invalid_bound2_test/11: MissingCompileTimeError
+mixin_invalid_bound2_test/12: MissingCompileTimeError
+mixin_invalid_bound2_test/13: MissingCompileTimeError
+mixin_invalid_bound2_test/14: MissingCompileTimeError
+mixin_invalid_bound2_test/15: MissingCompileTimeError
+mixin_invalid_bound_test/02: MissingCompileTimeError
+mixin_invalid_bound_test/03: MissingCompileTimeError
+mixin_invalid_bound_test/04: MissingCompileTimeError
+mixin_invalid_bound_test/05: MissingCompileTimeError
+mixin_invalid_bound_test/06: MissingCompileTimeError
+mixin_invalid_bound_test/07: MissingCompileTimeError
+mixin_invalid_bound_test/08: MissingCompileTimeError
+mixin_invalid_bound_test/09: MissingCompileTimeError
+mixin_invalid_bound_test/10: MissingCompileTimeError
 mixin_issue10216_2_test: RuntimeError
 mixin_mixin7_test: RuntimeError
 mixin_mixin_test: RuntimeError
 mixin_mixin_type_arguments_test: RuntimeError
 mixin_of_mixin_test/none: CompileTimeError
 mixin_super_2_test/none: CompileTimeError
+mixin_super_bound_test/01: MissingCompileTimeError
+mixin_super_bound_test/02: MissingCompileTimeError
 mixin_super_constructor_named_test/01: MissingCompileTimeError
 mixin_super_constructor_positionals_test/01: MissingCompileTimeError
 mixin_super_test: CompileTimeError
@@ -3266,6 +2778,18 @@
 mixin_supertype_subclass4_test/04: CompileTimeError
 mixin_supertype_subclass4_test/05: CompileTimeError
 mixin_supertype_subclass4_test/none: CompileTimeError
+mixin_supertype_subclass_test/01: CompileTimeError
+mixin_supertype_subclass_test/03: CompileTimeError
+mixin_supertype_subclass_test/04: CompileTimeError
+mixin_supertype_subclass_test/none: CompileTimeError
+mixin_type_parameters_errors_test/01: MissingCompileTimeError
+mixin_type_parameters_errors_test/02: MissingCompileTimeError
+mixin_type_parameters_errors_test/03: MissingCompileTimeError
+mixin_type_parameters_errors_test/04: MissingCompileTimeError
+mixin_type_parameters_errors_test/05: MissingCompileTimeError
+mixin_type_parameters_mixin_extends_test: RuntimeError
+mixin_type_parameters_mixin_test: RuntimeError
+mixin_type_parameters_super_extends_test: RuntimeError
 mixin_type_parameters_super_test: RuntimeError
 mock_writable_final_field_test: RuntimeError # Issue 30847
 mock_writable_final_private_field_test: RuntimeError # Issue 30847
@@ -3276,54 +2800,94 @@
 multiline_newline_test/05r: MissingCompileTimeError
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
+named_constructor_test/01: MissingCompileTimeError
 named_parameters_default_eq_test/02: MissingCompileTimeError
+named_parameters_test/02: MissingCompileTimeError
+named_parameters_test/04: MissingCompileTimeError
+named_parameters_test/06: MissingCompileTimeError
+named_parameters_test/08: MissingCompileTimeError
+named_parameters_test/10: MissingCompileTimeError
 nan_identical_test: RuntimeError
-nested_generic_closure_test: Crash # Unsupported operation: Unsupported type parameter type node F.
+nested_generic_closure_test: RuntimeError
 no_main_test/01: CompileTimeError
+no_such_method_mock_test: RuntimeError
 no_such_method_native_test: RuntimeError
 no_such_method_test: CompileTimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/02: RuntimeError
-nosuchmethod_forwarding/nosuchmethod_forwarding_test/03: MissingCompileTimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError
-not_enough_positional_arguments_test/00: MissingCompileTimeError
-not_enough_positional_arguments_test/01: MissingCompileTimeError
-not_enough_positional_arguments_test/02: MissingCompileTimeError
-not_enough_positional_arguments_test/03: MissingCompileTimeError
-not_enough_positional_arguments_test/05: MissingCompileTimeError
-not_enough_positional_arguments_test/06: MissingCompileTimeError
-not_enough_positional_arguments_test/07: MissingCompileTimeError
+null_no_such_method_test: CompileTimeError
 null_test/mirrors: CompileTimeError
 null_test/none: CompileTimeError
-number_identifier_test/05: MissingCompileTimeError
-number_identifier_test/08: MissingCompileTimeError
-number_identifier_test/09: MissingCompileTimeError
 number_identity2_test: RuntimeError
 numbers_test: RuntimeError
-on_catch_malformed_type_test: MissingCompileTimeError
-operator5_test: MissingCompileTimeError
-operator_equals_test: MissingCompileTimeError
-optimized_constant_array_string_access_test: MissingCompileTimeError
+operator4_test: RuntimeError
+optional_named_parameters_test/02: MissingCompileTimeError
+optional_named_parameters_test/04: MissingCompileTimeError
+optional_named_parameters_test/06: MissingCompileTimeError
+optional_named_parameters_test/08: MissingCompileTimeError
 overridden_no_such_method_test: CompileTimeError
 override_field_method1_negative_test: Fail
 override_field_method2_negative_test: Fail
 override_field_method4_negative_test: Fail
 override_field_method5_negative_test: Fail
 override_field_test/01: MissingCompileTimeError
+override_field_test/02: MissingCompileTimeError
+override_field_test/03: MissingCompileTimeError
+override_inheritance_abstract_test/02: MissingCompileTimeError
+override_inheritance_abstract_test/03: MissingCompileTimeError
+override_inheritance_abstract_test/04: MissingCompileTimeError
+override_inheritance_abstract_test/08: MissingCompileTimeError
+override_inheritance_abstract_test/09: MissingCompileTimeError
+override_inheritance_abstract_test/10: MissingCompileTimeError
+override_inheritance_abstract_test/11: MissingCompileTimeError
+override_inheritance_abstract_test/12: MissingCompileTimeError
+override_inheritance_abstract_test/13: MissingCompileTimeError
+override_inheritance_abstract_test/14: MissingCompileTimeError
+override_inheritance_abstract_test/17: MissingCompileTimeError
+override_inheritance_abstract_test/19: MissingCompileTimeError
+override_inheritance_abstract_test/20: MissingCompileTimeError
+override_inheritance_abstract_test/21: MissingCompileTimeError
+override_inheritance_abstract_test/22: MissingCompileTimeError
+override_inheritance_abstract_test/23: MissingCompileTimeError
+override_inheritance_abstract_test/24: MissingCompileTimeError
+override_inheritance_abstract_test/25: MissingCompileTimeError
+override_inheritance_abstract_test/26: MissingCompileTimeError
+override_inheritance_field_test/04: CompileTimeError
+override_inheritance_field_test/06: CompileTimeError
+override_inheritance_field_test/26: CompileTimeError
+override_inheritance_field_test/29: CompileTimeError
+override_inheritance_field_test/44: MissingCompileTimeError
+override_inheritance_field_test/47: MissingCompileTimeError
+override_inheritance_field_test/48: MissingCompileTimeError
+override_inheritance_field_test/53: MissingCompileTimeError
+override_inheritance_field_test/54: MissingCompileTimeError
+override_inheritance_generic_test/02: CompileTimeError
+override_inheritance_method_test/17: CompileTimeError
+override_inheritance_method_test/18: CompileTimeError
+override_inheritance_method_test/28: CompileTimeError
+override_inheritance_method_test/29: CompileTimeError
 override_inheritance_mixed_test/01: MissingCompileTimeError
 override_inheritance_mixed_test/02: MissingCompileTimeError
 override_inheritance_mixed_test/03: MissingCompileTimeError
 override_inheritance_mixed_test/04: MissingCompileTimeError
+override_inheritance_mixed_test/06: MissingCompileTimeError
+override_inheritance_mixed_test/07: MissingCompileTimeError
 override_inheritance_mixed_test/08: MissingCompileTimeError
 override_inheritance_mixed_test/09: MissingCompileTimeError
+override_inheritance_no_such_method_test/01: MissingCompileTimeError
+override_inheritance_no_such_method_test/02: MissingCompileTimeError
+override_inheritance_no_such_method_test/06: MissingCompileTimeError
+override_inheritance_no_such_method_test/07: MissingCompileTimeError
+override_inheritance_no_such_method_test/09: MissingCompileTimeError
+override_inheritance_no_such_method_test/10: MissingCompileTimeError
+override_inheritance_no_such_method_test/12: MissingCompileTimeError
+override_inheritance_no_such_method_test/13: MissingCompileTimeError
 override_method_with_field_test/01: MissingCompileTimeError
-positional_parameters_type_test/01: MissingCompileTimeError
-positional_parameters_type_test/02: MissingCompileTimeError
-private_super_constructor_test/01: MissingCompileTimeError
+parser_quirks_test: CompileTimeError
+recursive_generic_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError
 redirecting_factory_default_values_test/02: MissingCompileTimeError
 redirecting_factory_default_values_test/03: MissingCompileTimeError
-redirecting_factory_incompatible_signature_test/01: MissingCompileTimeError
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_long_test: RuntimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
@@ -3331,35 +2895,83 @@
 regress_13462_0_test: CompileTimeError
 regress_13462_1_test: CompileTimeError
 regress_18535_test: CompileTimeError
-regress_20394_test/01: MissingCompileTimeError
 regress_21795_test: RuntimeError
-regress_23408_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
+regress_22443_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).
+regress_22445_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).
+regress_22579_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).
+regress_22728_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).
+regress_22777_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).
+regress_23089_test: Crash # Stack Overflow
+regress_23408_test: CompileTimeError
+regress_23498_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).
+regress_23500_test/01: 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).
+regress_23500_test/02: 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).
+regress_23500_test/none: 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).
+regress_23650_test: RuntimeError
+regress_23996_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).
 regress_24283_test: RuntimeError, OK # Requires 64 bit numbers.
+regress_24935_test/01: 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).
+regress_24935_test/none: 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).
+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).
+regress_26668_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).
+regress_26948_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).
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_28217_test/01: MissingCompileTimeError
-regress_28217_test/none: MissingCompileTimeError
+regress_27659_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).
 regress_28255_test: CompileTimeError
-regress_28341_test: RuntimeError
+regress_28278_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).
+regress_29025_test: CompileTimeError
+regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Issue 29784
 regress_29784_test/02: MissingCompileTimeError # Issue 29784
-regress_31057_test: Crash # Unsupported operation: Unsupported type parameter type node B.
+regress_30339_test: CompileTimeError
+regress_31591_test: RuntimeError
+runtime_type_function_test: RuntimeError
+setter4_test: MissingCompileTimeError
+setter_no_getter_call_test/01: CompileTimeError
+setter_no_getter_test/01: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
+setter_override_test/01: MissingCompileTimeError
+setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
+shadow_parameter_and_local_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).
 stack_trace_test: RuntimeError
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
 stacktrace_test: RuntimeError # Issue 12698
+string_interpolate_test: CompileTimeError
+string_interpolation_and_buffer_test: RuntimeError
+string_split_test: CompileTimeError
+string_supertype_checked_test: CompileTimeError
+super_bound_closure_test/none: CompileTimeError
 super_call4_test: CompileTimeError
 super_getter_setter_test: CompileTimeError
+super_in_async1_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).
+super_in_async2_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).
+super_in_async3_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).
+super_in_async4_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).
+super_in_async5_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).
+super_in_async6_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).
+super_no_such_method1_test: CompileTimeError
+super_no_such_method2_test: CompileTimeError
+super_no_such_method3_test: CompileTimeError
+super_no_such_method4_test: CompileTimeError
+super_no_such_method5_test: CompileTimeError
+super_operator_index5_test: CompileTimeError
+super_operator_index6_test: CompileTimeError
+super_operator_index7_test: CompileTimeError
+super_operator_index8_test: CompileTimeError
+super_test: RuntimeError
 switch_bad_case_test/01: MissingCompileTimeError
 switch_bad_case_test/02: MissingCompileTimeError
 switch_case_test/00: MissingCompileTimeError
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
 symbol_conflict_test: RuntimeError
-symbol_literal_test/01: MissingCompileTimeError
+sync_generator2_test/none: 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).
+syncstar_yieldstar_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).
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
@@ -3369,171 +2981,147 @@
 tearoff_dynamic_test: RuntimeError
 truncdiv_test: RuntimeError
 try_catch_test/01: MissingCompileTimeError
+type_error_test: RuntimeError
 type_literal_prefix_call_test/00: MissingCompileTimeError
 type_literal_test: RuntimeError
-type_parameter_test/01: MissingCompileTimeError
-type_parameter_test/02: MissingCompileTimeError
-type_parameter_test/03: MissingCompileTimeError
-type_parameter_test/04: MissingCompileTimeError
-type_parameter_test/05: MissingCompileTimeError
-type_parameter_test/06: MissingCompileTimeError
-type_parameter_test/07: MissingCompileTimeError
-type_parameter_test/08: MissingCompileTimeError
-type_parameter_test/09: MissingCompileTimeError
-type_promotion_assign_test/01: MissingCompileTimeError
-type_promotion_assign_test/02: MissingCompileTimeError
-type_promotion_assign_test/03: MissingCompileTimeError
-type_promotion_assign_test/04: MissingCompileTimeError
-type_promotion_closure_test/01: MissingCompileTimeError
-type_promotion_closure_test/02: MissingCompileTimeError
-type_promotion_closure_test/03: MissingCompileTimeError
-type_promotion_closure_test/04: MissingCompileTimeError
-type_promotion_closure_test/06: MissingCompileTimeError
-type_promotion_closure_test/07: MissingCompileTimeError
-type_promotion_closure_test/09: MissingCompileTimeError
-type_promotion_closure_test/10: MissingCompileTimeError
-type_promotion_closure_test/11: MissingCompileTimeError
-type_promotion_closure_test/12: MissingCompileTimeError
-type_promotion_closure_test/13: MissingCompileTimeError
-type_promotion_closure_test/14: MissingCompileTimeError
-type_promotion_closure_test/15: MissingCompileTimeError
-type_promotion_closure_test/16: MissingCompileTimeError
-type_promotion_local_test/01: MissingCompileTimeError
-type_promotion_local_test/02: MissingCompileTimeError
-type_promotion_local_test/03: MissingCompileTimeError
-type_promotion_local_test/04: MissingCompileTimeError
-type_promotion_local_test/05: MissingCompileTimeError
-type_promotion_local_test/06: MissingCompileTimeError
-type_promotion_local_test/07: MissingCompileTimeError
-type_promotion_local_test/08: MissingCompileTimeError
-type_promotion_local_test/09: MissingCompileTimeError
-type_promotion_local_test/10: MissingCompileTimeError
-type_promotion_local_test/11: MissingCompileTimeError
-type_promotion_local_test/12: MissingCompileTimeError
-type_promotion_local_test/13: MissingCompileTimeError
-type_promotion_local_test/14: MissingCompileTimeError
-type_promotion_local_test/15: MissingCompileTimeError
-type_promotion_local_test/16: MissingCompileTimeError
-type_promotion_local_test/17: MissingCompileTimeError
-type_promotion_local_test/18: MissingCompileTimeError
-type_promotion_local_test/19: MissingCompileTimeError
-type_promotion_local_test/20: MissingCompileTimeError
-type_promotion_local_test/21: MissingCompileTimeError
-type_promotion_local_test/22: MissingCompileTimeError
-type_promotion_local_test/23: MissingCompileTimeError
-type_promotion_local_test/24: MissingCompileTimeError
-type_promotion_local_test/25: MissingCompileTimeError
-type_promotion_local_test/26: MissingCompileTimeError
-type_promotion_local_test/27: MissingCompileTimeError
-type_promotion_local_test/28: MissingCompileTimeError
-type_promotion_local_test/29: MissingCompileTimeError
-type_promotion_local_test/30: MissingCompileTimeError
-type_promotion_local_test/31: MissingCompileTimeError
-type_promotion_local_test/32: MissingCompileTimeError
-type_promotion_local_test/33: MissingCompileTimeError
-type_promotion_local_test/34: MissingCompileTimeError
-type_promotion_local_test/35: MissingCompileTimeError
-type_promotion_local_test/36: MissingCompileTimeError
-type_promotion_local_test/37: MissingCompileTimeError
-type_promotion_local_test/38: MissingCompileTimeError
-type_promotion_local_test/39: MissingCompileTimeError
-type_promotion_local_test/40: MissingCompileTimeError
-type_promotion_local_test/41: MissingCompileTimeError
+type_parameter_test/none: RuntimeError
+type_promotion_functions_test/02: CompileTimeError
+type_promotion_functions_test/03: CompileTimeError
+type_promotion_functions_test/04: CompileTimeError
+type_promotion_functions_test/09: CompileTimeError
+type_promotion_functions_test/11: CompileTimeError
+type_promotion_functions_test/12: CompileTimeError
+type_promotion_functions_test/13: CompileTimeError
+type_promotion_functions_test/14: CompileTimeError
+type_promotion_functions_test/none: CompileTimeError
 type_promotion_logical_and_test/01: MissingCompileTimeError
-type_promotion_logical_and_test/02: MissingCompileTimeError
-type_promotion_logical_and_test/03: MissingCompileTimeError
-type_promotion_more_specific_test/02: MissingCompileTimeError
-type_promotion_more_specific_test/06: MissingCompileTimeError
-type_promotion_more_specific_test/07: MissingCompileTimeError
-type_promotion_more_specific_test/09: MissingCompileTimeError
-type_promotion_multiple_test/01: MissingCompileTimeError
-type_promotion_multiple_test/02: MissingCompileTimeError
-type_promotion_multiple_test/03: MissingCompileTimeError
-type_promotion_multiple_test/04: MissingCompileTimeError
-type_promotion_multiple_test/05: MissingCompileTimeError
-type_promotion_multiple_test/06: MissingCompileTimeError
-type_promotion_multiple_test/07: MissingCompileTimeError
-type_promotion_multiple_test/08: MissingCompileTimeError
-type_promotion_multiple_test/09: MissingCompileTimeError
-type_promotion_multiple_test/10: MissingCompileTimeError
-type_promotion_multiple_test/11: MissingCompileTimeError
-type_promotion_multiple_test/12: MissingCompileTimeError
-type_promotion_multiple_test/13: MissingCompileTimeError
-type_promotion_multiple_test/14: MissingCompileTimeError
-type_promotion_multiple_test/15: MissingCompileTimeError
-type_promotion_multiple_test/16: MissingCompileTimeError
-type_promotion_multiple_test/17: MissingCompileTimeError
-type_promotion_multiple_test/18: MissingCompileTimeError
-type_promotion_multiple_test/19: MissingCompileTimeError
-type_promotion_multiple_test/20: MissingCompileTimeError
-type_promotion_multiple_test/21: MissingCompileTimeError
-type_promotion_multiple_test/22: MissingCompileTimeError
+type_promotion_more_specific_test/04: CompileTimeError
+type_variable_bounds2_test: MissingCompileTimeError
+type_variable_bounds3_test/00: MissingCompileTimeError
+type_variable_bounds4_test/01: MissingCompileTimeError
+type_variable_bounds_test/01: MissingCompileTimeError
+type_variable_bounds_test/02: Crash # NoSuchMethodError: The method 'accept' was called on null.
+type_variable_bounds_test/03: MissingCompileTimeError
+type_variable_bounds_test/04: MissingCompileTimeError
+type_variable_bounds_test/05: MissingCompileTimeError
+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
 typevariable_substitution2_test/02: RuntimeError
-void_type_callbacks_test/none: CompileTimeError
-void_type_function_types_test/none: CompileTimeError
-void_type_override_test/none: CompileTimeError
-void_type_usage_test/call_as: CompileTimeError
-void_type_usage_test/call_for: CompileTimeError
-void_type_usage_test/call_return_to_void: CompileTimeError
-void_type_usage_test/call_stmt: CompileTimeError
-void_type_usage_test/field_assign: CompileTimeError
-void_type_usage_test/field_assign2: CompileTimeError
-void_type_usage_test/final_local_as: CompileTimeError
-void_type_usage_test/final_local_for: CompileTimeError
-void_type_usage_test/final_local_return_to_void: CompileTimeError
-void_type_usage_test/final_local_stmt: CompileTimeError
-void_type_usage_test/global_as: CompileTimeError
-void_type_usage_test/global_for: CompileTimeError
-void_type_usage_test/global_for_in2: CompileTimeError
-void_type_usage_test/global_return_to_void: CompileTimeError
-void_type_usage_test/global_stmt: CompileTimeError
-void_type_usage_test/instance2_as: CompileTimeError
-void_type_usage_test/instance2_for: CompileTimeError
-void_type_usage_test/instance2_for_in3: CompileTimeError
-void_type_usage_test/instance2_return_to_void: CompileTimeError
-void_type_usage_test/instance2_stmt: CompileTimeError
-void_type_usage_test/instance3_as: CompileTimeError
-void_type_usage_test/instance3_for: CompileTimeError
-void_type_usage_test/instance3_for_in3: CompileTimeError
-void_type_usage_test/instance3_return_to_void: CompileTimeError
-void_type_usage_test/instance3_stmt: CompileTimeError
-void_type_usage_test/instance_as: CompileTimeError
-void_type_usage_test/instance_for: CompileTimeError
-void_type_usage_test/instance_return_to_void: CompileTimeError
-void_type_usage_test/instance_stmt: CompileTimeError
-void_type_usage_test/local_as: CompileTimeError
-void_type_usage_test/local_assign: CompileTimeError
-void_type_usage_test/local_for: CompileTimeError
-void_type_usage_test/local_for_in2: CompileTimeError
-void_type_usage_test/local_return_to_void: CompileTimeError
-void_type_usage_test/local_stmt: CompileTimeError
-void_type_usage_test/none: CompileTimeError
-void_type_usage_test/param_as: CompileTimeError
-void_type_usage_test/param_for: CompileTimeError
-void_type_usage_test/param_for_in2: CompileTimeError
-void_type_usage_test/param_return_to_void: CompileTimeError
-void_type_usage_test/param_stmt: CompileTimeError
-void_type_usage_test/paren_as: CompileTimeError
-void_type_usage_test/paren_for: CompileTimeError
-void_type_usage_test/paren_return_to_void: CompileTimeError
-void_type_usage_test/paren_stmt: CompileTimeError
-void_type_usage_test/setter_assign: CompileTimeError
+unused_overridden_async_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/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 # Wrong number of template arguments, given 2, expected 1
+vm/causal_async_exception_stack_test: Crash # Wrong number of template arguments, given 2, expected 1
+vm/debug_break_enabled_vm_test/01: CompileTimeError
+vm/debug_break_enabled_vm_test/none: CompileTimeError
+vm/integer_type_propagation_test: RuntimeError
+vm/math_vm_test: RuntimeError
+vm/no_such_args_error_message_vm_test: RuntimeError
+vm/no_such_method_error_message_callable_vm_test: RuntimeError
+vm/no_such_method_error_message_vm_test: RuntimeError
+vm/optimization_test: RuntimeError
+vm/optimized_await_regress_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/optimized_guarded_field_isolates_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/optimized_list_constructor_test: RuntimeError
+vm/reflect_core_vm_test: CompileTimeError
+vm/regress_22480_test: RuntimeError
+vm/regress_23238_test: RuntimeError
+vm/regress_27201_test: CompileTimeError
+vm/regress_28325_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/regress_29145_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/store_to_load_forwarding_phis_vm_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/type_cast_vm_test: RuntimeError
+vm/type_vm_test/28: MissingRuntimeError
+vm/type_vm_test/30: MissingRuntimeError
+vm/type_vm_test/31: MissingRuntimeError
+vm/type_vm_test/32: MissingRuntimeError
+vm/uint32_right_shift_test: RuntimeError
+vm/uint32_shift_test: RuntimeError
+vm/unaligned_integer_access_literal_index_test: RuntimeError
+vm/unaligned_integer_access_register_index_test: RuntimeError
+void_block_return_test/00: MissingCompileTimeError
+void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError
+void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError
+void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
+wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
+yieldstar_pause_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).
 
 [ $compiler == dart2js && $dart2js_with_kernel && $minified && !$strong ]
 *: SkipByDesign
 
 [ $compiler == dart2js && !$dart2js_with_kernel ]
+abstract_beats_arguments_test: MissingCompileTimeError
+abstract_exact_selector_test/01: MissingCompileTimeError
+abstract_factory_constructor_test/00: MissingCompileTimeError
+abstract_getter_test/01: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError
+abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError
+abstract_syntax_test/00: MissingCompileTimeError
 accessor_conflict_export2_test: Crash # Issue 25626
 accessor_conflict_export_test: Crash # Issue 25626
+additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError
+additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError
+additional_interface_adds_optional_args_supercall_test: MissingCompileTimeError
+argument_assignability_function_typed_test/01: MissingCompileTimeError
+argument_assignability_function_typed_test/02: MissingCompileTimeError
+argument_assignability_function_typed_test/03: RuntimeError
+argument_assignability_function_typed_test/04: RuntimeError
+argument_assignability_function_typed_test/05: RuntimeError
 assertion_initializer_const_error2_test/*: Crash # Issue 30038
 assertion_initializer_const_error2_test/none: Pass
 assertion_initializer_test: Crash
+assign_static_type_test/01: MissingCompileTimeError
+assign_static_type_test/02: MissingCompileTimeError
+assign_static_type_test/03: MissingCompileTimeError
+assign_static_type_test/04: MissingCompileTimeError
+assign_static_type_test/05: MissingCompileTimeError
+assign_static_type_test/06: MissingCompileTimeError
+assign_to_type_test/01: MissingCompileTimeError
+assign_to_type_test/02: MissingCompileTimeError
+assign_to_type_test/03: MissingCompileTimeError
+assign_to_type_test/04: MissingCompileTimeError
+assign_top_method_test: MissingCompileTimeError
+async_await_syntax_test/a10a: MissingCompileTimeError
+async_await_syntax_test/b10a: MissingCompileTimeError
+async_await_syntax_test/c10a: MissingCompileTimeError
+async_await_syntax_test/d08b: MissingCompileTimeError
+async_await_syntax_test/d10a: MissingCompileTimeError
+async_congruence_local_test/01: MissingCompileTimeError
+async_congruence_local_test/02: MissingCompileTimeError
+async_congruence_local_test/none: RuntimeError
+async_congruence_method_test/01: MissingCompileTimeError
+async_congruence_method_test/none: RuntimeError
+async_congruence_top_level_test: RuntimeError
+async_congruence_unnamed_test/01: MissingCompileTimeError
+async_congruence_unnamed_test/02: MissingCompileTimeError
+async_congruence_unnamed_test/none: RuntimeError
+async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
+async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
+async_return_types_test/nestedFuture: MissingCompileTimeError
+async_return_types_test/tooManyTypeParameters: MissingCompileTimeError
+async_return_types_test/wrongReturnType: MissingCompileTimeError
+async_return_types_test/wrongTypeParameter: MissingCompileTimeError
 bad_constructor_test/05: CompileTimeError
+bad_named_parameters2_test/01: MissingCompileTimeError
+bad_named_parameters_test/01: MissingCompileTimeError
+bad_named_parameters_test/02: MissingCompileTimeError
+bad_named_parameters_test/03: MissingCompileTimeError
+bad_named_parameters_test/04: MissingCompileTimeError
+bad_named_parameters_test/05: MissingCompileTimeError
+bad_override_test/01: MissingCompileTimeError
+bad_override_test/02: MissingCompileTimeError
+bad_override_test/06: MissingCompileTimeError
 bad_typedef_test/00: Crash # Issue 28214
 bug31436_test: RuntimeError
+built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
-built_in_identifier_type_annotation_test/30: Crash # Issue 28815
 built_in_identifier_type_annotation_test/52: Crash # Issue 28815
 built_in_identifier_type_annotation_test/53: Crash # Issue 28815
 built_in_identifier_type_annotation_test/54: Crash # Issue 28815
@@ -3550,8 +3138,67 @@
 built_in_identifier_type_annotation_test/66: Crash # Issue 28815
 built_in_identifier_type_annotation_test/67: Crash # Issue 28815
 built_in_identifier_type_annotation_test/68: Crash # Issue 28815
+call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
+call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
+call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
 call_function_apply_test: RuntimeError # Issue 23873
+call_non_method_field_test/01: MissingCompileTimeError
+call_non_method_field_test/02: MissingCompileTimeError
+call_nonexistent_constructor_test/01: MissingCompileTimeError
+call_nonexistent_constructor_test/02: MissingCompileTimeError
+call_nonexistent_static_test/01: MissingCompileTimeError
+call_nonexistent_static_test/02: MissingCompileTimeError
+call_nonexistent_static_test/03: MissingCompileTimeError
+call_nonexistent_static_test/04: MissingCompileTimeError
+call_nonexistent_static_test/05: MissingCompileTimeError
+call_nonexistent_static_test/06: MissingCompileTimeError
+call_nonexistent_static_test/07: MissingCompileTimeError
+call_nonexistent_static_test/08: MissingCompileTimeError
+call_nonexistent_static_test/09: MissingCompileTimeError
+call_nonexistent_static_test/10: MissingCompileTimeError
+call_through_getter_test/01: MissingCompileTimeError
+call_through_getter_test/02: MissingCompileTimeError
+call_type_literal_test: RuntimeError
+call_type_literal_test/01: MissingCompileTimeError
+callable_test/00: MissingCompileTimeError
+callable_test/01: MissingCompileTimeError
 canonical_const2_test: RuntimeError, OK # Issue 1533
+cast_test/04: MissingCompileTimeError
+cast_test/05: MissingCompileTimeError
+check_member_static_test/01: MissingCompileTimeError
+check_method_override_test/01: MissingCompileTimeError
+check_method_override_test/02: MissingCompileTimeError
+checked_null_test/01: MissingCompileTimeError
+checked_setter3_test/01: MissingCompileTimeError
+checked_setter3_test/02: MissingCompileTimeError
+checked_setter3_test/03: MissingCompileTimeError
+class_literal_static_test/none: RuntimeError
+class_literal_test/01: MissingCompileTimeError
+class_literal_test/02: MissingCompileTimeError
+class_literal_test/03: MissingCompileTimeError
+class_literal_test/04: MissingCompileTimeError
+class_literal_test/05: MissingCompileTimeError
+class_literal_test/06: MissingCompileTimeError
+class_literal_test/07: MissingCompileTimeError
+class_literal_test/08: MissingCompileTimeError
+class_literal_test/09: MissingCompileTimeError
+class_literal_test/10: MissingCompileTimeError
+class_literal_test/11: MissingCompileTimeError
+class_literal_test/12: MissingCompileTimeError
+class_literal_test/13: MissingCompileTimeError
+class_literal_test/14: MissingCompileTimeError
+class_literal_test/15: MissingCompileTimeError
+class_literal_test/16: MissingCompileTimeError
+class_literal_test/17: MissingCompileTimeError
+class_literal_test/18: MissingCompileTimeError
+class_literal_test/19: MissingCompileTimeError
+class_literal_test/20: MissingCompileTimeError
+class_literal_test/21: MissingCompileTimeError
+class_literal_test/22: MissingCompileTimeError
+class_literal_test/23: MissingCompileTimeError
+class_literal_test/24: MissingCompileTimeError
+class_literal_test/25: MissingCompileTimeError
+class_literal_test/none: RuntimeError
 closure_param_null_to_object_test: RuntimeError
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
@@ -3611,6 +3258,21 @@
 const_types_test/35: MissingCompileTimeError
 const_types_test/39: MissingCompileTimeError
 const_types_test/40: MissingCompileTimeError
+constructor13_test/01: MissingCompileTimeError
+constructor13_test/02: MissingCompileTimeError
+constructor_call_as_function_test: RuntimeError
+constructor_call_as_function_test/01: MissingCompileTimeError
+covariance_type_parameter_test/01: RuntimeError
+covariance_type_parameter_test/02: RuntimeError
+covariance_type_parameter_test/03: RuntimeError
+create_unresolved_type_test/01: MissingCompileTimeError
+cyclic_type_variable_test/01: MissingCompileTimeError
+cyclic_type_variable_test/02: MissingCompileTimeError
+cyclic_type_variable_test/03: MissingCompileTimeError
+cyclic_type_variable_test/04: MissingCompileTimeError
+cyclic_typedef_test/13: MissingCompileTimeError
+default_factory2_test/01: MissingCompileTimeError
+default_factory_test/01: MissingCompileTimeError
 deferred_constraints_type_annotation_test/as_operation: MissingCompileTimeError
 deferred_constraints_type_annotation_test/catch_check: MissingCompileTimeError
 deferred_constraints_type_annotation_test/is_check: MissingCompileTimeError
@@ -3624,41 +3286,246 @@
 deferred_constraints_type_annotation_test/type_annotation_generic4: MissingCompileTimeError
 deferred_constraints_type_annotation_test/type_annotation_null: MissingCompileTimeError
 deferred_constraints_type_annotation_test/type_annotation_top_level: MissingCompileTimeError
+deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
 deferred_not_loaded_check_test: Fail # Issue 27577
 double_int_to_string_test: RuntimeError # Issue 1533
+dynamic_field_test/01: MissingCompileTimeError
+dynamic_field_test/02: MissingCompileTimeError
+dynamic_prefix_core_test/01: MissingCompileTimeError
+empty_block_case_test: MissingCompileTimeError
+enum_private_test/02: MissingCompileTimeError
 enum_test: Fail # Issue 28340
+error_stacktrace_test/00: MissingCompileTimeError
+example_constructor_test: RuntimeError
 expect_test: RuntimeError, OK # Issue 13080
 external_test/10: CompileTimeError # Issue 12887
 external_test/13: CompileTimeError # Issue 12887
 external_test/20: CompileTimeError # Issue 12887
+external_test/21: CompileTimeError
+external_test/24: CompileTimeError
+extract_type_arguments_test: RuntimeError # Issue 31371
+f_bounded_quantification_test/01: MissingCompileTimeError
+f_bounded_quantification_test/02: MissingCompileTimeError
+factory1_test/00: MissingCompileTimeError
+factory1_test/01: MissingCompileTimeError
+factory2_test/03: MissingCompileTimeError
+factory2_test/none: MissingCompileTimeError
+factory3_test/none: MissingCompileTimeError
+factory4_test/00: MissingCompileTimeError
+factory5_test/00: MissingCompileTimeError
+factory6_test/00: MissingCompileTimeError
+factory_redirection_test/01: MissingCompileTimeError
+factory_redirection_test/02: MissingCompileTimeError
+factory_redirection_test/03: MissingCompileTimeError
+factory_redirection_test/05: MissingCompileTimeError
+factory_redirection_test/06: MissingCompileTimeError
+factory_redirection_test/08: MissingCompileTimeError
+factory_redirection_test/09: MissingCompileTimeError
+factory_redirection_test/10: MissingCompileTimeError
+factory_redirection_test/11: MissingCompileTimeError
+factory_redirection_test/12: MissingCompileTimeError
+factory_redirection_test/13: MissingCompileTimeError
+factory_redirection_test/14: MissingCompileTimeError
+factory_redirection_test/none: MissingCompileTimeError
+factory_return_type_checked_test/00: MissingCompileTimeError
+field3_test/01: MissingCompileTimeError
+field_initialization_order_test/01: MissingCompileTimeError
+field_initialization_order_test/none: RuntimeError
+field_method4_test: MissingCompileTimeError
+field_override2_test: MissingCompileTimeError
+field_override_test/00: MissingCompileTimeError
+field_override_test/01: MissingCompileTimeError
+field_override_test/02: MissingCompileTimeError
+field_override_test/none: MissingCompileTimeError
+field_type_check_test/01: MissingCompileTimeError
 final_attempt_reinitialization_test.dart: Skip # Issue 29659
 final_field_override_test: RuntimeError
+final_for_in_variable_test: MissingCompileTimeError
+final_param_test: MissingCompileTimeError
+final_super_field_set_test: MissingCompileTimeError
+final_syntax_test/10: MissingCompileTimeError
+final_variable_assignment_test/01: MissingCompileTimeError
+final_variable_assignment_test/02: MissingCompileTimeError
+final_variable_assignment_test/03: MissingCompileTimeError
+final_variable_assignment_test/04: MissingCompileTimeError
+first_class_types_literals_test/03: MissingCompileTimeError
+first_class_types_literals_test/04: MissingCompileTimeError
+first_class_types_literals_test/05: MissingCompileTimeError
+first_class_types_literals_test/06: MissingCompileTimeError
+first_class_types_literals_test/07: MissingCompileTimeError
+first_class_types_literals_test/08: MissingCompileTimeError
+first_class_types_literals_test/09: MissingCompileTimeError
+first_class_types_literals_test/10: MissingCompileTimeError
+first_class_types_literals_test/11: MissingCompileTimeError
+first_class_types_literals_test/12: MissingCompileTimeError
+flatten_test/05: MissingRuntimeError
+flatten_test/08: MissingRuntimeError
+flatten_test/09: MissingRuntimeError
+flatten_test/12: MissingRuntimeError
+for_in3_test: MissingCompileTimeError
+for_in_side_effects_test/01: MissingCompileTimeError
 full_stacktrace1_test: Pass, RuntimeError # Issue 12698
 full_stacktrace2_test: Pass, RuntimeError # Issue 12698
 full_stacktrace3_test: Pass, RuntimeError # Issue 12698
+function_malformed_result_type_test/00: MissingCompileTimeError
+function_type_call_getter2_test/00: MissingCompileTimeError
+function_type_call_getter2_test/01: MissingCompileTimeError
+function_type_call_getter2_test/02: MissingCompileTimeError
+function_type_call_getter2_test/03: MissingCompileTimeError
+function_type_call_getter2_test/04: MissingCompileTimeError
+function_type_call_getter2_test/05: MissingCompileTimeError
+fuzzy_arrows_test/01: MissingCompileTimeError
+fuzzy_arrows_test/03: RuntimeError
 generalized_void_syntax_test: CompileTimeError # Issue #30176.
+generic_constructor_mixin2_test/01: MissingCompileTimeError
+generic_constructor_mixin3_test/01: MissingCompileTimeError
+generic_constructor_mixin_test/01: MissingCompileTimeError
 generic_field_mixin4_test: Crash # Issue 18651
 generic_field_mixin5_test: Crash # Issue 18651
+generic_field_mixin6_test/01: MissingCompileTimeError
+generic_function_bounds_test: RuntimeError
+generic_function_dcall_test: RuntimeError
+generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 30930
+generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 30930
 generic_function_typedef2_test/00: MissingCompileTimeError # Issue 28214
 generic_function_typedef2_test/01: MissingCompileTimeError # Issue 28214
 generic_function_typedef2_test/02: MissingCompileTimeError # Issue 28214
 generic_function_typedef2_test/03: MissingCompileTimeError # Issue 28214
+generic_function_typedef2_test/04: MissingCompileTimeError
 generic_function_typedef2_test/05: Crash # Issue 28214
 generic_function_typedef2_test/06: Crash # Issue 28214
+generic_method_types_test/01: RuntimeError
+generic_method_types_test/02: RuntimeError
+generic_methods_bounds_test/01: MissingCompileTimeError
+generic_methods_bounds_test/02: MissingRuntimeError
 generic_methods_closure_test: RuntimeError
+generic_methods_dynamic_test/01: MissingCompileTimeError
+generic_methods_dynamic_test/02: MissingRuntimeError
+generic_methods_dynamic_test/03: MissingCompileTimeError
+generic_methods_dynamic_test/04: MissingRuntimeError
+generic_methods_generic_class_tearoff_test: RuntimeError
+generic_methods_generic_function_result_test/01: MissingCompileTimeError # Issue #30208
 generic_methods_local_variable_declaration_test: RuntimeError
+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_overriding_test/03: MissingCompileTimeError
+generic_methods_recursive_bound_test/02: MissingCompileTimeError
+generic_methods_reuse_type_variables_test: RuntimeError
 generic_methods_shadowing_test: RuntimeError
+generic_methods_simple_as_expression_test/02: MissingRuntimeError
+generic_methods_simple_is_expression_test: RuntimeError
+generic_methods_tearoff_specialization_test: RuntimeError
+generic_methods_type_expression_test: RuntimeError
+generic_methods_unused_parameter_test: RuntimeError
+generic_no_such_method_dispatcher_simple_test: Skip # This test is just for kernel.
+generic_no_such_method_dispatcher_test: RuntimeError
+generic_tearoff_test: RuntimeError
+getter_no_setter2_test/00: MissingCompileTimeError
+getter_no_setter2_test/01: MissingCompileTimeError
+getter_no_setter2_test/03: MissingCompileTimeError
+getter_no_setter_test/00: MissingCompileTimeError
+getter_no_setter_test/01: MissingCompileTimeError
+getter_no_setter_test/03: MissingCompileTimeError
+getter_override_test/03: MissingCompileTimeError
 getter_setter_in_lib_test: Fail # Issue 23288
+getters_setters2_test/02: MissingCompileTimeError
 identical_closure2_test: RuntimeError # Issue 1533, Issue 12596
+identical_const_test/01: MissingCompileTimeError
+identical_const_test/02: MissingCompileTimeError
+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/14: Crash # Issue 23491
+if_null_assignment_behavior_test/15: MissingCompileTimeError
+if_null_assignment_static_test/02: MissingCompileTimeError
+if_null_assignment_static_test/04: MissingCompileTimeError
+if_null_assignment_static_test/06: MissingCompileTimeError
+if_null_assignment_static_test/07: MissingCompileTimeError
+if_null_assignment_static_test/09: MissingCompileTimeError
+if_null_assignment_static_test/11: MissingCompileTimeError
+if_null_assignment_static_test/13: MissingCompileTimeError
+if_null_assignment_static_test/14: MissingCompileTimeError
+if_null_assignment_static_test/16: MissingCompileTimeError
+if_null_assignment_static_test/18: MissingCompileTimeError
+if_null_assignment_static_test/20: MissingCompileTimeError
+if_null_assignment_static_test/21: MissingCompileTimeError
+if_null_assignment_static_test/23: MissingCompileTimeError
+if_null_assignment_static_test/25: MissingCompileTimeError
+if_null_assignment_static_test/27: MissingCompileTimeError
+if_null_assignment_static_test/28: MissingCompileTimeError
+if_null_assignment_static_test/30: MissingCompileTimeError
+if_null_assignment_static_test/32: MissingCompileTimeError
+if_null_assignment_static_test/34: MissingCompileTimeError
+if_null_assignment_static_test/35: MissingCompileTimeError
+if_null_assignment_static_test/37: MissingCompileTimeError
+if_null_assignment_static_test/39: MissingCompileTimeError
+if_null_assignment_static_test/41: MissingCompileTimeError
+if_null_assignment_static_test/42: MissingCompileTimeError
+if_null_precedence_test/06: MissingCompileTimeError
+if_null_precedence_test/07: MissingCompileTimeError
+implicit_creation/implicit_new_constructor_generic_test: Crash
+implicit_creation/implicit_new_constructor_test: Crash
+implicit_creation/implicit_new_prefix_constructor_generic_test: Crash
+implicit_creation/implicit_new_prefix_constructor_test: Crash
+implicit_this_test/01: MissingCompileTimeError
+implicit_this_test/02: MissingCompileTimeError
+implicit_this_test/04: MissingCompileTimeError
+import_combinators2_test/00: MissingCompileTimeError
+import_self_test/01: MissingCompileTimeError
+inferrer_constructor5_test/01: MissingCompileTimeError
 infinity_test: RuntimeError # Issue 4984
+initializing_formal_final_test: MissingCompileTimeError
+initializing_formal_type_test: MissingCompileTimeError
 instantiate_tearoff_after_contravariance_check_test: RuntimeError
 instantiate_tearoff_of_call_test: RuntimeError
 instantiate_tearoff_test: RuntimeError
+int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
 integer_division_by_zero_test: RuntimeError # Issue 8301
+interface_test/00: MissingCompileTimeError
 invocation_mirror2_test: RuntimeError # Issue 6490 (wrong retval).
+issue31596_override_test/05: MissingCompileTimeError
+issue31596_override_test/06: MissingCompileTimeError
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_tearoff_test: RuntimeError
+least_upper_bound_expansive_test/01: MissingCompileTimeError
+least_upper_bound_expansive_test/02: MissingCompileTimeError
+least_upper_bound_expansive_test/03: MissingCompileTimeError
+least_upper_bound_expansive_test/04: MissingCompileTimeError
+least_upper_bound_expansive_test/05: MissingCompileTimeError
+least_upper_bound_expansive_test/06: MissingCompileTimeError
+least_upper_bound_expansive_test/07: MissingCompileTimeError
+least_upper_bound_expansive_test/08: MissingCompileTimeError
+least_upper_bound_expansive_test/09: MissingCompileTimeError
+least_upper_bound_expansive_test/10: MissingCompileTimeError
+least_upper_bound_expansive_test/11: MissingCompileTimeError
+least_upper_bound_expansive_test/12: MissingCompileTimeError
+least_upper_bound_test/03: MissingCompileTimeError
+least_upper_bound_test/04: MissingCompileTimeError
+least_upper_bound_test/10: MissingCompileTimeError
+least_upper_bound_test/19: MissingCompileTimeError
+least_upper_bound_test/20: MissingCompileTimeError
+least_upper_bound_test/23: MissingCompileTimeError
+least_upper_bound_test/24: MissingCompileTimeError
+least_upper_bound_test/29: MissingCompileTimeError
+least_upper_bound_test/30: MissingCompileTimeError
+least_upper_bound_test/32: MissingCompileTimeError
 left_shift_test: RuntimeError # Issue 1533
+library_ambiguous_test/00: MissingCompileTimeError
+library_ambiguous_test/01: MissingCompileTimeError
+library_ambiguous_test/02: MissingCompileTimeError
+library_ambiguous_test/03: MissingCompileTimeError
+library_ambiguous_test/04: MissingCompileTimeError
+library_env_test/has_no_html_support: RuntimeError, OK
+library_env_test/has_no_io_support: RuntimeError, OK
+library_env_test/has_no_mirror_support: RuntimeError, OK
+list_is_test: RuntimeError
 list_literal4_test/00: MissingCompileTimeError
 list_literal4_test/01: MissingCompileTimeError
 list_literal4_test/03: MissingCompileTimeError
@@ -3667,15 +3534,135 @@
 list_literal_syntax_test/01: MissingCompileTimeError
 list_literal_syntax_test/02: MissingCompileTimeError
 list_literal_syntax_test/03: MissingCompileTimeError
+local_function2_test/01: MissingCompileTimeError
+local_function2_test/02: MissingCompileTimeError
+local_function2_test/none: RuntimeError
+local_function3_test/01: MissingCompileTimeError
+local_function3_test/none: RuntimeError
+local_function_test/01: MissingCompileTimeError
+local_function_test/02: MissingCompileTimeError
+local_function_test/03: MissingCompileTimeError
+local_function_test/04: MissingCompileTimeError
+local_function_test/none: RuntimeError
+logical_expression3_test: MissingCompileTimeError
+main_test/03: RuntimeError
+malbounded_instantiation_test/01: MissingCompileTimeError
+malbounded_instantiation_test/02: MissingCompileTimeError
+malbounded_instantiation_test/03: MissingCompileTimeError
+malbounded_redirecting_factory_test/02: MissingCompileTimeError
+malbounded_redirecting_factory_test/03: MissingCompileTimeError
+malbounded_redirecting_factory_test/04: MissingCompileTimeError
+malbounded_redirecting_factory_test/05: MissingCompileTimeError
+malbounded_type_cast2_test: MissingCompileTimeError
+malbounded_type_cast_test/00: MissingCompileTimeError
+malbounded_type_cast_test/01: MissingCompileTimeError
+malbounded_type_cast_test/02: MissingCompileTimeError
+malbounded_type_cast_test/none: RuntimeError
+malbounded_type_literal_test/00: MissingCompileTimeError
+malbounded_type_test2_test/00: MissingCompileTimeError
+malbounded_type_test_test/00: MissingCompileTimeError
+malbounded_type_test_test/01: MissingCompileTimeError
+malbounded_type_test_test/02: MissingCompileTimeError
+malbounded_type_test_test/none: RuntimeError
+malformed2_test/01: MissingCompileTimeError
+malformed2_test/02: MissingCompileTimeError
+malformed2_test/03: MissingCompileTimeError
+malformed2_test/04: MissingCompileTimeError
+malformed2_test/05: MissingCompileTimeError
+malformed2_test/06: MissingCompileTimeError
+malformed2_test/07: MissingCompileTimeError
+malformed2_test/08: MissingCompileTimeError
+malformed2_test/09: MissingCompileTimeError
+malformed2_test/10: MissingCompileTimeError
+malformed2_test/11: MissingCompileTimeError
+malformed2_test/12: MissingCompileTimeError
+malformed2_test/13: MissingCompileTimeError
+malformed_bound_test/00: MissingCompileTimeError
+malformed_bound_test/01: MissingCompileTimeError
+malformed_inheritance_test/01: MissingCompileTimeError
+malformed_inheritance_test/03: MissingCompileTimeError
+malformed_inheritance_test/05: MissingCompileTimeError
+malformed_test/00: MissingCompileTimeError
+malformed_test/01: MissingCompileTimeError
+malformed_test/02: MissingCompileTimeError
+malformed_test/03: MissingCompileTimeError
+malformed_test/04: MissingCompileTimeError
+malformed_test/05: MissingCompileTimeError
+malformed_test/06: MissingCompileTimeError
+malformed_test/07: MissingCompileTimeError
+malformed_test/08: MissingCompileTimeError
+malformed_test/09: MissingCompileTimeError
+malformed_test/10: MissingCompileTimeError
+malformed_test/11: MissingCompileTimeError
+malformed_test/12: MissingCompileTimeError
+malformed_test/13: MissingCompileTimeError
+malformed_test/14: MissingCompileTimeError
+malformed_test/15: MissingCompileTimeError
+malformed_test/16: MissingCompileTimeError
+malformed_test/17: MissingCompileTimeError
+malformed_test/18: MissingCompileTimeError
+malformed_test/19: MissingCompileTimeError
+malformed_test/20: MissingCompileTimeError
+malformed_test/21: MissingCompileTimeError
+malformed_test/22: MissingCompileTimeError
+malformed_test/23: MissingCompileTimeError
+malformed_test/24: MissingCompileTimeError
+malformed_type_test: MissingCompileTimeError
 method_name_test: Fail # issue 25574
+method_name_test: Pass
+method_override2_test/*: MissingCompileTimeError
+method_override2_test/none: Pass
+method_override3_test/*: MissingCompileTimeError
+method_override3_test/none: Pass
+method_override4_test/*: MissingCompileTimeError
+method_override4_test/none: Pass
 method_override5_test: RuntimeError # Issue 12809
+method_override5_test/*: MissingCompileTimeError
+method_override5_test/none: Pass
+method_override6_test/*: MissingCompileTimeError
+method_override6_test/none: Pass
+method_override7_test/03: MissingCompileTimeError
+method_override8_test/03: MissingCompileTimeError
+method_override_test: RuntimeError
 mint_arithmetic_test: RuntimeError # Issue 1533
+mixin_illegal_constructor_test/13: MissingCompileTimeError
+mixin_illegal_constructor_test/14: MissingCompileTimeError
+mixin_illegal_constructor_test/15: MissingCompileTimeError
+mixin_illegal_constructor_test/16: MissingCompileTimeError
+mixin_illegal_static_access_test/01: MissingCompileTimeError
+mixin_illegal_static_access_test/02: MissingCompileTimeError
+mixin_illegal_syntax_test/13: MissingCompileTimeError
+mixin_invalid_bound2_test/02: MissingCompileTimeError
+mixin_invalid_bound2_test/03: MissingCompileTimeError
+mixin_invalid_bound2_test/04: MissingCompileTimeError
+mixin_invalid_bound2_test/05: MissingCompileTimeError
+mixin_invalid_bound2_test/06: MissingCompileTimeError
+mixin_invalid_bound2_test/07: MissingCompileTimeError
+mixin_invalid_bound2_test/08: MissingCompileTimeError
+mixin_invalid_bound2_test/09: MissingCompileTimeError
+mixin_invalid_bound2_test/10: MissingCompileTimeError
+mixin_invalid_bound2_test/11: MissingCompileTimeError
+mixin_invalid_bound2_test/12: MissingCompileTimeError
+mixin_invalid_bound2_test/13: MissingCompileTimeError
+mixin_invalid_bound2_test/14: MissingCompileTimeError
+mixin_invalid_bound2_test/15: MissingCompileTimeError
+mixin_invalid_bound_test/02: MissingCompileTimeError
+mixin_invalid_bound_test/03: MissingCompileTimeError
+mixin_invalid_bound_test/04: MissingCompileTimeError
+mixin_invalid_bound_test/05: MissingCompileTimeError
+mixin_invalid_bound_test/06: MissingCompileTimeError
+mixin_invalid_bound_test/07: MissingCompileTimeError
+mixin_invalid_bound_test/08: MissingCompileTimeError
+mixin_invalid_bound_test/09: MissingCompileTimeError
+mixin_invalid_bound_test/10: MissingCompileTimeError
 mixin_mixin2_test: RuntimeError # Issue 13109.
 mixin_mixin3_test: RuntimeError # Issue 13109.
 mixin_mixin_type_arguments_test: RuntimeError # Issue 29587
 mixin_of_mixin_test/none: CompileTimeError
 mixin_super_2_test/none: CompileTimeError
 mixin_super_bound2_test: CompileTimeError # Issue 23773
+mixin_super_bound_test/01: MissingCompileTimeError
+mixin_super_bound_test/02: MissingCompileTimeError
 mixin_super_constructor_named_test/01: Fail # Issue 15101
 mixin_super_constructor_positionals_test/01: Fail # Issue 15101
 mixin_super_test: CompileTimeError # Issue 23773
@@ -3684,6 +3671,18 @@
 mixin_supertype_subclass2_test: CompileTimeError # Issue 23773
 mixin_supertype_subclass3_test: CompileTimeError # Issue 23773
 mixin_supertype_subclass4_test: CompileTimeError # Issue 23773
+mixin_supertype_subclass_test/01: CompileTimeError
+mixin_supertype_subclass_test/03: CompileTimeError
+mixin_supertype_subclass_test/04: CompileTimeError
+mixin_supertype_subclass_test/none: CompileTimeError
+mixin_type_parameters_errors_test/01: MissingCompileTimeError
+mixin_type_parameters_errors_test/02: MissingCompileTimeError
+mixin_type_parameters_errors_test/03: MissingCompileTimeError
+mixin_type_parameters_errors_test/04: MissingCompileTimeError
+mixin_type_parameters_errors_test/05: MissingCompileTimeError
+mixin_type_parameters_mixin_extends_test: RuntimeError
+mixin_type_parameters_mixin_test: RuntimeError
+mixin_type_parameters_super_extends_test: RuntimeError
 mixin_type_parameters_super_test: RuntimeError
 mixin_with_two_implicit_constructors_test: MissingCompileTimeError
 mock_writable_final_private_field_test: CompileTimeError # Issue 17526
@@ -3699,35 +3698,336 @@
 multiline_newline_test/05: MissingCompileTimeError # Issue 23888
 multiline_newline_test/05r: MissingCompileTimeError # Issue 23888
 multiline_newline_test/none: RuntimeError # Issue 23888
+named_constructor_test/01: MissingCompileTimeError
+named_constructor_test/03: MissingCompileTimeError
+named_parameters2_test: MissingCompileTimeError
+named_parameters3_test: MissingCompileTimeError
+named_parameters4_test: MissingCompileTimeError
+named_parameters_aggregated_test/05: MissingCompileTimeError
+named_parameters_test/01: MissingCompileTimeError
+named_parameters_test/02: MissingCompileTimeError
+named_parameters_test/03: MissingCompileTimeError
+named_parameters_test/04: MissingCompileTimeError
+named_parameters_test/05: MissingCompileTimeError
+named_parameters_test/06: MissingCompileTimeError
+named_parameters_test/07: MissingCompileTimeError
+named_parameters_test/08: MissingCompileTimeError
+named_parameters_test/09: MissingCompileTimeError
+named_parameters_test/10: MissingCompileTimeError
+named_parameters_type_test/01: MissingCompileTimeError
+named_parameters_type_test/02: MissingCompileTimeError
+named_parameters_type_test/03: MissingCompileTimeError
 nan_identical_test: Fail # Issue 11551
+nested_generic_closure_test: RuntimeError
+new_expression_type_args_test/00: MissingCompileTimeError
+new_expression_type_args_test/01: MissingCompileTimeError
+new_expression_type_args_test/02: MissingCompileTimeError
+new_prefix_test/01: MissingCompileTimeError
+no_such_constructor_test/01: MissingCompileTimeError
+no_such_method_mock_test: RuntimeError
 number_identity2_test: RuntimeError # Issue 12596
 numbers_test: RuntimeError, OK # Issue 1533
 object_has_no_call_method_test/02: MissingCompileTimeError
 object_has_no_call_method_test/05: MissingCompileTimeError
 object_has_no_call_method_test/08: MissingCompileTimeError
+optional_named_parameters_test/01: MissingCompileTimeError
+optional_named_parameters_test/02: MissingCompileTimeError
+optional_named_parameters_test/03: MissingCompileTimeError
+optional_named_parameters_test/04: MissingCompileTimeError
+optional_named_parameters_test/05: MissingCompileTimeError
+optional_named_parameters_test/06: MissingCompileTimeError
+optional_named_parameters_test/07: MissingCompileTimeError
+optional_named_parameters_test/08: MissingCompileTimeError
+optional_named_parameters_test/09: MissingCompileTimeError
+override_field_test/02: MissingCompileTimeError
+override_field_test/03: MissingCompileTimeError
+override_inheritance_abstract_test/02: MissingCompileTimeError
+override_inheritance_abstract_test/03: MissingCompileTimeError
+override_inheritance_abstract_test/04: MissingCompileTimeError
+override_inheritance_abstract_test/08: MissingCompileTimeError
+override_inheritance_abstract_test/09: MissingCompileTimeError
+override_inheritance_abstract_test/10: MissingCompileTimeError
+override_inheritance_abstract_test/11: MissingCompileTimeError
+override_inheritance_abstract_test/12: MissingCompileTimeError
+override_inheritance_abstract_test/13: MissingCompileTimeError
+override_inheritance_abstract_test/14: MissingCompileTimeError
+override_inheritance_abstract_test/17: MissingCompileTimeError
+override_inheritance_abstract_test/19: MissingCompileTimeError
+override_inheritance_abstract_test/20: MissingCompileTimeError
+override_inheritance_abstract_test/21: MissingCompileTimeError
+override_inheritance_abstract_test/22: MissingCompileTimeError
+override_inheritance_abstract_test/23: MissingCompileTimeError
+override_inheritance_abstract_test/24: MissingCompileTimeError
+override_inheritance_abstract_test/25: MissingCompileTimeError
+override_inheritance_abstract_test/26: MissingCompileTimeError
+override_inheritance_abstract_test/28: MissingCompileTimeError
+override_inheritance_field_test/05: MissingCompileTimeError
+override_inheritance_field_test/07: MissingCompileTimeError
+override_inheritance_field_test/08: MissingCompileTimeError
+override_inheritance_field_test/09: MissingCompileTimeError
+override_inheritance_field_test/10: MissingCompileTimeError
+override_inheritance_field_test/11: MissingCompileTimeError
+override_inheritance_field_test/28: MissingCompileTimeError
+override_inheritance_field_test/30: MissingCompileTimeError
+override_inheritance_field_test/31: MissingCompileTimeError
+override_inheritance_field_test/32: MissingCompileTimeError
+override_inheritance_field_test/33: MissingCompileTimeError
+override_inheritance_field_test/33a: MissingCompileTimeError
+override_inheritance_field_test/34: MissingCompileTimeError
+override_inheritance_field_test/44: MissingCompileTimeError
+override_inheritance_field_test/47: MissingCompileTimeError
+override_inheritance_field_test/48: MissingCompileTimeError
+override_inheritance_field_test/53: MissingCompileTimeError
+override_inheritance_field_test/54: MissingCompileTimeError
+override_inheritance_generic_test/04: MissingCompileTimeError
+override_inheritance_generic_test/06: MissingCompileTimeError
+override_inheritance_generic_test/07: MissingCompileTimeError
+override_inheritance_generic_test/08: MissingCompileTimeError
+override_inheritance_generic_test/09: MissingCompileTimeError
+override_inheritance_generic_test/10: MissingCompileTimeError
+override_inheritance_method_test/04: MissingCompileTimeError
+override_inheritance_method_test/05: MissingCompileTimeError
+override_inheritance_method_test/06: MissingCompileTimeError
+override_inheritance_method_test/11: MissingCompileTimeError
+override_inheritance_method_test/12: MissingCompileTimeError
+override_inheritance_method_test/13: MissingCompileTimeError
+override_inheritance_method_test/14: MissingCompileTimeError
+override_inheritance_method_test/19: MissingCompileTimeError
+override_inheritance_method_test/20: MissingCompileTimeError
+override_inheritance_method_test/21: MissingCompileTimeError
+override_inheritance_method_test/27: MissingCompileTimeError
+override_inheritance_method_test/30: MissingCompileTimeError
+override_inheritance_method_test/31: MissingCompileTimeError
+override_inheritance_method_test/32: MissingCompileTimeError
+override_inheritance_method_test/33: MissingCompileTimeError
+override_inheritance_mixed_test/06: MissingCompileTimeError
+override_inheritance_mixed_test/07: MissingCompileTimeError
+override_inheritance_no_such_method_test/01: MissingCompileTimeError
+override_inheritance_no_such_method_test/02: MissingCompileTimeError
+override_inheritance_no_such_method_test/06: MissingCompileTimeError
+override_inheritance_no_such_method_test/07: MissingCompileTimeError
+override_inheritance_no_such_method_test/09: MissingCompileTimeError
+override_inheritance_no_such_method_test/10: MissingCompileTimeError
+override_inheritance_no_such_method_test/12: MissingCompileTimeError
+override_inheritance_no_such_method_test/13: MissingCompileTimeError
+override_method_with_field_test/02: MissingCompileTimeError
+part2_test/01: MissingCompileTimeError
 positional_parameters_type_test/01: MissingCompileTimeError
 positional_parameters_type_test/02: MissingCompileTimeError
+prefix16_test/00: MissingCompileTimeError
+prefix16_test/01: MissingCompileTimeError
+prefix22_test/00: MissingCompileTimeError
+prefix23_test/00: MissingCompileTimeError
+private_access_test/01: MissingCompileTimeError
+private_access_test/02: MissingCompileTimeError
+private_access_test/03: MissingCompileTimeError
+private_access_test/04: MissingCompileTimeError
+private_access_test/05: MissingCompileTimeError
+private_access_test/06: MissingCompileTimeError
+recursive_generic_test: RuntimeError
+regress_12561_test: MissingCompileTimeError
+regress_13494_test: MissingCompileTimeError
+regress_17382_test: MissingCompileTimeError
+regress_19413_test: MissingCompileTimeError
+regress_19728_test: MissingCompileTimeError
+regress_21793_test/01: MissingCompileTimeError
+regress_21912_test/01: MissingCompileTimeError
+regress_21912_test/02: MissingCompileTimeError
+regress_22438_test: MissingCompileTimeError
+regress_22936_test: MissingCompileTimeError
 regress_22976_test: CompileTimeError # Issue 23132
+regress_23089_test: MissingCompileTimeError
+regress_23408_test: RuntimeError
 regress_24283_test: RuntimeError # Issue 1533
+regress_26133_test: MissingCompileTimeError
+regress_27572_test: MissingCompileTimeError
+regress_31057_test: RuntimeError
+regress_31591_test: RuntimeError, OK # strong mode only
+return_type_test: MissingCompileTimeError
+rewrite_implicit_this_test/01: MissingCompileTimeError
+runtime_type_function_test: RuntimeError
 scope_variable_test/01: MissingCompileTimeError # Issue 13016
 setter4_test: CompileTimeError # issue 13639
+setter4_test: MissingCompileTimeError
+setter_override_test/01: MissingCompileTimeError
+setter_override_test/02: MissingCompileTimeError
 stacktrace_demangle_ctors_test: Fail # dart2js stack traces are not always compliant, issue 12698
 stacktrace_rethrow_error_test: Pass, RuntimeError # Issue 12698
 stacktrace_rethrow_nonerror_test: Pass, RuntimeError # Issue 12698
 stacktrace_test: Pass, RuntimeError # # Issue 12698
+static_field1_test/01: MissingCompileTimeError
+static_field1a_test/01: MissingCompileTimeError
+static_field3_test/01: MissingCompileTimeError
+static_field3_test/02: MissingCompileTimeError
+static_field3_test/03: MissingCompileTimeError
+static_field3_test/04: MissingCompileTimeError
+static_field_test/01: MissingCompileTimeError
+static_field_test/02: MissingCompileTimeError
+static_field_test/03: MissingCompileTimeError
+static_field_test/04: MissingCompileTimeError
+static_final_field2_test/01: MissingCompileTimeError
+static_getter_no_setter1_test/01: MissingCompileTimeError
+static_getter_no_setter2_test/01: MissingCompileTimeError
+static_initializer_type_error_test: MissingCompileTimeError
+static_setter_get_test/01: MissingCompileTimeError
+string_interpolation_test/01: MissingCompileTimeError
+string_no_operator_test/01: MissingCompileTimeError
+string_no_operator_test/02: MissingCompileTimeError
+string_no_operator_test/03: MissingCompileTimeError
+string_no_operator_test/04: MissingCompileTimeError
+string_no_operator_test/05: MissingCompileTimeError
+string_no_operator_test/06: MissingCompileTimeError
+string_no_operator_test/07: MissingCompileTimeError
+string_no_operator_test/08: MissingCompileTimeError
+string_no_operator_test/09: MissingCompileTimeError
+string_no_operator_test/10: MissingCompileTimeError
+string_no_operator_test/11: MissingCompileTimeError
+string_no_operator_test/12: MissingCompileTimeError
+string_no_operator_test/13: MissingCompileTimeError
+string_no_operator_test/14: MissingCompileTimeError
+string_no_operator_test/15: MissingCompileTimeError
+string_no_operator_test/16: MissingCompileTimeError
+string_test/01: MissingCompileTimeError
+substring_test/01: MissingCompileTimeError
+super_assign_test/01: MissingCompileTimeError
+super_bound_closure_test/01: MissingCompileTimeError
+super_operator_index_test/01: MissingCompileTimeError
+super_operator_index_test/02: MissingCompileTimeError
+super_operator_index_test/03: MissingCompileTimeError
+super_operator_index_test/04: MissingCompileTimeError
+super_operator_index_test/05: MissingCompileTimeError
+super_operator_index_test/06: MissingCompileTimeError
+super_operator_index_test/07: MissingCompileTimeError
+super_test: RuntimeError
+switch_fallthru_test/01: MissingCompileTimeError
+sync_generator1_test/01: MissingCompileTimeError
+syntax_test/60: MissingCompileTimeError
+syntax_test/61: MissingCompileTimeError
+syntax_test/62: MissingCompileTimeError, Crash
+top_level_getter_no_setter1_test: MissingCompileTimeError
+top_level_getter_no_setter2_test: MissingCompileTimeError
+transitive_private_library_access_test: MissingCompileTimeError
 truncdiv_test: RuntimeError # Issue 15246
+try_catch_on_syntax_test/07: MissingCompileTimeError
 try_catch_on_syntax_test/10: Fail # Issue 19823
+try_catch_on_syntax_test/10: MissingCompileTimeError
+try_catch_on_syntax_test/11: MissingCompileTimeError
 try_catch_on_syntax_test/11: Fail # Issue 19823
+try_catch_syntax_test/08: MissingCompileTimeError
+type_checks_in_factory_method_test/01: MissingCompileTimeError
 type_inference_accessor_ref_test/03: MissingCompileTimeError
 type_inference_accessor_ref_test/06: MissingCompileTimeError
 type_inference_circularity_test: MissingCompileTimeError
 type_inference_inconsistent_inheritance_test: MissingCompileTimeError
+type_literal_prefix_call_test: RuntimeError
+type_promotion_functions_test/01: MissingCompileTimeError
+type_promotion_functions_test/05: MissingCompileTimeError
+type_promotion_functions_test/06: MissingCompileTimeError
+type_promotion_functions_test/07: MissingCompileTimeError
+type_promotion_functions_test/08: MissingCompileTimeError
+type_promotion_functions_test/10: MissingCompileTimeError
+type_promotion_parameter_test/01: MissingCompileTimeError
+type_promotion_parameter_test/02: MissingCompileTimeError
+type_promotion_parameter_test/03: MissingCompileTimeError
+type_promotion_parameter_test/04: MissingCompileTimeError
+type_promotion_parameter_test/05: MissingCompileTimeError
+type_promotion_parameter_test/06: MissingCompileTimeError
+type_promotion_parameter_test/07: MissingCompileTimeError
+type_promotion_parameter_test/08: MissingCompileTimeError
+type_promotion_parameter_test/09: MissingCompileTimeError
+type_promotion_parameter_test/10: MissingCompileTimeError
+type_promotion_parameter_test/11: MissingCompileTimeError
+type_promotion_parameter_test/12: MissingCompileTimeError
+type_promotion_parameter_test/13: MissingCompileTimeError
+type_promotion_parameter_test/14: MissingCompileTimeError
+type_promotion_parameter_test/15: MissingCompileTimeError
+type_promotion_parameter_test/16: MissingCompileTimeError
+type_promotion_parameter_test/17: MissingCompileTimeError
+type_promotion_parameter_test/18: MissingCompileTimeError
+type_promotion_parameter_test/19: MissingCompileTimeError
+type_promotion_parameter_test/20: MissingCompileTimeError
+type_promotion_parameter_test/21: MissingCompileTimeError
+type_promotion_parameter_test/22: MissingCompileTimeError
+type_promotion_parameter_test/23: MissingCompileTimeError
+type_promotion_parameter_test/24: MissingCompileTimeError
+type_promotion_parameter_test/25: MissingCompileTimeError
+type_promotion_parameter_test/26: MissingCompileTimeError
+type_promotion_parameter_test/27: MissingCompileTimeError
+type_promotion_parameter_test/28: MissingCompileTimeError
+type_promotion_parameter_test/29: MissingCompileTimeError
+type_promotion_parameter_test/30: MissingCompileTimeError
+type_promotion_parameter_test/31: MissingCompileTimeError
+type_promotion_parameter_test/32: MissingCompileTimeError
+type_promotion_parameter_test/33: MissingCompileTimeError
+type_promotion_parameter_test/34: MissingCompileTimeError
+type_promotion_parameter_test/35: MissingCompileTimeError
+type_promotion_parameter_test/36: MissingCompileTimeError
+type_promotion_parameter_test/37: MissingCompileTimeError
+type_promotion_parameter_test/38: MissingCompileTimeError
+type_promotion_parameter_test/39: MissingCompileTimeError
+type_promotion_parameter_test/40: MissingCompileTimeError
+type_promotion_parameter_test/41: MissingCompileTimeError
+type_promotion_parameter_test/42: MissingCompileTimeError
+type_promotion_parameter_test/43: MissingCompileTimeError
+type_promotion_parameter_test/44: MissingCompileTimeError
+type_promotion_parameter_test/45: MissingCompileTimeError
+type_promotion_parameter_test/46: MissingCompileTimeError
+type_promotion_parameter_test/47: MissingCompileTimeError
+type_promotion_parameter_test/48: MissingCompileTimeError
+type_promotion_parameter_test/49: MissingCompileTimeError
+type_promotion_parameter_test/50: MissingCompileTimeError
+type_promotion_parameter_test/51: MissingCompileTimeError
+type_promotion_parameter_test/52: MissingCompileTimeError
+type_promotion_parameter_test/54: MissingCompileTimeError
+type_promotion_parameter_test/55: MissingCompileTimeError
+type_promotion_parameter_test/56: MissingCompileTimeError
+type_variable_bounds2_test: MissingCompileTimeError
+type_variable_bounds3_test/00: MissingCompileTimeError
+type_variable_bounds4_test/01: MissingCompileTimeError
+type_variable_bounds_test/00: MissingCompileTimeError
+type_variable_bounds_test/01: MissingCompileTimeError
+type_variable_bounds_test/02: MissingCompileTimeError
+type_variable_bounds_test/03: MissingCompileTimeError
+type_variable_bounds_test/04: MissingCompileTimeError
+type_variable_bounds_test/05: MissingCompileTimeError
+type_variable_bounds_test/06: MissingCompileTimeError
+type_variable_bounds_test/07: MissingCompileTimeError
+type_variable_bounds_test/08: MissingCompileTimeError
+type_variable_bounds_test/09: MissingCompileTimeError
+type_variable_bounds_test/10: MissingCompileTimeError
+type_variable_bounds_test/11: MissingCompileTimeError
+type_variable_conflict2_test/01: MissingCompileTimeError
+type_variable_conflict2_test/03: MissingCompileTimeError
+type_variable_conflict2_test/04: MissingCompileTimeError
+type_variable_conflict2_test/05: MissingCompileTimeError
+type_variable_conflict2_test/07: MissingCompileTimeError
+type_variable_conflict2_test/09: MissingCompileTimeError
 type_variable_conflict_test/01: Fail # Issue 13702
 type_variable_conflict_test/02: Fail # Issue 13702
 type_variable_conflict_test/03: Fail # Issue 13702
 type_variable_conflict_test/04: Fail # Issue 13702
 type_variable_conflict_test/05: Fail # Issue 13702
 type_variable_conflict_test/06: Fail # Issue 13702
+type_variable_identifier_expression_test: MissingCompileTimeError
+type_variable_nested_test/01: RuntimeError
+type_variable_promotion_test: RuntimeError
+type_variable_scope2_test: MissingCompileTimeError
+type_variable_scope_test/00: MissingCompileTimeError
+type_variable_scope_test/01: MissingCompileTimeError
+type_variable_scope_test/02: MissingCompileTimeError
+type_variable_scope_test/03: MissingCompileTimeError
+type_variable_scope_test/04: MissingCompileTimeError
+type_variable_scope_test/05: MissingCompileTimeError
+type_variable_static_context_test: MissingCompileTimeError
+typed_selector2_test: MissingCompileTimeError
+unbound_getter_test: MissingCompileTimeError
+unresolved_default_constructor_test/01: MissingCompileTimeError
+unresolved_in_factory_test: MissingCompileTimeError
+unresolved_top_level_method_test: MissingCompileTimeError
+unresolved_top_level_var_test: MissingCompileTimeError
+vm/*: SkipByDesign # Tests for the VM.
+void_block_return_test/00: MissingCompileTimeError
+wrong_number_type_arguments_test/*: MissingCompileTimeError
 
 [ $compiler == dart2js && !$dart2js_with_kernel && $fast_startup ]
 const_evaluation_test/*: Fail # mirrors not supported
@@ -3773,6 +4073,12 @@
 [ $compiler == dart2js && !$dart2js_with_kernel && !$minified ]
 vm/async_await_catch_stacktrace_test: RuntimeError
 
+[ $compiler == dart2js && $fasta ]
+syntax_test/62: Crash
+
+[ $compiler == dart2js && !$fasta ]
+syntax_test/59: MissingCompileTimeError
+
 [ $compiler == dart2js && $minified ]
 cyclic_type2_test: RuntimeError # Issue 31054
 cyclic_type_test/0*: RuntimeError # Issue 31054
@@ -3786,3 +4092,6 @@
 mixin_mixin_bound2_test: RuntimeError # Issue 31054
 mixin_mixin_bound_test: RuntimeError # Issue 31054
 
+[ $compiler == dart2js && !$strong ]
+dynamic_test: RuntimeError
+
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 40dd00d..5deda7c 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -20,8 +20,11 @@
 black_listed_test/none: Fail # Issue 14228
 built_in_identifier_prefix_test: CompileTimeError
 built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Issue 28816
+call_type_literal_test: CompileTimeError
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: CompileTimeError
+class_literal_static_test/none: CompileTimeError
+class_literal_test/none: CompileTimeError
 conflicting_type_variable_and_setter_test: CompileTimeError
 const_for_in_variable_test/01: MissingCompileTimeError
 const_types_test/07: MissingCompileTimeError
@@ -29,6 +32,7 @@
 const_types_test/14: MissingCompileTimeError
 const_types_test/15: MissingCompileTimeError
 constant_type_literal_test/01: MissingCompileTimeError # DDC allows type parameter type literals in const expressions.
+constructor_call_as_function_test: CompileTimeError
 emit_const_fields_test: CompileTimeError
 enum_syntax_test/05: MissingCompileTimeError
 enum_syntax_test/06: MissingCompileTimeError
@@ -54,9 +58,19 @@
 initializing_formal_final_test: MissingCompileTimeError
 instantiate_tearoff_after_contravariance_check_test: RuntimeError
 instantiate_tearoff_of_call_test: RuntimeError
-instantiate_tearoff_test: RuntimeError
 interface_test/00: MissingCompileTimeError
 internal_library_test/01: MissingCompileTimeError # Issue 29920
+issue31596_implement_covariant_test: CompileTimeError
+issue31596_override_test/01: CompileTimeError
+issue31596_override_test/02: CompileTimeError
+issue31596_override_test/03: CompileTimeError
+issue31596_override_test/04: CompileTimeError
+issue31596_override_test/none: CompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue31596_super_test/05: CompileTimeError
+issue31596_super_test/none: CompileTimeError
+issue31596_tearoff_test: CompileTimeError
 issue31596_test: CompileTimeError
 method_override_test: CompileTimeError # Negative test
 mixin_super_2_test/01: MissingCompileTimeError
@@ -104,6 +118,7 @@
 try_catch_on_syntax_test/11: MissingCompileTimeError
 type_inference_circularity_test: MissingCompileTimeError
 type_inference_inconsistent_inheritance_test: MissingCompileTimeError
+type_literal_prefix_call_test: CompileTimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 30895
 type_promotion_functions_test/03: CompileTimeError # Issue 30895
 type_promotion_functions_test/04: CompileTimeError # Issue 30895
@@ -116,6 +131,207 @@
 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
@@ -334,7 +550,6 @@
 function_type/function_type99_test: RuntimeError # Issue 31766
 function_type_parameter2_negative_test: Fail
 function_type_parameter_negative_test: Fail
-generalized_void_syntax_test: CompileTimeError
 generic_function_bounds_test: CompileTimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_generic_function_result_test/01: MissingCompileTimeError
@@ -358,7 +573,13 @@
 instantiate_tearoff_of_call_test: CompileTimeError
 invocation_mirror_test: CompileTimeError # Issue 31402 Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::Invocation'.
 issue18628_2_test/01: MissingCompileTimeError
-issue31596_test: RuntimeError
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
 issue_25671a_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
 issue_25671b_test/01: CompileTimeError # Warning: The method 'A::noSuchMethod' has fewer positional arguments than those of overridden method 'Object::noSuchMethod'.
 local_function_test/01: MissingCompileTimeError
@@ -389,7 +610,6 @@
 method_override8_test/01: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError # Issue 31616
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError
@@ -451,7 +671,6 @@
 mixin_invalid_bound_test/08: MissingCompileTimeError
 mixin_invalid_bound_test/09: MissingCompileTimeError
 mixin_invalid_bound_test/10: MissingCompileTimeError
-mixin_lib_extends_field_test: RuntimeError
 mixin_of_mixin_test/01: MissingCompileTimeError
 mixin_of_mixin_test/02: MissingCompileTimeError
 mixin_of_mixin_test/03: MissingCompileTimeError
@@ -482,9 +701,8 @@
 named_parameters_test/06: MissingCompileTimeError
 named_parameters_test/08: MissingCompileTimeError
 named_parameters_test/10: MissingCompileTimeError
+nsm5_test: MissingCompileTimeError
 null_no_such_method_test: CompileTimeError # Issue 31533
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
 optional_named_parameters_test/02: MissingCompileTimeError
 optional_named_parameters_test/04: MissingCompileTimeError
 optional_named_parameters_test/06: MissingCompileTimeError
@@ -519,6 +737,7 @@
 override_inheritance_mixed_test/09: MissingCompileTimeError
 override_inheritance_no_such_method_test/01: MissingCompileTimeError
 override_inheritance_no_such_method_test/02: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 override_inheritance_no_such_method_test/06: MissingCompileTimeError
 override_inheritance_no_such_method_test/07: MissingCompileTimeError
 override_inheritance_no_such_method_test/09: MissingCompileTimeError
@@ -538,7 +757,6 @@
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError
-regress_30516_test: CompileTimeError # Issue 30470.
 setter4_test: MissingCompileTimeError
 setter_no_getter_test/01: CompileTimeError
 setter_override_test/00: MissingCompileTimeError
@@ -595,7 +813,9 @@
 type_variable_bounds_test/08: MissingCompileTimeError
 type_variable_bounds_test/11: MissingCompileTimeError
 void_block_return_test/00: MissingCompileTimeError
-void_type_callbacks_test/none: CompileTimeError
+void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError, Crash
+void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError, Crash
+void_type_usage_test/conditional_return_to_void: MissingCompileTimeError, Crash
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $compiler == dartdevc && $runtime != none ]
@@ -615,7 +835,6 @@
 expect_test: RuntimeError # Issue 29920
 f_bounded_quantification3_test: RuntimeError # Issue 29920
 final_field_initialization_order_test: RuntimeError # Issue 31058
-first_class_types_test: RuntimeError, OK # Strong mode reifies inferred type argument.
 forwarding_stub_tearoff_generic_test: RuntimeError
 fuzzy_arrows_test/03: RuntimeError # Issue 29630
 generic_methods_overriding_test/03: MissingCompileTimeError # Issue 29920
@@ -630,7 +849,6 @@
 library_env_test/has_io_support: RuntimeError, OK
 library_env_test/has_mirror_support: RuntimeError, OK
 library_env_test/has_no_html_support: RuntimeError, OK
-list_is_test: RuntimeError # Issue 29920
 mixin_super_test: RuntimeError
 mixin_super_use_test: RuntimeError
 multiline_newline_test/03: RuntimeError
@@ -650,14 +868,8 @@
 truncdiv_test: RuntimeError # Issue 29920
 
 [ $compiler == dartdevk && $runtime != none ]
-callable_test/none: RuntimeError # Expect.throws(TypeError) fails: Did not throw
 conditional_import_string_test: CompileTimeError # Test is broken
 conditional_import_test: CompileTimeError # Test is broken
-cyclic_type_test/00: RuntimeError # Expect.equals(expected: <Derived>, actual: <dynamic>) fails.
-cyclic_type_test/01: RuntimeError # Expect.equals(at index 0: Expected <Derived<Derived<int>>...>, Found: <dynamic>) fails.
-f_bounded_equality_test: RuntimeError # Expect.equals(expected: <dynamic>, actual: <Real>) fails.
-first_class_types_test: RuntimeError # Expect.equals(expected: <List>, actual: <List<int>>) fails.
-forwarding_stub_tearoff_test: RuntimeError
 function_subtype_bound_closure1_test: RuntimeError # Expect.isTrue(false, 'foo is Foo') fails.
 function_subtype_bound_closure2_test: RuntimeError # ReferenceError: TAndStringToint is not defined
 function_subtype_bound_closure5_test: RuntimeError # ReferenceError: TAndStringToint is not defined
@@ -683,30 +895,14 @@
 function_type_alias_test: RuntimeError # Expect.isTrue(false) fails.
 generic_closure_test/01: RuntimeError # ReferenceError: TToT is not defined
 generic_closure_test/none: RuntimeError # ReferenceError: TToT is not defined
-generic_function_dcall_test: RuntimeError
-generic_list_checked_test: RuntimeError # Expect.throws fails: Did not throw
 generic_test: RuntimeError # ReferenceError: BOfT is not defined
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
 library_env_test/has_io_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 library_env_test/has_mirror_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 library_env_test/has_no_html_support: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-mixin_bound_test: RuntimeError
-mixin_extends_field_test: RuntimeError # Expect.equals(expected: <M1-bar>, actual: <null>) fails.
-mixin_field_test: RuntimeError # NoSuchMethodError: method not found: 'bar'
-mixin_forwarding_constructor1_test: RuntimeError # Expect.equals(expected: <2>, actual: <null>) fails.
-mixin_forwarding_constructor2_test: RuntimeError # Expect.equals(expected: <2>, actual: <null>) fails.
-mixin_forwarding_constructor3_test: RuntimeError # Expect.equals(expected: <2>, actual: <null>) fails.
-mixin_illegal_super_use_test/none: RuntimeError # TypeError: e.bar is not a function
-mixin_is_test: RuntimeError # Expect.isTrue(false) fails.
-mixin_method_test: RuntimeError # Expect.equals(expected: <M2-bar>, actual: <M1-bar>) fails.
-mixin_mixin_type_arguments_test: RuntimeError
-mixin_naming_test: RuntimeError # Expect.isTrue(false) fails.
-mixin_regress_13688_test: RuntimeError
-mixin_type_parameter5_test: RuntimeError
 mock_writable_final_field_test: RuntimeError # Expect.listEquals(list length, expected: <1>, actual: <0>) fails: Next element <123>
 mock_writable_final_private_field_test: RuntimeError
-nested_generic_closure_test: RuntimeError # Expect.equals(at index 3: Expected <...(<F>(F) => F) => void>, Found: <...(<F extends Object>(F) => F) => void...>) fails.
-recursive_generic_test: RuntimeError # Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-recursive_inheritance_test: RuntimeError # Expect.isTrue(false) fails.
 redirecting_factory_long_test: RuntimeError # Expect.isTrue(false) fails.
 redirecting_factory_reflection_test: RuntimeError # UnimplementedError: node <InvalidExpression> `invalid-expression`
 regress_24283_test: RuntimeError # Expect.equals(expected: <-1>, actual: <4294967295>) fails.
@@ -714,7 +910,6 @@
 runtime_type_function_test: RuntimeError # Expect.fail('Type print string does not match expectation
 syncstar_yield_test/copyParameters: RuntimeError # Expect.equals(expected: <2>, actual: <3>) fails.
 type_literal_test: RuntimeError # Expect.equals(expected: <Func>, actual: <(bool) => int>) fails.
-instantiate_tearoff_test: RuntimeError
 
 [ $compiler == dartdevk && $checked ]
 assertion_initializer_const_error2_test/*: MissingCompileTimeError
@@ -769,7 +964,6 @@
 deferred_static_seperate_test: RuntimeError # Issue 27777; Expect.throws fails: Did not throw
 double_int_to_string_test: RuntimeError # Issue 29920; Expect.equals(expected: <0.0>, actual: <0>) fails.
 double_to_string_as_fixed2_test/none: RuntimeError # Issue 29920; Expect.throws(ArgumentError) fails: Did not throw
-dynamic_test: RuntimeError # Strong mode is-check failure: M1 does not soundly subtype Iface<dynamic, num>; Expect.isTrue(false) fails.
 example_constructor_test: RuntimeError # Expect.equals(expected: <0 1 2 3 4 5 6 >, actual: <0 3 4 1 2 5 6 >) fails.
 exception_test: RuntimeError # DDC doesn't implement NullThrownError?; Expect.isTrue(false) fails.
 expect_test: RuntimeError # Issue 29920; Expect.identical did not fail
@@ -805,7 +999,6 @@
 library_env_test/has_no_io_support: RuntimeError # Issue 30907; Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 library_env_test/has_no_mirror_support: RuntimeError # Issue 30907; Unsupported operation: bool.fromEnvironment can only be used as a const constructor
 library_env_test/none: RuntimeError # Issue 30907; Unsupported operation: bool.fromEnvironment can only be used as a const constructor
-list_is_test: RuntimeError # Issue 29920; Expect.equals(expected: <true>, actual: <false>) fails.
 local_function2_test/none: RuntimeError # ReferenceError: TToNull is not defined
 local_function3_test/none: RuntimeError # Expect.equals(expected: <true>, actual: <false>) fails.
 local_function_test/none: RuntimeError # Expect.equals(expected: <true>, actual: <false>) fails.
@@ -849,7 +1042,6 @@
 field3_test/01: MissingCompileTimeError
 generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 29920
 generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 29920
-generic_list_checked_test: CompileTimeError
 generic_methods_overriding_test/01: MissingCompileTimeError # Issue 29920
 generic_tearoff_test: CompileTimeError
 int64_literal_test/*: Skip # This is testing Dart 2.0 int64 semantics.
@@ -859,7 +1051,6 @@
 multiline_newline_test/04r: MissingCompileTimeError
 multiline_newline_test/05: MissingCompileTimeError
 multiline_newline_test/05r: MissingCompileTimeError
-no_such_method_tearoff_fta_test: RuntimeError # Issue http://dartbug.com/31897
 override_field_test/03: MissingCompileTimeError
 override_inheritance_abstract_test/02: MissingCompileTimeError
 override_inheritance_abstract_test/03: MissingCompileTimeError
@@ -884,54 +1075,6 @@
 parser_quirks_test: CompileTimeError
 regress_27617_test/1: MissingCompileTimeError
 vm/*: SkipByDesign # VM only tests.; VM only tests.
-void_type_function_types_test/none: CompileTimeError # Issue 30514
-void_type_override_test/none: CompileTimeError # Issue 30514
-void_type_usage_test/call_as: CompileTimeError # Issue 30514
-void_type_usage_test/call_for: CompileTimeError # Issue 30514
-void_type_usage_test/call_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/call_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/field_assign: CompileTimeError # Issue 30514
-void_type_usage_test/field_assign2: CompileTimeError # Issue 30514
-void_type_usage_test/final_local_as: CompileTimeError # Issue 30514
-void_type_usage_test/final_local_for: CompileTimeError # Issue 30514
-void_type_usage_test/final_local_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/final_local_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/global_as: CompileTimeError # Issue 30514
-void_type_usage_test/global_for: CompileTimeError # Issue 30514
-void_type_usage_test/global_for_in2: CompileTimeError # Issue 30514
-void_type_usage_test/global_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/global_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/instance2_as: CompileTimeError # Issue 30514
-void_type_usage_test/instance2_for: CompileTimeError # Issue 30514
-void_type_usage_test/instance2_for_in3: CompileTimeError # Issue 30514
-void_type_usage_test/instance2_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/instance2_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/instance3_as: CompileTimeError # Issue 30514
-void_type_usage_test/instance3_for: CompileTimeError # Issue 30514
-void_type_usage_test/instance3_for_in3: CompileTimeError # Issue 30514
-void_type_usage_test/instance3_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/instance3_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/instance_as: CompileTimeError # Issue 30514
-void_type_usage_test/instance_for: CompileTimeError # Issue 30514
-void_type_usage_test/instance_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/instance_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/local_as: CompileTimeError # Issue 30514
-void_type_usage_test/local_assign: CompileTimeError # Issue 30514
-void_type_usage_test/local_for: CompileTimeError # Issue 30514
-void_type_usage_test/local_for_in2: CompileTimeError # Issue 30514
-void_type_usage_test/local_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/local_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/none: CompileTimeError # Issue 30514
-void_type_usage_test/param_as: CompileTimeError # Issue 30514
-void_type_usage_test/param_for: CompileTimeError # Issue 30514
-void_type_usage_test/param_for_in2: CompileTimeError # Issue 30514
-void_type_usage_test/param_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/param_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/paren_as: CompileTimeError # Issue 30514
-void_type_usage_test/paren_for: CompileTimeError # Issue 30514
-void_type_usage_test/paren_return_to_void: CompileTimeError # Issue 30514
-void_type_usage_test/paren_stmt: CompileTimeError # Issue 30514
-void_type_usage_test/setter_assign: CompileTimeError # Issue 30514
 
 [ $compiler == dartdevk || $compiler == dartdevc && $runtime == none ]
 instantiate_type_variable_test/01: CompileTimeError
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index dfefc92..032adc8 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -16,7 +16,252 @@
 no_such_method_subtype_test: RuntimeError # Issue 31424
 
 [ $fasta ]
+implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_named_test: CompileTimeError
+implicit_creation/implicit_const_context_constructor_test: CompileTimeError
+implicit_creation/implicit_const_context_list_test: CompileTimeError
+implicit_creation/implicit_const_context_map_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_named_test: CompileTimeError
+implicit_creation/implicit_const_context_prefix_constructor_test: CompileTimeError
+implicit_creation/implicit_new_constructor_generic_named_test: CompileTimeError
+implicit_creation/implicit_new_constructor_generic_test: CompileTimeError
+implicit_creation/implicit_new_or_const_generic_test: CompileTimeError
+implicit_creation/implicit_new_prefix_constructor_generic_named_test: CompileTimeError
 regress_22976_test/*: CompileTimeError # Issue 31935
+syntax_test/60: MissingCompileTimeError
+syntax_test/61: MissingCompileTimeError
+syntax_test/62: MissingCompileTimeError
+void_type_callbacks_test/00: MissingCompileTimeError
+void_type_callbacks_test/01: MissingCompileTimeError
+void_type_function_types_test/04: MissingCompileTimeError
+void_type_function_types_test/06: MissingCompileTimeError
+void_type_function_types_test/08: MissingCompileTimeError
+void_type_override_test/00: MissingCompileTimeError
+void_type_override_test/00b: MissingCompileTimeError
+void_type_override_test/00c: MissingCompileTimeError
+void_type_override_test/01: MissingCompileTimeError
+void_type_override_test/03: MissingCompileTimeError
+void_type_usage_test/call_argument: MissingCompileTimeError
+void_type_usage_test/call_cascade: 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_dot: 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_toString: 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_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_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_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_cascade: 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_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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: 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_cascade: 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_dot: 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_toString: MissingCompileTimeError
+void_type_usage_test/paren_void_init: MissingCompileTimeError
+void_type_usage_test/paren_while: MissingCompileTimeError
 
 [ $compiler == dartk && $mode == debug && $runtime == vm && $strong ]
 bad_named_parameters_test/01: Crash # Issue(http://dartbug.com/31630)
@@ -199,7 +444,6 @@
 field_override_optimization_test: RuntimeError
 field_type_check2_test/01: MissingRuntimeError
 function_subtype_setter0_test: RuntimeError
-generic_list_checked_test: RuntimeError
 if_null_precedence_test/none: RuntimeError
 type_error_test: RuntimeError # Issue 31402 (Variable declaration)
 
@@ -329,7 +573,7 @@
 cyclic_typedef_test/11: Crash
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_call_empty_before_load_test: CompileTimeError # VM doen't support deserializing load-library checks (issue XXX)
+deferred_call_empty_before_load_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_closurize_load_library_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_constant_list_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 deferred_constraints_constants_test/default_argument2: Pass # Passes by mistake. KernelVM bug: Deferred loading kernel issue 28335.
@@ -371,8 +615,6 @@
 disassemble_test: Pass, Slow
 duplicate_export_negative_test: Fail # Issue 6134
 dynamic_prefix_core_test/none: CompileTimeError
-dynamic_test: RuntimeError
-dynamic_test: CompileTimeError # Issue 31402 (Variable declaration)
 emit_const_fields_test: CompileTimeError # Issue 31533
 example_constructor_test: Fail, OK
 external_test/10: MissingRuntimeError # KernelVM bug: Unbound external.
@@ -388,7 +630,6 @@
 field_override2_test: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
-first_class_types_test: RuntimeError
 flatten_test/05: MissingRuntimeError
 flatten_test/08: MissingRuntimeError
 flatten_test/09: MissingRuntimeError
@@ -423,14 +664,12 @@
 function_type_alias4_test: RuntimeError
 function_type_alias6_test/none: RuntimeError
 function_type_alias_test: RuntimeError
-generalized_void_syntax_test: CompileTimeError # Issue #30176.
 generic_closure_test: RuntimeError
-generic_function_bounds_test: RuntimeError
 generic_function_bounds_test: CompileTimeError
+generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: RuntimeError
 generic_instanceof2_test: RuntimeError
 generic_is_check_test: RuntimeError
-generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
@@ -452,6 +691,13 @@
 instantiate_tearoff_of_call_test: CompileTimeError
 invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
 issue18628_2_test/01: MissingCompileTimeError
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
 issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
 issue_25671b_test/01: DartkCrash
@@ -459,7 +705,6 @@
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_no_io_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_no_mirror_support: RuntimeError
-list_is_test: RuntimeError
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
 local_function_test/01: MissingCompileTimeError
@@ -561,6 +806,7 @@
 no_main_test/01: Skip
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
+nsm5_test: MissingCompileTimeError
 null_no_such_method_test: CompileTimeError # Issue 31533
 optional_named_parameters_test/02: MissingCompileTimeError
 optional_named_parameters_test/04: MissingCompileTimeError
@@ -606,6 +852,7 @@
 override_inheritance_mixed_test/09: MissingCompileTimeError
 override_inheritance_no_such_method_test/01: MissingCompileTimeError
 override_inheritance_no_such_method_test/02: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 override_inheritance_no_such_method_test/06: MissingCompileTimeError
 override_inheritance_no_such_method_test/07: MissingCompileTimeError
 override_inheritance_no_such_method_test/09: MissingCompileTimeError
@@ -613,7 +860,6 @@
 override_inheritance_no_such_method_test/12: MissingCompileTimeError
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 parser_quirks_test: CompileTimeError # Issue 31533
-recursive_generic_test: RuntimeError
 redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 redirecting_factory_default_values_test/03: MissingCompileTimeError
@@ -632,7 +878,6 @@
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
-regress_30516_test: CompileTimeError # Issue 30470.
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
@@ -664,7 +909,6 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-syntax_test/59: Pass # Issue 30470.
 type_literal_test: RuntimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
@@ -696,72 +940,21 @@
 vm/regress_29145_test: Skip # Issue 29145
 vm/type_cast_vm_test: RuntimeError
 void_block_return_test/00: MissingCompileTimeError
-void_type_callbacks_test/none: CompileTimeError
-void_type_function_types_test/none: CompileTimeError
-void_type_override_test/none: CompileTimeError
-void_type_usage_test/call_as: CompileTimeError
-void_type_usage_test/call_for: CompileTimeError
-void_type_usage_test/call_return_to_void: CompileTimeError
-void_type_usage_test/call_stmt: CompileTimeError
-void_type_usage_test/field_assign: CompileTimeError
-void_type_usage_test/field_assign2: CompileTimeError
-void_type_usage_test/final_local_as: CompileTimeError
-void_type_usage_test/final_local_for: CompileTimeError
-void_type_usage_test/final_local_return_to_void: CompileTimeError
-void_type_usage_test/final_local_stmt: CompileTimeError
-void_type_usage_test/global_as: CompileTimeError
-void_type_usage_test/global_for: CompileTimeError
-void_type_usage_test/global_for_in2: CompileTimeError
-void_type_usage_test/global_return_to_void: CompileTimeError
-void_type_usage_test/global_stmt: CompileTimeError
-void_type_usage_test/instance2_as: CompileTimeError
-void_type_usage_test/instance2_for: CompileTimeError
-void_type_usage_test/instance2_for_in3: CompileTimeError
-void_type_usage_test/instance2_return_to_void: CompileTimeError
-void_type_usage_test/instance2_stmt: CompileTimeError
-void_type_usage_test/instance3_as: CompileTimeError
-void_type_usage_test/instance3_for: CompileTimeError
-void_type_usage_test/instance3_for_in3: CompileTimeError
-void_type_usage_test/instance3_return_to_void: CompileTimeError
-void_type_usage_test/instance3_stmt: CompileTimeError
-void_type_usage_test/instance_as: CompileTimeError
-void_type_usage_test/instance_for: CompileTimeError
-void_type_usage_test/instance_return_to_void: CompileTimeError
-void_type_usage_test/instance_stmt: CompileTimeError
-void_type_usage_test/local_as: CompileTimeError
-void_type_usage_test/local_assign: CompileTimeError
-void_type_usage_test/local_for: CompileTimeError
-void_type_usage_test/local_for_in2: CompileTimeError
-void_type_usage_test/local_return_to_void: CompileTimeError
-void_type_usage_test/local_stmt: CompileTimeError
-void_type_usage_test/none: CompileTimeError
-void_type_usage_test/param_as: CompileTimeError
-void_type_usage_test/param_for: CompileTimeError
-void_type_usage_test/param_for_in2: CompileTimeError
-void_type_usage_test/param_return_to_void: CompileTimeError
-void_type_usage_test/param_stmt: CompileTimeError
-void_type_usage_test/paren_as: CompileTimeError
-void_type_usage_test/paren_for: CompileTimeError
-void_type_usage_test/paren_return_to_void: CompileTimeError
-void_type_usage_test/paren_stmt: CompileTimeError
-void_type_usage_test/setter_assign: CompileTimeError
+void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError
+void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError
+void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
 
 [ $compiler == dartk && $system == windows && $strong ]
 ct_const2_test: Fail
-hello_dart_test: Fail
-recursive_mixin_test: Fail
-redirecting_factory_reflection_test: Fail
-
-[ $compiler == dartk && $system != windows && $strong ]
-hello_dart_test: Crash
-recursive_mixin_test: Crash
-redirecting_factory_reflection_test: Crash
 
 [ $compiler == dartk && $strong ]
 cha_deopt2_test: CompileTimeError, DartkCrash # KernelVM bug: Deferred loading kernel issue 28335.
 cha_deopt3_test: CompileTimeError, DartkCrash # KernelVM bug: Deferred loading kernel issue 28335.
+hello_dart_test: Crash
+recursive_mixin_test: Crash
+redirecting_factory_reflection_test: Crash
 
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
@@ -769,13 +962,11 @@
 [ $compiler == dartk && $strong && ($arch == simarm || $arch == simarm64 || $arch == simdbc64) ]
 class_cycle_test/02: MissingCompileTimeError # Please triage.
 class_cycle_test/03: MissingCompileTimeError # Please triage.
+deferred_constraints_constants_test/default_argument2: MissingCompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 duplicate_implements_test/01: MissingCompileTimeError # Please triage.
 duplicate_implements_test/02: MissingCompileTimeError # Please triage.
 generic_methods_generic_function_result_test/01: MissingCompileTimeError # Please triage.
 least_upper_bound_expansive_test/none: RuntimeError # Please triage.
-mixin_black_listed_test/02: MissingCompileTimeError # Please triage.
-null_test/02: MissingCompileTimeError # Please triage.
-null_test/03: MissingCompileTimeError # Please triage.
 
 [ $compiler == dartk && !$strong ]
 *: SkipByDesign # language_2 is only supported in strong mode.
@@ -1185,7 +1376,6 @@
 duplicate_implements_test/01: MissingCompileTimeError
 duplicate_implements_test/02: MissingCompileTimeError
 dynamic_prefix_core_test/none: CompileTimeError
-dynamic_test: RuntimeError # Issue 31402 (Variable declaration)
 emit_const_fields_test: CompileTimeError # Issue 31533
 enum_mirror_test: SkipByDesign
 example_constructor_test: Fail, OK
@@ -1208,7 +1398,6 @@
 field_override2_test: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
-first_class_types_test: RuntimeError
 flatten_test/05: MissingRuntimeError
 flatten_test/08: MissingRuntimeError
 flatten_test/09: MissingRuntimeError
@@ -1244,14 +1433,11 @@
 function_type_alias4_test: RuntimeError
 function_type_alias6_test/none: RuntimeError
 function_type_alias_test: RuntimeError
-generalized_void_syntax_test: CompileTimeError # Issue #30176
 generic_closure_test: RuntimeError
 generic_function_bounds_test: CompileTimeError
 generic_function_dcall_test: RuntimeError
 generic_instanceof2_test: RuntimeError
 generic_is_check_test: RuntimeError
-generic_list_checked_test: CompileTimeError # Issue 31402 (Variable declaration)
-generic_list_checked_test: RuntimeError
 generic_methods_bounds_test/01: MissingCompileTimeError
 generic_methods_generic_function_result_test/01: MissingCompileTimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
@@ -1305,6 +1491,13 @@
 invocation_mirror_test: CompileTimeError # Issue 31402 (Invocation arguments)
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: SkipByDesign
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/01: CompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/03: CompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
 issue_1751477_test: CompileTimeError # KernelVM bug: Deferred loading kernel issue 28335.
 issue_25671a_test/01: CompileTimeError # Test assumes Dart 1.0 semantics
 issue_25671b_test/01: Crash
@@ -1312,7 +1505,6 @@
 library_env_test/has_html_support: RuntimeError # KernelVM bug: Configurable imports.
 library_env_test/has_mirror_support: RuntimeError, OK
 library_env_test/has_no_io_support: RuntimeError # KernelVM bug: Configurable imports.
-list_is_test: RuntimeError
 local_function2_test/none: RuntimeError
 local_function3_test/none: RuntimeError
 local_function_test/01: MissingCompileTimeError
@@ -1352,7 +1544,6 @@
 method_override7_test/03: MissingCompileTimeError
 method_override8_test/03: MissingCompileTimeError
 method_override_test: CompileTimeError # Issue 31616
-mixin_black_listed_test/02: MissingCompileTimeError
 mixin_forwarding_constructor4_test/01: MissingCompileTimeError # KernelVM bug: Issue 15101
 mixin_forwarding_constructor4_test/02: MissingCompileTimeError # KernelVM bug: Issue 15101
 mixin_forwarding_constructor4_test/03: MissingCompileTimeError # KernelVM bug: Issue 15101
@@ -1416,9 +1607,8 @@
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/04: RuntimeError # Issue #31911
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/05: RuntimeError # Issue #31426
 nosuchmethod_forwarding/nosuchmethod_forwarding_test/06: RuntimeError # Issue #31426
+nsm5_test: MissingCompileTimeError
 null_no_such_method_test: CompileTimeError # Issue 31533
-null_test/02: MissingCompileTimeError
-null_test/03: MissingCompileTimeError
 null_test/mirrors: Skip # Uses mirrors.
 null_test/none: SkipByDesign
 optional_named_parameters_test/02: MissingCompileTimeError
@@ -1468,6 +1658,7 @@
 override_inheritance_mixed_test/09: MissingCompileTimeError
 override_inheritance_no_such_method_test/01: MissingCompileTimeError
 override_inheritance_no_such_method_test/02: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 override_inheritance_no_such_method_test/06: MissingCompileTimeError
 override_inheritance_no_such_method_test/07: MissingCompileTimeError
 override_inheritance_no_such_method_test/09: MissingCompileTimeError
@@ -1475,7 +1666,6 @@
 override_inheritance_no_such_method_test/12: MissingCompileTimeError
 override_inheritance_no_such_method_test/13: MissingCompileTimeError
 parser_quirks_test: CompileTimeError # Issue 31533
-recursive_generic_test: RuntimeError
 recursive_mixin_test: Crash
 redirecting_factory_default_values_test/01: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
 redirecting_factory_default_values_test/02: MissingCompileTimeError # Fasta bug: Default values are not allowed on redirecting factory constructors.
@@ -1500,7 +1690,6 @@
 regress_29784_test/01: MissingCompileTimeError
 regress_29784_test/02: MissingCompileTimeError
 regress_30339_test: CompileTimeError # Issue 31402 (Variable declaration)
-regress_30516_test: CompileTimeError # Issue 30470.
 setter4_test: MissingCompileTimeError # Issue 14736
 setter_no_getter_test/01: Pass, CompileTimeError # Issue 31533 (started passing after switching to batch-mode)
 setter_override_test/01: MissingCompileTimeError
@@ -1535,7 +1724,6 @@
 syntax_test/31: MissingCompileTimeError
 syntax_test/32: MissingCompileTimeError
 syntax_test/33: MissingCompileTimeError
-syntax_test/59: Pass # Issue 30470.
 type_literal_test: RuntimeError
 type_promotion_functions_test/02: CompileTimeError # Issue 31537
 type_promotion_functions_test/03: CompileTimeError # Issue 31537
@@ -1562,8 +1750,8 @@
 vm/causal_async_exception_stack2_test: SkipByDesign
 vm/causal_async_exception_stack_test: SkipByDesign
 vm/closure_memory_retention_test: Skip # KernelVM bug: Hits OOM
-vm/debug_break_enabled_vm_test/01: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
 vm/debug_break_enabled_vm_test/01: Crash, OK # Expected to hit breakpoint.
+vm/debug_break_enabled_vm_test/01: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
 vm/debug_break_enabled_vm_test/none: CompileTimeError # KernelVM bug: Bad test using extended break syntax.
 vm/optimized_guarded_field_isolates_test: RuntimeError
 vm/optimized_stacktrace_test: Crash
@@ -1600,57 +1788,15 @@
 vm/type_vm_test/31: MissingRuntimeError
 vm/type_vm_test/32: MissingRuntimeError
 void_block_return_test/00: MissingCompileTimeError
-void_type_callbacks_test/none: CompileTimeError
-void_type_function_types_test/none: CompileTimeError
-void_type_override_test/none: CompileTimeError
-void_type_usage_test/call_as: CompileTimeError
-void_type_usage_test/call_for: CompileTimeError
-void_type_usage_test/call_return_to_void: CompileTimeError
-void_type_usage_test/call_stmt: CompileTimeError
-void_type_usage_test/field_assign: CompileTimeError
-void_type_usage_test/field_assign2: CompileTimeError
-void_type_usage_test/final_local_as: CompileTimeError
-void_type_usage_test/final_local_for: CompileTimeError
-void_type_usage_test/final_local_return_to_void: CompileTimeError
-void_type_usage_test/final_local_stmt: CompileTimeError
-void_type_usage_test/global_as: CompileTimeError
-void_type_usage_test/global_for: CompileTimeError
-void_type_usage_test/global_for_in2: CompileTimeError
-void_type_usage_test/global_return_to_void: CompileTimeError
-void_type_usage_test/global_stmt: CompileTimeError
-void_type_usage_test/instance2_as: CompileTimeError
-void_type_usage_test/instance2_for: CompileTimeError
-void_type_usage_test/instance2_for_in3: CompileTimeError
-void_type_usage_test/instance2_return_to_void: CompileTimeError
-void_type_usage_test/instance2_stmt: CompileTimeError
-void_type_usage_test/instance3_as: CompileTimeError
-void_type_usage_test/instance3_for: CompileTimeError
-void_type_usage_test/instance3_for_in3: CompileTimeError
-void_type_usage_test/instance3_return_to_void: CompileTimeError
-void_type_usage_test/instance3_stmt: CompileTimeError
-void_type_usage_test/instance_as: CompileTimeError
-void_type_usage_test/instance_for: CompileTimeError
-void_type_usage_test/instance_return_to_void: CompileTimeError
-void_type_usage_test/instance_stmt: CompileTimeError
-void_type_usage_test/local_as: CompileTimeError
-void_type_usage_test/local_assign: CompileTimeError
-void_type_usage_test/local_for: CompileTimeError
-void_type_usage_test/local_for_in2: CompileTimeError
-void_type_usage_test/local_return_to_void: CompileTimeError
-void_type_usage_test/local_stmt: CompileTimeError
-void_type_usage_test/none: CompileTimeError
-void_type_usage_test/param_as: CompileTimeError
-void_type_usage_test/param_for: CompileTimeError
-void_type_usage_test/param_for_in2: CompileTimeError
-void_type_usage_test/param_return_to_void: CompileTimeError
-void_type_usage_test/param_stmt: CompileTimeError
-void_type_usage_test/paren_as: CompileTimeError
-void_type_usage_test/paren_for: CompileTimeError
-void_type_usage_test/paren_return_to_void: CompileTimeError
-void_type_usage_test/paren_stmt: CompileTimeError
-void_type_usage_test/setter_assign: CompileTimeError
+void_type_usage_test/conditional2_return_to_void: MissingCompileTimeError
+void_type_usage_test/conditional3_return_to_void: MissingCompileTimeError
+void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $compiler == dartkp && !$strong ]
 *: SkipByDesign # language_2 is only supported in strong mode.
 
+[ $runtime == vm && $fasta ]
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
+
diff --git a/tests/language_2/language_2_precompiled.status b/tests/language_2/language_2_precompiled.status
index e6ce2c6..043971c 100644
--- a/tests/language_2/language_2_precompiled.status
+++ b/tests/language_2/language_2_precompiled.status
@@ -399,8 +399,8 @@
 generic_methods_optional_parameters_test: RuntimeError
 generic_methods_overriding_test/01: MissingCompileTimeError
 generic_methods_overriding_test/03: MissingCompileTimeError
-generic_methods_recursive_bound_test/02: Crash
 generic_methods_recursive_bound_test/02: MissingCompileTimeError
+generic_methods_recursive_bound_test/02: Crash
 generic_methods_recursive_bound_test/03: Crash, Pass
 generic_methods_tearoff_specialization_test: RuntimeError
 generic_methods_unused_parameter_test: RuntimeError
@@ -486,6 +486,14 @@
 invocation_mirror_invoke_on2_test: SkipByDesign
 invocation_mirror_invoke_on_test: SkipByDesign
 issue21079_test: SkipByDesign
+issue31596_override_test/05: MissingCompileTimeError
+issue31596_override_test/06: MissingCompileTimeError
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
+issue31596_tearoff_test: RuntimeError
 language_2/least_upper_bound_expansive_test/none: CompileTimeError
 least_upper_bound_expansive_test/none: CompileTimeError
 least_upper_bound_test/03: MissingCompileTimeError
@@ -875,7 +883,7 @@
 switch_fallthru_test/01: MissingCompileTimeError
 symbol_literal_test/01: MissingCompileTimeError
 sync_generator1_test/01: MissingCompileTimeError
-syntax_test/59: MissingCompileTimeError,OK # Issue 30516.
+syntax_test/59: MissingCompileTimeError, OK # Issue 30516.
 top_level_getter_no_setter1_test: MissingCompileTimeError
 top_level_getter_no_setter2_test: MissingCompileTimeError
 transitive_private_library_access_test: MissingCompileTimeError
@@ -1009,6 +1017,7 @@
 covariance_type_parameter_test/02: RuntimeError
 covariance_type_parameter_test/03: RuntimeError
 covariance_type_parameter_test/none: RuntimeError
+dynamic_test: RuntimeError
 function_subtype_checked0_test: Pass
 function_subtype_closure0_test: Pass
 function_subtype_closure1_test: Pass
@@ -1023,6 +1032,8 @@
 generic_methods_generic_function_parameter_test: Pass # Issue 25869
 generic_methods_new_test: Pass # Issue 25869
 generic_methods_test: Pass # Issue 25869
+nsm5_test: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 
 [ $compiler == precompiler && $runtime == dart_precompiled && !$checked ]
 assertion_initializer_const_error_test/01: MissingCompileTimeError
@@ -1049,6 +1060,7 @@
 covariance_setter_test/03: RuntimeError
 covariance_setter_test/04: RuntimeError
 covariance_setter_test/05: RuntimeError
+covariance_setter_test/06: RuntimeError
 covariance_type_parameter_test/01: RuntimeError
 covariance_type_parameter_test/02: RuntimeError
 covariance_type_parameter_test/03: RuntimeError
@@ -1094,6 +1106,7 @@
 implicit_downcast_during_super_method_invocation_test: RuntimeError
 implicit_downcast_during_variable_declaration_test: RuntimeError
 implicit_downcast_during_while_statement_test: RuntimeError
+issue31596_implement_covariant_test: RuntimeError
 issue31596_test: RuntimeError
 tearoff_dynamic_test: RuntimeError
 type_argument_in_super_type_test: RuntimeError
diff --git a/tests/language_2/language_2_vm.status b/tests/language_2/language_2_vm.status
index 291d6f6..af851e4 100644
--- a/tests/language_2/language_2_vm.status
+++ b/tests/language_2/language_2_vm.status
@@ -3,6 +3,10 @@
 # BSD-style license that can be found in the LICENSE file.
 # Sections in this file should contain "$runtime == vm".
 
+[ $compiler == dartkp ]
+implicit_creation/implicit_new_or_const_composite_test: RuntimeError
+implicit_creation/implicit_new_or_const_test: RuntimeError
+
 [ $arch == arm64 && $runtime == vm ]
 closure_cycles_test: Pass, Slow
 large_class_declaration_test: SkipSlow # Uses too much memory.
@@ -64,6 +68,7 @@
 vm/type_cast_vm_test: RuntimeError # Expects line and column numbers
 
 [ $compiler == app_jit && $runtime == vm && $checked ]
+dynamic_test: RuntimeError
 generic_functions_test: Pass # Issue 25869
 generic_local_functions_test: Pass # Issue 25869
 generic_methods_function_type_test: Pass # Issue 25869
@@ -474,6 +479,14 @@
 invalid_cast_test/09: MissingCompileTimeError
 invalid_cast_test/10: MissingCompileTimeError
 invalid_cast_test/11: MissingCompileTimeError
+issue31596_override_test/05: MissingCompileTimeError
+issue31596_override_test/06: MissingCompileTimeError
+issue31596_override_test/07: MissingCompileTimeError
+issue31596_override_test/08: MissingCompileTimeError
+issue31596_super_test/02: MissingCompileTimeError
+issue31596_super_test/04: MissingCompileTimeError
+issue31596_super_test/05: RuntimeError
+issue31596_tearoff_test: RuntimeError
 least_upper_bound_expansive_test/none: CompileTimeError
 least_upper_bound_test/03: MissingCompileTimeError
 least_upper_bound_test/04: MissingCompileTimeError
@@ -765,7 +778,6 @@
 private_access_test/04: MissingCompileTimeError
 private_access_test/05: MissingCompileTimeError
 private_access_test/06: MissingCompileTimeError
-recursive_generic_test: RuntimeError
 recursive_mixin_test: RuntimeError
 regress_12561_test: MissingCompileTimeError
 regress_13494_test: MissingCompileTimeError
@@ -833,7 +845,7 @@
 switch_fallthru_test/01: MissingCompileTimeError
 symbol_literal_test/01: MissingCompileTimeError
 sync_generator1_test/01: MissingCompileTimeError
-syntax_test/59: MissingCompileTimeError,OK # Issue 30516.
+syntax_test/59: MissingCompileTimeError, OK # Issue 30516.
 top_level_getter_no_setter1_test: MissingCompileTimeError
 top_level_getter_no_setter2_test: MissingCompileTimeError
 transitive_private_library_access_test: MissingCompileTimeError
@@ -944,6 +956,10 @@
 unresolved_top_level_var_test: MissingCompileTimeError
 
 [ $compiler != dartk && $runtime == vm && $checked ]
+call_type_literal_test: RuntimeError
+class_literal_static_test/none: RuntimeError
+class_literal_test/none: RuntimeError
+constructor_call_as_function_test: RuntimeError
 constructor_call_as_function_test/01: MissingCompileTimeError
 covariance_type_parameter_test/01: RuntimeError
 covariance_type_parameter_test/02: RuntimeError
@@ -1021,6 +1037,7 @@
 function_type/function_type9_test: RuntimeError # Issue 30475
 function_type_alias2_test: RuntimeError
 recursive_mixin_test: Crash
+type_literal_prefix_call_test: RuntimeError
 
 # The VM and does not implement the Dart 2.0 runtime checks yet unless
 # --checked is explicitly passed).
@@ -1061,6 +1078,7 @@
 covariance_setter_test/03: RuntimeError
 covariance_setter_test/04: RuntimeError
 covariance_setter_test/05: RuntimeError
+covariance_setter_test/06: RuntimeError
 covariance_type_parameter_test/01: RuntimeError
 covariance_type_parameter_test/02: RuntimeError
 covariance_type_parameter_test/03: RuntimeError
@@ -1128,7 +1146,9 @@
 implicit_downcast_during_variable_declaration_test: RuntimeError
 implicit_downcast_during_while_statement_test: RuntimeError
 inferrer_synthesized_constructor_test: RuntimeError
+issue31596_implement_covariant_test: RuntimeError
 issue31596_test: RuntimeError
+list_is_test: RuntimeError
 list_literal1_test/01: MissingCompileTimeError
 malformed2_test/00: MissingCompileTimeError
 tearoff_dynamic_test: RuntimeError
@@ -1149,6 +1169,7 @@
 generic_methods_optional_parameters_test: RuntimeError
 instanceof4_test/01: RuntimeError
 instanceof4_test/none: RuntimeError
+list_is_test: RuntimeError
 malbounded_type_cast_test/none: RuntimeError
 malbounded_type_test_test/none: RuntimeError
 map_literal8_test: RuntimeError
@@ -1218,12 +1239,15 @@
 
 [ $compiler == none && $runtime == vm && $checked ]
 assert_initializer_test/4*: MissingCompileTimeError # Issue 392. The VM doesn't enforce that potentially const expressions are actually const expressions when the constructor is called with `const`.
+dynamic_test: RuntimeError
 generic_functions_test: Pass # Issue 25869
 generic_local_functions_test: Pass # Issue 25869
 generic_methods_function_type_test: Pass # Issue 25869
 generic_methods_generic_function_parameter_test: Pass # Issue 25869
 generic_methods_new_test: Pass # Issue 25869
 generic_methods_test: Pass # Issue 25869
+nsm5_test: MissingCompileTimeError
+override_inheritance_no_such_method_test/05: MissingCompileTimeError
 
 [ $compiler == none && $runtime == vm && !$checked ]
 assertion_initializer_const_error_test/01: MissingCompileTimeError
diff --git a/tests/language_2/list_is_test.dart b/tests/language_2/list_is_test.dart
index 8df30bd..56e716d 100644
--- a/tests/language_2/list_is_test.dart
+++ b/tests/language_2/list_is_test.dart
@@ -9,9 +9,11 @@
 }
 
 main() {
-  check(new List(), true, true, true);
+  check(new List(), true, false, false);
   check(new List<int>(), true, true, false);
-  check(new A().bar(), true, true, true);
+  check(new List<double>(), true, false, true);
+  check(new A().bar(), true, false, false);
+  check(new A<int>().bar(), true, true, false);
   check(new A<double>().bar(), true, false, true);
   check(new Object(), false, false, false);
 }
diff --git a/tests/language_2/nsm5_test.dart b/tests/language_2/nsm5_test.dart
index ed0b9b3..b8ddb77 100644
--- a/tests/language_2/nsm5_test.dart
+++ b/tests/language_2/nsm5_test.dart
@@ -15,8 +15,6 @@
   int foo();
 }
 
-class DontWarnMe extends Mock implements Foo {}
+/*@compile-error=unspecified*/ class WarnMe extends Mock implements Foo {}
 
-main() {
-  Expect.throws(() => new DontWarnMe().foo());
-}
+main() {}
diff --git a/tests/language_2/override_inheritance_no_such_method_test.dart b/tests/language_2/override_inheritance_no_such_method_test.dart
index a46e95c..1f90b47 100644
--- a/tests/language_2/override_inheritance_no_such_method_test.dart
+++ b/tests/language_2/override_inheritance_no_such_method_test.dart
@@ -31,7 +31,7 @@
   noSuchMethod(_, [__]) => null; //# 04: ok
   method4(); //# 04: continued
 
-  noSuchMethod(_); //# 05: ok
+  noSuchMethod(_); //# 05: compile-time error
   method5(); //# 05: continued
 
   noSuchMethod(_) => null; //# 08: continued
diff --git a/tests/language_2/recursive_generic_test.dart b/tests/language_2/recursive_generic_test.dart
index 68f765c..6f56104 100644
--- a/tests/language_2/recursive_generic_test.dart
+++ b/tests/language_2/recursive_generic_test.dart
@@ -9,7 +9,7 @@
   get S_T => T;
 }
 
-class C<T extends C<T>> extends S<C> {
+class C<T extends C<T>> extends S<C<T>> {
   m() => 456;
   get C_T => T;
 }
@@ -17,9 +17,19 @@
 class D extends C<D> {}
 
 main() {
+  regress31434();
+
   Expect.equals(new C<D>().m(), 456);
-  // TODO(jmesserly): this should be dart1 vs dart2, not DDC vs VM.
-  var isVM = const bool.fromEnvironment('dart.isVM');
-  Expect.equals(new C<D>().S_T.toString(), isVM ? 'C' : 'C<C>');
-  Expect.equals(new C<D>().C_T.toString(), isVM ? 'dynamic' : 'D');
+  Expect.equals(new C<D>().C_T, D);
+  Expect.equals(new C<D>().S_T.toString(), 'C<D>');
+}
+
+class F<L, R> {}
+
+class E<L, R> extends F<E<L, Object>, R> {}
+
+regress31434() {
+  type<T>() => T;
+  dynamic e = new E<int, String>();
+  Expect.equals(e.runtimeType, type<E<int, String>>());
 }
diff --git a/tests/language_2/type_literal_prefix_call_test.dart b/tests/language_2/type_literal_prefix_call_test.dart
index a633e87..46f2562 100644
--- a/tests/language_2/type_literal_prefix_call_test.dart
+++ b/tests/language_2/type_literal_prefix_call_test.dart
@@ -6,5 +6,5 @@
 import 'dart:core' as core;
 
 main() {
-  core.List(); //# 00: compile-time error
+  core.List();
 }
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index f7b811d..2784f4c 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -125,6 +125,15 @@
 typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
 
+[ $compiler == dartk ]
+mirrors/invoke_throws_test: Crash
+mirrors/list_constructor_test/01: Crash
+mirrors/list_constructor_test/none: Crash
+mirrors/mirrors_test: Crash
+mirrors/redirecting_factory_test/01: Crash
+mirrors/redirecting_factory_test/02: Crash
+mirrors/redirecting_factory_test/none: Crash
+
 [ $compiler == dartkp ]
 mirrors/*: Skip # mirrors are not supported by under precompilation
 
@@ -160,6 +169,10 @@
 [ !$checked ]
 mirrors/redirecting_factory_different_type_test: SkipByDesign # Tests type checks.
 
+[ $fasta ]
+mirrors/metadata_nested_constructor_call_test/03: MissingCompileTimeError
+mirrors/metadata_nested_constructor_call_test/04: MissingCompileTimeError
+
 [ $hot_reload ]
 async/timer_regress22626_test: Pass, RuntimeError # Timing dependent.
 mirrors/generic_bounded_by_type_parameter_test/02: Fail # Type equality - Issue 26869
@@ -286,24 +299,6 @@
 mirrors/invocation_fuzz_test/smi: Pass, Slow
 mirrors/variable_is_const_test/01: Crash # Please triage.
 
-[ $compiler == dartk && $system == windows ]
-mirrors/invoke_throws_test: Fail
-mirrors/list_constructor_test/01: Fail
-mirrors/list_constructor_test/none: Fail
-mirrors/mirrors_test: Fail
-mirrors/redirecting_factory_test/01: Fail
-mirrors/redirecting_factory_test/02: Fail
-mirrors/redirecting_factory_test/none: Fail
-
-[ $compiler == dartk && $system != windows ]
-mirrors/invoke_throws_test: Crash
-mirrors/list_constructor_test/01: Crash
-mirrors/list_constructor_test/none: Crash
-mirrors/mirrors_test: Crash
-mirrors/redirecting_factory_test/01: Crash
-mirrors/redirecting_factory_test/02: Crash
-mirrors/redirecting_factory_test/none: Crash
-
 # Enabling of dartk for sim{arm,arm64,dbc64} revelaed these test failures, which
 # are to be triaged.  Isolate tests are skipped on purpose due to the usage of
 # batch mode.
diff --git a/tests/lib_2/html/datalistelement_test.dart b/tests/lib_2/html/datalistelement_test.dart
index 07a3835..df87da0 100644
--- a/tests/lib_2/html/datalistelement_test.dart
+++ b/tests/lib_2/html/datalistelement_test.dart
@@ -31,35 +31,40 @@
     document.body.nodes.removeLast();
   });
 
-  // Support is checked in element_types test.
-  var expectation = DataListElement.supported ? returnsNormally : throws;
-
   test('is', () {
-    expect(() {
+    try {
       var list = document.query('#browsers');
       expect(list, isDataListElement);
-    }, expectation);
+    } catch (e) {
+      expect(DataListElement.supported, false);
+    }
   });
 
   test('list', () {
-    expect(() {
+    try {
       var list = document.query('#browsers') as DataListElement;
       var input = document.query('#input') as InputElement;
       expect(input.list, list);
-    }, expectation);
+    } catch (e) {
+      expect(DataListElement.supported, false);
+    }
   });
 
   test('options', () {
-    expect(() {
+    try {
       var options = (document.query('#browsers') as DataListElement).options;
       expect(options.length, 5);
-    }, expectation);
+    } catch (e) {
+      expect(DataListElement.supported, false);
+    }
   });
 
   test('create', () {
-    expect(() {
+    try {
       var list = new DataListElement();
       expect(list, isDataListElement);
-    }, expectation);
+    } catch (e) {
+      expect(DataListElement.supported, false);
+    }
   });
 }
diff --git a/tests/lib_2/html/element_types_constructors1_test.dart b/tests/lib_2/html/element_types_constructors1_test.dart
index 831b543..9c5575d 100644
--- a/tests/lib_2/html/element_types_constructors1_test.dart
+++ b/tests/lib_2/html/element_types_constructors1_test.dart
@@ -9,10 +9,12 @@
 main() {
   check(String name, bool fn(), [bool supported = true]) {
     test(name, () {
-      var expectation = supported ? returnsNormally : throws;
-      expect(() {
+      if (supported) {
         expect(fn(), isTrue);
-      }, expectation);
+      } else {
+        // Can either throw or return false.
+        expect(() => (fn() || (throw "false")), throws);
+      }
     });
   }
 
diff --git a/tests/lib_2/html/element_types_constructors2_test.dart b/tests/lib_2/html/element_types_constructors2_test.dart
index bbdfb28..f21ae78 100644
--- a/tests/lib_2/html/element_types_constructors2_test.dart
+++ b/tests/lib_2/html/element_types_constructors2_test.dart
@@ -9,10 +9,12 @@
 main() {
   check(String name, bool fn(), [bool supported = true]) {
     test(name, () {
-      var expectation = supported ? returnsNormally : throws;
-      expect(() {
-        expect(fn(), isTrue);
-      }, expectation);
+      if (supported) {
+        expect(fn(), supported);
+      } else {
+        // Can either throw or return false.
+        expect(() => (fn() || (throw "false")), throws);
+      }
     });
   }
 
diff --git a/tests/lib_2/html/element_types_constructors3_test.dart b/tests/lib_2/html/element_types_constructors3_test.dart
index 137e548..dcd5dbd 100644
--- a/tests/lib_2/html/element_types_constructors3_test.dart
+++ b/tests/lib_2/html/element_types_constructors3_test.dart
@@ -9,10 +9,12 @@
 main() {
   check(String name, bool fn(), [bool supported = true]) {
     test(name, () {
-      var expectation = supported ? returnsNormally : throws;
-      expect(() {
+      if (supported) {
         expect(fn(), isTrue);
-      }, expectation);
+      } else {
+        // Can either throw or return false.
+        expect(() => (fn() || (throw "false")), throws);
+      }
     });
   }
 
diff --git a/tests/lib_2/html/element_types_constructors4_test.dart b/tests/lib_2/html/element_types_constructors4_test.dart
index 7c3dcc0..26e6acb 100644
--- a/tests/lib_2/html/element_types_constructors4_test.dart
+++ b/tests/lib_2/html/element_types_constructors4_test.dart
@@ -9,10 +9,12 @@
 main() {
   check(String name, bool fn(), [bool supported = true]) {
     test(name, () {
-      var expectation = supported ? returnsNormally : throws;
-      expect(() {
+      if (supported) {
         expect(fn(), isTrue);
-      }, expectation);
+      } else {
+        // Can either throw or return false.
+        expect(() => (fn() || (throw "false")), throws);
+      }
     });
   }
 
diff --git a/tests/lib_2/html/element_types_constructors5_test.dart b/tests/lib_2/html/element_types_constructors5_test.dart
index 3b66d81..7039442 100644
--- a/tests/lib_2/html/element_types_constructors5_test.dart
+++ b/tests/lib_2/html/element_types_constructors5_test.dart
@@ -9,10 +9,12 @@
 main() {
   check(String name, bool fn(), [bool supported = true]) {
     test(name, () {
-      var expectation = supported ? returnsNormally : throws;
-      expect(() {
+      if (supported) {
         expect(fn(), isTrue);
-      }, expectation);
+      } else {
+        // Can either throw or return false.
+        expect(() => (fn() || (throw "false")), throws);
+      }
     });
   }
 
diff --git a/tests/lib_2/html/element_types_constructors6_test.dart b/tests/lib_2/html/element_types_constructors6_test.dart
index 57724b3..50b81c2 100644
--- a/tests/lib_2/html/element_types_constructors6_test.dart
+++ b/tests/lib_2/html/element_types_constructors6_test.dart
@@ -9,10 +9,12 @@
 main() {
   check(String name, bool fn(), [bool supported = true]) {
     test(name, () {
-      var expectation = supported ? returnsNormally : throws;
-      expect(() {
+      if (supported) {
         expect(fn(), isTrue);
-      }, expectation);
+      } else {
+        // Can either throw or return false.
+        expect(() => (fn() || (throw "false")), throws);
+      }
     });
   }
 
diff --git a/tests/lib_2/html/file_sample_test.dart b/tests/lib_2/html/file_sample_test.dart
index 1e0f355..30c037d 100644
--- a/tests/lib_2/html/file_sample_test.dart
+++ b/tests/lib_2/html/file_sample_test.dart
@@ -35,6 +35,8 @@
 
 Future<FileSystem> _fileSystem;
 
+DirectoryEntry _myDirectory;
+
 Future<FileSystem> get fileSystem async {
   if (_fileSystem != null) return _fileSystem;
 
@@ -55,11 +57,13 @@
 Future<FileEntry> createFile() async {
   var fs = await fileSystem;
 
-  FileEntry fileEntry = await fs.root.createFile('log.txt');
+  _myDirectory = await fs.root.createDirectory('my_directory');
+
+  FileEntry fileEntry = await _myDirectory.createFile('log.txt');
 
   expect(fileEntry.isFile, true);
   expect(fileEntry.name, 'log.txt');
-  expect(fileEntry.fullPath, '/log.txt');
+  expect(fileEntry.fullPath, '/my_directory/log.txt');
 
   FileWriter writer = await fileEntry.createWriter();
 
@@ -90,6 +94,12 @@
   return new Future<FileEntry>.value(fileEntry);
 }
 
+Future<List<Entry>> readEntries(DirectoryEntry directory) async {
+  DirectoryReader reader = directory.createReader();
+  List<Entry> entries = await reader.readEntries();
+  return entries;
+}
+
 main() {
   useHtmlConfiguration();
 
@@ -118,6 +128,16 @@
       FileEntry fileEntry = await createFile();
       expect(fileEntry.name, 'log.txt');
 
+      List<Entry> entries = await readEntries(fs.root);
+      expect(entries.length, 1);
+      expect(entries[0].isDirectory, true);
+      expect(entries[0].name, 'my_directory');
+
+      List<Entry> myEntries = await readEntries(_myDirectory);
+      expect(myEntries.length, 1);
+      expect(myEntries[0].isFile, true);
+      expect(myEntries[0].name, 'log.txt');
+
       // Validate every function, async and event mechanism successfully ran.
       expect(testLog.contents, log_results);
     });
diff --git a/tests/lib_2/html/js_mock_test.dart b/tests/lib_2/html/js_mock_test.dart
new file mode 100644
index 0000000..871bba2
--- /dev/null
+++ b/tests/lib_2/html/js_mock_test.dart
@@ -0,0 +1,66 @@
+// 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.
+
+@JS()
+library mock;
+
+import 'package:js/js.dart';
+import 'package:expect/minitest.dart';
+
+@JS('Node')
+class Node {}
+
+@JS('HTMLDocument')
+class Document extends Node {
+  external Element get body;
+}
+
+@JS()
+external get foo;
+
+@JS()
+external Document get document;
+
+@JS('Element')
+class Element extends Node {
+  external String get tagName;
+}
+
+class MockDocument implements Document {
+  final Element body = new MockElement();
+}
+
+class MockElement implements Element {
+  final tagName = 'MockBody';
+}
+
+void main() {
+  test('js', () {
+    var f = foo;
+    expect(f, isNull);
+
+    var doc = document;
+    expect(doc is Document, isTrue);
+    // Fails in dart2js
+    // expect(doc is! Element, isTrue);
+    expect(doc is Node, isTrue);
+
+    expect(doc is! MockDocument, isTrue);
+    expect(doc is! MockElement, isTrue);
+  });
+
+  test('mock', () {
+    var doc = new MockDocument();
+    expect(doc is Document, isTrue);
+    // Fails in dart2js
+    // expect(doc is! Element, isTrue);
+    expect(doc is Node, isTrue);
+
+    var body = doc.body;
+    // Fails in dart2js
+    // expect(body is! Document, isTrue);
+    expect(body is Element, isTrue);
+    expect(body is Node, isTrue);
+  });
+}
diff --git a/tests/lib_2/html/js_typed_interop_lazy_test.dart b/tests/lib_2/html/js_typed_interop_lazy_test.dart
index 48eff07..89f5df8 100644
--- a/tests/lib_2/html/js_typed_interop_lazy_test.dart
+++ b/tests/lib_2/html/js_typed_interop_lazy_test.dart
@@ -41,6 +41,18 @@
   T get obj;
 }
 
+class Mock1LazyClass implements LazyClass {
+  noSuchMethod(Invocation i) => i.memberName == #a ? 42 : null;
+}
+
+class Mock2LazyClass implements LazyClass {
+  get a => 42;
+}
+
+class Other {
+  noSuchMethod(Invocation i) {}
+}
+
 // This class would cause compile time issues if JS classes are not properly lazy.
 class FooImpl extends Foo<LazyClass> {
   LazyClass get obj => new LazyClass(100);
@@ -83,6 +95,11 @@
     });
 
     test('create instance', () {
+      var anon = new AnonClass(a: 42);
+      // Until LazyClass is defined, fall back to Anon behavior.
+      expect(anon is LazyClass, isTrue); //# 01: ok
+      expect(new Object() is! LazyClass, isTrue);
+
       document.body.append(new ScriptElement()
         ..type = 'text/javascript'
         ..innerHtml = r"""
@@ -98,7 +115,6 @@
       expect(l is AnonClass, isTrue);
       expect((l as AnonClass) == l, isTrue);
       expect((l as AnonClass2) == l, isTrue);
-      var anon = new AnonClass(a: 42);
       expect(anon is! LazyClass, isTrue); //# 01: ok
       expect(anon is AnonClass, isTrue);
       expect(anon is AnonClass2, isTrue);
@@ -139,5 +155,20 @@
       expect(() => genericClassDynamic.add(42), throws); //# 01: ok
       genericClassDynamic.add(null);
     });
+
+    test('mocks', () {
+      var mock1 = new Mock1LazyClass();
+      expect(mock1 is LazyClass, isTrue);
+      expect(mock1 as LazyClass, equals(mock1));
+      expect(mock1.a, equals(42));
+
+      var mock2 = new Mock2LazyClass();
+      expect(mock2 is LazyClass, isTrue);
+      expect(mock2 as LazyClass, equals(mock2));
+      expect(mock2.a, equals(42));
+
+      Object other = new Other();
+      expect(other is LazyClass, isFalse);
+    });
   });
 }
diff --git a/tests/lib_2/html/webgl_extensions_test.dart b/tests/lib_2/html/webgl_extensions_test.dart
index 5fc8a2c..86e9a86 100644
--- a/tests/lib_2/html/webgl_extensions_test.dart
+++ b/tests/lib_2/html/webgl_extensions_test.dart
@@ -9,30 +9,29 @@
 
 import 'package:expect/minitest.dart';
 
-final isAngleInstancedArrays = predicate((v) => v is AngleInstancedArrays);
-final isExtBlendMinMax = predicate((v) => v is ExtBlendMinMax);
-final isExtFragDepth = predicate((v) => v is ExtFragDepth);
-final isEXTsRgb = predicate((v) => v is EXTsRgb);
-final isExtShaderTextureLod = predicate((v) => v is ExtShaderTextureLod);
-final isExtTextureFilterAnisotropic =
-    predicate((v) => v is ExtTextureFilterAnisotropic);
-final isOesElementIndexUint = predicate((v) => v is OesElementIndexUint);
-final isOesStandardDerivatives = predicate((v) => v is OesStandardDerivatives);
-final isOesTextureFloat = predicate((v) => v is OesTextureFloat);
-final isOesTextureFloatLinear = predicate((v) => v is OesTextureFloatLinear);
-final isOesTextureHalfFloat = predicate((v) => v is OesTextureHalfFloat);
-final isOesTextureHalfFloatLinear =
-    predicate((v) => v is OesTextureHalfFloatLinear);
-final isOesVertexArrayObject = predicate((v) => v is OesVertexArrayObject);
-final isCompressedTextureAtc = predicate((v) => v is CompressedTextureAtc);
-final isCompressedTextureETC1 = predicate((v) => v is CompressedTextureETC1);
-final isCompressedTexturePvrtc = predicate((v) => v is CompressedTexturePvrtc);
-final isCompressedTextureS3TC = predicate((v) => v is CompressedTextureS3TC);
-final isDebugRendererInfo = predicate((v) => v is DebugRendererInfo);
-final isDebugShaders = predicate((v) => v is DebugShaders);
-final isDepthTexture = predicate((v) => v is DepthTexture);
-final isDrawBuffers = predicate((v) => v is DrawBuffers);
-final isLoseContext = predicate((v) => v is LoseContext);
+final isAngleInstancedArrays = (v) => v is AngleInstancedArrays;
+final isExtBlendMinMax = (v) => v is ExtBlendMinMax;
+final isExtFragDepth = (v) => v is ExtFragDepth;
+final isEXTsRgb = (v) => v is EXTsRgb;
+final isExtShaderTextureLod = (v) => v is ExtShaderTextureLod;
+final isExtTextureFilterAnisotropic = (v) => v is ExtTextureFilterAnisotropic;
+final isOesElementIndexUint = (v) => v is OesElementIndexUint;
+final isOesStandardDerivatives = (v) => v is OesStandardDerivatives;
+final isOesTextureFloat = (v) => v is OesTextureFloat;
+final isOesTextureFloatLinear = (v) => v is OesTextureFloatLinear;
+final isOesTextureHalfFloat = (v) => v is OesTextureHalfFloat;
+final isOesTextureHalfFloatLinear = (v) => v is OesTextureHalfFloatLinear;
+final isOesVertexArrayObject = (v) => v is OesVertexArrayObject;
+final isCompressedTextureAtc = (v) => v is CompressedTextureAtc;
+final isCompressedTextureETC1 = (v) => v is CompressedTextureETC1;
+final isCompressedTexturePvrtc = (v) => v is CompressedTexturePvrtc;
+final isCompressedTextureS3TC = (v) => v is CompressedTextureS3TC;
+final isDebugRendererInfo = (v) => v is DebugRendererInfo;
+final isDebugShaders = (v) => v is DebugShaders;
+final isDepthTexture = (v) => v is DepthTexture;
+final isDrawBuffers = (v) => v is DrawBuffers;
+final isLoseContext = (v) => v is LoseContext;
+
 final isFunction = predicate((v) => v is Function);
 
 // Test that various webgl extensions are available. Only test advertised
@@ -89,12 +88,11 @@
     test('type', () {
       var extension = getExtension(name);
       if (extension == null) return;
-      expect(extension, typeMatcher);
+      expect(extension, predicate(typeMatcher));
       // Ensure that isInstanceOf<X> is not instantiated for an erroneous type
       // X.  If X is erroneous, there is only a warning at compile time and X is
       // treated as dynamic, which would make the above line pass.
-      expect(() => expect(1, typeMatcher), throws,
-          reason: 'invalid typeMatcher');
+      expect(typeMatcher(1), false, reason: 'invalid typeMatcher');
     });
   }
 
diff --git a/tests/lib_2/isolate/message3_test.dart b/tests/lib_2/isolate/message3_test.dart
index be4d5e2..eab9635 100644
--- a/tests/lib_2/isolate/message3_test.dart
+++ b/tests/lib_2/isolate/message3_test.dart
@@ -191,8 +191,8 @@
   Int32x4List list32x4 = new Int32x4List(2);
   list32x4[0] = new Int32x4(1, 2, 3, 4);
   list32x4[1] = new Int32x4(5, 6, 7, 8);
-  ping.send(list32x4); //   //# int32x4: ok
-  checks.add( //            //# int32x4: ok
+  ping.send(list32x4);
+  checks.add(
   (x) {
     Expect.isTrue(x is Int32x4List);
     Expect.equals(2, x.length);
@@ -206,9 +206,43 @@
     Expect.equals(6, entry2.y);
     Expect.equals(7, entry2.z);
     Expect.equals(8, entry2.w);
-  }
-  ) //                    //# int32x4: ok
-      ;
+  });
+
+  Float32x4List flist32x4 = new Float32x4List(2);
+  flist32x4[0] = new Float32x4(1.5, 2.5, 3.5, 4.5);
+  flist32x4[1] = new Float32x4(5.5, 6.5, 7.5, 8.5);
+  ping.send(flist32x4);
+  checks.add(
+  (x) {
+    Expect.isTrue(x is Float32x4List);
+    Expect.equals(2, x.length);
+    Float32x4 entry1 = x[0];
+    Float32x4 entry2 = x[1];
+    Expect.equals(1.5, entry1.x);
+    Expect.equals(2.5, entry1.y);
+    Expect.equals(3.5, entry1.z);
+    Expect.equals(4.5, entry1.w);
+    Expect.equals(5.5, entry2.x);
+    Expect.equals(6.5, entry2.y);
+    Expect.equals(7.5, entry2.z);
+    Expect.equals(8.5, entry2.w);
+  });
+
+  Float64x2List flist64x2 = new Float64x2List(2);
+  flist64x2[0] = new Float64x2(1.5, 2.5);
+  flist64x2[1] = new Float64x2(5.5, 6.5);
+  ping.send(flist64x2);
+  checks.add(
+  (x) {
+    Expect.isTrue(x is Float64x2List);
+    Expect.equals(2, x.length);
+    Float64x2 entry1 = x[0];
+    Float64x2 entry2 = x[1];
+    Expect.equals(1.5, entry1.x);
+    Expect.equals(2.5, entry1.y);
+    Expect.equals(5.5, entry2.x);
+    Expect.equals(6.5, entry2.y);
+  });
 
   ping.send({"foo": 499, "bar": 32});
   checks.add((x) {
diff --git a/tests/lib_2/lib_2_analyzer.status b/tests/lib_2/lib_2_analyzer.status
index a5ead32..6a8da17 100644
--- a/tests/lib_2/lib_2_analyzer.status
+++ b/tests/lib_2/lib_2_analyzer.status
@@ -9,6 +9,7 @@
 mirrors/deferred_mirrors_metadata_test: Fail # Issue 17522
 mirrors/deferred_type_test: StaticWarning, OK # Deliberately refers to a deferred type in a declaration.
 mirrors/generic_f_bounded_mixin_application_test: StaticWarning # Test Issue
+mirrors/metadata_nested_constructor_call_test/none: CompileTimeError
 mirrors/mirrors_nsm_mismatch_test: StaticWarning, OK
 mirrors/mirrors_nsm_test: StaticWarning, OK
 mirrors/mirrors_nsm_test/dart2js: StaticWarning, OK
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 6cd6ce0..6e09990 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -166,6 +166,7 @@
 html/dart_object_local_storage_test: Skip # sessionStorage NS_ERROR_DOM_NOT_SUPPORTED_ERR
 html/element_animate_test/timing_dict: RuntimeError # Issue 26730
 html/element_classes_test: RuntimeError # Issue 27535
+html/element_types_constructors4_test: RuntimeError
 html/element_types_content_test: Pass, RuntimeError # Issues 28983, 29922
 html/element_types_keygen_test: RuntimeError # Issue 29922
 html/element_types_keygen_test: Fail
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 5373ab3..de400ed 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -64,7 +64,6 @@
 isolate/deferred_in_isolate_test: Skip # Times out. Deferred loading kernel issue 28335.
 isolate/issue_21398_parent_isolate1_test: RuntimeError # Issue 31402 (List literal)
 isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
-isolate/message3_test/int32x4: Crash # 31916
 isolate/message_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/mint_maker_test: CompileTimeError # Issue 31402 (Invocation arguments)
 isolate/ping_pause_test: Pass, Timeout
@@ -209,24 +208,6 @@
 typed_data/int32x4_static_test/01: Pass # Issue 31402 (Invocation arguments)
 typed_data/int32x4_static_test/02: Pass # Issue 31402 (Invocation arguments)
 
-[ $compiler == dartk && $system == windows && $strong ]
-isolate/issue_22778_test: Fail
-mirrors/constructor_optional_args_test: Fail
-mirrors/invoke_throws_test: Fail
-mirrors/list_constructor_test/01: Fail
-mirrors/list_constructor_test/none: Fail
-mirrors/redirecting_factory_different_type_test/02: Fail
-mirrors/redirecting_factory_different_type_test/none: Fail
-
-[ $compiler == dartk && $system != windows && $strong ]
-isolate/issue_22778_test: Crash
-mirrors/constructor_optional_args_test: Crash
-mirrors/invoke_throws_test: Crash
-mirrors/list_constructor_test/01: Crash
-mirrors/list_constructor_test/none: Crash
-mirrors/redirecting_factory_different_type_test/02: Crash
-mirrors/redirecting_factory_different_type_test/none: Crash
-
 [ $compiler == dartk && $strong ]
 async/future_test/01: RuntimeError
 async/future_test/none: RuntimeError
@@ -240,6 +221,7 @@
 async/timer_isActive_test: RuntimeError
 async/timer_repeat_test: RuntimeError
 async/zone_run_unary_test: RuntimeError
+isolate/issue_22778_test: Crash
 isolate/kill_self_synchronously_test: RuntimeError
 isolate/message_test: RuntimeError
 isolate/mint_maker_test: RuntimeError
@@ -248,6 +230,7 @@
 isolate/stacktrace_message_test: RuntimeError
 isolate/unresolved_ports_test: CompileTimeError, Pass, Timeout # Fails to compile on opt counter builder (#31838)
 mirrors/class_mirror_type_variables_test: RuntimeError
+mirrors/constructor_optional_args_test: Crash
 mirrors/constructors_test: RuntimeError
 mirrors/fake_function_with_call_test: RuntimeError
 mirrors/generic_bounded_by_type_parameter_test/none: RuntimeError
@@ -270,7 +253,10 @@
 mirrors/instantiate_abstract_class_test: RuntimeError
 mirrors/invocation_fuzz_test/smi: Crash, Pass # Crashes on opt counter builder (#31838)
 mirrors/invoke_closurization2_test: RuntimeError
+mirrors/invoke_throws_test: Crash
 mirrors/library_imports_bad_metadata_test/none: RuntimeError
+mirrors/list_constructor_test/01: Crash
+mirrors/list_constructor_test/none: Crash
 mirrors/metadata_const_map_test: Crash
 mirrors/mixin_members_test: RuntimeError
 mirrors/null_test: RuntimeError
@@ -278,6 +264,8 @@
 mirrors/parameter_is_const_test/none: RuntimeError
 mirrors/parameter_test/01: RuntimeError
 mirrors/parameter_test/none: RuntimeError
+mirrors/redirecting_factory_different_type_test/02: Crash
+mirrors/redirecting_factory_different_type_test/none: Crash
 mirrors/reflected_type_classes_test/01: MissingCompileTimeError
 mirrors/reflected_type_classes_test/02: MissingCompileTimeError
 mirrors/reflected_type_classes_test/03: MissingCompileTimeError
@@ -358,7 +346,6 @@
 isolate/issue_21398_parent_isolate2_test/01: Skip # Times out. Deferred loading kernel issue 28335.
 isolate/issue_22778_test: Crash
 isolate/kill_self_synchronously_test: RuntimeError
-isolate/message3_test/int32x4: Crash # 31916
 isolate/ping_pause_test: Crash
 isolate/ping_pause_test: Pass, Timeout
 isolate/spawn_function_custom_class_test: Pass, Timeout
diff --git a/tests/lib_2/lib_2_precompiled.status b/tests/lib_2/lib_2_precompiled.status
index 7c47354..c3b6dec 100644
--- a/tests/lib_2/lib_2_precompiled.status
+++ b/tests/lib_2/lib_2_precompiled.status
@@ -13,7 +13,6 @@
 async/timer_not_available_test: SkipByDesign # only meant to test when there is no way to implement timer (currently only in d8)
 async/timer_regress22626_test: Pass, RuntimeError # Issue 28254
 isolate/compile_time_error_test/01: Skip # Issue 12587
-isolate/message3_test/int32x4: Fail, Crash, Timeout # Issue 21818
 isolate/ping_pause_test: Skip # Resolve test issues
 isolate/ping_test: Skip # Resolve test issues
 mirrors/symbol_validation_test: RuntimeError # Issue 13596
diff --git a/tests/lib_2/lib_2_vm.status b/tests/lib_2/lib_2_vm.status
index 3325cdf..f12416d 100644
--- a/tests/lib_2/lib_2_vm.status
+++ b/tests/lib_2/lib_2_vm.status
@@ -24,6 +24,7 @@
 mirrors/generic_interface_test/01: MissingCompileTimeError
 mirrors/generics_test/01: MissingCompileTimeError
 mirrors/initializing_formals_test/01: Fail # initializing formals are implicitly final as of Dart 1.21
+mirrors/metadata_nested_constructor_call_test/none: CompileTimeError
 mirrors/mirrors_used*: SkipByDesign # Invalid tests. MirrorsUsed does not have a specification, and dart:mirrors is not required to hide declarations that are not covered by any MirrorsUsed annotation.
 mirrors/native_class_test: SkipByDesign # Imports dart:html
 mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError
diff --git a/tests/lib_2/mirrors/metadata_nested_constructor_call_test.dart b/tests/lib_2/mirrors/metadata_nested_constructor_call_test.dart
index c35e363..c89d2a8 100644
--- a/tests/lib_2/mirrors/metadata_nested_constructor_call_test.dart
+++ b/tests/lib_2/mirrors/metadata_nested_constructor_call_test.dart
@@ -36,10 +36,10 @@
 @Box(const MutableBox(const Box())) // //# 02: compile-time error
 class E {}
 
-@Box(Box()) // //# 03: compile-time error
+@Box(Box())
 class F {}
 
-@Box(Box(const Box())) // //# 04: compile-time error
+@Box(Box(const Box()))
 class G {}
 
 @Box(Box(const MutableBox())) // //# 05: compile-time error
diff --git a/tests/standalone_2/io/platform_test.dart b/tests/standalone_2/io/platform_test.dart
index 3fb3d3c..a1a1a94 100644
--- a/tests/standalone_2/io/platform_test.dart
+++ b/tests/standalone_2/io/platform_test.dart
@@ -97,7 +97,7 @@
   checkValidVersion(String version) {
     RegExp re = new RegExp(r'(\d+)\.(\d+)\.(\d+)(-dev\.([^\.]*)\.([^\.]*))?');
     var match = re.firstMatch(version);
-    Expect.isNotNull(match);
+    Expect.isNotNull(match, version);
     var major = int.parse(match.group(1));
     // Major version.
     Expect.isTrue(major == 1 || major == 2);
@@ -114,12 +114,24 @@
     }
   }
 
+  checkInvalidVersion(String version) {
+    try {
+      checkValidVersion(version);
+    } on FormatException {
+      return;
+    } on ExpectException {
+      return;
+    }
+    Expect.testError("checkValidVersion accepts invalid version: $version");
+  }
+
   String stripAdditionalInfo(String version) {
     var index = version.indexOf(' ');
     if (index == -1) return version;
     return version.substring(0, index);
   }
 
+  // Sanity-checks for `checkValidVersion`.
   // Ensure we can match valid versions.
   checkValidVersion('1.9.0');
   checkValidVersion('2.0.0');
@@ -129,19 +141,20 @@
   // Check stripping of additional information.
   checkValidVersion(stripAdditionalInfo(
       '1.9.0-dev.1.2 (Wed Feb 25 02:22:19 2015) on "linux_ia32"'));
+  // Reject some invalid versions.
+  checkInvalidVersion('1.9');
+  checkInvalidVersion('..');
+  checkInvalidVersion('1..');
+  checkInvalidVersion('1.9.');
+  checkInvalidVersion('1.9.0-dev..');
+  checkInvalidVersion('1.9.0-dev..0');
+  checkInvalidVersion('1.9.0-dev.0.');
+  checkInvalidVersion('1.9.0-dev.x.y');
+  checkInvalidVersion('x');
+  checkInvalidVersion('x.y.z');
+
   // Test current version.
   checkValidVersion(stripAdditionalInfo(Platform.version));
-  // Test some invalid versions.
-  Expect.throws(() => checkValidVersion('1.9'));
-  Expect.throws(() => checkValidVersion('..'));
-  Expect.throws(() => checkValidVersion('1..'));
-  Expect.throws(() => checkValidVersion('1.9.'));
-  Expect.throws(() => checkValidVersion('1.9.0-dev..'));
-  Expect.throws(() => checkValidVersion('1.9.0-dev..0'));
-  Expect.throws(() => checkValidVersion('1.9.0-dev.0.'));
-  Expect.throws(() => checkValidVersion('1.9.0-dev.x.y'));
-  Expect.throws(() => checkValidVersion('x'));
-  Expect.throws(() => checkValidVersion('x.y.z'));
 }
 
 main() {
diff --git a/tests/standalone_2/io/process_inherit_stdio_script.dart b/tests/standalone_2/io/process_inherit_stdio_script.dart
new file mode 100644
index 0000000..7c8b648
--- /dev/null
+++ b/tests/standalone_2/io/process_inherit_stdio_script.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+import 'dart:isolate';
+
+import "package:async_helper/async_helper.dart";
+
+void main(List<String> args) {
+  String arg = args[0];
+  if (arg == "--child") {
+    print(args[1]);
+    return;
+  }
+  asyncStart();
+  var script =
+      Platform.script.resolve('process_inherit_stdio_script.dart').toFilePath();
+  var future = Process.start(Platform.executable, [script, "--child", "foo"],
+      mode: ProcessStartMode.INHERIT_STDIO);
+  future.then((process) {
+    process.exitCode.then((c) {
+      asyncEnd();
+    });
+  });
+}
diff --git a/tests/standalone_2/io/process_inherit_stdio_test.dart b/tests/standalone_2/io/process_inherit_stdio_test.dart
new file mode 100644
index 0000000..9ca1bf6
--- /dev/null
+++ b/tests/standalone_2/io/process_inherit_stdio_test.dart
@@ -0,0 +1,39 @@
+// 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.
+
+// OtherResources=process_inherit_stdio_script.dart
+
+// Process test program to test 'inherit stdio' processes.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+import "process_test_util.dart";
+
+main() {
+  asyncStart();
+  // process_inherit_stdio_script.dart spawns a process in INHERIT_STDIO mode
+  // that prints to its stdout. Since that child process inherits the stdout
+  // of the process spawned here, we should see it.
+  var script =
+      Platform.script.resolve('process_inherit_stdio_script.dart').toFilePath();
+  var future = Process.start(Platform.executable, [script, "foo"]);
+  Completer<String> s = new Completer();
+  future.then((process) {
+    StringBuffer buf = new StringBuffer();
+    process.stdout.transform(UTF8.decoder).listen((data) {
+      buf.write(data);
+    }, onDone: () {
+      s.complete(buf.toString());
+    });
+  });
+  s.future.then((String result) {
+    Expect.isTrue(result.contains("foo"));
+    asyncEnd();
+  });
+}
diff --git a/tests/standalone_2/io/test_extension_fail_test.dart b/tests/standalone_2/io/test_extension_fail_test.dart
index 8ef31d2..ebe3a46 100644
--- a/tests/standalone_2/io/test_extension_fail_test.dart
+++ b/tests/standalone_2/io/test_extension_fail_test.dart
@@ -24,7 +24,7 @@
 String getExtensionPath(String buildDirectory) {
   switch (Platform.operatingSystem) {
     case 'linux':
-      return join(buildDirectory, 'lib.target', 'libtest_extension.so');
+      return join(buildDirectory, 'libtest_extension.so');
     case 'macos':
       return join(buildDirectory, 'libtest_extension.dylib');
     case 'windows':
@@ -46,7 +46,7 @@
 }
 
 // name is either "extension" or "relative_extension"
-Future test(String name, bool checkForBall) {
+Future test(String name, bool checkForBall) async {
   String scriptDirectory = dirname(Platform.script.toFilePath());
   String buildDirectory = dirname(Platform.executable);
   Directory tempDirectory =
@@ -55,18 +55,25 @@
 
   // Copy test_extension shared library, test_extension.dart and
   // test_extension_fail_tester.dart to the temporary test directory.
-  copyFileToDirectory(getExtensionPath(buildDirectory), testDirectory)
-      .then((_) {
+  try {
+    if (name == "extension") {
+      print(getExtensionPath(buildDirectory));
+      await copyFileToDirectory(
+          getExtensionPath(buildDirectory), testDirectory);
+    } else {
+      var extensionDir = testDirectory + "/extension";
+      Directory dir = await (new Directory(extensionDir).create());
+      await copyFileToDirectory(getExtensionPath(buildDirectory), extensionDir);
+    }
     var extensionDartFile = join(scriptDirectory, 'test_${name}.dart');
-    return copyFileToDirectory(extensionDartFile, testDirectory);
-  }).then((_) {
+    await copyFileToDirectory(extensionDartFile, testDirectory);
     var testExtensionTesterFile =
         join(scriptDirectory, 'test_${name}_fail_tester.dart');
-    return copyFileToDirectory(testExtensionTesterFile, testDirectory);
-  }).then((_) {
-    var script = join(testDirectory, 'test_${name}_fail_tester.dart');
-    return Process.run(Platform.executable, ['--trace-loading', script]);
-  }).then((ProcessResult result) {
+    await copyFileToDirectory(testExtensionTesterFile, testDirectory);
+    var args = new List<String>.from(Platform.executableArguments)
+      ..add('--trace-loading')
+      ..add(join(testDirectory, 'test_${name}_fail_tester.dart'));
+    var result = await Process.run(Platform.executable, args);
     print("ERR: ${result.stderr}\n\n");
     print("OUT: ${result.stdout}\n\n");
     if (!checkExitCode(result.exitCode)) {
@@ -80,7 +87,9 @@
         throw new StateError("stderr doesn't contain 'ball'.");
       }
     }
-  }).whenComplete(() => tempDirectory.deleteSync(recursive: true));
+  } finally {
+    await tempDirectory.deleteSync(recursive: true);
+  }
 }
 
 main() async {
diff --git a/tests/standalone_2/io/test_extension_test.dart b/tests/standalone_2/io/test_extension_test.dart
index 8888f40..aa6a1c9 100644
--- a/tests/standalone_2/io/test_extension_test.dart
+++ b/tests/standalone_2/io/test_extension_test.dart
@@ -40,16 +40,7 @@
 }
 
 String getExtensionPath(String buildDirectory, String filename) {
-  switch (Platform.operatingSystem) {
-    case 'android':
-    case 'linux':
-      return join(buildDirectory, 'lib.target', filename);
-    case 'macos':
-    case 'windows':
-      return join(buildDirectory, filename);
-    default:
-      Expect.fail('Unknown operating system ${Platform.operatingSystem}');
-  }
+  return join(buildDirectory, filename);
 }
 
 String getArchFromBuildDir(String buildDirectory) {
@@ -64,7 +55,7 @@
   return 'unknown';
 }
 
-Future testExtension(bool withArchSuffix) {
+Future testExtension(bool withArchSuffix) async {
   String scriptDirectory = dirname(Platform.script.toFilePath());
   String buildDirectory = dirname(Platform.executable);
   Directory tempDirectory =
@@ -79,34 +70,34 @@
     fileNames = getExtensionNames('');
   }
 
-  // Copy test_extension shared library, test_extension.dart and
-  // test_extension_tester.dart to the temporary test directory.
-  return copyFileToDirectory(getExtensionPath(buildDirectory, fileNames[0]),
-      join(testDirectory, fileNames[1])).then((_) {
+  try {
+    // Copy test_extension shared library, test_extension.dart and
+    // test_extension_tester.dart to the temporary test directory.
+    await copyFileToDirectory(getExtensionPath(buildDirectory, fileNames[0]),
+        join(testDirectory, fileNames[1]));
+
     var extensionDartFile = join(scriptDirectory, 'test_extension.dart');
-    return copyFileToDirectory(extensionDartFile, testDirectory);
-  }).then((_) {
+    await copyFileToDirectory(extensionDartFile, testDirectory);
+
     var testExtensionTesterFile =
         join(scriptDirectory, 'test_extension_tester.dart');
-    return copyFileToDirectory(testExtensionTesterFile, testDirectory);
-  }).then<ProcessResult>((_) {
-    var script = join(testDirectory, 'test_extension_tester.dart');
-    return Process.run(Platform.executable, [script]);
-  })
-    ..then((ProcessResult result) {
-      if (result.exitCode != 0) {
-        print('Subprocess failed with exit code ${result.exitCode}');
-        print('stdout:');
-        print('${result.stdout}');
-        print('stderr:');
-        print('${result.stderr}');
-      }
-      Expect.equals(0, result.exitCode);
-      tempDirectory.deleteSync(recursive: true);
-    })
-    ..catchError((_) {
-      tempDirectory.deleteSync(recursive: true);
-    });
+    await copyFileToDirectory(testExtensionTesterFile, testDirectory);
+
+    var args = new List<String>.from(Platform.executableArguments)
+      ..add(join(testDirectory, 'test_extension_tester.dart'));
+    ProcessResult result = await Process.run(Platform.executable, args);
+
+    if (result.exitCode != 0) {
+      print('Subprocess failed with exit code ${result.exitCode}');
+      print('stdout:');
+      print('${result.stdout}');
+      print('stderr:');
+      print('${result.stderr}');
+    }
+    Expect.equals(0, result.exitCode);
+  } finally {
+    tempDirectory.deleteSync(recursive: true);
+  }
 }
 
 Future testWithArchSuffix() {
diff --git a/tests/standalone_2/standalone_2_precompiled.status b/tests/standalone_2/standalone_2_precompiled.status
index da21313..d0a9a54 100644
--- a/tests/standalone_2/standalone_2_precompiled.status
+++ b/tests/standalone_2/standalone_2_precompiled.status
@@ -25,6 +25,7 @@
 io/process_check_arguments_test: Skip
 io/process_detached_test: Skip
 io/process_environment_test: Skip
+io/process_inherit_stdio_test: Skip
 io/process_non_ascii_test: Skip
 io/process_run_output_test: Skip
 io/process_set_exit_code_test: Skip
diff --git a/third_party/pkg_tested/pkg_tested.status b/third_party/pkg_tested/pkg_tested.status
index 958daf2..a19ff8d 100644
--- a/third_party/pkg_tested/pkg_tested.status
+++ b/third_party/pkg_tested/pkg_tested.status
@@ -27,3 +27,5 @@
 dart_style/test/command_line_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
 dart_style/test/formatter_test: Skip # The test controller does not take into account that tests take much longer in debug mode or on simulators.
 
+[ $compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk ]
+http_io/*: SkipByDesign
diff --git a/tools/VERSION b/tools/VERSION
index 82c9caf..8d5ddec 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 19
+PRERELEASE 20
 PRERELEASE_PATCH 0
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 43cec32..7c35719 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -177,7 +177,6 @@
   'DirectoryEntry.getDirectory',
   'DirectoryEntry.getFile',
   'DirectoryEntry.removeRecursively',
-  'DirectoryReader.readEntries',
   'Entry.copyTo',
   'Entry.getMetadata',
   'Entry.getParent',
@@ -279,6 +278,8 @@
   'CustomEvent.detail',
   'CustomEvent.initCustomEvent',
   'DeviceOrientationEvent.initDeviceOrientationEvent',
+  'DirectoryEntry.createReader',
+  'DirectoryReader.readEntries',
   'Document.createElement',
   'Document.createElementNS',
   'Document.createEvent',
diff --git a/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate b/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate
index a3649f7..98cced4 100644
--- a/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate
+++ b/tools/dom/templates/html/impl/impl_DirectoryEntry.darttemplate
@@ -16,6 +16,12 @@
         {'create': true, 'exclusive': exclusive});
   }
 
+  DirectoryReader createReader() {
+    DirectoryReader reader = _createReader();
+    applyExtension('DirectoryReader', reader);
+    return reader;
+  }
+
   /**
    * Retrieve an already existing directory entry. The returned future will
    * result in an error if a directory at `path` does not exist or if the item
diff --git a/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate b/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate
new file mode 100644
index 0000000..2e28d10
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_DirectoryReader.darttemplate
@@ -0,0 +1,23 @@
+// Copyright (c) 2013, 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 $LIBRARYNAME;
+
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
+$!MEMBERS
+
+  @DomName('DirectoryReader.readEntries')
+  @DocsEditable()
+  Future<List<Entry>> readEntries() {
+    var completer = new Completer<List<Entry>>();
+    _readEntries((value) {
+      completer.complete(new List<Entry>.from(value));
+    }, (error) {
+      completer.completeError(error);
+    });
+
+    return completer.future;
+  }
+
+}
diff --git a/tools/gardening/bin/results_list.dart b/tools/gardening/bin/results_list.dart
index bf17290..688d2b3 100644
--- a/tools/gardening/bin/results_list.dart
+++ b/tools/gardening/bin/results_list.dart
@@ -16,6 +16,7 @@
   argParser.addFlag("checked", negatable: false);
   argParser.addOption("compiler", allowed: Compiler.names);
   argParser.addFlag("csp", negatable: false);
+  argParser.addFlag("fasta", negatable: false);
   argParser.addFlag("dart2js-with-kernel", negatable: false);
   argParser.addFlag("dart2js-with-kernel-in-ssa", negatable: false);
   argParser.addFlag("enable-asserts", negatable: false);
@@ -44,6 +45,7 @@
       argResults["host-checked"],
       argResults["minified"],
       argResults["csp"],
+      argResults["fasta"],
       argResults["system"],
       [],
       argResults["use-sdk"],
diff --git a/tools/gardening/bin/results_status.dart b/tools/gardening/bin/results_status.dart
index 1193c41..c5d5d5d 100644
--- a/tools/gardening/bin/results_status.dart
+++ b/tools/gardening/bin/results_status.dart
@@ -20,6 +20,10 @@
 
   Future run() async {
     var workflow = new Workflow();
-    return workflow.start(new AskForLogs());
+    var askForLogs = new AskForLogs();
+    for (var input in argResults.rest) {
+      await askForLogs.processInput(input);
+    }
+    return workflow.start(askForLogs);
   }
 }
diff --git a/tools/gardening/lib/src/results/configuration_environment.dart b/tools/gardening/lib/src/results/configuration_environment.dart
index fb25d3e..2640ae3 100644
--- a/tools/gardening/lib/src/results/configuration_environment.dart
+++ b/tools/gardening/lib/src/results/configuration_environment.dart
@@ -28,6 +28,7 @@
   "compiler": new _Variable((c) => c.compiler, Compiler.names),
   "csp": new _Variable.bool((c) => c.csp),
   "dart2js_with_kernel": new _Variable.bool((c) => c.dart2JsWithKernel),
+  "fasta": new _Variable.bool((c) => c.fasta),
   "fast_startup": new _Variable.bool((c) => c.fastStartup),
   "enable_asserts": new _Variable.bool((c) => c.enableAsserts),
   "host_checked": new _Variable.bool((c) => c.hostChecked),
diff --git a/tools/gardening/lib/src/results/result_json_models.dart b/tools/gardening/lib/src/results/result_json_models.dart
index 2ceed40..6265cd4 100644
--- a/tools/gardening/lib/src/results/result_json_models.dart
+++ b/tools/gardening/lib/src/results/result_json_models.dart
@@ -16,6 +16,7 @@
   final bool hostChecked;
   final bool minified;
   final bool csp;
+  final bool fasta;
   final String system;
   final List<String> vmOptions;
   final bool useSdk;
@@ -39,6 +40,7 @@
       this.hostChecked,
       this.minified,
       this.csp,
+      this.fasta,
       this.system,
       this.vmOptions,
       this.useSdk,
@@ -63,6 +65,7 @@
         json["host_checked"],
         json["minified"],
         json["csp"],
+        json["fasta"],
         json["system"],
         json["vm_options"],
         json["use_sdk"],
@@ -90,6 +93,7 @@
       _boolToArg("host-checked", hostChecked),
       _boolToArg("minified", minified),
       _boolToArg("csp", csp),
+      _boolToArg("fasta", csp),
       _stringToArg("system", system),
       _listToArg("vm-options", vmOptions),
       _boolToArg("use-sdk", useSdk),
@@ -109,7 +113,7 @@
 
   String toCsvString() {
     return "$mode;$arch;$compiler;$runtime;$checked;$strong;$hostChecked;"
-        "$minified;$csp;$system;$vmOptions;$useSdk;$builderTag;$fastStartup;"
+        "$minified;$csp;$fasta;$system;$vmOptions;$useSdk;$builderTag;$fastStartup;"
         "$dart2JsWithKernel;$enableAsserts;$hotReload;"
         "$hotReloadRollback;$previewDart2;$selectors";
   }
diff --git a/tools/gardening/lib/src/results_workflow/ask_for_logs.dart b/tools/gardening/lib/src/results_workflow/ask_for_logs.dart
index 0f6fe70..24197b9 100644
--- a/tools/gardening/lib/src/results_workflow/ask_for_logs.dart
+++ b/tools/gardening/lib/src/results_workflow/ask_for_logs.dart
@@ -37,15 +37,19 @@
       return new Future.value(
           new NavigateStepWorkflowAction(new PresentFailures(), testResults));
     }
-    await getTestResult(input.split(' ')).then((testResult) {
+    await processInput(input);
+    print("Add another log or press <Enter> to continue.");
+    return new Future.value(new WaitForInputWorkflowAction());
+  }
+
+  Future<TestResult> processInput(String input) async {
+    return getTestResult(input.split(' ')).then((testResult) {
       if (testResult == null) {
         print("ERROR: The input '$input' is invalid.");
       } else {
         testResults.add(testResult);
       }
     });
-    print("Add another log or press <Enter> to continue.");
-    return new Future.value(new WaitForInputWorkflowAction());
   }
 
   @override
diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart
index 290c4af..8c06007 100644
--- a/tools/patch_sdk.dart
+++ b/tools/patch_sdk.dart
@@ -28,6 +28,7 @@
 import 'package:kernel/target/targets.dart';
 import 'package:kernel/target/vm.dart' show VmTarget;
 import 'package:kernel/target/flutter.dart' show FlutterTarget;
+import 'package:vm/target/runner.dart' show RunnerTarget;
 import 'package:compiler/src/kernel/dart2js_target.dart' show Dart2jsTarget;
 
 /// Set of input files that were read by this script to generate patched SDK.
@@ -83,10 +84,11 @@
   exit(1);
 }
 
-const validModes = const ['vm', 'flutter'];
+const validModes = const ['vm', 'flutter', 'runner'];
 String mode;
 bool get forVm => mode == 'vm';
 bool get forFlutter => mode == 'flutter';
+bool get forRunner => mode == 'runner';
 
 Future _main(List<String> argv) async {
   if (argv.isEmpty) usage('[${validModes.join('|')}]');
@@ -131,6 +133,10 @@
       target = new VmTarget(flags);
       break;
 
+    case 'runner':
+      target = new RunnerTarget(flags);
+      break;
+
     case 'flutter':
     case 'flutter_release':
       target = new FlutterTarget(flags);
@@ -172,7 +178,7 @@
   //    [platformForDeps] is always the VM-specific `platform.dill` file.
   var platformForDeps = platform;
   var sdkDir = outDirUri;
-  if (forFlutter) {
+  if (forFlutter || forRunner) {
     // Note: this fails if `$root_out_dir/vm_platform.dill` doesn't exist.  The
     // target to build the flutter patched sdk depends on
     // //runtime/vm:kernel_platform_files to ensure this file exists.
@@ -257,7 +263,7 @@
 /// sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart to include
 /// declarations for vm internal libraries.
 String _updateLibraryMetadata(String sdkOut, String libContents) {
-  if (!forVm && !forFlutter) return libContents;
+  if (!forVm && !forFlutter && !forRunner) return libContents;
   var extraLibraries = new StringBuffer();
   extraLibraries.write('''
   "_builtin": const LibraryInfo(
@@ -298,6 +304,33 @@
   ''');
   }
 
+  if (forRunner) {
+    extraLibraries.write('''
+      "fuchsia.builtin": const LibraryInfo(
+          "fuchsia.builtin/builtin.dart",
+          categories: "Client,Server",
+          implementation: true,
+          documented: false,
+          platforms: VM_PLATFORM),
+  ''');
+    extraLibraries.write('''
+      "zircon": const LibraryInfo(
+          "zircon/zircon.dart",
+          categories: "Client,Server",
+          implementation: true,
+          documented: false,
+          platforms: VM_PLATFORM),
+  ''');
+    extraLibraries.write('''
+      "fuchsia": const LibraryInfo(
+          "fuchsia/fuchsia.dart",
+          categories: "Client,Server",
+          implementation: true,
+          documented: false,
+          platforms: VM_PLATFORM),
+  ''');
+  }
+
   libContents = libContents.replaceAll(
       ' libraries = const {', ' libraries = const { $extraLibraries');
   _writeSync(
@@ -349,6 +382,42 @@
     }
     addLocation(locations, 'ui', path.join('ui', 'ui.dart'));
   }
+
+  if (forRunner) {
+    var gnRoot = path
+        .dirname(path.dirname(path.dirname(path.dirname(path.absolute(base)))));
+
+    var builtinLibraryInDir = new Directory(
+        path.join(gnRoot, 'topaz', 'runtime', 'dart_runner', 'embedder'));
+    for (var file in builtinLibraryInDir.listSync()) {
+      if (!file.path.endsWith('.dart')) continue;
+      var name = path.basename(file.path);
+      var builtinLibraryOut = path.join(sdkOut, 'fuchsia.builtin', name);
+      _writeSync(builtinLibraryOut, readInputFile(file.path));
+    }
+    addLocation(locations, 'fuchsia.builtin',
+        path.join('fuchsia.builtin', 'builtin.dart'));
+
+    var zirconLibraryInDir = new Directory(
+        path.join(gnRoot, 'topaz', 'public', 'dart-pkg', 'zircon', 'lib'));
+    for (var file in zirconLibraryInDir.listSync(recursive: true)) {
+      if (!file.path.endsWith('.dart')) continue;
+      var name = file.path.substring(zirconLibraryInDir.path.length + 1);
+      var zirconLibraryOut = path.join(sdkOut, 'zircon', name);
+      _writeSync(zirconLibraryOut, readInputFile(file.path));
+    }
+    addLocation(locations, 'zircon', path.join('zircon', 'zircon.dart'));
+
+    var fuchsiaLibraryInDir = new Directory(
+        path.join(gnRoot, 'topaz', 'public', 'dart-pkg', 'fuchsia', 'lib'));
+    for (var file in fuchsiaLibraryInDir.listSync(recursive: true)) {
+      if (!file.path.endsWith('.dart')) continue;
+      var name = file.path.substring(fuchsiaLibraryInDir.path.length + 1);
+      var fuchsiaLibraryOut = path.join(sdkOut, 'fuchsia', name);
+      _writeSync(fuchsiaLibraryOut, readInputFile(file.path));
+    }
+    addLocation(locations, 'fuchsia', path.join('fuchsia', 'fuchsia.dart'));
+  }
 }
 
 _applyPatch(SdkLibrary library, String sdkLibIn, String patchIn, String sdkOut,
diff --git a/tools/testing/dart/command_output.dart b/tools/testing/dart/command_output.dart
index 8a885ac..e342522 100644
--- a/tools/testing/dart/command_output.dart
+++ b/tools/testing/dart/command_output.dart
@@ -58,21 +58,22 @@
     // In either case an exit code of 253 is considered a crash.
     if (exitCode == 253) return true;
     if (exitCode == parseFailExitCode) return false;
-    if (io.Platform.operatingSystem == 'windows') {
+    if (hasTimedOut) return false;
+    if (io.Platform.isWindows) {
       // The VM uses std::abort to terminate on asserts.
       // std::abort terminates with exit code 3 on Windows.
-      if (exitCode == 3 || exitCode == browserCrashExitCode) {
-        return !hasTimedOut;
-      }
+      if (exitCode == 3 || exitCode == browserCrashExitCode) return true;
+
       // If a program receives an uncaught system exception, the program
       // terminates with the exception code as exit code.
-      // The 0x3FFFFF00 mask here tries to determine if an exception indicates
-      // a crash of the program.
-      // System exception codes can be found in 'winnt.h', for example
-      // "#define STATUS_ACCESS_VIOLATION  ((DWORD) 0xC0000005)"
-      return (!hasTimedOut && (exitCode < 0) && ((0x3FFFFF00 & exitCode) == 0));
+      // https://msdn.microsoft.com/en-us/library/cc704588.aspx lists status
+      // codes basically saying that codes starting with 0xC0, 0x80 or 0x40
+      // are crashes, so look at the 4 most significant bits in 32-bit-space
+      // make sure its either 0b1100, 0b1000 or 0b0100.
+      int masked = (exitCode & 0xF0000000) >> 28;
+      return (exitCode < 0) && (masked >= 4) && ((masked & 3) == 0);
     }
-    return !hasTimedOut && ((exitCode < 0));
+    return exitCode < 0;
   }
 
   bool get hasSyntaxError => exitCode == parseFailExitCode;
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index 253e153..1f3347d 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -252,6 +252,7 @@
     if (useFastStartup) args.add("--fast-startup");
     if (useEnableAsserts) args.add("--enable-asserts");
     if (useDart2JSWithKernel) args.add("--use-kernel");
+    if (isStrong) args.add("--strong");
     return args;
   }