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;
   }
 
