diff --git a/.packages b/.packages
index b459b60..fe03169 100644
--- a/.packages
+++ b/.packages
@@ -10,6 +10,7 @@
 analysis_server_client:pkg/analysis_server_client/lib
 analyzer:pkg/analyzer/lib
 analyzer_cli:pkg/analyzer_cli/lib
+analyzer_fe_comparison:pkg/analyzer_fe_comparison/lib
 analyzer_plugin:pkg/analyzer_plugin/lib
 args:third_party/pkg/args/lib
 async:third_party/pkg/async/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 672fc842..3b3a06d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 2.1.0-dev.4.0
+
+### Core library changes
+
+#### `dart:core`
+
+*   Added missing methods to `UnmodifiableMapMixin`. Some maps intended to
+    be unmodifiable incorrectly allowed new methods added in Dart 2 to
+    succeed.
+
 ## 2.1.0-dev.3.1
 
 ### Tool Changes
@@ -11,8 +21,9 @@
 
 ### Core library changes
 
-* `dart:async`
-  * Update `Stream.fromIterable` to send a done event after the error when the
+#### `dart:async`
+
+*   Update `Stream.fromIterable` to send a done event after the error when the
     iterator's `moveNext` throws, and handle if the `current` getter throws.
     Issue [33431](http://dartbug.com/33431).
 
diff --git a/DEPS b/DEPS
index 8f5c4c4..0680c4b 100644
--- a/DEPS
+++ b/DEPS
@@ -37,7 +37,7 @@
   "fuchsia_git": "https://fuchsia.googlesource.com",
 
   "co19_rev": "9858ee7d79cf09b50d6b5bc13fb950ae5f357954",
-  "co19_2_rev": "afadfe417b85037281a770b477f42c3786a8666a",
+  "co19_2_rev": "7514e576a02ced94a360ec51e0d26b32f9ebc82f",
 
   # As Flutter does, we pull buildtools, including the clang toolchain, from
   # Fuchsia. This revision should be kept up to date with the revision pulled
@@ -80,7 +80,7 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164
   "dart_style_tag": "6f3efd209ff1828835936397b64be79265cc0c19",  # Please see the note above before updating.
 
-  "dartdoc_tag" : "v0.20.2",
+  "dartdoc_tag" : "v0.20.4",
   "fixnum_tag": "0.10.8",
   "func_rev": "25eec48146a58967d75330075ab376b3838b18a8",
   "glob_tag": "1.1.7",
@@ -113,7 +113,7 @@
   "protobuf_tag": "0.9.0",
   "pub_rev": "9f00679ef47bc79cadc18e143720ade6c06c0100",
   "pub_semver_tag": "1.4.2",
-  "quiver_tag": "0.29.0+2",
+  "quiver_tag": "2.0.0+1",
   "resource_rev": "2.1.5",
   "root_certificates_rev": "16ef64be64c7dfdff2b9f4b910726e635ccc519e",
   "shelf_static_rev": "v0.2.8",
@@ -403,20 +403,6 @@
     ],
   },
   {
-    "name": "drt_resources",
-    "pattern": ".",
-    "action": [
-      "download_from_google_storage",
-      "--no_auth",
-      "--no_resume",
-      "--bucket",
-      "dart-dependencies",
-      "--platform=win32",
-      "--directory",
-      Var('dart_root') + "/third_party/drt_resources",
-    ],
-  },
-  {
     "name": "7zip",
     "pattern": ".",
     "action": [
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index 051d913..5284f7b 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -7840,7 +7840,7 @@
 The expression of an expression statement is not allowed to begin with a \{.
 \commentary{
 This means that if some source text could otherwise be parsed as an expression
-followed by a \;, then this grammar production does not apply
+followed by a {\rm `$;$'}, then this grammar production does not apply
 when the expression starts with a \{.
 }
 \rationale{
@@ -8754,11 +8754,6 @@
 \LMHash{}
 Executing a return statement with no expression, \code{\RETURN;} returns with no value (\ref{completion}).
 
-\LMHash{}
-% TODO(eernst): For integration of invalid_returns.md: We do allow that now, and
-% many other things, eg `void foo(bool b) { if (b) return; return print(''); }`.
-It is a compile-time error if a function contains both one or more explicit return statements of the form \code{\RETURN;} and one or more return statements of the form \code{\RETURN{} $e$;}.
-
 
 \subsection{Labels}
 \LMLabel{labels}
diff --git a/docs/language/informal/dynamic-members.md b/docs/language/informal/dynamic-members.md
index e60c925..bf53190 100644
--- a/docs/language/informal/dynamic-members.md
+++ b/docs/language/informal/dynamic-members.md
@@ -1,10 +1,10 @@
 # Typing of members of dynamic
 
-Author: eernst@.
+**Author**: eernst@.
 
-Version: 0.1 (2018-03-13)
+**Version**: 0.2 (2018-09-04)
 
-Status: Under discussion.
+**Status**: Under discussion.
 
 **This document** is a Dart 2 feature specification of the static typing
 of instance members of a receiver whose static type is `dynamic`.
@@ -123,20 +123,37 @@
 In this section, `Object` denotes the built-in class `Object`, and
 `dynamic` denotes the built-in type `dynamic`.
 
-Let `e` be an expression of the form `d.g` where the static type of `d` is
-`dynamic` and `g` is a getter declared in `Object`; if the return type of
-`Object.g` is `T` then the static type of `e` is `T`.
+Let `e` be an expression of the form `d.m`, which is not followed by an
+argument part, where the static type of `d` is `dynamic`, and `m` is a
+getter declared in `Object`; if the return type of `Object.m` is `T` then
+the static type of `e` is `T`.
 
 *For instance, `d.hashCode` has type `int` and `d.runtimeType` has type
 `Type`.*
 
-Let `e` be an expression of the form `d.m` where the static type of `d` is
-`dynamic` and `m` is a method declared in `Object` whose method signature
-has type `F` (*which is a function type*). The static type of `e` is then
-`F`.
+Let `e` be an expression of the form `d.m`, which is not followed by an
+argument part, where the static type of `d` is `dynamic`, and `m` is a
+method declared in `Object` whose method signature has type `F` (*which is
+a function type*). The static type of `e` is then `F`.
 
 *For instance, `d.toString` has type `String Function()`.*
 
+Let `e` be an expression of the form `d.m(arguments)` or
+`d.m<typeArguments>(arguments)` where the static type of `d` is `dynamic`,
+`m` is a getter declared in `Object` with return type `F`, `arguments` is
+an actual argument list, and `typeArguments` is a list of actual type
+arguments, if present. Static analysis will then process `e` as a function
+expression invocation where a function of static type `F` is applied to the
+given argument part.
+
+*So `d.runtimeType(42)` is a compile-time error, because it is checked as a
+function expression invocation where an entity of static type `Type` is
+invoked. Note that it could actually succeed: An overriding implementation
+of `runtimeType` could return an instance whose dynamic type is a subtype
+of `Type` that has a `call` method. We decided to make it an error because
+it is likely to be a mistake, especially in cases like `d.hashCode()` where
+a developer might have forgotten that `hashCode` is a getter.*
+
 Let `e` be an expression of the form `d.m(arguments)` where the static type
 of `d` is `dynamic`, `arguments` is an actual argument list, and `m` is a
 method declared in `Object` whose method signature has type `F`. If the
@@ -152,36 +169,41 @@
 
 Let `e` be an expression of the form `d.m<typeArguments>(arguments)` where
 the static type of `d` is `dynamic`, `typeArguments` is a list of actual
-type arguments, `arguments` is an actual argument list, and `m` is a
-method declared in `Object` whose method signature has type `F`. The
-static type of `e` is then `dynamic`.
+type arguments, `arguments` is an actual argument list. It is a
+compile-time error if `m` is a non-generic method declared in `Object`.
 
-*We do not need to address the case `d.m(arguments)` where `m` is a getter
-declared in `Object` whose return type is a function type or a supertype
-thereof, because no such getters exist, but such a case would be covered in
-a generalization to support `dynamic(T)` for all `T`. Similarly, such a
-generalization would need to handle the case where the method is generic
-and no type arguments are passed, and the case where the method is
-generic and a wrong number of type arguments is passed, etc. Such a
-generalization is expected to be possible without invalidating the rules
-given in this document.*
+*No generic methods are declared in `Object`. Hence, we do not specify that
+there must be the statically required number of actual type arguments, and
+they must satisfy the bounds. That would otherwise be the consistent
+approach, because the invocation is guaranteed to fail when any of those
+requirements are violated, but generalizations of this mechanism would need
+to include such rules.*
 
 For an instance method invocation `e` (including invocations of getters,
 setters, and operators) where the receiver has static type `dynamic` and
 `e` does not match any of the above cases, the static type of `e` is
 `dynamic`.
 
-*Note that it is not possible for an instance method invocation with a
-receiver of type `dynamic` to be a compile-time error (except, of course,
-that some expressions like `x[1, 2]` are syntax errors even though they
-could also be considered "invocations", and except that subexpressions are
-checked separately, and any given actual argument could be a compile-time
-error). In general, any argument list shape could be handled via
+When a `cascadeSection` performs a getter or method invocation that
+corresponds to one of the cases above, the corresponding static analysis
+and compile-time errors apply.
+
+*For instance, `d..foobar(16)..hashCode()` is an error.*
+
+*Note that only very few forms of instance method invocation with a
+receiver of type `dynamic` can be a compile-time error. Of course,
+some expressions like `x[1, 2]` are syntax errors even though they
+could also be considered "invocations", and subexpressions are checked
+separately so any given actual argument could be a compile-time 
+error. But almost any given argument list shape could be handled via
 `noSuchMethod`, and an argument of any type could be accepted because any
 formal parameter in an overriding declaration could have its type
 annotation contravariantly changed to `Object`. So it is a natural
 consequence of the principle mentioned in 'Motivation' that a `dynamic`
-receiver admits all instance method invocations.*
+receiver admits almost all instance method invocations. The few cases where
+an instance method invocation with a receiver of type `dynamic` is an error
+are either guaranteed to fail at run time, or they are very likely to be
+developer mistakes.*
 
 
 ## Dynamic Semantics
@@ -198,5 +220,9 @@
 
 ## Revisions
 
+- 0.2 (2018-09-04) Adjustment to make `d.hashCode()` and similar
+  expressions an error, cf.
+  [this github issue](https://github.com/dart-lang/sdk/issues/34320).
+
 - 0.1 (2018-03-13) Initial version, based on discussions in
-[this github issue](https://github.com/dart-lang/sdk/issues/32414).
+  [this github issue](https://github.com/dart-lang/sdk/issues/32414).
diff --git a/docs/language/informal/int-to-double.md b/docs/language/informal/int-to-double.md
new file mode 100644
index 0000000..d9cd340
--- /dev/null
+++ b/docs/language/informal/int-to-double.md
@@ -0,0 +1,184 @@
+## Feature: Evaluating integer literals as double values
+
+**Author**: eernst@.
+
+**Version**: 0.4 (2018-08-14).
+
+**Status**: Background material, in language specification as of
+[d14b256](https://github.com/dart-lang/sdk/commit/d14b256e351464db352f361f1206e1415db65d9c).
+
+**This document** is a feature specification of the support in Dart 2 for
+evaluating integer literals occurring in a context where the expected type
+is `double` to a value of type `double`.
+
+
+## Motivation
+
+In a situation where a value of type `double` is required, e.g., as an
+actual argument to a constructor or function invocation, it may be
+convenient to write an integer literal because it is more concise, and
+the intention is clear. For instance:
+
+```dart
+double one = 1; // OK, would have to be `1.0` without this feature.
+```
+
+This mechanism only applies to integer literals, and only when the expected
+type is a type `T` such that `double` is assignable to `T` and `int` is not
+assignable to `T`; in particular, it applies when the expected type is
+`double`.
+
+That is, the result of a computation (say, `a + b` or even a lone variable
+like `a` of type `int`) will never be converted to a double value
+implicitly, and it also doesn't happen when the expected type is a type
+variable declared in an enclosing scope, no matter whether that type
+variable in a given situation at run time has the value `double`. The one
+case where conversion does happen when the expected type is a type variable
+is when its upper bound is a subtype of `double` (including `double`
+itself). For example:
+
+```dart
+class C<N extends num, NN extends double> {
+  X foo<X>(X x) => x;
+  double d1 = foo<double>(42); // OK.
+  double d2 = foo(42); // OK, type argument inferred as `double`.
+  num n1 = 42 as double; // OK, `42` evaluates to 42.0.
+  N n2 = 42; // Error, neither `int` nor `double` assignable to `N`.
+  NN n3 = 42; // OK, `int` not assignable, but `double` is.
+  FutureOr<double> n4 = 42; // OK, same reason.
+  N n5 = n1; // OK statically, dynamic error if `N` is `int`.
+}
+```
+
+
+## Syntax
+
+This feature has no effect on the grammar.
+
+
+## Static Analysis
+
+Let _i_ be a lexical token which is syntactically an _integer literal_ (as
+defined in the language specification section 16.3 Numbers). If _i_ occurs
+as an expression in a context where the expected type `T` is such that
+`double` is assignable to `T` and `int` is not assignable to `T` then we
+will say that _i_ is a _double valued integer literal_.
+
+The static type of a double valued integer literal is `double`.
+
+The _unbounded integer value_ of an integer literal _i_ is the mathematical
+integer (that is, unlimited in size and precision) that corresponds to the
+numeral consisting of the digits of _i_, using radix 16 when _i_ is prefixed
+by `0x` or `0X`, and radix 10 otherwise.
+
+It is a compile-time error if the unbounded integer value of a double
+valued integer literal is less than
+-(1−2<sup>−53</sup>) * 2<sup>1024</sup>
+and if it is greater
+than (1−2<sup>−53</sup>) * 2<sup>1024</sup>.
+
+It is a compile-time error if the unbounded integer value of a double
+valued integer literal cannot be represented exactly as an IEEE 754
+double-precision value, assuming that the mantissa is extended with zeros
+until the precision is sufficiently high to unambiguously specify a single
+integer value.
+
+*That is, we consider a IEEE 754 double-precision bit pattern to represent
+a specific number rather than an interval, namely the number which is
+obtained by extending the mantissa with zeros. In this case we are only
+interested in such bit patterns where the exponent part is large enough to
+make the represented number a whole number, which means that we will need
+to add a specific, finite number of zeros.*
+
+*Consequently,
+`double d = 18446744073709551614;`
+has no error and it will initialize `d` to have the double value
+represented as 0x43F0000000000000. But
+`int i = 18446744073709551614;`
+is a compile-time error because 18446744073709551614 is too large to be
+represented as a 64 bit 2's complement number, and
+`double d = 18446744073709551615;`
+is a compile-time error because it cannot be represented exactly using the
+IEEE 754 double-precision format.*
+
+
+## Dynamic Semantics
+
+At run time, evaluation of a double valued integer literal _i_ yields a
+value of type `double` which according to the IEEE 754 standard for
+double-precision numbers represents the unbounded integer value of _i_.
+
+Signed zeros in IEEE 754 present an ambiguity. It is resolved by
+evaluating an expression which is a unary minus applied to a double valued
+integer literal whose unbounded integer value is zero to the IEEE 754
+representation of `-0.0`, and other occurrences of a double valued integer
+literal whose unbounded integer value is zero to the representation of
+`0.0`.
+
+*We need not specify that the representation is extended with zeros as
+needed, because there is in any case only one IEEE 754 double-precision bit
+pattern that can be said to represent the given unbounded integer value: It
+would belong to the interval under any meaningful interpretation of such a
+bit pattern as an interval.*
+
+
+## Discussion
+
+We have chosen to make it an error when a double valued integer literal
+cannot be represented exactly by an IEEE 754 double-precision encoding. We
+could have chosen to allow for a certain deviation from that, such that it
+would be allowed to have a double valued integer literal whose unbounded
+integer value would differ "somewhat" from the nearest representable value.
+
+However, we felt that it would be misleading for developers to read a large
+double valued integer literal, probably assuming that every digit is
+contributing to the resulting double value, if in fact many of the digits
+are ignored, in the sense that they must be replaced by different digits in
+order to express the nearest representable IEEE double-precision value.
+
+For instance,
+11692013098647223344361828061502034755750757138432 is represented as
+0x4A20000000000000, but so is
+11692013098647223344638182605120307455757075314823, which means that
+the 29 least significant digits are replaced by completely different
+digits. The former corresponds to an extension of the IEEE representation
+with a suitable number of zeros in the mantissa which will translate back
+to exactly that number, and the latter is just some other number which is
+close enough to have the same IEEE representation as the nearest
+representable value.
+
+We expect such large double valued integer literals to occur very rarely,
+which means that such a situation will not arise very frequently. However,
+when it does arise it may be quite frustrating for developers to find a
+representable number, assuming that they start out with something like
+11692013098647223344638182605120307455757075314823. It is hence recommended
+that tools emit an error message where the nearest representable value is
+mentioned, such that a developer may copy it into the code in order to
+eliminate the error.
+
+Another alternative would be to accept only those double valued integer
+literals whose unbounded integer value can be represented as a 2's
+complement bit pattern in 64 bits or in an unsigned 64 bit representation,
+that is, only those which are also accepted as integer literals of type
+`int`.  This would ensure that developers avoid the situation where a large
+number of digits are incorrectly taken to imply a very high precision.
+This is especially relevant with decimal double valued integer literals,
+because they do not end in a large number of zeros, which make them "look"
+like a high-precision number where every digit means something. However, we
+felt that this reduction of the expressive power brings so few benefits
+that we preferred the approach where also "large numbers" could be
+expressed using a double valued integer literal.
+
+
+## Updates
+
+*   Version 0.4 (2018-08-14), adjusted rules to allow more expected types,
+    such as `FutureOr<double>`, for double valued integer literals.
+
+*   Version 0.3 (2018-08-09), changed error rules such that it is now an
+    error for a double valued integer literal to have an unbounded
+    integer value which is not precisely representable.
+
+*   Version 0.2 (2018-08-08), added short discussion section.
+
+*   Version 0.1 (2018-08-07), initial version of this feature specification.
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 15e1f81..713177c 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -70,9 +70,6 @@
         help: 'Run a quick version of the benchmark. This is not useful for '
             'gathering accurate times,\nbut can be used to validate that the '
             'benchmark works.');
-    argParser.addFlag('use-cfe',
-        negatable: false,
-        help: 'Benchmark against the Dart 2.0 front end implementation.');
     argParser.addOption('repeat',
         defaultsTo: '10', help: 'The number of times to repeat the benchmark.');
     argParser.addFlag('verbose',
@@ -98,7 +95,6 @@
     final String benchmarkId = argResults.rest.first;
     final int repeatCount = int.parse(argResults['repeat'] as String);
     final bool quick = argResults['quick'];
-    final bool useCFE = argResults['use-cfe'];
     final bool verbose = argResults['verbose'];
 
     final Benchmark benchmark =
@@ -127,7 +123,6 @@
       for (int iteration = 0; iteration < actualIterations; iteration++) {
         BenchMarkResult newResult = await benchmark.run(
           quick: quick,
-          useCFE: useCFE,
           verbose: verbose,
         );
         print('  $newResult');
@@ -166,7 +161,6 @@
 
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool useCFE: false,
     bool verbose: false,
   });
 
diff --git a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
index 940a344..0c460c2 100644
--- a/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
+++ b/pkg/analysis_server/benchmark/perf/benchmarks_impl.dart
@@ -28,7 +28,6 @@
   @override
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool useCFE: false,
     bool verbose: false,
   }) async {
     if (!quick) {
@@ -38,7 +37,7 @@
     Stopwatch stopwatch = new Stopwatch()..start();
 
     AnalysisServerMemoryUsageTest test = new AnalysisServerMemoryUsageTest();
-    await test.setUp(useCFE: useCFE);
+    await test.setUp();
     await test.subscribeToStatusNotifications();
     await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), []);
     await test.analysisFinished;
@@ -73,7 +72,6 @@
   @override
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool useCFE: false,
     bool verbose: false,
   }) async {
     Stopwatch stopwatch = new Stopwatch()..start();
@@ -82,7 +80,7 @@
     if (verbose) {
       test.debugStdio();
     }
-    await test.setUp(useCFE: useCFE);
+    await test.setUp();
     await test.subscribeToStatusNotifications();
     await test.sendAnalysisSetAnalysisRoots(getProjectRoots(quick: quick), []);
     await test.analysisFinished;
diff --git a/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart b/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart
index 90fab47..3d0957e 100644
--- a/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart
+++ b/pkg/analysis_server/benchmark/perf/flutter_analyze_benchmark.dart
@@ -63,7 +63,6 @@
   @override
   Future<BenchMarkResult> run({
     bool quick: false,
-    bool useCFE: false,
     bool verbose: false,
   }) async {
     if (!quick) {
diff --git a/pkg/analysis_server/benchmark/perf/memory_tests.dart b/pkg/analysis_server/benchmark/perf/memory_tests.dart
index 4cb8b7f..ce762e8 100644
--- a/pkg/analysis_server/benchmark/perf/memory_tests.dart
+++ b/pkg/analysis_server/benchmark/perf/memory_tests.dart
@@ -65,7 +65,7 @@
    * The server is automatically started before every test.
    */
   @override
-  Future setUp({bool useCFE: false}) {
+  Future setUp() {
     onAnalysisErrors.listen((AnalysisErrorsParams params) {
       currentAnalysisErrors[params.file] = params.errors;
     });
@@ -78,7 +78,7 @@
       outOfTestExpect(serverConnected.isCompleted, isFalse);
       serverConnected.complete();
     });
-    return startServer(servicesPort: vmServicePort, cfe: useCFE).then((_) {
+    return startServer(servicesPort: vmServicePort).then((_) {
       server.listenToOutput(dispatchNotification);
       server.exitCode.then((_) {
         skipShutdown = true;
diff --git a/pkg/analysis_server/bin/server.dart b/pkg/analysis_server/bin/server.dart
index f0d075f..8c669ff 100644
--- a/pkg/analysis_server/bin/server.dart
+++ b/pkg/analysis_server/bin/server.dart
@@ -7,7 +7,7 @@
 /**
  * Create and run an analysis server.
  */
-void main(List<String> args) {
+void main(List<String> args) async {
   ServerStarter starter = new ServerStarter();
   starter.start(args);
 }
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index b4c45b6..5cfd272 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -109,7 +109,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  1.20.5
+  1.21.0
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -3248,6 +3248,12 @@
           The name of the class enclosing this declaration. If the declaration
           is not a class member, this field will be absent.
         </p>
+      </dd><dt class="field"><b>mixinName: String<span style="color:#999999"> (optional)</span></b></dt><dd>
+        
+        <p>
+          The name of the mixin enclosing this declaration. If the declaration
+          is not a mixin member, this field will be absent.
+        </p>
       </dd><dt class="field"><b>parameters: String<span style="color:#999999"> (optional)</span></b></dt><dd>
         
         <p>
@@ -3264,7 +3270,7 @@
       An enumeration of the kinds of elements.
     </p>
     
-  <dl><dt class="value">CLASS</dt><dt class="value">CLASS_TYPE_ALIAS</dt><dt class="value">COMPILATION_UNIT</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">CONSTRUCTOR_INVOCATION</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FILE</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_INVOCATION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">PARAMETER</dt><dt class="value">PREFIX</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt class="typeDefinition"><a name="type_ExecutableFile">ExecutableFile: object</a></dt><dd>
+  <dl><dt class="value">CLASS</dt><dt class="value">CLASS_TYPE_ALIAS</dt><dt class="value">COMPILATION_UNIT</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">CONSTRUCTOR_INVOCATION</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FILE</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_INVOCATION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">MIXIN</dt><dt class="value">PARAMETER</dt><dt class="value">PREFIX</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt class="typeDefinition"><a name="type_ExecutableFile">ExecutableFile: object</a></dt><dd>
     <p>
       A description of an executable file.
     </p>
diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
index 8ef13df..4d46fa6 100644
--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+++ b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
@@ -100,8 +100,13 @@
  * Return an [ElementKind] corresponding to the given [engine.Element].
  */
 ElementKind convertElementToElementKind(engine.Element element) {
-  if (element is engine.ClassElement && element.isEnum) {
-    return ElementKind.ENUM;
+  if (element is engine.ClassElement) {
+    if (element.isEnum) {
+      return ElementKind.ENUM;
+    }
+    if (element.isMixin) {
+      return ElementKind.MIXIN;
+    }
   }
   if (element is engine.FieldElement &&
       element.isEnumConstant &&
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index a1b9422..b1f5dce 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -9001,6 +9001,7 @@
  *   "codeOffset": int
  *   "codeLength": int
  *   "className": optional String
+ *   "mixinName": optional String
  *   "parameters": optional String
  * }
  *
@@ -9025,6 +9026,8 @@
 
   String _className;
 
+  String _mixinName;
+
   String _parameters;
 
   /**
@@ -9146,6 +9149,20 @@
   }
 
   /**
+   * The name of the mixin enclosing this declaration. If the declaration is
+   * not a mixin member, this field will be absent.
+   */
+  String get mixinName => _mixinName;
+
+  /**
+   * The name of the mixin enclosing this declaration. If the declaration is
+   * not a mixin member, this field will be absent.
+   */
+  void set mixinName(String value) {
+    this._mixinName = value;
+  }
+
+  /**
    * The parameter list for the element. If the element is not a method or
    * function this field will not be defined. If the element doesn't have
    * parameters (e.g. getter), this field will not be defined. If the element
@@ -9169,7 +9186,7 @@
 
   ElementDeclaration(String name, ElementKind kind, int fileIndex, int offset,
       int line, int column, int codeOffset, int codeLength,
-      {String className, String parameters}) {
+      {String className, String mixinName, String parameters}) {
     this.name = name;
     this.kind = kind;
     this.fileIndex = fileIndex;
@@ -9179,6 +9196,7 @@
     this.codeOffset = codeOffset;
     this.codeLength = codeLength;
     this.className = className;
+    this.mixinName = mixinName;
     this.parameters = parameters;
   }
 
@@ -9245,6 +9263,11 @@
         className = jsonDecoder.decodeString(
             jsonPath + ".className", json["className"]);
       }
+      String mixinName;
+      if (json.containsKey("mixinName")) {
+        mixinName = jsonDecoder.decodeString(
+            jsonPath + ".mixinName", json["mixinName"]);
+      }
       String parameters;
       if (json.containsKey("parameters")) {
         parameters = jsonDecoder.decodeString(
@@ -9252,7 +9275,7 @@
       }
       return new ElementDeclaration(
           name, kind, fileIndex, offset, line, column, codeOffset, codeLength,
-          className: className, parameters: parameters);
+          className: className, mixinName: mixinName, parameters: parameters);
     } else {
       throw jsonDecoder.mismatch(jsonPath, "ElementDeclaration", json);
     }
@@ -9272,6 +9295,9 @@
     if (className != null) {
       result["className"] = className;
     }
+    if (mixinName != null) {
+      result["mixinName"] = mixinName;
+    }
     if (parameters != null) {
       result["parameters"] = parameters;
     }
@@ -9293,6 +9319,7 @@
           codeOffset == other.codeOffset &&
           codeLength == other.codeLength &&
           className == other.className &&
+          mixinName == other.mixinName &&
           parameters == other.parameters;
     }
     return false;
@@ -9310,6 +9337,7 @@
     hash = JenkinsSmiHash.combine(hash, codeOffset.hashCode);
     hash = JenkinsSmiHash.combine(hash, codeLength.hashCode);
     hash = JenkinsSmiHash.combine(hash, className.hashCode);
+    hash = JenkinsSmiHash.combine(hash, mixinName.hashCode);
     hash = JenkinsSmiHash.combine(hash, parameters.hashCode);
     return JenkinsSmiHash.finish(hash);
   }
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 89d2fea..88d5252 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -366,9 +366,7 @@
         new PluginWatcher(resourceProvider, pluginManager);
 
     defaultContextOptions.generateImplicitErrors = false;
-    defaultContextOptions.useFastaParser =
-        options.useCFE || options.useFastaParser;
-    defaultContextOptions.useCFE = options.useCFE;
+    defaultContextOptions.useFastaParser = options.useFastaParser;
 
     {
       String name = options.newAnalysisDriverLog;
@@ -1189,14 +1187,9 @@
   CrashReportSender crashReportSender;
 
   /**
-   * Whether to enable the Dart 2.0 Common Front End implementation.
-   */
-  bool useCFE = false;
-
-  /**
    * Whether to enable parsing via the Fasta parser.
    */
-  bool useFastaParser = false;
+  bool useFastaParser = true;
 }
 
 /**
@@ -1421,7 +1414,6 @@
     builder.performanceLog = analysisServer._analysisPerformanceLogger;
     builder.byteStore = analysisServer.byteStore;
     builder.fileContentOverlay = analysisServer.fileContentOverlay;
-    builder.useCFE = analysisServer.options.useCFE;
     return builder;
   }
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_folding.dart b/pkg/analysis_server/lib/src/computer/computer_folding.dart
index 1a5a5c3..9488775 100644
--- a/pkg/analysis_server/lib/src/computer/computer_folding.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_folding.dart
@@ -211,6 +211,15 @@
   }
 
   @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    _computer._addRegionForAnnotations(node.metadata);
+    // TODO(brianwilkerson) Define `FoldingKind.MIXIN_BODY`?
+    _computer._addRegion(
+        node.leftBracket.end, node.rightBracket.offset, FoldingKind.CLASS_BODY);
+    return super.visitMixinDeclaration(node);
+  }
+
+  @override
   Object visitPartDirective(PartDirective node) {
     _computer._recordDirective(node);
     return super.visitPartDirective(node);
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index 1d35cca..490f5b5 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -31,41 +31,19 @@
     List<Outline> unitContents = <Outline>[];
     for (CompilationUnitMember unitMember in unit.declarations) {
       if (unitMember is ClassDeclaration) {
-        ClassDeclaration classDeclaration = unitMember;
-        List<Outline> classContents = <Outline>[];
-        for (ClassMember classMember in classDeclaration.members) {
-          if (classMember is ConstructorDeclaration) {
-            ConstructorDeclaration constructorDeclaration = classMember;
-            classContents.add(_newConstructorOutline(constructorDeclaration));
-          }
-          if (classMember is FieldDeclaration) {
-            FieldDeclaration fieldDeclaration = classMember;
-            VariableDeclarationList fields = fieldDeclaration.fields;
-            if (fields != null) {
-              TypeAnnotation fieldType = fields.type;
-              String fieldTypeName = _safeToSource(fieldType);
-              for (VariableDeclaration field in fields.variables) {
-                classContents.add(_newVariableOutline(fieldTypeName,
-                    ElementKind.FIELD, field, fieldDeclaration.isStatic));
-              }
-            }
-          }
-          if (classMember is MethodDeclaration) {
-            MethodDeclaration methodDeclaration = classMember;
-            classContents.add(_newMethodOutline(methodDeclaration));
-          }
-        }
-        unitContents.add(_newClassOutline(classDeclaration, classContents));
-      }
-      if (unitMember is EnumDeclaration) {
+        unitContents.add(_newClassOutline(
+            unitMember, _outlinesForMembers(unitMember.members)));
+      } else if (unitMember is MixinDeclaration) {
+        unitContents.add(_newMixinOutline(
+            unitMember, _outlinesForMembers(unitMember.members)));
+      } else if (unitMember is EnumDeclaration) {
         EnumDeclaration enumDeclaration = unitMember;
         List<Outline> constantOutlines = <Outline>[];
         for (EnumConstantDeclaration constant in enumDeclaration.constants) {
           constantOutlines.add(_newEnumConstant(constant));
         }
         unitContents.add(_newEnumOutline(enumDeclaration, constantOutlines));
-      }
-      if (unitMember is TopLevelVariableDeclaration) {
+      } else if (unitMember is TopLevelVariableDeclaration) {
         TopLevelVariableDeclaration fieldDeclaration = unitMember;
         VariableDeclarationList fields = fieldDeclaration.variables;
         if (fields != null) {
@@ -76,16 +54,13 @@
                 fieldTypeName, ElementKind.TOP_LEVEL_VARIABLE, field, false));
           }
         }
-      }
-      if (unitMember is FunctionDeclaration) {
+      } else if (unitMember is FunctionDeclaration) {
         FunctionDeclaration functionDeclaration = unitMember;
         unitContents.add(_newFunctionOutline(functionDeclaration, true));
-      }
-      if (unitMember is ClassTypeAlias) {
+      } else if (unitMember is ClassTypeAlias) {
         ClassTypeAlias alias = unitMember;
         unitContents.add(_newClassTypeAlias(alias));
-      }
-      if (unitMember is FunctionTypeAlias) {
+      } else if (unitMember is FunctionTypeAlias) {
         FunctionTypeAlias alias = unitMember;
         unitContents.add(_newFunctionTypeAliasOutline(alias));
       }
@@ -280,6 +255,21 @@
     return _nodeOutline(method, element, contents);
   }
 
+  Outline _newMixinOutline(MixinDeclaration node, List<Outline> mixinContents) {
+    node.firstTokenAfterCommentAndMetadata;
+    SimpleIdentifier nameNode = node.name;
+    String name = nameNode.name;
+    Element element = new Element(
+        ElementKind.MIXIN,
+        name,
+        Element.makeFlags(
+            isPrivate: Identifier.isPrivateName(name),
+            isDeprecated: _isDeprecated(node)),
+        location: _getLocationNode(nameNode),
+        typeParameters: _getTypeParametersStr(node.typeParameters));
+    return _nodeOutline(node, element, mixinContents);
+  }
+
   Outline _newUnitOutline(List<Outline> unitContents) {
     Element element = new Element(
         ElementKind.COMPILATION_UNIT, '<unit>', Element.makeFlags(),
@@ -332,6 +322,33 @@
         children: nullIfEmpty(children));
   }
 
+  List<Outline> _outlinesForMembers(List<ClassMember> members) {
+    List<Outline> memberOutlines = <Outline>[];
+    for (ClassMember classMember in members) {
+      if (classMember is ConstructorDeclaration) {
+        ConstructorDeclaration constructorDeclaration = classMember;
+        memberOutlines.add(_newConstructorOutline(constructorDeclaration));
+      }
+      if (classMember is FieldDeclaration) {
+        FieldDeclaration fieldDeclaration = classMember;
+        VariableDeclarationList fields = fieldDeclaration.fields;
+        if (fields != null) {
+          TypeAnnotation fieldType = fields.type;
+          String fieldTypeName = _safeToSource(fieldType);
+          for (VariableDeclaration field in fields.variables) {
+            memberOutlines.add(_newVariableOutline(fieldTypeName,
+                ElementKind.FIELD, field, fieldDeclaration.isStatic));
+          }
+        }
+      }
+      if (classMember is MethodDeclaration) {
+        MethodDeclaration methodDeclaration = classMember;
+        memberOutlines.add(_newMethodOutline(methodDeclaration));
+      }
+    }
+    return memberOutlines;
+  }
+
   static String _getTypeParametersStr(TypeParameterList parameters) {
     if (parameters == null) {
       return null;
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index aeefe45..92be0a4 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -136,14 +136,6 @@
   _OverriddenElementsFinder(Element seed) {
     _seed = seed;
     _class = seed.enclosingElement;
-    if (_class == null) {
-      // TODO(brianwilkerson) Remove this code when the issue has been fixed
-      // (https://github.com/dart-lang/sdk/issues/25884)
-      Type type = seed.runtimeType;
-      String name = seed.name;
-      throw new ArgumentError(
-          'The $type named $name does not have an enclosing element');
-    }
     _library = _class.library;
     _name = seed.displayName;
     if (seed is MethodElement) {
diff --git a/pkg/analysis_server/lib/src/computer/computer_signature.dart b/pkg/analysis_server/lib/src/computer/computer_signature.dart
index 95ec45f..b213ef1 100644
--- a/pkg/analysis_server/lib/src/computer/computer_signature.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_signature.dart
@@ -31,6 +31,11 @@
     // Find the closest argument list.
     var argsNode = _node;
     while (argsNode != null && !(argsNode is ArgumentList)) {
+      // Certain nodes don't make sense to search above for an argument list
+      // (for example when inside a function epxression).
+      if (argsNode is FunctionExpression) {
+        return null;
+      }
       argsNode = argsNode.parent;
     }
 
diff --git a/pkg/analysis_server/lib/src/search/search_domain.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
index 805344d..65be43a 100644
--- a/pkg/analysis_server/lib/src/search/search_domain.dart
+++ b/pkg/analysis_server/lib/src/search/search_domain.dart
@@ -180,6 +180,8 @@
           return protocol.ElementKind.GETTER;
         case search.DeclarationKind.METHOD:
           return protocol.ElementKind.METHOD;
+        case search.DeclarationKind.MIXIN:
+          return protocol.ElementKind.MIXIN;
         case search.DeclarationKind.SETTER:
           return protocol.ElementKind.SETTER;
         case search.DeclarationKind.VARIABLE:
@@ -216,6 +218,7 @@
           declaration.codeOffset,
           declaration.codeLength,
           className: declaration.className,
+          mixinName: declaration.mixinName,
           parameters: declaration.parameters);
     }).toList();
 
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 439c653..59a43f0 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -255,11 +255,6 @@
   static const String CACHE_FOLDER = "cache";
 
   /**
-   * Whether to enable the Dart 2.0 Common Front End implementation.
-   */
-  static const String USE_CFE = "use-cfe";
-
-  /**
    * Whether to enable parsing via the Fasta parser.
    */
   static const String USE_FASTA_PARSER = "use-fasta-parser";
@@ -312,7 +307,6 @@
     analysisServerOptions.clientId = results[CLIENT_ID];
     analysisServerOptions.clientVersion = results[CLIENT_VERSION];
     analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
-    analysisServerOptions.useCFE = results[USE_CFE];
     analysisServerOptions.useFastaParser = results[USE_FASTA_PARSER];
 
     bool disableAnalyticsForSession = results[SUPPRESS_ANALYTICS_FLAG];
@@ -455,16 +449,14 @@
 
       () async {
         // We first analyze code with an empty driver cache.
-        print('Analyzing${analysisServerOptions.useCFE ? ' using CFE' : ''} '
-            'with an empty driver cache:');
+        print('Analyzing with an empty driver cache:');
         int exitCode = await devServer.processDirectories([trainDirectory]);
         if (exitCode != 0) exit(exitCode);
 
         print('');
 
         // Then again with a populated cache.
-        print('Analyzing${analysisServerOptions.useCFE ? ' using CFE' : ''} '
-            'with a populated driver cache:');
+        print('Analyzing with a populated driver cache:');
         exitCode = await devServer.processDirectories([trainDirectory]);
         if (exitCode != 0) exit(exitCode);
 
@@ -479,17 +471,7 @@
           // ignore any exception
         }
 
-        if (!analysisServerOptions.useCFE) {
-          print('');
-
-          // And then run everything again with CFE to train both frontends.
-          List<String> args = new List<String>.from(arguments);
-          args.add("--use-cfe");
-          ServerStarter starter = new ServerStarter();
-          starter.start(args);
-        } else {
-          exit(exitCode);
-        }
+        exit(exitCode);
       }();
     } else {
       _captureExceptions(instrumentationService, () {
@@ -600,9 +582,8 @@
         help: "[path] path to the location where to cache data");
     parser.addFlag("preview-dart-2",
         help: "Enable the Dart 2.0 preview (deprecated)", hide: true);
-    parser.addFlag(USE_CFE,
-        help: "Enable the Dart 2.0 Common Front End implementation");
     parser.addFlag(USE_FASTA_PARSER,
+        defaultsTo: true,
         help: "Whether to enable parsing via the Fasta parser");
     parser.addOption(TRAIN_USING,
         help: "Pass in a directory to analyze for purposes of training an "
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 8079bf0..1db3c05 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -188,11 +188,20 @@
       if (previousMember.leftBracket == null ||
           previousMember.leftBracket.isSynthetic) {
         // If the prior member is an unfinished class declaration
-        // then the user is probably finishing that
+        // then the user is probably finishing that.
         _addClassDeclarationKeywords(previousMember);
         return;
       }
     }
+    if (previousMember is MixinDeclaration) {
+      if (previousMember.leftBracket == null ||
+          previousMember.leftBracket.isSynthetic) {
+        // If the prior member is an unfinished mixin declaration
+        // then the user is probably finishing that.
+        _addMixinDeclarationKeywords(previousMember);
+        return;
+      }
+    }
     if (previousMember is ImportDirective) {
       if (previousMember.semicolon == null ||
           previousMember.semicolon.isSynthetic) {
@@ -464,6 +473,28 @@
   }
 
   @override
+  visitMixinDeclaration(MixinDeclaration node) {
+    // Don't suggest mixin name
+    if (entity == node.name) {
+      return;
+    }
+    if (entity == node.rightBracket) {
+      _addClassBodyKeywords();
+    } else if (entity is ClassMember) {
+      _addClassBodyKeywords();
+      int index = node.members.indexOf(entity);
+      ClassMember previous = index > 0 ? node.members[index - 1] : null;
+      if (previous is MethodDeclaration && isEmptyBody(previous.body)) {
+        _addSuggestion(Keyword.ASYNC);
+        _addSuggestion2(ASYNC_STAR);
+        _addSuggestion2(SYNC_STAR);
+      }
+    } else {
+      _addMixinDeclarationKeywords(node);
+    }
+  }
+
+  @override
   visitNamedExpression(NamedExpression node) {
     if (entity is SimpleIdentifier && entity == node.expression) {
       _addExpressionKeywords(node);
@@ -644,6 +675,17 @@
     }
   }
 
+  void _addMixinDeclarationKeywords(MixinDeclaration node) {
+    // Very simplistic suggestion because analyzer will warn if
+    // the on / implements clauses are out of order
+    if (node.onClause == null) {
+      _addSuggestion(Keyword.ON, DART_RELEVANCE_HIGH);
+    }
+    if (node.implementsClause == null) {
+      _addSuggestion(Keyword.IMPLEMENTS, DART_RELEVANCE_HIGH);
+    }
+  }
+
   void _addStatementKeywords(AstNode node) {
     if (_inClassMemberBody(node)) {
       _addSuggestions([Keyword.SUPER, Keyword.THIS]);
diff --git a/pkg/analysis_server/lib/src/services/completion/postfix/postfix_completion.dart b/pkg/analysis_server/lib/src/services/completion/postfix/postfix_completion.dart
index 9908d9b..12ebc38 100644
--- a/pkg/analysis_server/lib/src/services/completion/postfix/postfix_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/postfix/postfix_completion.dart
@@ -547,6 +547,10 @@
   }
 
   Expression _findOuterExpression(AstNode start, InterfaceType builtInType) {
+    if (start is SimpleIdentifier && start.staticElement is PrefixElement) {
+      return null;
+    }
+
     AstNode parent;
     if (start is Expression) {
       parent = start;
@@ -556,13 +560,16 @@
     if (parent == null) {
       return null;
     }
+
     var list = <Expression>[];
     while (parent is Expression) {
       list.add(parent);
       parent = parent.parent;
     }
+
     Expression expr = list.firstWhere((expr) {
       DartType type = expr.staticType;
+      if (type == null) return false;
       if (type.isSubtypeOf(builtInType)) return true;
       Element element = type.element;
       if (element is TypeDefiningElement) {
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index 7767e39..5e797f0 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -84,6 +84,8 @@
       const AssistKind('dart.assist.flutter.wrap.center', 30, "Center widget");
   static const FLUTTER_WRAP_COLUMN = const AssistKind(
       'dart.assist.flutter.wrap.column', 30, "Wrap with Column");
+  static const FLUTTER_WRAP_CONTAINER = const AssistKind(
+      'dart.assist.flutter.wrap.container', 30, "Wrap with Container");
   static const FLUTTER_WRAP_GENERIC = const AssistKind(
       'dart.assist.flutter.wrap.generic', 30, "Wrap with new widget");
   static const FLUTTER_WRAP_PADDING =
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 78aecdb..4768ba4 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -1827,6 +1827,13 @@
           return !flutter.isExactWidgetTypeCenter(expr.staticType);
         });
     await _addProposal_flutterWrapWidgetImpl(
+        kind: DartAssistKind.FLUTTER_WRAP_CONTAINER,
+        parentLibraryUri: flutter.WIDGETS_LIBRARY_URI,
+        parentClassName: 'Container',
+        widgetValidator: (expr) {
+          return !flutter.isExactWidgetTypeContainer(expr.staticType);
+        });
+    await _addProposal_flutterWrapWidgetImpl(
         kind: DartAssistKind.FLUTTER_WRAP_PADDING,
         parentLibraryUri: flutter.WIDGETS_LIBRARY_URI,
         parentClassName: 'Padding',
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index b4fc191..7fc00fd 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -1305,8 +1305,6 @@
     h3('Status');
     buf.writeln(writeOption('Use fasta parser',
         diagnosticsSite.socketServer.analysisServerOptions.useFastaParser));
-    buf.writeln(writeOption('Use common front end',
-        diagnosticsSite.socketServer.analysisServerOptions.useCFE));
     buf.writeln(writeOption('Instrumentation enabled',
         AnalysisEngine.instance.instrumentationService.isActive));
     buf.writeln(writeOption('Server process ID', pid));
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index ce4d959..db72512 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -13,6 +13,8 @@
 
 const _BASIC_URI = "package:flutter/src/widgets/basic.dart";
 const _CENTER_NAME = "Center";
+const _CONTAINER_NAME = "Container";
+const _CONTAINER_URI = "package:flutter/src/widgets/container.dart";
 const _PADDING_NAME = "Padding";
 const _STATE_NAME = "State";
 const _STATEFUL_WIDGET_NAME = "StatefulWidget";
@@ -283,6 +285,14 @@
 }
 
 /**
+ * Return `true` if the given [type] is the Flutter class `Container`.
+ */
+bool isExactWidgetTypeContainer(DartType type) {
+  return type is InterfaceType &&
+      _isExactWidget(type.element, _CONTAINER_NAME, _CONTAINER_URI);
+}
+
+/**
  * Return `true` if the given [type] is the Flutter class `Padding`.
  */
 bool isExactWidgetTypePadding(DartType type) {
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 9f91783..40a157d 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/engine.dart' as engine;
+import 'package:analyzer/src/generated/parser.dart' as analyzer;
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
@@ -58,11 +59,6 @@
 
   AnalysisDriver get driver => _driver;
 
-  /**
-   * Return `true` to enable the Dart 2.0 Common Front End.
-   */
-  bool get useCFE => false;
-
   void addFlutterPackage() {
     addMetaPackageSource();
     Folder libFolder = configureFlutterPackage(resourceProvider);
@@ -153,8 +149,7 @@
         new ContextRoot(resourceProvider.convertPath('/project'), [],
             pathContext: resourceProvider.pathContext),
         sourceFactory,
-        new AnalysisOptionsImpl()..useFastaParser = useCFE,
-        useCFE: useCFE);
+        new AnalysisOptionsImpl()..useFastaParser = analyzer.Parser.useFasta);
     scheduler.start();
     AnalysisEngine.instance.logger = PrintLogger.instance;
   }
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index a99cf1c..8649fcc 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
-    defineReflectiveTests(GetErrorsTest_UseCFE);
   });
 }
 
@@ -149,19 +148,3 @@
     return new AnalysisGetErrorsResult.fromResponse(response).errors;
   }
 }
-
-@reflectiveTest
-class GetErrorsTest_UseCFE extends GetErrorsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_errorInPart() => super.test_errorInPart();
-
-  @override
-  test_fileDoesNotExist() => super.test_fileDoesNotExist();
-
-  @override
-  test_removeContextAfterRequest() => super.test_removeContextAfterRequest();
-}
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index ef203c77..e2e60a6 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHoverTest);
-    defineReflectiveTests(AnalysisHoverTest_UseCFE);
   });
 }
 
@@ -613,9 +612,3 @@
     expect(hover, isNull);
   }
 }
-
-@reflectiveTest
-class AnalysisHoverTest_UseCFE extends AnalysisHoverTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/get_navigation_test.dart b/pkg/analysis_server/test/analysis/get_navigation_test.dart
index 7d7cc7b..c2d0241 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetNavigationTest);
-    defineReflectiveTests(GetNavigationTest_UseCFE);
   });
 }
 
@@ -247,9 +246,3 @@
     regions = result.regions;
   }
 }
-
-@reflectiveTest
-class GetNavigationTest_UseCFE extends GetNavigationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/get_signature_test.dart b/pkg/analysis_server/test/analysis/get_signature_test.dart
index 12b1174..fdf651e 100644
--- a/pkg/analysis_server/test/analysis/get_signature_test.dart
+++ b/pkg/analysis_server/test/analysis/get_signature_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisSignatureTest);
-    defineReflectiveTests(AnalysisSignatureTest_UseCFE);
   });
 }
 
@@ -439,29 +438,19 @@
     expect(result.parameters[1],
         equals(new ParameterInfo(ParameterKind.NAMED, "length", "int")));
   }
+
+  test_does_not_walk_up_over_closure() async {
+    addTestFile('''
+one(String name, int length) {}
+main() {
+  one("Danny", () {
+    /*^*/
+  });
 }
-
-@reflectiveTest
-class AnalysisSignatureTest_UseCFE extends AnalysisSignatureTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_error_file_not_analyzed() async => super.test_error_file_not_analyzed();
-
-  @failingTest
-  @override
-  test_function_named_with_default_int() async =>
-      super.test_function_named_with_default_int();
-
-  @failingTest
-  @override
-  test_function_named_with_default_string() async =>
-      super.test_function_named_with_default_string();
-
-  @failingTest
-  @override
-  test_function_optional_with_default() async =>
-      super.test_function_optional_with_default();
+''');
+    var result = await prepareRawSignature('/*^*/');
+    expect(result.error, isNotNull);
+    expect(result.error.code,
+        equals(RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION));
+  }
 }
diff --git a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
index 0749064..90b04f2 100644
--- a/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analysis_options_test.dart
@@ -18,9 +18,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NewAnalysisOptionsFileNotificationTest);
-    defineReflectiveTests(NewAnalysisOptionsFileNotificationTest_UseCFE);
     defineReflectiveTests(OldAnalysisOptionsFileNotificationTest);
-    defineReflectiveTests(OldAnalysisOptionsFileNotificationTest_UseCFE);
   });
 }
 
@@ -271,22 +269,8 @@
 }
 
 @reflectiveTest
-class NewAnalysisOptionsFileNotificationTest_UseCFE
-    extends NewAnalysisOptionsFileNotificationTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class OldAnalysisOptionsFileNotificationTest
     extends AnalysisOptionsFileNotificationTest {
   @override
   String get optionsFilePath => '$projectPath/.analysis_options';
 }
-
-@reflectiveTest
-class OldAnalysisOptionsFileNotificationTest_UseCFE
-    extends OldAnalysisOptionsFileNotificationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
index 7227629..56b2399 100644
--- a/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_analyzedFiles_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationAnalyzedFilesTest);
-    defineReflectiveTests(AnalysisNotificationAnalyzedFilesTest_UseCFE);
   });
 }
 
@@ -129,10 +128,3 @@
     removeGeneralAnalysisSubscription(GeneralAnalysisService.ANALYZED_FILES);
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationAnalyzedFilesTest_UseCFE
-    extends AnalysisNotificationAnalyzedFilesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/notification_closingLabels_test.dart b/pkg/analysis_server/test/analysis/notification_closingLabels_test.dart
index a4e64be..d09ef04 100644
--- a/pkg/analysis_server/test/analysis/notification_closingLabels_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_closingLabels_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationClosingLabelsTest);
-    defineReflectiveTests(AnalysisNotificationClosingLabelsTest_UseCFE);
   });
 }
 
@@ -100,10 +99,3 @@
     return _labelsReceived.future;
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationClosingLabelsTest_UseCFE
-    extends AnalysisNotificationClosingLabelsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index c953e2c..e281b04 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -20,7 +20,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NotificationErrorsTest);
-    defineReflectiveTests(NotificationErrorsTest_UseCFE);
   });
 }
 
@@ -198,17 +197,7 @@
     List<AnalysisError> errors = filesErrors[testFile];
     expect(errors, hasLength(1));
     AnalysisError error = errors[0];
-    expect(error.severity, AnalysisErrorSeverity.WARNING);
+    expect(error.severity, AnalysisErrorSeverity.ERROR);
     expect(error.type, AnalysisErrorType.STATIC_WARNING);
   }
 }
-
-@reflectiveTest
-class NotificationErrorsTest_UseCFE extends NotificationErrorsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_importError() async => super.test_importError();
-}
diff --git a/pkg/analysis_server/test/analysis/notification_folding_test.dart b/pkg/analysis_server/test/analysis/notification_folding_test.dart
index c9a8816..3adbf5b 100644
--- a/pkg/analysis_server/test/analysis/notification_folding_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_folding_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationFoldingTest);
-    defineReflectiveTests(AnalysisNotificationFoldingTest_UseCFE);
   });
 }
 
@@ -97,10 +96,3 @@
     return _regionsReceived.future;
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationFoldingTest_UseCFE
-    extends AnalysisNotificationFoldingTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/notification_highlights_test.dart b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
index c15d95f..a23abb2 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
@@ -12,12 +12,10 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
-import '../test_utilities/utillities.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationHighlightsTest);
-    defineReflectiveTests(AnalysisNotificationHighlightsTest_UseCFE);
     defineReflectiveTests(HighlightTypeTest);
   });
 }
@@ -966,60 +964,6 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationHighlightsTest_UseCFE
-    extends AnalysisNotificationHighlightsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_BUILT_IN_hide() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_hide);
-  }
-
-  @failingTest
-  @override
-  test_BUILT_IN_import() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_import);
-  }
-
-  @failingTest
-  @override
-  test_BUILT_IN_native() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_native);
-  }
-
-  @failingTest
-  @override
-  test_BUILT_IN_show() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_show);
-  }
-
-  @failingTest
-  @override
-  test_DIRECTIVE() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_DIRECTIVE);
-  }
-
-  @failingTest
-  @override
-  test_TOP_LEVEL_VARIABLE() async =>
-      callFailingTest(super.test_TOP_LEVEL_VARIABLE);
-
-  @failingTest
-  @override
-  test_TYPE_NAME_DYNAMIC() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_TYPE_NAME_DYNAMIC);
-  }
-}
-
-@reflectiveTest
 class HighlightTypeTest {
   void test_constructor() {
     expect(HighlightRegionType.CLASS,
diff --git a/pkg/analysis_server/test/analysis/notification_highlights_test2.dart b/pkg/analysis_server/test/analysis/notification_highlights_test2.dart
index 9bde8f4..4fef09a 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights_test2.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights_test2.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationHighlightsTest);
-    defineReflectiveTests(AnalysisNotificationHighlightsTest_UseCFE);
     defineReflectiveTests(HighlightTypeTest);
   });
 }
@@ -1116,55 +1115,6 @@
 }
 
 @reflectiveTest
-class AnalysisNotificationHighlightsTest_UseCFE
-    extends AnalysisNotificationHighlightsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_BUILT_IN_hide() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_hide);
-  }
-
-  @failingTest
-  @override
-  test_BUILT_IN_import() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_import);
-  }
-
-  @failingTest
-  @override
-  test_BUILT_IN_native() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_native);
-  }
-
-  @failingTest
-  @override
-  test_BUILT_IN_show() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_BUILT_IN_show);
-  }
-
-  @failingTest
-  @override
-  test_DIRECTIVE() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_DIRECTIVE);
-  }
-
-  @failingTest
-  @override
-  test_TYPE_NAME_DYNAMIC() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_TYPE_NAME_DYNAMIC);
-  }
-}
-
-@reflectiveTest
 class HighlightTypeTest {
   void test_constructor() {
     expect(HighlightRegionType.CLASS,
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
index 7066b02..ebcd3a7 100644
--- a/pkg/analysis_server/test/analysis/notification_implemented_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationImplementedTest);
-    defineReflectiveTests(AnalysisNotificationImplementedTest_UseCFE);
   });
 }
 
@@ -430,10 +429,3 @@
     return waitForNotification(30000);
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationImplementedTest_UseCFE
-    extends AnalysisNotificationImplementedTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 890f511..8035395 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationNavigationTest);
-    defineReflectiveTests(AnalysisNotificationNavigationTest_UseCFE);
   });
 }
 
@@ -1031,58 +1030,3 @@
     assertNoRegionAt('var');
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationNavigationTest_UseCFE
-    extends AnalysisNotificationNavigationTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_inComment() async => super.test_inComment();
-
-  @failingTest
-  @override
-  test_library() async => super.test_library();
-
-  @failingTest
-  @override
-  test_multiplyDefinedElement() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_multiplyDefinedElement);
-  }
-
-  @failingTest
-  @override
-  test_partOf() async => super.test_partOf();
-
-  @failingTest
-  @override
-  test_string_export() async => super.test_string_export();
-
-  @failingTest
-  @override
-  test_string_export_unresolvedUri() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_string_export_unresolvedUri);
-  }
-
-  @failingTest
-  @override
-  test_string_import() async => super.test_string_import();
-
-  @failingTest
-  @override
-  test_string_import_unresolvedUri() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_string_import_unresolvedUri);
-  }
-
-  @failingTest
-  @override
-  test_string_part_unresolvedUri() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_string_part_unresolvedUri);
-  }
-}
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index 33cf3b4..df66d76 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationOccurrencesTest);
-    defineReflectiveTests(AnalysisNotificationOccurrencesTest_UseCFE);
   });
 }
 
@@ -256,10 +255,3 @@
     findRegion(offset, 'void'.length, false);
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationOccurrencesTest_UseCFE
-    extends AnalysisNotificationOccurrencesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index c3b4118..a358bba 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationOutlineTest);
-    defineReflectiveTests(AnalysisNotificationOutlineTest_UseCFE);
   });
 }
 
@@ -134,24 +133,3 @@
     expect(outline.children, hasLength(2));
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationOutlineTest_UseCFE
-    extends AnalysisNotificationOutlineTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_libraryName_hasLibraryPartOfDirectives() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_libraryName_hasLibraryPartOfDirectives);
-  }
-
-  @failingTest
-  @override
-  test_libraryName_hasPartOfDirective() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_libraryName_hasPartOfDirective);
-  }
-}
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index 5942c7c..aa9a69d 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNotificationOverridesTest);
-    defineReflectiveTests(AnalysisNotificationOverridesTest_UseCFE);
   });
 }
 
@@ -625,17 +624,3 @@
     assertNoInterfaceMembers();
   }
 }
-
-@reflectiveTest
-class AnalysisNotificationOverridesTest_UseCFE
-    extends AnalysisNotificationOverridesTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_super_method_superTypeCycle() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_super_method_superTypeCycle);
-  }
-}
diff --git a/pkg/analysis_server/test/analysis/reanalyze_test.dart b/pkg/analysis_server/test/analysis/reanalyze_test.dart
index 1110cf1..886b200 100644
--- a/pkg/analysis_server/test/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/analysis/reanalyze_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
-    defineReflectiveTests(ReanalyzeTest_UseCFE);
   });
 }
 
@@ -74,9 +73,3 @@
     }
   }
 }
-
-@reflectiveTest
-class ReanalyzeTest_UseCFE extends ReanalyzeTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
index 176326a..993fb07 100644
--- a/pkg/analysis_server/test/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/analysis/set_priority_files_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetPriorityFilesTest);
-    defineReflectiveTests(SetPriorityFilesTest_UseCFE);
   });
 }
 
@@ -130,9 +129,3 @@
     expect(prioritySources, [path]);
   }
 }
-
-@reflectiveTest
-class SetPriorityFilesTest_UseCFE extends SetPriorityFilesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index 0a61b91..44161349 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -18,7 +18,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
@@ -264,9 +263,3 @@
     return sources;
   }
 }
-
-@reflectiveTest
-class UpdateContentTest_UseCFE extends UpdateContentTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index 4ab0fdd..3610b68 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -73,12 +73,6 @@
 
   AnalysisDriver get testDiver => server.getAnalysisDriver(testFile);
 
-  /**
-   * Return `true` if the CFE should be used to perform analysis. Subclasses
-   * can override the getter to change the default behavior.
-   */
-  bool get useCFE => false;
-
   void addAnalysisSubscription(AnalysisService service, String file) {
     // add file to subscription
     var files = analysisSubscriptions[service];
@@ -121,8 +115,7 @@
     //
     // Create server
     //
-    AnalysisServerOptions options = new AnalysisServerOptions()
-      ..useCFE = useCFE;
+    AnalysisServerOptions options = new AnalysisServerOptions();
     return new AnalysisServer(
         serverChannel,
         resourceProvider,
diff --git a/pkg/analysis_server/test/benchmarks_test.dart b/pkg/analysis_server/test/benchmarks_test.dart
index 355a0e9..96c4c0f 100644
--- a/pkg/analysis_server/test/benchmarks_test.dart
+++ b/pkg/analysis_server/test/benchmarks_test.dart
@@ -46,25 +46,6 @@
         expect(r.exitCode, 0,
             reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
       });
-
-      // TODO(scheglov): Restore similar test coverage when the front-end API
-      // allows it.  See https://github.com/dart-lang/sdk/issues/33520.
-      // test('$benchmarkId-use-cfe', () {
-      //   ProcessResult r = Process.runSync(
-      //     Platform.resolvedExecutable,
-      //     [
-      //       path.join('benchmark', 'benchmarks.dart'),
-      //       'run',
-      //       '--repeat=1',
-      //       '--quick',
-      //       '--use-cfe',
-      //       benchmarkId
-      //     ],
-      //     workingDirectory: _serverSourcePath,
-      //   );
-      //   expect(r.exitCode, 0,
-      //       reason: 'exit: ${r.exitCode}\n${r.stdout}\n${r.stderr}');
-      // });
     }
   });
 }
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index 2b9adb9b..5bed630 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -56,12 +56,9 @@
 class Date { static Date JUN, JUL;}class X { m() { return Da!1te.JU!2L; }}''',
         <String>["1+Date", "2+JUN", "2+JUL"]);
 
-    buildTests(
-        'testCommentSnippets007',
-        '''
+    buildTests('testCommentSnippets007', '''
 class C {mth(Map x, !1) {}mtf(!2, Map x) {}m() {for (in!3t i=0; i<5; i++); A!4 x;}}class int{}class Arrays{}''',
-        <String>["1+bool", "2+bool", "3+int", "4+Arrays"],
-        cfeFailingTests: '1234');
+        <String>["1+bool", "2+bool", "3+int", "4+Arrays"]);
 
     buildTests('testCommentSnippets008', '''
 class Date{}final num M = Dat!1''', <String>["1+Date"]);
@@ -81,16 +78,11 @@
           "6-Map",
           "6+implements"
         ],
-        cfeFailingTests: '123456',
         failingTests: '46');
 
     // space, char, eol are important
-    buildTests(
-        'testCommentSnippets010',
-        '''
-class x implements !1{}''',
-        <String>["1+Map"],
-        cfeFailingTests: '1');
+    buildTests('testCommentSnippets010', '''
+class x implements !1{}''', <String>["1+Map"]);
 
     // space, char, eol are important
     buildTests('testCommentSnippets011', '''
@@ -152,37 +144,30 @@
 class q {num m() {var q; num x=!1 q!3 + !2/**/;}}''',
         <String>["1+q", "2+q", "3+q"]);
 
-    buildTests(
-        'testCommentSnippets026',
-        '''
-class List{}class a implements !1{}''',
-        <String>["1+List"],
-        cfeFailingTests: '1');
+    buildTests('testCommentSnippets026', '''
+class List{}class a implements !1{}''', <String>["1+List"]);
 
     buildTests('testCommentSnippets027', '''
 class String{}class List{}class test <X extends !1String!2> {}''',
         <String>["1+List", "2+String", "2-List"]);
 
-    buildTests(
-        'testCommentSnippets028',
-        '''
+    buildTests('testCommentSnippets028', '''
 class String{}class List{}class DateTime{}typedef T Y<T extends !1>(List input);''',
-        <String>["1+DateTime", "1+String"],
-        cfeFailingTests: '1');
+        <String>["1+DateTime", "1+String"]);
 
+    // https://github.com/dart-lang/sdk/issues/33992
     buildTests(
         'testCommentSnippets029',
         '''
 interface A<X> default B<X extends !1List!2> {}''',
         <String>["1+DateTime", "2+List"],
-        cfeFailingTests: '12');
+        failingTests: '12');
 
     buildTests(
         'testCommentSnippets030',
         '''
 class Bar<T extends Foo> {const Bar(!1T!2 k);T!3 m(T!4 a, T!5 b){}final T!6 f = null;}''',
         <String>["1+T", "2+T", "3+T", "4+T", "5+T", "6+T"],
-        cfeFailingTests: '123456',
         failingTests: '123456');
 
     buildTests(
@@ -190,7 +175,6 @@
         '''
 class Bar<T extends Foo> {m(x){if (x is !1) return;if (x is!!!2)}}''',
         <String>["1+Bar", "1+T", "2+T", "2+Bar"],
-        cfeFailingTests: '12',
         failingTests: '12');
 
     buildTests(
@@ -198,7 +182,6 @@
         '''
 class Fit{}class Bar<T extends Fooa> {const !2F!1ara();}''',
         <String>["1+Fit", "1+Fara", "1-Bar", "2+Fit"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // Type propagation
@@ -214,12 +197,9 @@
     buildTests('testCommentSnippets036', '''
 class List{}t3() {var x=new List!1}''', <String>["1+List"]);
 
-    buildTests(
-        'testCommentSnippets037',
-        '''
+    buildTests('testCommentSnippets037', '''
 class List{factory List.from(){}}t3() {var x=new List.!1}''',
-        <String>["1+from"],
-        cfeFailingTests: '1');
+        <String>["1+from"]);
 
     buildTests('testCommentSnippets038', '''
 f(){int xa; String s = '\$x!1';}''', <String>["1+xa"]);
@@ -337,7 +317,6 @@
   x(!1);
 }''',
         <String>["1+v", "2+void"],
-        cfeFailingTests: '2',
         failingTests: '2');
 
     buildTests('testCommentSnippets059', '''
@@ -617,9 +596,9 @@
         '''
 class Foo {this.!1}''',
         <String>["1-Object"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
+    // https://github.com/dart-lang/sdk/issues/33992
     buildTests(
         'testCommentSnippets082',
         '''
@@ -629,7 +608,7 @@
           var v = (HttpRequest req, HttpResp!1)
         }''',
         <String>["1+HttpResponse"],
-        cfeFailingTests: '1');
+        failingTests: '1');
 
     buildTests('testCommentSnippets083', '''
 main() {(.!1)}''', <String>["1-toString"]);
@@ -649,7 +628,6 @@
         '''
 class Q{f(){xy() {!2};x!1y();}}''',
         <String>["1+xy", "2+f", "2-xy"],
-        cfeFailingTests: '2',
         failingTests: '2');
 
     buildTests('testCommentSnippets087', '''
@@ -723,7 +701,6 @@
           "5-xyb",
           "5-xza"
         ],
-        cfeFailingTests: '123',
         failingTests: '123');
 
     buildTests('testCommentSnippets090', '''
@@ -749,7 +726,6 @@
           "1+aaa",
           "1+bbb"
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -763,24 +739,19 @@
 main() {
 }''',
         <String>["1+fooConst", "1-fooNotConst", "1-bar"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
-    buildTests(
-        'testCompletion_annotation_type',
-        '''
+    buildTests('testCompletion_annotation_type', '''
 class AAA {
   const AAA({int a, int b});
   const AAA.nnn(int c, int d);
 }
 @AAA!1
 main() {
-}''',
-        <String>[
-          "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
-          "1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
-        ],
-        cfeFailingTests: '1');
+}''', <String>[
+      "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/,
+      "1+AAA.nnn" /*":" + ProposalKind.CONSTRUCTOR*/
+    ]);
 
     buildTests('testCompletion_annotation_type_inClass_withoutMember', '''
 class AAA {
@@ -789,7 +760,9 @@
 
 class C {
   @A!1
-}''', <String>["1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/]);
+}''', <String>[
+      "1+AAA" /*":" + ProposalKind.CONSTRUCTOR*/
+    ]);
 
     buildTests('testCompletion_argument_typeName', '''
 class Enum {
@@ -869,7 +842,6 @@
         '''
 class X { X(this.field); int f!1ield;}''',
         <String>["1+field"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -883,7 +855,6 @@
   new A.first(!1);
 }''',
         <String>["1+A.first", "1-A.second"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -894,7 +865,6 @@
   new m.Random(!1);
 }''',
         <String>["1+Random:ARGUMENT_LIST"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_dartDoc_reference_forClass', '''
@@ -936,7 +906,6 @@
           "3+functionB",
           "3-int"
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -958,7 +927,6 @@
           "3+FunctionB",
           "3-int"
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_dartDoc_reference_forMethod', '''
@@ -1031,20 +999,16 @@
       "3+str" /*",rel=" + (CompletionProposal.RELEVANCE_DEFAULT + 0)*/
     ]);
 
-    buildTests(
-        'testCompletion_export_dart',
-        '''
+    buildTests('testCompletion_export_dart', '''
 import 'dart:math
 import 'dart:_chrome
 import 'dart:_collection.dev
-export 'dart:!1''',
-        <String>[
-          "1+dart:core",
-          "1+dart:math",
-          "1-dart:_chrome",
-          "1-dart:_collection.dev"
-        ],
-        cfeFailingTests: '1');
+export 'dart:!1''', <String>[
+      "1+dart:core",
+      "1+dart:math",
+      "1-dart:_chrome",
+      "1-dart:_collection.dev"
+    ]);
 
     buildTests(
         'testCompletion_export_noStringLiteral_noSemicolon',
@@ -1053,26 +1017,23 @@
 
 class A {}''',
         <String>["1+'dart:!';", "1+'package:!';"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_forStmt_vars', '''
 class int{}class Foo { mth() { for (in!1t i = 0; i!2 < 5; i!3++); }}''',
         <String>["1+int", "2+i", "3+i"]);
 
-    buildTests(
-        'testCompletion_function',
-        '''
+    buildTests('testCompletion_function', '''
 class Foo { int boo = 7; mth() { PNGS.sort((String a, Str!1) => a.compareTo(b)); }}''',
-        <String>["1+String"],
-        cfeFailingTests: '1');
+        <String>["1+String"]);
 
+    // https://github.com/dart-lang/sdk/issues/33992
     buildTests(
         'testCompletion_function_partial',
         '''
 class Foo { int boo = 7; mth() { PNGS.sort((String a, Str!1)); }}''',
         <String>["1+String"],
-        cfeFailingTests: '1');
+        failingTests: '1');
 
     buildTests(
         'testCompletion_functionTypeParameter_namedArgument',
@@ -1082,7 +1043,6 @@
   fff(1, 2, !1)!2;
 }''',
         <String>["1+x1", "2-x2"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_ifStmt_field1', '''
@@ -1128,7 +1088,6 @@
   x.!1;
 }''',
         <String>["1+a", "1+x", "1+y"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1147,26 +1106,21 @@
   x.!1;
 }''',
         <String>["1+a", "1-x", "1-y"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_import', '''
 import '!1';''', <String>["1+dart:!", "1+package:!"]);
 
-    buildTests(
-        'testCompletion_import_dart',
-        '''
+    buildTests('testCompletion_import_dart', '''
 import 'dart:math
 import 'dart:_chrome
 import 'dart:_collection.dev
-import 'dart:!1''',
-        <String>[
-          "1+dart:core",
-          "1+dart:math",
-          "1-dart:_chrome",
-          "1-dart:_collection.dev"
-        ],
-        cfeFailingTests: '1');
+import 'dart:!1''', <String>[
+      "1+dart:core",
+      "1+dart:math",
+      "1-dart:_chrome",
+      "1-dart:_collection.dev"
+    ]);
 
     buildTests('testCompletion_import_hasStringLiteral_noSemicolon', '''
 import '!1'
@@ -1178,7 +1132,6 @@
         '''
 import!1''',
         <String>["1+ 'dart:!';", "1+ 'package:!';"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1186,7 +1139,6 @@
         '''
 import !1;''',
         <String>["1+'dart:!'", "1+'package:!'"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1196,7 +1148,6 @@
 
 class A {}''',
         <String>["1+'dart:!';", "1+'package:!';"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_incompleteClassMember', '''
@@ -1222,7 +1173,6 @@
   1 + 2 * str.!3.length;
 }''',
         <String>["1+codeUnits", "2+codeUnits", "3+codeUnits"],
-        cfeFailingTests: '123',
         failingTests: '123');
 
     // no checks, but no exceptions
@@ -1240,12 +1190,9 @@
 import '!1''',
         <String>["1+my_lib.dart"],
         extraFiles: <String, String>{"/my_lib.dart": ""},
-        cfeFailingTests: '1',
         failingTests: '1');
 
-    buildTests(
-        'testCompletion_is',
-        '''
+    buildTests('testCompletion_is', '''
 class MyClass {}
 main(p) {
   var isVariable;
@@ -1253,17 +1200,16 @@
   var v1 = p is MyCla!2;
   var v2 = p is !3;
   var v2 = p is!4;
-}''',
-        <String>[
-          "1+MyClass",
-          "2+MyClass",
-          "3+MyClass",
-          "3-v1",
-          "4+is",
-          "4-isVariable"
-        ],
-        cfeFailingTests: '1234');
+}''', <String>[
+      "1+MyClass",
+      "2+MyClass",
+      "3+MyClass",
+      "3-v1",
+      "4+is",
+      "4-isVariable"
+    ]);
 
+    // https://github.com/dart-lang/sdk/issues/33992
     buildTests(
         'testCompletion_is_asIdentifierStart',
         '''
@@ -1273,7 +1219,7 @@
   var v2 = is!2
 }''',
         <String>["1+isVisible", "2+isVisible"],
-        cfeFailingTests: '12');
+        failingTests: '12');
 
     buildTests('testCompletion_is_asPrefixedIdentifierStart', '''
 class A {
@@ -1331,7 +1277,6 @@
           "1+myFuncInt" /*":" + ProposalKind.METHOD_NAME*/,
           "1-myFuncDouble" /*":" + ProposalKind.METHOD_NAME*/
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1349,7 +1294,6 @@
           "1+myFunc" /*":" + ProposalKind.METHOD*/,
           "1-myFunc" /*":" + ProposalKind.METHOD_NAME*/
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_methodRef_asArg_ofFunctionType', '''
@@ -1364,19 +1308,14 @@
       "1+myFunc" /*":" + ProposalKind.METHOD_NAME*/
     ]);
 
-    buildTests(
-        'testCompletion_namedArgument_alreadyUsed',
-        '''
-func({foo}) {} main() { func(foo: 0, fo!1); }''',
-        <String>["1-foo"],
-        cfeFailingTests: '1');
+    buildTests('testCompletion_namedArgument_alreadyUsed', '''
+func({foo}) {} main() { func(foo: 0, fo!1); }''', <String>["1-foo"]);
 
     buildTests(
         'testCompletion_namedArgument_constructor',
         '''
 class A {A({foo, bar}) {}} main() { new A(fo!1); }''',
         <String>["1+foo", "1-bar"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1387,7 +1326,6 @@
           "1+foo" /*":" + ProposalKind.NAMED_ARGUMENT*/,
           "1-foo" /*":" + ProposalKind.OPTIONAL_ARGUMENT*/
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1395,7 +1333,6 @@
         '''
 func({foo, bar}) {} main() { func(fo!1); }''',
         <String>["1+foo", "1-bar"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_namedArgument_notNamed', '''
@@ -1437,7 +1374,6 @@
           "2+bar" /*":"
         + ProposalKind.OPTIONAL_ARGUMENT*/
         ],
-        cfeFailingTests: '12',
         failingTests: '12');
 
     buildTests(
@@ -1455,7 +1391,6 @@
           "2+bar" /*":"
         + ProposalKind.OPTIONAL_ARGUMENT*/
         ],
-        cfeFailingTests: '12',
         failingTests: '12');
 
     buildTests(
@@ -1476,21 +1411,16 @@
           "1-bar,potential=false,declaringType=B",
           "1+bar,potential=true,declaringType=B"
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
-    buildTests(
-        'testCompletion_privateElement_sameLibrary_constructor',
-        '''
+    buildTests('testCompletion_privateElement_sameLibrary_constructor', '''
 class A {
   A._c();
   A.c();
 }
 main() {
   new A.!1
-}''',
-        <String>["1+_c", "1+c"],
-        cfeFailingTests: '1');
+}''', <String>["1+_c", "1+c"]);
 
     buildTests('testCompletion_privateElement_sameLibrary_member', '''
 class A {
@@ -1549,9 +1479,7 @@
 class num{}class Sunflower {static final n!2um MAX_D = 300;nu!3m xc, yc;Sun!4flower() {x!Xc = y!Yc = MA!1 }}''',
         <String>["1+MAX_D", "X+xc", "Y+yc", "2+num", "3+num", "4+Sunflower"]);
 
-    buildTests(
-        'testCompletion_super_superType',
-        '''
+    buildTests('testCompletion_super_superType', '''
 class A {
   var fa;
   ma() {}
@@ -1562,9 +1490,7 @@
   main() {
     super.!1
   }
-}''',
-        <String>["1+fa", "1-fb", "1+ma", "1-mb"],
-        cfeFailingTests: '1');
+}''', <String>["1+fa", "1-fb", "1+ma", "1-mb"]);
 
     buildTests(
         'testCompletion_superConstructorInvocation_noNamePrefix',
@@ -1578,7 +1504,6 @@
   B() : super.!1
 }''',
         <String>["1+fooA", "1+fooB", "1+bar"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1593,7 +1518,6 @@
   B() : super.f!1
 }''',
         <String>["1+fooA", "1+fooB", "1-bar"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1604,7 +1528,6 @@
   A() : f = this.!1;
 }''',
         <String>["1-toString"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1614,7 +1537,6 @@
   var f = this.!1;
 }''',
         <String>["1-toString"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1626,7 +1548,6 @@
   }
 }''',
         <String>["1-toString"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1636,7 +1557,6 @@
   this.!1;
 }''',
         <String>["1-toString"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -1644,7 +1564,6 @@
         '''
 var v = this.!1;''',
         <String>["1-toString"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('testCompletion_this_OK_inConstructorBody', '''
@@ -1701,7 +1620,6 @@
 }''',
         <String>["1+cos", "1-sin", "1+libFunction"],
         extraFiles: sources,
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('test_importPrefix_hideCombinator', '''
@@ -1733,7 +1651,6 @@
 }''',
         <String>["1+foo"],
         extraFiles: sources,
-        cfeFailingTests: '1',
         failingTests: '1');
 
     sources.clear();
@@ -1751,7 +1668,6 @@
   new A.!1
 }''',
         <String>["1-_c", "1+c"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     sources.clear();
@@ -1770,7 +1686,6 @@
               }''',
         <String>["1-_f", "1+f"],
         extraFiles: sources,
-        cfeFailingTests: '1',
         failingTests: '1');
 
     sources.clear();
@@ -1787,7 +1702,6 @@
 throw new Seria!1lizationException();}''',
         <String>["1+SerializationException"],
         extraFiles: sources,
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // Type propagation.
@@ -1796,13 +1710,12 @@
         'testLibrary002',
         '''t2() {var q=[0],z=q.!1length;q.!2clear();}''',
         <String>["1+length", "1+isEmpty", "2+clear"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // TODO Include corelib analysis
     buildTests('testLibrary003', '''class X{var q; f() {q.!1a!2}}''',
         <String>["1+end", "2+abs", "2-end"],
-        cfeFailingTests: '12', failingTests: '12');
+        failingTests: '12');
 
     // TODO Include corelib analysis
     // Resolving dart:html takes between 2.5s and 30s; json, about 0.12s
@@ -1825,7 +1738,7 @@
     // TODO Include corelib analysis
     buildTests('testLibrary005',
         '''var PHI;main(){PHI=5.3;PHI.abs().!1 Object x;}''', <String>["1+abs"],
-        cfeFailingTests: '1', failingTests: '1');
+        failingTests: '1');
 
     // Exercise import and export handling.
     // Libraries are defined in partial order of increasing dependency.
@@ -1862,7 +1775,6 @@
 }''',
         <String>["1+i1", "1+i2", "1+e1a", "1+e2a", "1+e1b"],
         extraFiles: sources,
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // Exercise import and export handling.
@@ -1881,7 +1793,6 @@
 }''',
         <String>["1+l1t", "1-_l1t", "2-_l1t"],
         extraFiles: sources,
-        cfeFailingTests: '12',
         failingTests: '1');
 
     // Check private library exclusion
@@ -1912,7 +1823,6 @@
 }''',
         <String>["1-privateMethod", "1+publicMethod"],
         extraFiles: sources,
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // Exercise library prefixes.
@@ -1953,7 +1863,6 @@
           "4-X"
         ],
         extraFiles: sources,
-        cfeFailingTests: '1234',
         failingTests: '1234');
   }
 
@@ -1993,7 +1902,6 @@
   g() => new A.!3c();
 }''',
         <String>["1+x", "2+b", "3+c"],
-        cfeFailingTests: '12',
         failingTests: '12');
 
     buildTests(
@@ -2027,7 +1935,6 @@
           "3+vim",
           "3-A"
         ],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests('test006', '''
@@ -2063,7 +1970,6 @@
           "7-Dclass",
           "7-Ctype",
         ],
-        cfeFailingTests: '2346',
         failingTests: '2346');
 
     // keywords
@@ -2085,7 +1991,6 @@
           "6+num",
           "7+typedef"
         ],
-        cfeFailingTests: '1234',
         failingTests: '1234');
 
     buildTests(
@@ -2114,13 +2019,12 @@
           "D-List",
           "D-test"
         ],
-        cfeFailingTests: '23',
         failingTests: '23');
 
     // name generation with conflicts
     buildTests('test011', '''r2(var object, Object object1, Object !1);''',
         <String>["1+object2"],
-        cfeFailingTests: '1', failingTests: '1');
+        failingTests: '1');
 
     // reserved words
     buildTests(
@@ -2141,7 +2045,6 @@
           "3+true",
           "4+toString"
         ],
-        cfeFailingTests: '123',
         failingTests: '123');
 
     // conditions & operators
@@ -2176,7 +2079,6 @@
           "9+==",
           "0+k"
         ],
-        cfeFailingTests: '689',
         failingTests: '689');
 
     // keywords
@@ -2223,19 +2125,17 @@
           "K+else",
           "L+return"
         ],
-        cfeFailingTests: '123456789ABCDEFGHJKL',
         failingTests: '3CK');
 
     // operators in function
     buildTests('test015', '''f(a,b,c) => a + b * c !1;''', <String>["1+=="],
-        cfeFailingTests: '1', failingTests: '1');
+        failingTests: '1');
 
     // operators in return
     buildTests(
         'test016',
         '''class X {dynamic f(a,b,c) {return a + b * c !1;}}''',
         <String>["1+=="],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // keywords
@@ -2255,13 +2155,12 @@
           "7+show",
           "8-null"
         ],
-        cfeFailingTests: '12345678',
         failingTests: '234567'); //TODO(jwren) 234 failing as correct selection
     // offset assertions can't be passed into buildTests(..)
 
     // keywords
     buildTests('test018', '''!1part !2of foo;''', <String>["1+part", "2+of"],
-        cfeFailingTests: '12', failingTests: '12');
+        failingTests: '12');
 
     buildTests('test019', '''
 var truefalse = 0;
@@ -2288,17 +2187,13 @@
 }''', <String>["1+getKeys", "2+getKeys"]);
 
 // Note lack of semicolon following completion location
-    buildTests(
-        'test024',
-        '''
+    buildTests('test024', '''
 class List{factory List.from(Iterable other) {}}
 class F {
   f() {
     new List.!1
   }
-}''',
-        <String>["1+from"],
-        cfeFailingTests: '1');
+}''', <String>["1+from"]);
 
     buildTests('test025', '''
 class R {
@@ -2355,8 +2250,9 @@
     buildTests(
         'test027', '''m(){try{}catch(eeee,ssss){s!1}''', <String>["1+ssss"]);
 
+    // https://github.com/dart-lang/sdk/issues/33992
     buildTests('test028', '''m(){var isX=3;if(is!1)''', <String>["1+isX"],
-        cfeFailingTests: '1');
+        failingTests: '1');
 
     buildTests('test029', '''m(){[1].forEach((x)=>!1x);}''', <String>["1+x"]);
 
@@ -2396,7 +2292,6 @@
         'test033',
         '''class A{}class B extends A{b(){}}class C implements A {c(){}}class X{x(){A f;f.!1}}''',
         <String>["1+b", "1-c"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     // TODO(scheglov) decide what to do with Type for untyped field (not
@@ -2429,7 +2324,6 @@
   }
 }''',
         <String>["1+top", "2+top"],
-        cfeFailingTests: '12',
         failingTests: '12');
 
     // test analysis of untyped fields and top-level vars
@@ -2455,7 +2349,6 @@
   a.field.!2
 }''',
         <String>["1+round", "2+round"],
-        cfeFailingTests: '12',
         failingTests: '12');
 
     buildTests(
@@ -2467,7 +2360,6 @@
   new HtS!1
 }''',
         <String>["1+HttpServer", "1-HttpClient"],
-        cfeFailingTests: '1',
         failingTests: '1');
 
     buildTests(
@@ -2488,7 +2380,6 @@
   }
 }''',
         <String>["1+y", "1-x", "2+x", "2-y"],
-        cfeFailingTests: '2',
         failingTests: '2');
 
     // test analysis of untyped fields and top-level vars
@@ -2498,17 +2389,17 @@
     // test arg lists with named params
     buildTests('test040', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1)!2;}''',
         <String>["1+x1", "2-x2"],
-        cfeFailingTests: '1', failingTests: '1');
+        failingTests: '1');
 
     // test arg lists with named params
     buildTests('test041', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1''',
         <String>["1+x1", "1+x2", "1+y"],
-        cfeFailingTests: '1', failingTests: '1');
+        failingTests: '1');
 
     // test arg lists with named params
     buildTests('test042', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1;!2''',
         <String>["1+x1", "1+x2", "2-y"],
-        cfeFailingTests: '1', failingTests: '1');
+        failingTests: '1');
   }
 
   void buildOtherTests() {
@@ -2538,13 +2429,11 @@
    *
    * Optional argument [failingTests], if given, is a string, each character of
    * which corresponds to an X in the [originalSource] for which the test is
-   * expected to fail.  This sould be used to mark known completion bugs that
+   * expected to fail.  This should be used to mark known completion bugs that
    * have not yet been fixed.
    */
   void buildTests(String baseName, String originalSource, List<String> results,
-      {String cfeFailingTests: '',
-      Map<String, String> extraFiles,
-      String failingTests: ''}) {
+      {Map<String, String> extraFiles, String failingTests: ''}) {
     List<LocationSpec> completionTests =
         LocationSpec.from(originalSource, results);
     completionTests.sort((LocationSpec first, LocationSpec second) {
@@ -2568,7 +2457,6 @@
     }
     for (LocationSpec spec in completionTests) {
       String testName = '$baseName-${spec.id}';
-      // Non-CFE
       if (failingTests.contains(spec.id)) {
         ++expectedFailCount;
         test("$testName (expected failure $expectedFailCount)", () {
@@ -2584,27 +2472,6 @@
           return test.runTest(spec, extraFiles);
         });
       }
-      // CFE
-      if (cfeFailingTests.contains(spec.id)) {
-        ++expectedFailCount;
-        // TODO(brianwilkerson) Many of the failing tests are failing because of
-        // server-side errors, and these are not being caught by the `onError`
-        // block below (meaning that the test fails even though we're expecting
-        // it to fail. Figure out how to re-enable the running of failing cfe
-        // tests.
-//        test("$testName-cfe (expected failure $expectedFailCount)", () {
-//          CompletionTestCase test = new CompletionTestCase_UseCFE();
-//          return new Future(() => test.runTest(spec, extraFiles)).then((_) {
-//            fail('Test passed - expected to fail.');
-//          }, onError: (_) {});
-//        });
-      } else {
-        ++expectedPassCount;
-        test('$testName-cfe', () {
-          CompletionTestCase test = new CompletionTestCase_UseCFE();
-          return test.runTest(spec, extraFiles);
-        });
-      }
     }
   }
 }
diff --git a/pkg/analysis_server/test/completion_test_support.dart b/pkg/analysis_server/test/completion_test_support.dart
index 23f652b..06829ed 100644
--- a/pkg/analysis_server/test/completion_test_support.dart
+++ b/pkg/analysis_server/test/completion_test_support.dart
@@ -103,11 +103,6 @@
   }
 }
 
-class CompletionTestCase_UseCFE extends CompletionTestCase {
-  @override
-  bool get useCFE => true;
-}
-
 /**
  * A specification of the completion results expected at a given location.
  */
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 93b60d0..6d4af90 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -40,11 +40,8 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AbstractContextManagerTest);
-    defineReflectiveTests(AbstractContextManagerTest_UseCFE);
     defineReflectiveTests(ContextManagerWithNewOptionsTest);
-    defineReflectiveTests(ContextManagerWithNewOptionsTest_UseCFE);
     defineReflectiveTests(ContextManagerWithOldOptionsTest);
-    defineReflectiveTests(ContextManagerWithOldOptionsTest_UseCFE);
   });
 }
 
@@ -1647,12 +1644,6 @@
   }
 }
 
-@reflectiveTest
-class AbstractContextManagerTest_UseCFE extends AbstractContextManagerTest {
-  @override
-  bool get useCFE => true;
-}
-
 abstract class ContextManagerTest extends Object with ResourceProviderMixin {
   /**
    * The name of the 'bin' directory.
@@ -1729,11 +1720,6 @@
 
   SourceFactory get sourceFactory => callbacks.sourceFactory;
 
-  /**
-   * Return `true` to enable the Dart 2.0 Common Front End.
-   */
-  bool get useCFE => false;
-
   Map<String, List<Folder>> get _currentPackageMap => _packageMap(projPath);
 
   /**
@@ -1770,8 +1756,7 @@
     PerformanceLog logger = new PerformanceLog(new NullStringSink());
     AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(logger);
     callbacks = new TestContextManagerCallbacks(
-        resourceProvider, sdkManager, logger, scheduler,
-        useCFE: useCFE);
+        resourceProvider, sdkManager, logger, scheduler);
     manager.callbacks = callbacks;
   }
 
@@ -1808,24 +1793,10 @@
 }
 
 @reflectiveTest
-class ContextManagerWithNewOptionsTest_UseCFE
-    extends ContextManagerWithNewOptionsTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class ContextManagerWithOldOptionsTest extends ContextManagerWithOptionsTest {
   String get optionsFileName => AnalysisEngine.ANALYSIS_OPTIONS_FILE;
 }
 
-@reflectiveTest
-class ContextManagerWithOldOptionsTest_UseCFE
-    extends ContextManagerWithOldOptionsTest {
-  @override
-  bool get useCFE => true;
-}
-
 abstract class ContextManagerWithOptionsTest extends ContextManagerTest {
   String get optionsFileName;
 
@@ -2033,7 +2004,7 @@
     String sdkExtPath = '$projPath/sdk_ext';
     newFile('$projPath/test', content: 'test.dart');
     newFile('$sdkExtPath/entry.dart');
-    List<int> bytes = new SummaryBuilder([], null, true).build();
+    List<int> bytes = new SummaryBuilder([], null).build();
     newFileWithBytes('$projPath/sdk.ds', bytes);
     // Setup _embedder.yaml.
     newFile('$libPath/_embedder.yaml', content: r'''
@@ -2505,11 +2476,6 @@
   final AnalysisDriverScheduler scheduler;
 
   /**
-   * A flag indicating whether to enable the Dart 2.0 Common Front End.
-   */
-  final bool useCFE;
-
-  /**
    * The list of `flushedFiles` in the last [removeContext] invocation.
    */
   List<String> lastFlushedFiles;
@@ -2523,8 +2489,7 @@
   NotificationManager notificationManager = new TestNotificationManager();
 
   TestContextManagerCallbacks(
-      this.resourceProvider, this.sdkManager, this.logger, this.scheduler,
-      {this.useCFE = false});
+      this.resourceProvider, this.sdkManager, this.logger, this.scheduler);
 
   /**
    * Return the current set of analysis options.
@@ -2577,8 +2542,7 @@
         new FileContentOverlay(),
         contextRoot,
         sourceFactory,
-        analysisOptions,
-        useCFE: useCFE);
+        analysisOptions);
     driverMap[path] = currentDriver;
     currentDriver.exceptions.listen((ExceptionResult result) {
       AnalysisEngine.instance.logger
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index a4b7902..6bb6343 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -26,11 +26,8 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainTest);
-    defineReflectiveTests(AnalysisDomainTest_UseCFE);
     defineReflectiveTests(AnalysisDomainHandlerTest);
-    defineReflectiveTests(AnalysisDomainHandlerTest_UseCFE);
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
@@ -305,12 +302,6 @@
 }
 
 @reflectiveTest
-class AnalysisDomainHandlerTest_UseCFE extends AnalysisDomainHandlerTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class AnalysisDomainTest extends AbstractAnalysisTest {
   Map<String, List<AnalysisError>> filesErrors = {};
 
@@ -344,12 +335,6 @@
   }
 }
 
-@reflectiveTest
-class AnalysisDomainTest_UseCFE extends AnalysisDomainTest {
-  @override
-  bool get useCFE => true;
-}
-
 /**
  * A helper to test 'analysis.*' requests.
  */
@@ -716,16 +701,3 @@
     expect(files, [testFile]);
   }
 }
-
-@reflectiveTest
-class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_afterAnalysis_noSuchFile() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_afterAnalysis_noSuchFile);
-  }
-}
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index a3dde6c..48b395c 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -23,7 +23,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionDomainHandlerTest);
-    defineReflectiveTests(CompletionDomainHandlerTest_UseCFE);
   });
 }
 
@@ -181,6 +180,7 @@
     expect(suggestions, hasLength(2));
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor() async {
     addTestFile('class A {bool foo; A() : ^;}');
     await getSuggestions();
@@ -190,6 +190,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor2() async {
     addTestFile('class A {bool foo; A() : s^;}');
     await getSuggestions();
@@ -199,6 +200,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor3() async {
     addTestFile('class A {bool foo; A() : a=7,^;}');
     await getSuggestions();
@@ -208,6 +210,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor4() async {
     addTestFile('class A {bool foo; A() : a=7,s^;}');
     await getSuggestions();
@@ -217,6 +220,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor5() async {
     addTestFile('class A {bool foo; A() : a=7,s^}');
     await getSuggestions();
@@ -226,6 +230,7 @@
         relevance: DART_RELEVANCE_LOCAL_FIELD);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_constructor6() async {
     addTestFile('class A {bool foo; A() : a=7,^ void bar() {}}');
     await getSuggestions();
@@ -533,6 +538,7 @@
         relevance: DART_RELEVANCE_LOCAL_FUNCTION);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_inherited() {
     newFile('/libA.dart', content: 'class A {m() {}}');
     addTestFile('''
@@ -842,57 +848,6 @@
   }
 }
 
-@reflectiveTest
-class CompletionDomainHandlerTest_UseCFE extends CompletionDomainHandlerTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_constructor() async => super.test_constructor();
-
-  @failingTest
-  @override
-  test_constructor2() async => super.test_constructor2();
-
-  @failingTest
-  @override
-  test_constructor3() async => super.test_constructor3();
-
-  @failingTest
-  @override
-  test_constructor4() async => super.test_constructor4();
-
-  @failingTest
-  @override
-  test_constructor5() async => super.test_constructor5();
-
-  @failingTest
-  @override
-  test_constructor6() async => super.test_constructor6();
-
-  @failingTest
-  @override
-  test_import_uri_with_trailing() async =>
-      super.test_import_uri_with_trailing();
-
-  @failingTest
-  @override
-  test_imports_incremental() async => super.test_imports_incremental();
-
-  @failingTest
-  @override
-  test_imports_partial() async => super.test_imports_partial();
-
-  @failingTest
-  @override
-  test_inherited() async => super.test_inherited();
-
-  @failingTest
-  @override
-  test_local_named_constructor() async => super.test_local_named_constructor();
-}
-
 class MockRelevancySorter implements DartContributionSorter {
   bool enabled = true;
 
diff --git a/pkg/analysis_server/test/domain_diagnostic_test.dart b/pkg/analysis_server/test/domain_diagnostic_test.dart
index 09fc344..7601a5e 100644
--- a/pkg/analysis_server/test/domain_diagnostic_test.dart
+++ b/pkg/analysis_server/test/domain_diagnostic_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DiagnosticDomainTest);
-    defineReflectiveTests(DiagnosticDomainTest_UseCFE);
   });
 }
 
@@ -56,9 +55,3 @@
     expect(result.contexts, isEmpty);
   }
 }
-
-@reflectiveTest
-class DiagnosticDomainTest_UseCFE extends DiagnosticDomainTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart
index 96015d5..1370637 100644
--- a/pkg/analysis_server/test/domain_execution_test.dart
+++ b/pkg/analysis_server/test/domain_execution_test.dart
@@ -21,7 +21,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExecutionDomainTest);
-    defineReflectiveTests(ExecutionDomainTest_UseCFE);
   });
   group('ExecutionDomainHandler', () {
     MemoryResourceProvider provider = new MemoryResourceProvider();
@@ -261,12 +260,6 @@
   }
 }
 
-@reflectiveTest
-class ExecutionDomainTest_UseCFE extends ExecutionDomainTest {
-  @override
-  bool get useCFE => true;
-}
-
 /**
  * A [Source] that knows it's [fullName].
  */
diff --git a/pkg/analysis_server/test/edit/assists_test.dart b/pkg/analysis_server/test/edit/assists_test.dart
index 39b10d2..399706d 100644
--- a/pkg/analysis_server/test/edit/assists_test.dart
+++ b/pkg/analysis_server/test/edit/assists_test.dart
@@ -20,7 +20,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssistsTest);
-    defineReflectiveTests(AssistsTest_UseCFE);
   });
 }
 
@@ -133,9 +132,3 @@
     fail("Expected to find |$message| in\n" + changes.join('\n'));
   }
 }
-
-@reflectiveTest
-class AssistsTest_UseCFE extends AssistsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/edit/fixes_test.dart b/pkg/analysis_server/test/edit/fixes_test.dart
index 971400e..1be66ae 100644
--- a/pkg/analysis_server/test/edit/fixes_test.dart
+++ b/pkg/analysis_server/test/edit/fixes_test.dart
@@ -20,7 +20,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FixesTest);
-    defineReflectiveTests(FixesTest_UseCFE);
   });
 }
 
@@ -170,9 +169,3 @@
     expect(fixes.fixes, hasLength(1));
   }
 }
-
-@reflectiveTest
-class FixesTest_UseCFE extends FixesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/edit/format_test.dart b/pkg/analysis_server/test/edit/format_test.dart
index a2b583b..ced5eab 100644
--- a/pkg/analysis_server/test/edit/format_test.dart
+++ b/pkg/analysis_server/test/edit/format_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FormatTest);
-    defineReflectiveTests(FormatTest_UseCFE);
   });
 }
 
@@ -124,9 +123,3 @@
     return new EditFormatResult.fromResponse(response);
   }
 }
-
-@reflectiveTest
-class FormatTest_UseCFE extends FormatTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/edit/organize_directives_test.dart b/pkg/analysis_server/test/edit/organize_directives_test.dart
index 585e45c..9ca4c06 100644
--- a/pkg/analysis_server/test/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/edit/organize_directives_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
-    defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
   });
 }
 
@@ -167,17 +166,3 @@
     fileEdit = result.edit;
   }
 }
-
-@reflectiveTest
-class OrganizeDirectivesTest_UseCFE extends OrganizeDirectivesTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  test_BAD_doesNotExist() async => super.test_BAD_doesNotExist();
-
-  @failingTest
-  @override
-  test_OK_remove_unresolvedDirectives() async =>
-      super.test_OK_remove_unresolvedDirectives();
-}
diff --git a/pkg/analysis_server/test/edit/postfix_completion_test.dart b/pkg/analysis_server/test/edit/postfix_completion_test.dart
index 844ac9b..7a64a92 100644
--- a/pkg/analysis_server/test/edit/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/edit/postfix_completion_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(PostfixCompletionTest);
-    defineReflectiveTests(PostfixCompletionTest_UseCFE);
   });
 }
 
@@ -92,9 +91,3 @@
     change = result.change;
   }
 }
-
-@reflectiveTest
-class PostfixCompletionTest_UseCFE extends PostfixCompletionTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 7a60834..e3a0a33 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -18,26 +18,17 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertGetterMethodToMethodTest);
-    defineReflectiveTests(ConvertGetterMethodToMethodTest_UseCFE);
     defineReflectiveTests(ConvertMethodToGetterTest);
-    defineReflectiveTests(ConvertMethodToGetterTest_UseCFE);
     defineReflectiveTests(ExtractLocalVariableTest);
-    defineReflectiveTests(ExtractLocalVariableTest_UseCFE);
     defineReflectiveTests(ExtractMethodTest);
-    defineReflectiveTests(ExtractMethodTest_UseCFE);
     defineReflectiveTests(GetAvailableRefactoringsTest);
-    defineReflectiveTests(GetAvailableRefactoringsTest_UseCFE);
     defineReflectiveTests(InlineLocalTest);
-    defineReflectiveTests(InlineLocalTest_UseCFE);
     defineReflectiveTests(InlineMethodTest);
-    defineReflectiveTests(InlineMethodTest_UseCFE);
     defineReflectiveTests(MoveFileTest);
-    defineReflectiveTests(MoveFileTest_UseCFE);
     // TODO(brianwilkerson) Re-enable these tests. They were commented out
     // because they are non-deterministic under the new driver. I suspect that
     // there is a future that isn't being waited for.
 //    defineReflectiveTests(RenameTest);
-//    defineReflectiveTests(RenameTest_UseCFE);
   });
 }
 
@@ -146,13 +137,6 @@
 }
 
 @reflectiveTest
-class ConvertGetterMethodToMethodTest_UseCFE
-    extends ConvertGetterMethodToMethodTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class ConvertMethodToGetterTest extends _AbstractGetRefactoring_Test {
   test_function() {
     addTestFile('''
@@ -265,12 +249,6 @@
 }
 
 @reflectiveTest
-class ConvertMethodToGetterTest_UseCFE extends ConvertMethodToGetterTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class ExtractLocalVariableTest extends _AbstractGetRefactoring_Test {
   Future<Response> sendExtractRequest(
       int offset, int length, String name, bool extractAll) {
@@ -585,12 +563,6 @@
 }
 
 @reflectiveTest
-class ExtractLocalVariableTest_UseCFE extends ExtractLocalVariableTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class ExtractMethodTest extends _AbstractGetRefactoring_Test {
   int offset;
   int length;
@@ -815,12 +787,6 @@
 }
 
 @reflectiveTest
-class ExtractMethodTest_UseCFE extends ExtractMethodTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class GetAvailableRefactoringsTest extends AbstractAnalysisTest {
   List<RefactoringKind> kinds;
 
@@ -1056,19 +1022,6 @@
 }
 
 @reflectiveTest
-class GetAvailableRefactoringsTest_UseCFE extends GetAvailableRefactoringsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_extractWidget() async {
-//    return callFailingTest(super.test_extractWidget());
-    fail('Test times out even when wrapped.');
-  }
-}
-
-@reflectiveTest
 class InlineLocalTest extends _AbstractGetRefactoring_Test {
   test_analysis_onlyOneFile() async {
     shouldWaitForFullAnalysis = false;
@@ -1177,12 +1130,6 @@
 }
 
 @reflectiveTest
-class InlineLocalTest_UseCFE extends InlineLocalTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class InlineMethodTest extends _AbstractGetRefactoring_Test {
   InlineMethodOptions options = new InlineMethodOptions(true, true);
 
@@ -1309,12 +1256,6 @@
 }
 
 @reflectiveTest
-class InlineMethodTest_UseCFE extends InlineMethodTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class MoveFileTest extends _AbstractGetRefactoring_Test {
   MoveFileOptions options;
 
@@ -1349,12 +1290,6 @@
 }
 
 @reflectiveTest
-class MoveFileTest_UseCFE extends MoveFileTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class RenameTest extends _AbstractGetRefactoring_Test {
   Future<Response> sendRenameRequest(String search, String newName,
       {String id: '0', bool validateOnly: false}) {
@@ -2065,12 +2000,6 @@
 }
 
 @reflectiveTest
-class RenameTest_UseCFE extends RenameTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _AbstractGetRefactoring_Test extends AbstractAnalysisTest {
   bool shouldWaitForFullAnalysis = true;
 
diff --git a/pkg/analysis_server/test/edit/sort_members_test.dart b/pkg/analysis_server/test/edit/sort_members_test.dart
index c1915b3..d6b70c1 100644
--- a/pkg/analysis_server/test/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/edit/sort_members_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
-    defineReflectiveTests(SortMembersTest_UseCFE);
   });
 }
 
@@ -255,9 +254,3 @@
     fileEdit = result.edit;
   }
 }
-
-@reflectiveTest
-class SortMembersTest_UseCFE extends SortMembersTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/edit/statement_completion_test.dart b/pkg/analysis_server/test/edit/statement_completion_test.dart
index ea75b9b..7df82ba 100644
--- a/pkg/analysis_server/test/edit/statement_completion_test.dart
+++ b/pkg/analysis_server/test/edit/statement_completion_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatementCompletionTest);
-    defineReflectiveTests(StatementCompletionTest_UseCFE);
   });
 }
 
@@ -121,9 +120,3 @@
     change = result.change;
   }
 }
-
-@reflectiveTest
-class StatementCompletionTest_UseCFE extends StatementCompletionTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
index b9c0748..f7114c5 100644
--- a/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/analysis_options_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OptionsIntegrationTest);
-    defineReflectiveTests(OptionsIntegrationTest_UseCFE);
   });
 }
 
@@ -89,9 +88,3 @@
     expect(error.location.startColumn, 7);
   }
 }
-
-@reflectiveTest
-class OptionsIntegrationTest_UseCFE extends OptionsIntegrationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/error_test.dart b/pkg/analysis_server/test/integration/analysis/error_test.dart
index 9af229f..1c32caa 100644
--- a/pkg/analysis_server/test/integration/analysis/error_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/error_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisErrorIntegrationTest);
-    defineReflectiveTests(AnalysisErrorIntegrationTest_UseCFE);
   });
 }
 
@@ -99,21 +98,3 @@
     expect(errors, isEmpty);
   }
 }
-
-@reflectiveTest
-class AnalysisErrorIntegrationTest_UseCFE extends AnalysisErrorIntegrationTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_super_mixins_disabled() {
-    // Disabling super mixins is not supported in the new FE.
-    return super.test_super_mixins_disabled();
-  }
-
-  @override
-  test_super_mixins_enabled() {
-    return super.test_super_mixins_enabled();
-  }
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart b/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
index d58a043..be6e77a 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_nonStandard_sdk.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisDomainGetErrorsTest);
-    defineReflectiveTests(AnalysisDomainGetErrorsTest_UseCFE);
   });
 }
 
@@ -70,13 +69,12 @@
   }
 
   @override
-  Future startServer({int diagnosticPort, int servicesPort, bool cfe: false}) {
+  Future startServer({int diagnosticPort, int servicesPort}) {
     String sdkPath = createNonStandardSdk();
     return server.start(
         diagnosticPort: diagnosticPort,
         sdkPath: sdkPath,
-        servicesPort: servicesPort,
-        useCFE: cfe);
+        servicesPort: servicesPort);
   }
 
   Future test_getErrors() async {
@@ -93,9 +91,3 @@
     expect(errors[0].code, 'unused_import');
   }
 }
-
-@reflectiveTest
-class AnalysisDomainGetErrorsTest_UseCFE extends AnalysisDomainGetErrorsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
index 5c6b2e0..d549e9e 100644
--- a/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_errors_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetErrorsTest);
-    defineReflectiveTests(GetErrorsTest_UseCFE);
   });
 }
 
@@ -30,9 +29,3 @@
     expect(result.errors, equals(currentAnalysisErrors[pathname]));
   }
 }
-
-@reflectiveTest
-class GetErrorsTest_UseCFE extends GetErrorsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index f69ee37..8c179cc 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetHoverIntegrationTest);
-    defineReflectiveTests(AnalysisGetHoverIntegrationTest_UseCFE);
   });
 }
 
@@ -192,10 +191,3 @@
     });
   }
 }
-
-@reflectiveTest
-class AnalysisGetHoverIntegrationTest_UseCFE
-    extends AnalysisGetHoverIntegrationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
index 3e2fad7..65deb3b 100644
--- a/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_imported_elements_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest);
-    defineReflectiveTests(AnalysisGetImportedElementsIntegrationTest_UseCFE);
   });
 }
 
@@ -139,10 +138,3 @@
     }
   }
 }
-
-@reflectiveTest
-class AnalysisGetImportedElementsIntegrationTest_UseCFE
-    extends AnalysisGetImportedElementsIntegrationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
index 318f244..51a7659 100644
--- a/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_library_dependencies_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetLibraryDependenciesTest);
-    defineReflectiveTests(GetLibraryDependenciesTest_UseCFE);
   });
 }
 
@@ -46,9 +45,3 @@
     expect(map.keys, isEmpty);
   }
 }
-
-@reflectiveTest
-class GetLibraryDependenciesTest_UseCFE extends GetLibraryDependenciesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
index 8901f8e..9725e58 100644
--- a/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_navigation_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetNavigationTest);
-    defineReflectiveTests(GetNavigationTest_UseCFE);
   });
 }
 
@@ -66,13 +65,3 @@
     expect(result.targets, isEmpty);
   }
 }
-
-@reflectiveTest
-class GetNavigationTest_UseCFE extends GetNavigationTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_navigation_no_result() => super.test_navigation_no_result();
-}
diff --git a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
index 7142da9..150c67f 100644
--- a/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_reachable_sources_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetReachableSourcesTest);
-    defineReflectiveTests(GetReachableSourcesTest_UseCFE);
   });
 }
 
@@ -48,9 +47,3 @@
     expect(sources[url], contains('dart:core'));
   }
 }
-
-@reflectiveTest
-class GetReachableSourcesTest_UseCFE extends GetReachableSourcesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index 5fb8afa..3c9d09b 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
-    defineReflectiveTests(AnalysisHighlightsTest_UseCFE);
   });
 }
 
@@ -145,9 +144,3 @@
     });
   }
 }
-
-@reflectiveTest
-class AnalysisHighlightsTest_UseCFE extends AnalysisHighlightsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
index 86e5917..ce16391 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisHighlightsTest);
-    defineReflectiveTests(AnalysisHighlightsTest_UseCFE);
   });
 }
 
@@ -23,13 +22,11 @@
   Future startServer({
     int diagnosticPort,
     int servicesPort,
-    bool cfe: false,
   }) {
     return server.start(
         diagnosticPort: diagnosticPort,
         servicesPort: servicesPort,
-        useAnalysisHighlight2: true,
-        useCFE: cfe);
+        useAnalysisHighlight2: true);
   }
 
   test_highlights() {
@@ -163,9 +160,3 @@
     });
   }
 }
-
-@reflectiveTest
-class AnalysisHighlightsTest_UseCFE extends AnalysisHighlightsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/lint_test.dart b/pkg/analysis_server/test/integration/analysis/lint_test.dart
index d217042..699b43b 100644
--- a/pkg/analysis_server/test/integration/analysis/lint_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/lint_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LintIntegrationTest);
-    defineReflectiveTests(LintIntegrationTest_UseCFE);
   });
 }
 
@@ -82,9 +81,3 @@
     expect(error.type, AnalysisErrorType.LINT);
   }
 }
-
-@reflectiveTest
-class LintIntegrationTest_UseCFE extends LintIntegrationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 0337b72..1302b67 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisNavigationTest);
-    defineReflectiveTests(AnalysisNavigationTest_UseCFE);
   });
 }
 
@@ -134,9 +133,3 @@
         'TypeParameter field;', 'TypeParameter>', ElementKind.TYPE_PARAMETER);
   }
 }
-
-@reflectiveTest
-class AnalysisNavigationTest_UseCFE extends AnalysisNavigationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
index 5174ef4..35a9416 100644
--- a/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/occurrences_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OccurrencesTest);
-    defineReflectiveTests(OccurrencesTest_UseCFE);
   });
 }
 
@@ -66,9 +65,3 @@
     });
   }
 }
-
-@reflectiveTest
-class OccurrencesTest_UseCFE extends OccurrencesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/outline_test.dart b/pkg/analysis_server/test/integration/analysis/outline_test.dart
index 5a4a07f..eafefe8 100644
--- a/pkg/analysis_server/test/integration/analysis/outline_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/outline_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OutlineTest);
-    defineReflectiveTests(OutlineTest_UseCFE);
   });
 }
 
@@ -70,9 +69,3 @@
     });
   }
 }
-
-@reflectiveTest
-class OutlineTest_UseCFE extends OutlineTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/overrides_test.dart b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
index 39c4bb4..32c238c 100644
--- a/pkg/analysis_server/test/integration/analysis/overrides_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/overrides_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OverridesTest);
-    defineReflectiveTests(OverridesTest_UseCFE);
   });
 }
 
@@ -121,9 +120,3 @@
     });
   }
 }
-
-@reflectiveTest
-class OverridesTest_UseCFE extends OverridesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/package_root_test.dart b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
index 813a048..0491f9b 100644
--- a/pkg/analysis_server/test/integration/analysis/package_root_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/package_root_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
-    defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
   });
 }
 
@@ -87,9 +86,3 @@
     expect(found, isTrue);
   }
 }
-
-@reflectiveTest
-class SetAnalysisRootsTest_UseCFE extends SetAnalysisRootsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
index 2ee347d..cb707e2 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_concurrent_test.dart
@@ -18,7 +18,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
-    defineReflectiveTests(ReanalyzeTest_UseCFE);
   });
 }
 
@@ -50,9 +49,3 @@
     });
   }
 }
-
-@reflectiveTest
-class ReanalyzeTest_UseCFE extends ReanalyzeTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
index 319a4a4..8740ef0 100644
--- a/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/reanalyze_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ReanalyzeTest);
-    defineReflectiveTests(ReanalyzeTest_UseCFE);
   });
 }
 
@@ -39,9 +38,3 @@
     });
   }
 }
-
-@reflectiveTest
-class ReanalyzeTest_UseCFE extends ReanalyzeTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
index f9ebcb0..f6c1d61 100644
--- a/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_analysis_roots_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetAnalysisRootsTest);
-    defineReflectiveTests(SetAnalysisRootsTest_UseCFE);
   });
 }
 
@@ -31,9 +30,3 @@
     expect(currentAnalysisErrors[pathname], isEmpty);
   }
 }
-
-@reflectiveTest
-class SetAnalysisRootsTest_UseCFE extends SetAnalysisRootsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
index c75655b..ce90165 100644
--- a/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_general_subscriptions_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetGeneralSubscriptionsTest);
-    defineReflectiveTests(SetGeneralSubscriptionsTest_UseCFE);
   });
 }
 
@@ -41,9 +40,3 @@
         true);
   }
 }
-
-@reflectiveTest
-class SetGeneralSubscriptionsTest_UseCFE extends SetGeneralSubscriptionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
index 7d86706..10cb1a0 100644
--- a/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_priority_files_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetPriorityFilesTest);
-    defineReflectiveTests(SetPriorityFilesTest_UseCFE);
   });
 }
 
@@ -29,9 +28,3 @@
     expect(status.analysis.isAnalyzing, false);
   }
 }
-
-@reflectiveTest
-class SetPriorityFilesTest_UseCFE extends SetPriorityFilesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
index 02dcd05..9524b4d 100644
--- a/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/set_subscriptions_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
@@ -31,9 +30,3 @@
     expect(currentAnalysisErrors[pathname], isEmpty);
   }
 }
-
-@reflectiveTest
-class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
index c66c18b..d44cce7 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_list_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
@@ -51,13 +50,3 @@
     });
   }
 }
-
-@reflectiveTest
-class UpdateContentTest_UseCFE extends UpdateContentTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_updateContent_list() => super.test_updateContent_list();
-}
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index 8174832..cc4ceae 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateContentTest);
-    defineReflectiveTests(UpdateContentTest_UseCFE);
   });
 }
 
@@ -105,9 +104,3 @@
     expect(errors2[0].location.file, equals(pathname));
   }
 }
-
-@reflectiveTest
-class UpdateContentTest_UseCFE extends UpdateContentTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analysis/update_options_test.dart b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
index 5d6b548..1172d78 100644
--- a/pkg/analysis_server/test/integration/analysis/update_options_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_options_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UpdateOptionsTest);
-    defineReflectiveTests(UpdateOptionsTest_UseCFE);
   });
 }
 
@@ -46,9 +45,3 @@
     expect(getErrors(pathname), hasLength(1));
   }
 }
-
-@reflectiveTest
-class UpdateOptionsTest_UseCFE extends UpdateOptionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analytics/enable_test.dart b/pkg/analysis_server/test/integration/analytics/enable_test.dart
index 0c1dbc0a..72e261d 100644
--- a/pkg/analysis_server/test/integration/analytics/enable_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/enable_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(EnableTest);
-    defineReflectiveTests(EnableTest_UseCFE);
   });
 }
 
@@ -33,9 +32,3 @@
     await sendAnalyticsEnable(result1.enabled);
   }
 }
-
-@reflectiveTest
-class EnableTest_UseCFE extends EnableTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart b/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
index 712a050..8e2ffd5 100644
--- a/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/is_enabled_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsEnabledTest);
-    defineReflectiveTests(IsEnabledTest_UseCFE);
   });
 }
 
@@ -25,9 +24,3 @@
     expect(result, isNotNull);
   }
 }
-
-@reflectiveTest
-class IsEnabledTest_UseCFE extends IsEnabledTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analytics/send_event_test.dart b/pkg/analysis_server/test/integration/analytics/send_event_test.dart
index 250790e..fbeb48a 100644
--- a/pkg/analysis_server/test/integration/analytics/send_event_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/send_event_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SendEventTest);
-    defineReflectiveTests(SendEventTest_UseCFE);
   });
 }
 
@@ -30,9 +29,3 @@
     await sendAnalyticsEnable(result1.enabled);
   }
 }
-
-@reflectiveTest
-class SendEventTest_UseCFE extends SendEventTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/analytics/send_timing_test.dart b/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
index ee8d812..fb65d8a 100644
--- a/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
+++ b/pkg/analysis_server/test/integration/analytics/send_timing_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SendTimingTest);
-    defineReflectiveTests(SendTimingTest_UseCFE);
   });
 }
 
@@ -30,9 +29,3 @@
     await sendAnalyticsEnable(result1.enabled);
   }
 }
-
-@reflectiveTest
-class SendTimingTest_UseCFE extends SendTimingTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
index 27d3996..cf031cf 100644
--- a/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
+++ b/pkg/analysis_server/test/integration/completion/get_suggestions_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetSuggestionsTest);
-    defineReflectiveTests(GetSuggestionsTest_UseCFE);
   });
 }
 
@@ -116,9 +115,3 @@
     });
   }
 }
-
-@reflectiveTest
-class GetSuggestionsTest_UseCFE extends GetSuggestionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart b/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
index 897113f..e8bf76e 100644
--- a/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/get_diagnostics_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetDiagnosticsTest);
-    defineReflectiveTests(GetDiagnosticsTest_UseCFE);
   });
 }
 
@@ -29,9 +28,3 @@
     expect(context.name, isNotEmpty);
   }
 }
-
-@reflectiveTest
-class GetDiagnosticsTest_UseCFE extends GetDiagnosticsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart b/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
index 80b25b0..37efe2c 100644
--- a/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
+++ b/pkg/analysis_server/test/integration/diagnostic/get_server_port_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetServerPortTest);
-    defineReflectiveTests(GetServerPortTest_UseCFE);
   });
 }
 
@@ -36,9 +35,3 @@
     expect(responseBody, contains('<title>Analysis Server</title>'));
   }
 }
-
-@reflectiveTest
-class GetServerPortTest_UseCFE extends GetServerPortTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/format_test.dart b/pkg/analysis_server/test/integration/edit/format_test.dart
index 9b161ba..8906109 100644
--- a/pkg/analysis_server/test/integration/edit/format_test.dart
+++ b/pkg/analysis_server/test/integration/edit/format_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FormatTest);
-    defineReflectiveTests(FormatTest_UseCFE);
   });
 }
 
@@ -79,9 +78,3 @@
     }
   }
 }
-
-@reflectiveTest
-class FormatTest_UseCFE extends FormatTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/get_assists_test.dart b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
index e0ff926..69e10f0 100644
--- a/pkg/analysis_server/test/integration/edit/get_assists_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_assists_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetAssistsTest);
-    defineReflectiveTests(GetAssistsTest_UseCFE);
   });
 }
 
@@ -49,9 +48,3 @@
     expect(currentAnalysisErrors[pathname], isEmpty);
   }
 }
-
-@reflectiveTest
-class GetAssistsTest_UseCFE extends GetAssistsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
index 0d359f6..820b586 100644
--- a/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_available_refactorings_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetAvailableRefactoringsTest);
-    defineReflectiveTests(GetAvailableRefactoringsTest_UseCFE);
   });
 }
 
@@ -36,9 +35,3 @@
     expect(result.kinds, isNotEmpty);
   }
 }
-
-@reflectiveTest
-class GetAvailableRefactoringsTest_UseCFE extends GetAvailableRefactoringsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
index 4d916df..c9e80c4 100644
--- a/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_fixes_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetFixesTest);
-    defineReflectiveTests(GetFixesTest_UseCFE);
   });
 }
 
@@ -32,17 +31,9 @@
     EditGetFixesResult result =
         await sendEditGetFixes(pathname, text.indexOf('Future f'));
 
-    AnalysisErrorFixes fix;
-    if (useCFE) {
-      // TODO(scheglov) We have to filter errors, because two are reported.
-      // https://github.com/dart-lang/sdk/issues/34124
-      fix = result.fixes
-          .singleWhere((fix) => fix.error.code == 'undefined_class');
-    } else {
-      expect(result.fixes, hasLength(1));
-      fix = result.fixes.first;
-      expect(fix.error.code, 'undefined_class');
-    }
+    expect(result.fixes, hasLength(1));
+    AnalysisErrorFixes fix = result.fixes.first;
+    expect(fix.error.code, 'undefined_class');
 
     // expect a suggestion to add the dart:async import
     expect(fix.fixes, isNotEmpty);
@@ -68,9 +59,3 @@
     expect(result.fixes, isEmpty);
   }
 }
-
-@reflectiveTest
-class GetFixesTest_UseCFE extends GetFixesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
index d7c5fd3..598b4c0 100644
--- a/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_postfix_completion_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetPostfixCompletionTest);
-    defineReflectiveTests(GetPostfixCompletionTest_UseCFE);
   });
 }
 
@@ -52,9 +51,3 @@
     expect(currentAnalysisErrors[pathname], isEmpty);
   }
 }
-
-@reflectiveTest
-class GetPostfixCompletionTest_UseCFE extends GetPostfixCompletionTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
index 1786ee6..c3e5553 100644
--- a/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_refactoring_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetRefactoringTest);
-    defineReflectiveTests(GetRefactoringTest_UseCFE);
   });
 }
 
@@ -65,9 +64,3 @@
     expect(currentAnalysisErrors[pathname], isEmpty);
   }
 }
-
-@reflectiveTest
-class GetRefactoringTest_UseCFE extends GetRefactoringTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
index 4582519..610ece0 100644
--- a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetStatementCompletionTest);
-    defineReflectiveTests(GetStatementCompletionTest_UseCFE);
   });
 }
 
@@ -52,9 +51,3 @@
     expect(currentAnalysisErrors[pathname], isEmpty);
   }
 }
-
-@reflectiveTest
-class GetStatementCompletionTest_UseCFE extends GetStatementCompletionTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/import_elements_test.dart b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
index c2b6972..9beed5a 100644
--- a/pkg/analysis_server/test/integration/edit/import_elements_test.dart
+++ b/pkg/analysis_server/test/integration/edit/import_elements_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AnalysisGetImportElementsIntegrationTest);
-    defineReflectiveTests(AnalysisGetImportElementsIntegrationTest_UseCFE);
   });
 }
 
@@ -136,10 +135,3 @@
     ], expectedFile: libName);
   }
 }
-
-@reflectiveTest
-class AnalysisGetImportElementsIntegrationTest_UseCFE
-    extends AnalysisGetImportElementsIntegrationTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
index 32f59cb..be1ff11 100644
--- a/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
+++ b/pkg/analysis_server/test/integration/edit/is_postfix_completion_applicable_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(IsPostfixCompletionApplicableTest);
-    defineReflectiveTests(IsPostfixCompletionApplicableTest_UseCFE);
   });
 }
 
@@ -40,10 +39,3 @@
     expect(result.value, isTrue);
   }
 }
-
-@reflectiveTest
-class IsPostfixCompletionApplicableTest_UseCFE
-    extends IsPostfixCompletionApplicableTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
index 3caf5f80..f248e06 100644
--- a/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
+++ b/pkg/analysis_server/test/integration/edit/list_postfix_completion_templates_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ListPostfixCompletionTemplatesTest);
-    defineReflectiveTests(ListPostfixCompletionTemplatesTest_UseCFE);
   });
 }
 
@@ -40,10 +39,3 @@
     expect(result.templates[0].runtimeType, PostfixTemplateDescriptor);
   }
 }
-
-@reflectiveTest
-class ListPostfixCompletionTemplatesTest_UseCFE
-    extends ListPostfixCompletionTemplatesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
index 4d519e9..0e372f4 100644
--- a/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
+++ b/pkg/analysis_server/test/integration/edit/organize_directives_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
-    defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
   });
 }
 
@@ -75,9 +74,3 @@
     }
   }
 }
-
-@reflectiveTest
-class OrganizeDirectivesTest_UseCFE extends OrganizeDirectivesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/edit/sort_members_test.dart b/pkg/analysis_server/test/integration/edit/sort_members_test.dart
index da09496..3ff78a7 100644
--- a/pkg/analysis_server/test/integration/edit/sort_members_test.dart
+++ b/pkg/analysis_server/test/integration/edit/sort_members_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
-    defineReflectiveTests(SortMembersTest_UseCFE);
   });
 }
 
@@ -63,9 +62,3 @@
     }
   }
 }
-
-@reflectiveTest
-class SortMembersTest_UseCFE extends SortMembersTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/execution/create_context_test.dart b/pkg/analysis_server/test/integration/execution/create_context_test.dart
index 2604eab..6564810 100644
--- a/pkg/analysis_server/test/integration/execution/create_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/create_context_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CreateContextTest);
-    defineReflectiveTests(CreateContextTest_UseCFE);
   });
 }
 
@@ -23,9 +22,3 @@
     expect(contextId, isNotNull);
   }
 }
-
-@reflectiveTest
-class CreateContextTest_UseCFE extends CreateContextTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/execution/delete_context_test.dart b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
index 3cf0e19..c807fa5 100644
--- a/pkg/analysis_server/test/integration/execution/delete_context_test.dart
+++ b/pkg/analysis_server/test/integration/execution/delete_context_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DeleteContextTest);
-    defineReflectiveTests(DeleteContextTest_UseCFE);
   });
 }
 
@@ -42,9 +41,3 @@
     }
   }
 }
-
-@reflectiveTest
-class DeleteContextTest_UseCFE extends DeleteContextTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/execution/map_uri_test.dart b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
index 9990a23..f5abbc0 100644
--- a/pkg/analysis_server/test/integration/execution/map_uri_test.dart
+++ b/pkg/analysis_server/test/integration/execution/map_uri_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MapUriTest);
-    defineReflectiveTests(MapUriTest_UseCFE);
   });
 }
 
@@ -39,9 +38,3 @@
     }
   }
 }
-
-@reflectiveTest
-class MapUriTest_UseCFE extends MapUriTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
index a715edd..441093b 100644
--- a/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/execution/set_subscriptions_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
@@ -22,9 +21,3 @@
     await sendExecutionSetSubscriptions([ExecutionService.LAUNCH_DATA]);
   }
 }
-
-@reflectiveTest
-class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
index 823ac4d..ccd3c49 100644
--- a/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
+++ b/pkg/analysis_server/test/integration/kythe/get_kythe_entries_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetKytheEntriesTest);
-    defineReflectiveTests(GetKytheEntriesTest_UseCFE);
   });
 }
 
@@ -38,9 +37,3 @@
     expect(result.files, isEmpty);
   }
 }
-
-@reflectiveTest
-class GetKytheEntriesTest_UseCFE extends GetKytheEntriesTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/search/find_element_references_test.dart b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
index 59ca4f2..10bfbfa 100644
--- a/pkg/analysis_server/test/integration/search/find_element_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_element_references_test.dart
@@ -8,13 +8,11 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../test_utilities/utillities.dart';
 import '../support/integration_tests.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementReferencesTest);
-    defineReflectiveTests(FindElementReferencesTest_UseCFE);
   });
 }
 
@@ -72,14 +70,3 @@
     return searchParams.results;
   }
 }
-
-@reflectiveTest
-class FindElementReferencesTest_UseCFE extends FindElementReferencesTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  // TimeoutException
-  test_findReferences() => callFailingTest(super.test_findReferences());
-}
diff --git a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
index 38f0c67..81148c0 100644
--- a/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_declarations_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberDeclarationsTest);
-    defineReflectiveTests(FindMemberDeclarationsTest_UseCFE);
   });
 }
 
@@ -50,9 +49,3 @@
     expect(result.path.first.name, 'bar');
   }
 }
-
-@reflectiveTest
-class FindMemberDeclarationsTest_UseCFE extends FindMemberDeclarationsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/search/find_member_references_test.dart b/pkg/analysis_server/test/integration/search/find_member_references_test.dart
index e8265fe..36fccbc 100644
--- a/pkg/analysis_server/test/integration/search/find_member_references_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_member_references_test.dart
@@ -6,13 +6,11 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../test_utilities/utillities.dart';
 import '../support/integration_tests.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindMemberReferencesTest);
-    defineReflectiveTests(FindMemberReferencesTest_UseCFE);
   });
 }
 
@@ -52,15 +50,3 @@
     expect(result.path.first.name, 'baz');
   }
 }
-
-@reflectiveTest
-class FindMemberReferencesTest_UseCFE extends FindMemberReferencesTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  // TimeoutException
-  test_findMemberReferences() =>
-      callFailingTest(super.test_findMemberReferences());
-}
diff --git a/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart b/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
index 4a2a41d..66352f8 100644
--- a/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/integration/search/find_top_level_declarations_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindTopLevelDeclarationsTest);
-    defineReflectiveTests(FindTopLevelDeclarationsTest_UseCFE);
   });
 }
 
@@ -55,9 +54,3 @@
     fail('No result for $pathname');
   }
 }
-
-@reflectiveTest
-class FindTopLevelDeclarationsTest_UseCFE extends FindTopLevelDeclarationsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
index 9f5ef14..da44055 100644
--- a/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/integration/search/get_type_hierarchy_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetTypeHierarchyTest);
-    defineReflectiveTests(GetTypeHierarchyTest_UseCFE);
   });
 }
 
@@ -230,19 +229,6 @@
   }
 }
 
-@reflectiveTest
-class GetTypeHierarchyTest_UseCFE extends GetTypeHierarchyTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_getTypeHierarchy() {
-    fail('Timeout');
-//    return callFailingTest(super.test_getTypeHierarchy);
-  }
-}
-
 /**
  * Results of a getTypeHierarchy request, processed for easier testing.
  */
diff --git a/pkg/analysis_server/test/integration/server/get_version_test.dart b/pkg/analysis_server/test/integration/server/get_version_test.dart
index 2a85544..c3dc407 100644
--- a/pkg/analysis_server/test/integration/server/get_version_test.dart
+++ b/pkg/analysis_server/test/integration/server/get_version_test.dart
@@ -9,7 +9,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetVersionTest);
-    defineReflectiveTests(GetVersionTest_UseCFE);
   });
 }
 
@@ -19,9 +18,3 @@
     return sendServerGetVersion();
   }
 }
-
-@reflectiveTest
-class GetVersionTest_UseCFE extends GetVersionTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
index 1dbb9db..c95e046 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_invalid_service_test.dart
@@ -10,7 +10,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsInvalidTest);
-    defineReflectiveTests(SetSubscriptionsInvalidTest_UseCFE);
   });
 }
 
@@ -29,9 +28,3 @@
     });
   }
 }
-
-@reflectiveTest
-class SetSubscriptionsInvalidTest_UseCFE extends SetSubscriptionsInvalidTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
index afae71b..d6de65b 100644
--- a/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
+++ b/pkg/analysis_server/test/integration/server/set_subscriptions_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SetSubscriptionsTest);
-    defineReflectiveTests(SetSubscriptionsTest_UseCFE);
   });
 }
 
@@ -72,9 +71,3 @@
     });
   }
 }
-
-@reflectiveTest
-class SetSubscriptionsTest_UseCFE extends SetSubscriptionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/server/shutdown_test.dart b/pkg/analysis_server/test/integration/server/shutdown_test.dart
index a68bf82..8478d48 100644
--- a/pkg/analysis_server/test/integration/server/shutdown_test.dart
+++ b/pkg/analysis_server/test/integration/server/shutdown_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ShutdownTest);
-    defineReflectiveTests(ShutdownTest_UseCFE);
   });
 }
 
@@ -30,9 +29,3 @@
     });
   }
 }
-
-@reflectiveTest
-class ShutdownTest_UseCFE extends ShutdownTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/server/status_test.dart b/pkg/analysis_server/test/integration/server/status_test.dart
index dab8eaa..72163c3 100644
--- a/pkg/analysis_server/test/integration/server/status_test.dart
+++ b/pkg/analysis_server/test/integration/server/status_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StatusTest);
-    defineReflectiveTests(StatusTest_UseCFE);
   });
 }
 
@@ -49,9 +48,3 @@
     });
   }
 }
-
-@reflectiveTest
-class StatusTest_UseCFE extends StatusTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index bc9a1be..d38cc56 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -159,12 +159,6 @@
   }
 
   /**
-   * Whether to run integration tests with the --use-cfe flag.
-   */
-  // TODO(devoncarew): Remove this when --use-cfe goes away.
-  bool get useCFE => false;
-
-  /**
    * Print out any messages exchanged with the server.  If some messages have
    * already been exchanged with the server, they are printed out immediately.
    */
@@ -265,12 +259,9 @@
   Future startServer({
     int diagnosticPort,
     int servicesPort,
-    bool cfe: false,
   }) {
     return server.start(
-        diagnosticPort: diagnosticPort,
-        servicesPort: servicesPort,
-        useCFE: cfe || useCFE);
+        diagnosticPort: diagnosticPort, servicesPort: servicesPort);
   }
 
   /**
@@ -677,7 +668,6 @@
     bool profileServer: false,
     String sdkPath,
     int servicesPort,
-    bool useCFE: false,
     bool useAnalysisHighlight2: false,
   }) async {
     if (_process != null) {
@@ -745,9 +735,6 @@
     if (useAnalysisHighlight2) {
       arguments.add('--useAnalysisHighlight2');
     }
-    if (useCFE) {
-      arguments.add('--use-cfe');
-    }
     _process = await Process.start(dartBinary, arguments);
     _process.exitCode.then((int code) {
       if (code != 0) {
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index ad53598..11b741a 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -335,6 +335,7 @@
  *   "codeOffset": int
  *   "codeLength": int
  *   "className": optional String
+ *   "mixinName": optional String
  *   "parameters": optional String
  * }
  */
@@ -350,6 +351,7 @@
           "codeLength": isInt
         }, optionalFields: {
           "className": isString,
+          "mixinName": isString,
           "parameters": isString
         }));
 
@@ -374,6 +376,7 @@
  *   LIBRARY
  *   LOCAL_VARIABLE
  *   METHOD
+ *   MIXIN
  *   PARAMETER
  *   PREFIX
  *   SETTER
@@ -402,6 +405,7 @@
   "LIBRARY",
   "LOCAL_VARIABLE",
   "METHOD",
+  "MIXIN",
   "PARAMETER",
   "PREFIX",
   "SETTER",
diff --git a/pkg/analysis_server/test/mock_sdk.dart b/pkg/analysis_server/test/mock_sdk.dart
index cb8e5e1..2178be8 100644
--- a/pkg/analysis_server/test/mock_sdk.dart
+++ b/pkg/analysis_server/test/mock_sdk.dart
@@ -301,8 +301,6 @@
     if (generateSummaryFiles) {
       List<int> bytes = _computeLinkedBundleBytes();
       provider.newFileWithBytes(
-          provider.convertPath('/lib/_internal/spec.sum'), bytes);
-      provider.newFileWithBytes(
           provider.convertPath('/lib/_internal/strong.sum'), bytes);
     }
   }
@@ -369,7 +367,7 @@
   PackageBundle getLinkedBundle() {
     if (_bundle == null) {
       resource.File summaryFile =
-          provider.getFile(provider.convertPath('/lib/_internal/spec.sum'));
+          provider.getFile(provider.convertPath('/lib/_internal/strong.sum'));
       List<int> bytes;
       if (summaryFile.exists) {
         bytes = summaryFile.readAsBytesSync();
@@ -420,7 +418,7 @@
     List<Source> librarySources = sdkLibraries
         .map((SdkLibrary library) => mapDartUri(library.shortName))
         .toList();
-    return new SummaryBuilder(librarySources, context, true).build();
+    return new SummaryBuilder(librarySources, context).build();
   }
 }
 
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index 2640347..5799565 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -22,7 +22,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ElementTest);
-    defineReflectiveTests(ElementTest_UseCFE);
     defineReflectiveTests(ElementKindTest);
   });
 }
@@ -185,7 +184,7 @@
     expect(element.parameters, '(int a, {@required int c, int b})');
   }
 
-  // Verify parameter re-ordering for required params
+  /// Verify parameter re-ordering for required params
   test_fromElement_CONSTRUCTOR_required_parameters_2() async {
     addMetaPackageSource();
     engine.Source source = addSource('/test.dart', '''
@@ -203,7 +202,7 @@
         '(int a, {@required int d, @required int c, int b})');
   }
 
-  // Verify parameter re-ordering for required params
+  /// Verify parameter re-ordering for required params
   test_fromElement_CONSTRUCTOR_required_parameters_3() async {
     addMetaPackageSource();
     engine.Source source = addSource('/test.dart', '''
@@ -487,6 +486,31 @@
     expect(element.flags, Element.FLAG_STATIC);
   }
 
+  test_fromElement_MIXIN() async {
+    engine.Source source = addSource('/test.dart', '''
+mixin A {}
+''');
+    engine.CompilationUnit unit = await resolveLibraryUnit(source);
+    {
+      engine.ClassElement engineElement = findElementInUnit(unit, 'A');
+      // create notification Element
+      Element element = convertElement(engineElement);
+      expect(element.kind, ElementKind.MIXIN);
+      expect(element.name, 'A');
+      expect(element.typeParameters, isNull);
+      {
+        Location location = element.location;
+        expect(location.file, convertPath('/test.dart'));
+        expect(location.offset, 6);
+        expect(location.length, 'A'.length);
+        expect(location.startLine, 1);
+        expect(location.startColumn, 7);
+      }
+      expect(element.parameters, isNull);
+      expect(element.flags, 0);
+    }
+  }
+
   test_fromElement_SETTER() async {
     engine.Source source = addSource('/test.dart', '''
 class A {
@@ -512,13 +536,3 @@
     expect(element.flags, 0);
   }
 }
-
-@reflectiveTest
-class ElementTest_UseCFE extends ElementTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_fromElement_LABEL() => super.test_fromElement_LABEL();
-}
diff --git a/pkg/analysis_server/test/search/declarations_test.dart b/pkg/analysis_server/test/search/declarations_test.dart
index d6a495d..8af7bf4 100644
--- a/pkg/analysis_server/test/search/declarations_test.dart
+++ b/pkg/analysis_server/test/search/declarations_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(DeclarationsTest);
-    defineReflectiveTests(DeclarationsTest_UseCFE);
   });
 }
 
@@ -24,12 +23,13 @@
   SearchGetElementDeclarationsResult declarationsResult;
 
   ElementDeclaration assertHas(String name, ElementKind kind,
-      {String className}) {
+      {String className, String mixinName}) {
     return declarationsResult.declarations.singleWhere((ElementDeclaration d) =>
         declarationsResult.files[d.fileIndex] == testFile &&
         d.name == name &&
         d.kind == kind &&
-        d.className == className);
+        d.className == className &&
+        d.mixinName == mixinName);
   }
 
   void assertNo(String name) {
@@ -98,6 +98,24 @@
     expect(declarationsResult.declarations, hasLength(4));
   }
 
+  test_mixin() async {
+    addTestFile(r'''
+mixin M {
+  int f;
+  int get g => 0;
+  void set s(_) {}
+  void m() {}
+}
+''');
+    await _getDeclarations();
+
+    assertHas('M', ElementKind.MIXIN);
+    assertHas('f', ElementKind.FIELD, mixinName: 'M');
+    assertHas('g', ElementKind.GETTER, mixinName: 'M');
+    assertHas('s', ElementKind.SETTER, mixinName: 'M');
+    assertHas('m', ElementKind.METHOD, mixinName: 'M');
+  }
+
   test_multipleFiles() async {
     var a = newFile(join(testFolder, 'a.dart'), content: 'class A {}').path;
     var b = newFile(join(testFolder, 'b.dart'), content: 'class B {}').path;
@@ -197,9 +215,3 @@
         new SearchGetElementDeclarationsResult.fromResponse(response);
   }
 }
-
-@reflectiveTest
-class DeclarationsTest_UseCFE extends DeclarationsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 5450ed7..fb3aa88 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ElementReferencesTest);
-    defineReflectiveTests(ElementReferencesTest_UseCFE);
   });
 }
 
@@ -409,6 +408,17 @@
     assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
   }
 
+  Future<void> test_mixin() async {
+    addTestFile('''
+mixin A {}
+class B extends Object with A {} // B
+''');
+    await findElementReferences('A {}', false);
+    expect(searchElement.kind, ElementKind.MIXIN);
+    expect(results, hasLength(1));
+    assertHasResult(SearchResultKind.REFERENCE, 'A {} // B');
+  }
+
   Future<void> test_noElement() async {
     addTestFile('''
 main() {
@@ -697,226 +707,3 @@
     assertHasResult(SearchResultKind.REFERENCE, 'T m()');
   }
 }
-
-@reflectiveTest
-class ElementReferencesTest_UseCFE extends ElementReferencesTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_constructor_named() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_constructor_named);
-  }
-
-  @failingTest
-  @override
-  test_constructor_named_potential() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_constructor_named_potential);
-  }
-
-  @failingTest
-  @override
-  test_constructor_unnamed() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_constructor_unnamed);
-  }
-
-  @failingTest
-  @override
-  test_constructor_unnamed_potential() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_constructor_unnamed_potential);
-  }
-
-  @failingTest
-  @override
-  test_field_explicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_field_explicit);
-  }
-
-  @failingTest
-  @override
-  test_field_implicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_field_implicit);
-  }
-
-  @failingTest
-  @override
-  test_field_inFormalParameter() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_field_inFormalParameter);
-  }
-
-  @failingTest
-  @override
-  test_function() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_function);
-  }
-
-  @failingTest
-  @override
-  test_hierarchy_field_explicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_hierarchy_field_explicit);
-  }
-
-  @failingTest
-  @override
-  test_hierarchy_method() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_hierarchy_method);
-  }
-
-  @failingTest
-  @override
-  test_hierarchy_method_static() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_hierarchy_method_static);
-  }
-
-  @failingTest
-  @override
-  test_hierarchy_namedParameter() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_hierarchy_namedParameter);
-  }
-
-  @failingTest
-  @override
-  test_label() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_label);
-  }
-
-  @failingTest
-  @override
-  test_localVariable() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_localVariable);
-  }
-
-  @failingTest
-  @override
-  test_method() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_method);
-  }
-
-  @failingTest
-  @override
-  test_method_propagatedType() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_method_propagatedType);
-  }
-
-  @failingTest
-  @override
-  test_oneUnit_zeroLibraries() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_oneUnit_zeroLibraries);
-  }
-
-  @failingTest
-  @override
-  test_parameter() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_parameter);
-  }
-
-  @failingTest
-  @override
-  test_path_inConstructor_named() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_path_inConstructor_named);
-  }
-
-  @failingTest
-  @override
-  test_path_inConstructor_unnamed() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_path_inConstructor_unnamed);
-  }
-
-  @failingTest
-  @override
-  test_path_inFunction() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_path_inFunction);
-  }
-
-  @failingTest
-  @override
-  test_potential_disabled() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_potential_disabled);
-  }
-
-  @failingTest
-  @override
-  test_potential_field() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_potential_field);
-  }
-
-  @failingTest
-  @override
-  test_potential_method() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_potential_method);
-  }
-
-  @failingTest
-  @override
-  test_potential_method_definedInSubclass() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_potential_method_definedInSubclass);
-  }
-
-  @failingTest
-  @override
-  test_prefix() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_prefix);
-  }
-
-  @failingTest
-  @override
-  test_topLevelVariable_explicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_topLevelVariable_explicit);
-  }
-
-  @failingTest
-  @override
-  test_topLevelVariable_implicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_topLevelVariable_implicit);
-  }
-
-  @failingTest
-  @override
-  test_typeReference_class() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_typeReference_class);
-  }
-
-  @failingTest
-  @override
-  test_typeReference_functionType() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_typeReference_functionType);
-  }
-
-  @failingTest
-  @override
-  test_typeReference_typeVariable() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_typeReference_typeVariable);
-  }
-}
diff --git a/pkg/analysis_server/test/search/member_declarations_test.dart b/pkg/analysis_server/test/search/member_declarations_test.dart
index e5cddfb..644912e 100644
--- a/pkg/analysis_server/test/search/member_declarations_test.dart
+++ b/pkg/analysis_server/test/search/member_declarations_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MemberDeclarationsTest);
-    defineReflectiveTests(MemberDeclarationsTest_UseCFE);
   });
 }
 
@@ -156,9 +155,3 @@
     assertHasDeclaration(ElementKind.SETTER, 'B');
   }
 }
-
-@reflectiveTest
-class MemberDeclarationsTest_UseCFE extends MemberDeclarationsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/search/member_references_test.dart b/pkg/analysis_server/test/search/member_references_test.dart
index bb899b4..3f29142 100644
--- a/pkg/analysis_server/test/search/member_references_test.dart
+++ b/pkg/analysis_server/test/search/member_references_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MemberReferencesTest);
-    defineReflectiveTests(MemberReferencesTest_UseCFE);
   });
 }
 
@@ -113,30 +112,3 @@
     assertHasRef(SearchResultKind.INVOCATION, 'foo(20)', true);
   }
 }
-
-@reflectiveTest
-class MemberReferencesTest_UseCFE extends MemberReferencesTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_fields_explicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_fields_explicit);
-  }
-
-  @failingTest
-  @override
-  test_fields_implicit() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_fields_implicit);
-  }
-
-  @failingTest
-  @override
-  test_methods() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_methods);
-  }
-}
diff --git a/pkg/analysis_server/test/search/top_level_declarations_test.dart b/pkg/analysis_server/test/search/top_level_declarations_test.dart
index 48a48ef..5e46628 100644
--- a/pkg/analysis_server/test/search/top_level_declarations_test.dart
+++ b/pkg/analysis_server/test/search/top_level_declarations_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TopLevelDeclarationsTest);
-    defineReflectiveTests(TopLevelDeclarationsTest_UseCFE);
   });
 }
 
@@ -81,9 +80,3 @@
     assertNoDeclaration(ElementKind.CLASS, 'ABC');
   }
 }
-
-@reflectiveTest
-class TopLevelDeclarationsTest_UseCFE extends TopLevelDeclarationsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index 0331546..f993d47 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(GetTypeHierarchyTest);
-    defineReflectiveTests(GetTypeHierarchyTest_UseCFE);
   });
 }
 
@@ -1052,132 +1051,3 @@
     }).toSet();
   }
 }
-
-@reflectiveTest
-class GetTypeHierarchyTest_UseCFE extends GetTypeHierarchyTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_bad_recursion() => super.test_bad_recursion();
-
-  @failingTest
-  @override
-  test_class_double_subclass() {
-    fail('Timeout');
-//    return callFailingTest(super.test_class_double_subclass);
-  }
-
-  @failingTest
-  @override
-  test_class_extends_fileAndPackageUris() {
-    fail('Timeout');
-//    return callFailingTest(super.test_class_extends_fileAndPackageUris);
-  }
-
-  @failingTest
-  @override
-  test_class_extendsTypeA() {
-    fail('Timeout');
-//    return callFailingTest(super.test_class_extendsTypeA);
-  }
-
-  @failingTest
-  @override
-  test_class_extendsTypeB() {
-    fail('Timeout');
-//    return callFailingTest(super.test_class_extendsTypeB);
-  }
-
-  @failingTest
-  @override
-  test_fromField_toMixinGetter() {
-    fail('Timeout');
-//    return callFailingTest(super.test_fromField_toMixinGetter);
-  }
-
-  @failingTest
-  @override
-  test_fromField_toMixinSetter() {
-    fail('Timeout');
-//    return callFailingTest(super.test_fromField_toMixinSetter);
-  }
-
-  @failingTest
-  @override
-  test_member_getter() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_getter);
-  }
-
-  @failingTest
-  @override
-  test_member_method() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_method);
-  }
-
-  @failingTest
-  @override
-  test_member_method_private_differentLib() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_method_private_differentLib);
-  }
-
-  @failingTest
-  @override
-  test_member_method_private_sameLib() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_method_private_sameLib);
-  }
-
-  @failingTest
-  @override
-  test_member_ofMixin2_method() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_ofMixin2_method);
-  }
-
-  @failingTest
-  @override
-  test_member_ofMixin_getter() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_ofMixin_getter);
-  }
-
-  @failingTest
-  @override
-  test_member_ofMixin_method() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_ofMixin_method);
-  }
-
-  @failingTest
-  @override
-  test_member_ofMixin_setter() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_ofMixin_setter);
-  }
-
-  @failingTest
-  @override
-  test_member_operator() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_operator);
-  }
-
-  @failingTest
-  @override
-  test_member_setter() {
-    fail('Timeout');
-//    return callFailingTest(super.test_member_setter);
-  }
-
-  @failingTest
-  @override
-  test_superOnly_fileDoesNotExist() {
-    fail('Timeout');
-//    return callFailingTest(super.test_superOnly_fileDoesNotExist);
-  }
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index abb74ac..2353870 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ArgListContributorTest);
-    defineReflectiveTests(ArgListContributorTest_UseCFE);
   });
 }
 
@@ -1056,9 +1055,3 @@
     assertSuggestArgumentList(['arg', 'blat'], ['dynamic', 'int']);
   }
 }
-
-@reflectiveTest
-class ArgListContributorTest_UseCFE extends ArgListContributorTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
index 28d92cc..ac4c454 100644
--- a/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/combinator_contributor_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CombinatorContributorTest);
-    defineReflectiveTests(CombinatorContributorTest_UseCFE);
   });
 }
 
@@ -170,13 +169,3 @@
         kind: CompletionSuggestionKind.IDENTIFIER);
   }
 }
-
-@reflectiveTest
-class CombinatorContributorTest_UseCFE extends CombinatorContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_Block_inherited_local() => super.test_Block_inherited_local();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
index 9b2c734..0809c6e 100644
--- a/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/common_usage_sorter_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CommonUsageSorterTest);
-    defineReflectiveTests(CommonUsageSorterTest_UseCFE);
   });
 }
 
@@ -166,9 +165,3 @@
     assertNoResult('A');
   }
 }
-
-@reflectiveTest
-class CommonUsageSorterTest_UseCFE extends CommonUsageSorterTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index b243c9d..015c377 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -47,7 +47,7 @@
    */
   bool get suggestConstructorsWithoutNew => true;
 
-  bool get usingFastaParser => useCFE || analyzer.Parser.useFasta;
+  bool get usingFastaParser => analyzer.Parser.useFasta;
 
   void addTestSource(String content) {
     expect(completionOffset, isNull, reason: 'Call addTestUnit exactly once');
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index cc4ea95..b9546e7 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -19,7 +19,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(CompletionManagerTest);
-    defineReflectiveTests(CompletionManagerTest_UseCFE);
   });
 }
 
@@ -87,9 +86,3 @@
     assertImportedLib('libA.dart');
   }
 }
-
-@reflectiveTest
-class CompletionManagerTest_UseCFE extends CompletionManagerTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
index 7fefb4d..28fcdbe 100644
--- a/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/field_formal_contributor_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FieldFormalContributorTest);
-    defineReflectiveTests(FieldFormalContributorTest_UseCFE);
   });
 }
 
@@ -196,9 +195,3 @@
     assertNotSuggested('x');
   }
 }
-
-@reflectiveTest
-class FieldFormalContributorTest_UseCFE extends FieldFormalContributorTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index 654b9eaa..556616f 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportedReferenceContributorTest);
-    defineReflectiveTests(ImportedReferenceContributorTest_UseCFE);
   });
 }
 
@@ -4458,93 +4457,3 @@
     assertNotSuggested('e');
   }
 }
-
-@reflectiveTest
-class ImportedReferenceContributorTest_UseCFE
-    extends ImportedReferenceContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_AsExpression() => super.test_AsExpression();
-
-  @failingTest
-  @override
-  test_Block_inherited_imported() => super.test_Block_inherited_imported();
-
-  @failingTest
-  @override
-  test_Block_inherited_local() => super.test_Block_inherited_local();
-
-  @failingTest
-  @override
-  test_Block_partial_results() => super.test_Block_partial_results();
-
-  @failingTest
-  @override
-  test_CatchClause_onType() => super.test_CatchClause_onType();
-
-  @failingTest
-  @override
-  test_CatchClause_onType_noBrackets() =>
-      super.test_CatchClause_onType_noBrackets();
-
-  @failingTest
-  @override
-  test_CatchClause_typed() => super.test_CatchClause_typed();
-
-  @failingTest
-  @override
-  test_Combinator_hide() => super.test_Combinator_hide();
-
-  @failingTest
-  @override
-  test_Combinator_show() => super.test_Combinator_show();
-
-  @failingTest
-  @override
-  test_ConditionalExpression_partial_thenExpression_empty() =>
-      super.test_ConditionalExpression_partial_thenExpression_empty();
-
-  @failingTest
-  @override
-  test_DefaultFormalParameter_named_expression() =>
-      super.test_DefaultFormalParameter_named_expression();
-
-  @failingTest
-  @override
-  test_ForEachStatement_body_untyped() =>
-      super.test_ForEachStatement_body_untyped();
-
-  @failingTest
-  @override
-  test_ForEachStatement_loopVariable_type() =>
-      super.test_ForEachStatement_loopVariable_type();
-
-  @failingTest
-  @override
-  test_ForStatement_initializer() => super.test_ForStatement_initializer();
-
-  @failingTest
-  @override
-  test_ImportDirective_dart() => super.test_ImportDirective_dart();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression() => super.test_InstanceCreationExpression();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression_unimported() =>
-      super.test_InstanceCreationExpression_unimported();
-
-  @failingTest
-  @override
-  test_multiple_contexts() => super.test_multiple_contexts();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_class_const() =>
-      super.test_PrefixedIdentifier_class_const();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
index 936cb79..be6cb0a 100644
--- a/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/inherited_reference_contributor_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InheritedReferenceContributorTest);
-    defineReflectiveTests(InheritedReferenceContributorTest_UseCFE);
   });
 }
 
@@ -676,18 +675,3 @@
     expect(cs.hasNamedParameters, isNull);
   }
 }
-
-@reflectiveTest
-class InheritedReferenceContributorTest_UseCFE
-    extends InheritedReferenceContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_Block_inherited_imported() => super.test_Block_inherited_imported();
-
-  @failingTest
-  @override
-  test_Block_inherited_local() => super.test_Block_inherited_local();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index c010d63..f2e2ba2 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(KeywordContributorTest);
-    defineReflectiveTests(KeywordContributorTest_UseCFE);
   });
 }
 
@@ -1669,6 +1668,19 @@
     assertSuggestKeywords(EXPRESSION_START_NO_INSTANCE);
   }
 
+  test_mixin() async {
+    addTestSource('mixin M o^ { }');
+    await computeSuggestions();
+    assertSuggestKeywords([Keyword.ON, Keyword.IMPLEMENTS],
+        relevance: DART_RELEVANCE_HIGH);
+  }
+
+  test_mixin_afterOnClause() async {
+    addTestSource('mixin M on A i^ { } class A {}');
+    await computeSuggestions();
+    assertSuggestKeywords([Keyword.IMPLEMENTS], relevance: DART_RELEVANCE_HIGH);
+  }
+
   test_named_constructor_invocation() async {
     addTestSource('void main() {new Future.^}');
     await computeSuggestions();
@@ -1870,181 +1882,3 @@
     return true;
   }
 }
-
-@reflectiveTest
-class KeywordContributorTest_UseCFE extends KeywordContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_after_import() => super.test_after_import();
-
-  @failingTest
-  @override
-  test_after_import2() => super.test_after_import2();
-
-  @failingTest
-  @override
-  test_class_extends_name() => super.test_class_extends_name();
-
-  @failingTest
-  @override
-  test_class_implements2() => super.test_class_implements2();
-
-  @failingTest
-  @override
-  test_class_implements3() => super.test_class_implements3();
-
-  @failingTest
-  @override
-  test_class_implements_name() => super.test_class_implements_name();
-
-  @failingTest
-  @override
-  test_class_with_name() => super.test_class_with_name();
-
-  @failingTest
-  @override
-  test_for_initialization_var() => super.test_for_initialization_var();
-
-  @failingTest
-  @override
-  test_function_async4() => super.test_function_async4();
-
-  @failingTest
-  @override
-  test_import() => super.test_import();
-
-  @failingTest
-  @override
-  test_import_as() => super.test_import_as();
-
-  @failingTest
-  @override
-  test_import_as2() => super.test_import_as2();
-
-  @failingTest
-  @override
-  test_import_as3() => super.test_import_as3();
-
-  @failingTest
-  @override
-  test_import_deferred() => super.test_import_deferred();
-
-  @failingTest
-  @override
-  test_import_deferred2() => super.test_import_deferred2();
-
-  @failingTest
-  @override
-  test_import_deferred3() => super.test_import_deferred3();
-
-  @failingTest
-  @override
-  test_import_deferred4() => super.test_import_deferred4();
-
-  @failingTest
-  @override
-  test_import_deferred5() => super.test_import_deferred5();
-
-  @failingTest
-  @override
-  test_import_deferred6() => super.test_import_deferred6();
-
-  @failingTest
-  @override
-  test_import_deferred_as() => super.test_import_deferred_as();
-
-  @failingTest
-  @override
-  test_import_deferred_as2() => super.test_import_deferred_as2();
-
-  @failingTest
-  @override
-  test_import_deferred_as3() => super.test_import_deferred_as3();
-
-  @failingTest
-  @override
-  test_import_deferred_as4() => super.test_import_deferred_as4();
-
-  @failingTest
-  @override
-  test_import_deferred_as5() => super.test_import_deferred_as5();
-
-  @failingTest
-  @override
-  test_import_deferred_not() => super.test_import_deferred_not();
-
-  @failingTest
-  @override
-  test_import_deferred_partial() => super.test_import_deferred_partial();
-
-  @failingTest
-  @override
-  test_import_partial() => super.test_import_partial();
-
-  @failingTest
-  @override
-  test_import_partial2() => super.test_import_partial2();
-
-  @failingTest
-  @override
-  test_import_partial3() => super.test_import_partial3();
-
-  @failingTest
-  @override
-  test_import_partial4() => super.test_import_partial4();
-
-  @failingTest
-  @override
-  test_import_partial5() => super.test_import_partial5();
-
-  @failingTest
-  @override
-  test_import_partial6() => super.test_import_partial6();
-
-  @failingTest
-  @override
-  test_method_async4() => super.test_method_async4();
-
-  @failingTest
-  @override
-  test_method_async5() => super.test_method_async5();
-
-  @failingTest
-  @override
-  test_method_async6() => super.test_method_async6();
-
-  @failingTest
-  @override
-  test_method_async7() => super.test_method_async7();
-
-  @failingTest
-  @override
-  test_method_async8() => super.test_method_async8();
-
-  @failingTest
-  @override
-  test_method_body3() => super.test_method_body3();
-
-  @failingTest
-  @override
-  test_method_body_async3() => super.test_method_body_async3();
-
-  @failingTest
-  @override
-  test_method_body_expression1() => super.test_method_body_expression1();
-
-  @failingTest
-  @override
-  test_newInstance2() => super.test_newInstance2();
-
-  @failingTest
-  @override
-  test_part_of() => super.test_part_of();
-
-  @failingTest
-  @override
-  test_prefixed_library() => super.test_prefixed_library();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
index 2bbf534..0cd2068 100644
--- a/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/label_contributor_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LabelContributorTest);
-    defineReflectiveTests(LabelContributorTest_UseCFE);
   });
 }
 
@@ -319,26 +318,3 @@
     assertSuggestLabel('foo');
   }
 }
-
-@reflectiveTest
-class LabelContributorTest_UseCFE extends LabelContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_continue_to_earlier_case() => super.test_continue_to_earlier_case();
-
-  @failingTest
-  @override
-  test_continue_to_enclosing_switch() =>
-      super.test_continue_to_enclosing_switch();
-
-  @failingTest
-  @override
-  test_continue_to_later_case() => super.test_continue_to_later_case();
-
-  @failingTest
-  @override
-  test_continue_to_same_case() => super.test_continue_to_same_case();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
index 1601e63..3f3f9fc 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_member_contributor_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LibraryMemberContributorTest);
-    defineReflectiveTests(LibraryMemberContributorTest_UseCFE);
   });
 }
 
@@ -286,18 +285,3 @@
     assertNoSuggestions();
   }
 }
-
-@reflectiveTest
-class LibraryMemberContributorTest_UseCFE extends LibraryMemberContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_libraryPrefix_deferred() => super.test_libraryPrefix_deferred();
-
-  @failingTest
-  @override
-  test_libraryPrefix_deferred_inPart() =>
-      super.test_libraryPrefix_deferred_inPart();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
index 070aeed..5fb24d4 100644
--- a/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/library_prefix_contributor_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LibraryPrefixContributorTest);
-    defineReflectiveTests(LibraryPrefixContributorTest_UseCFE);
   });
 }
 
@@ -328,23 +327,3 @@
     assertNoSuggestions();
   }
 }
-
-@reflectiveTest
-class LibraryPrefixContributorTest_UseCFE extends LibraryPrefixContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression() => super.test_InstanceCreationExpression();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression_inPart() =>
-      super.test_InstanceCreationExpression_inPart();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression_inPart_detached() =>
-      super.test_InstanceCreationExpression_inPart_detached();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
index f832fca..d361dc9 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_constructor_contributor_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalConstructorContributorTest);
-    defineReflectiveTests(LocalConstructorContributorTest_UseCFE);
   });
 }
 
@@ -4182,77 +4181,3 @@
     assertNotSuggested('e');
   }
 }
-
-@reflectiveTest
-class LocalConstructorContributorTest_UseCFE
-    extends LocalConstructorContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_AsExpression() => super.test_AsExpression();
-
-  @failingTest
-  @override
-  test_Block_inherited_imported() => super.test_Block_inherited_imported();
-
-  @failingTest
-  @override
-  test_Block_inherited_local() => super.test_Block_inherited_local();
-
-  @failingTest
-  @override
-  test_CatchClause_onType() => super.test_CatchClause_onType();
-
-  @failingTest
-  @override
-  test_CatchClause_onType_noBrackets() =>
-      super.test_CatchClause_onType_noBrackets();
-
-  @failingTest
-  @override
-  test_CatchClause_typed() => super.test_CatchClause_typed();
-
-  @failingTest
-  @override
-  test_ConditionalExpression_partial_thenExpression_empty() =>
-      super.test_ConditionalExpression_partial_thenExpression_empty();
-
-  @failingTest
-  @override
-  test_DefaultFormalParameter_named_expression() =>
-      super.test_DefaultFormalParameter_named_expression();
-
-  @failingTest
-  @override
-  test_ForEachStatement_body_untyped() =>
-      super.test_ForEachStatement_body_untyped();
-
-  @failingTest
-  @override
-  test_ForEachStatement_loopVariable_type() =>
-      super.test_ForEachStatement_loopVariable_type();
-
-  @failingTest
-  @override
-  test_ForStatement_initializer() => super.test_ForStatement_initializer();
-
-  @failingTest
-  @override
-  test_ImportDirective_dart() => super.test_ImportDirective_dart();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression() => super.test_InstanceCreationExpression();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression_unimported() =>
-      super.test_InstanceCreationExpression_unimported();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_class_const() =>
-      super.test_PrefixedIdentifier_class_const();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
index 54a4284..e3d07b2 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_library_contributor_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalLibraryContributorTest);
-    defineReflectiveTests(LocalLibraryContributorTest_UseCFE);
   });
 }
 
@@ -291,9 +290,3 @@
     assertNotSuggested('m');
   }
 }
-
-@reflectiveTest
-class LocalLibraryContributorTest_UseCFE extends LocalLibraryContributorTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index ecf6d6a..3987353 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(LocalReferenceContributorTest);
-    defineReflectiveTests(LocalReferenceContributorTest_UseCFE);
   });
 }
 
@@ -4680,82 +4679,3 @@
     assertNotSuggested('e');
   }
 }
-
-@reflectiveTest
-class LocalReferenceContributorTest_UseCFE
-    extends LocalReferenceContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_AsExpression_type() => super.test_AsExpression_type();
-
-  @failingTest
-  @override
-  test_Block_inherited_imported() => super.test_Block_inherited_imported();
-
-  @failingTest
-  @override
-  test_Block_inherited_local() => super.test_Block_inherited_local();
-
-  @failingTest
-  @override
-  test_CatchClause_onType() => super.test_CatchClause_onType();
-
-  @failingTest
-  @override
-  test_CatchClause_onType_noBrackets() =>
-      super.test_CatchClause_onType_noBrackets();
-
-  @failingTest
-  @override
-  test_CatchClause_typed() => super.test_CatchClause_typed();
-
-  @failingTest
-  @override
-  test_ConditionalExpression_partial_thenExpression_empty() =>
-      super.test_ConditionalExpression_partial_thenExpression_empty();
-
-  @failingTest
-  @override
-  test_DefaultFormalParameter_named_expression() =>
-      super.test_DefaultFormalParameter_named_expression();
-
-  @failingTest
-  @override
-  test_ForEachStatement_body_untyped() =>
-      super.test_ForEachStatement_body_untyped();
-
-  @failingTest
-  @override
-  test_ForEachStatement_loopVariable_type() =>
-      super.test_ForEachStatement_loopVariable_type();
-
-  @failingTest
-  @override
-  test_ForStatement_initializer() => super.test_ForStatement_initializer();
-
-  @failingTest
-  @override
-  test_FunctionExpression_body_function() =>
-      super.test_FunctionExpression_body_function();
-
-  @failingTest
-  @override
-  test_ImportDirective_dart() => super.test_ImportDirective_dart();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression() => super.test_InstanceCreationExpression();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression_unimported() =>
-      super.test_InstanceCreationExpression_unimported();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_class_const() =>
-      super.test_PrefixedIdentifier_class_const();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
index 38feb77e..499eb2b 100644
--- a/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/named_constructor_contributor_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NamedConstructorContributorTest);
-    defineReflectiveTests(NamedConstructorContributorTest_UseCFE);
   });
 }
 
@@ -170,34 +169,3 @@
     assertNotSuggested('m');
   }
 }
-
-@reflectiveTest
-class NamedConstructorContributorTest_UseCFE
-    extends NamedConstructorContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_ConstructorName_importedClass() =>
-      super.test_ConstructorName_importedClass();
-
-  @failingTest
-  @override
-  test_ConstructorName_importedClass_unresolved() =>
-      super.test_ConstructorName_importedClass_unresolved();
-
-  @failingTest
-  @override
-  test_ConstructorName_importedFactory() =>
-      super.test_ConstructorName_importedFactory();
-
-  @failingTest
-  @override
-  test_ConstructorName_localClass() => super.test_ConstructorName_localClass();
-
-  @failingTest
-  @override
-  test_ConstructorName_localFactory() =>
-      super.test_ConstructorName_localFactory();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
index 9458709..61a9a87c 100644
--- a/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/override_contributor_test.dart
@@ -12,7 +12,6 @@
 
 main() {
   defineReflectiveTests(OverrideContributorTest);
-  defineReflectiveTests(OverrideContributorTest_UseCFE);
 }
 
 @reflectiveTest
@@ -247,9 +246,3 @@
     return cs;
   }
 }
-
-@reflectiveTest
-class OverrideContributorTest_UseCFE extends OverrideContributorTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
index 20897dd..2987710 100644
--- a/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/static_member_contributor_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(StaticMemberContributorTest);
-    defineReflectiveTests(StaticMemberContributorTest_UseCFE);
   });
 }
 
@@ -306,14 +305,3 @@
     assertNotSuggested('==');
   }
 }
-
-@reflectiveTest
-class StaticMemberContributorTest_UseCFE extends StaticMemberContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_class_const() =>
-      super.test_PrefixedIdentifier_class_const();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index d6266ba..ea5d2cc 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(TypeMemberContributorTest);
-    defineReflectiveTests(TypeMemberContributorTest_UseCFE);
   });
 }
 
@@ -4026,100 +4025,3 @@
     assertNotSuggested('e');
   }
 }
-
-@reflectiveTest
-class TypeMemberContributorTest_UseCFE extends TypeMemberContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_AsExpression() => super.test_AsExpression();
-
-  @failingTest
-  @override
-  test_Block_inherited_imported() => super.test_Block_inherited_imported();
-
-  @failingTest
-  @override
-  test_Block_inherited_local() => super.test_Block_inherited_local();
-
-  @failingTest
-  @override
-  test_CatchClause_onType() => super.test_CatchClause_onType();
-
-  @failingTest
-  @override
-  test_CatchClause_onType_noBrackets() =>
-      super.test_CatchClause_onType_noBrackets();
-
-  @failingTest
-  @override
-  test_CatchClause_typed() => super.test_CatchClause_typed();
-
-  @failingTest
-  @override
-  test_ConditionalExpression_partial_thenExpression_empty() =>
-      super.test_ConditionalExpression_partial_thenExpression_empty();
-
-  @failingTest
-  @override
-  test_DefaultFormalParameter_named_expression() =>
-      super.test_DefaultFormalParameter_named_expression();
-
-  @failingTest
-  @override
-  test_ForEachStatement_body_untyped() =>
-      super.test_ForEachStatement_body_untyped();
-
-  @failingTest
-  @override
-  test_ForEachStatement_loopVariable_type() =>
-      super.test_ForEachStatement_loopVariable_type();
-
-  @failingTest
-  @override
-  test_ForStatement_initializer() => super.test_ForStatement_initializer();
-
-  @failingTest
-  @override
-  test_ImportDirective_dart() => super.test_ImportDirective_dart();
-
-  @failingTest
-  @override
-  test_InstanceCreationExpression_unimported() =>
-      super.test_InstanceCreationExpression_unimported();
-
-  @failingTest
-  @override
-  test_libraryPrefix_deferred() => super.test_libraryPrefix_deferred();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_class_const() =>
-      super.test_PrefixedIdentifier_class_const();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_propertyAccess_newStmt() =>
-      super.test_PrefixedIdentifier_propertyAccess_newStmt();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_trailingStmt_field() =>
-      super.test_PrefixedIdentifier_trailingStmt_field();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_trailingStmt_param() =>
-      super.test_PrefixedIdentifier_trailingStmt_param();
-
-  @failingTest
-  @override
-  test_PrefixedIdentifier_trailingStmt_param2() =>
-      super.test_PrefixedIdentifier_trailingStmt_param2();
-
-  @failingTest
-  @override
-  test_super() => super.test_super();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
index 0d21667..7d66b12 100644
--- a/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/uri_contributor_test.dart
@@ -15,9 +15,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UriContributorTest);
-    defineReflectiveTests(UriContributorTest_UseCFE);
     defineReflectiveTests(UriContributorWindowsTest);
-    defineReflectiveTests(UriContributorWindowsTest_UseCFE);
   });
 }
 
@@ -531,152 +529,6 @@
 }
 
 @reflectiveTest
-class UriContributorTest_UseCFE extends UriContributorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_after_import() => super.test_after_import();
-
-  @failingTest
-  @override
-  test_after_import_raw() => super.test_after_import_raw();
-
-  @failingTest
-  @override
-  test_before_import() => super.test_before_import();
-
-  @failingTest
-  @override
-  test_before_import_raw() => super.test_before_import_raw();
-
-  @failingTest
-  @override
-  test_before_import_raw2() => super.test_before_import_raw2();
-
-  @failingTest
-  @override
-  test_export_package2() => super.test_export_package2();
-
-  @failingTest
-  @override
-  test_export_package2_off() => super.test_export_package2_off();
-
-  @failingTest
-  @override
-  test_import3() => super.test_import3();
-
-  @failingTest
-  @override
-  test_import_dart() => super.test_import_dart();
-
-  @failingTest
-  @override
-  test_import_dart2() => super.test_import_dart2();
-
-  @failingTest
-  @override
-  test_import_file2() => super.test_import_file2();
-
-  @failingTest
-  @override
-  test_import_file2_off() => super.test_import_file2_off();
-
-  @failingTest
-  @override
-  test_import_file_child() => super.test_import_file_child();
-
-  @failingTest
-  @override
-  test_import_file_outside_lib() => super.test_import_file_outside_lib();
-
-  @failingTest
-  @override
-  test_import_file_parent() => super.test_import_file_parent();
-
-  @failingTest
-  @override
-  test_import_file_parent2() => super.test_import_file_parent2();
-
-  @failingTest
-  @override
-  test_import_no_dot_folders() => super.test_import_no_dot_folders();
-
-  @failingTest
-  @override
-  test_import_only_dart_files() => super.test_import_only_dart_files();
-
-  @failingTest
-  @override
-  test_import_package() => super.test_import_package();
-
-  @failingTest
-  @override
-  test_import_package2() => super.test_import_package2();
-
-  @failingTest
-  @override
-  test_import_package2_off() => super.test_import_package2_off();
-
-  @failingTest
-  @override
-  test_import_package2_raw() => super.test_import_package2_raw();
-
-  @failingTest
-  @override
-  test_import_package2_with_trailing() =>
-      super.test_import_package2_with_trailing();
-
-  @failingTest
-  @override
-  test_import_package_missing_lib() => super.test_import_package_missing_lib();
-
-  @failingTest
-  @override
-  test_import_package_raw() => super.test_import_package_raw();
-
-  @failingTest
-  @override
-  test_import_without_closing_quote_eof2() =>
-      super.test_import_without_closing_quote_eof2();
-
-  @failingTest
-  @override
-  test_import_without_closing_quote_eof3() =>
-      super.test_import_without_closing_quote_eof3();
-
-  @failingTest
-  @override
-  test_import_without_closing_quote_eof4() =>
-      super.test_import_without_closing_quote_eof4();
-
-  @failingTest
-  @override
-  test_outside_import() => super.test_outside_import();
-
-  @failingTest
-  @override
-  test_outside_import2() => super.test_outside_import2();
-
-  @failingTest
-  @override
-  test_part_file() => super.test_part_file();
-
-  @failingTest
-  @override
-  test_part_file2() => super.test_part_file2();
-
-  @failingTest
-  @override
-  test_part_file_child() => super.test_part_file_child();
-
-  @failingTest
-  @override
-  test_part_file_parent() => super.test_part_file_parent();
-}
-
-@reflectiveTest
 class UriContributorWindowsTest extends DartCompletionContributorTest {
   @override
   DartCompletionContributor createContributor() {
@@ -841,41 +693,3 @@
     assertSuggest('../blat.dart', csKind: CompletionSuggestionKind.IMPORT);
   }
 }
-
-@reflectiveTest
-class UriContributorWindowsTest_UseCFE extends UriContributorWindowsTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_import_file2() => super.test_import_file2();
-
-  @failingTest
-  @override
-  test_import_file_child() => super.test_import_file_child();
-
-  @failingTest
-  @override
-  test_import_file_parent() => super.test_import_file_parent();
-
-  @failingTest
-  @override
-  test_import_file_parent2() => super.test_import_file_parent2();
-
-  @failingTest
-  @override
-  test_part_file() => super.test_part_file();
-
-  @failingTest
-  @override
-  test_part_file2() => super.test_part_file2();
-
-  @failingTest
-  @override
-  test_part_file_child() => super.test_part_file_child();
-
-  @failingTest
-  @override
-  test_part_file_parent() => super.test_part_file_parent();
-}
diff --git a/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
index f4bf6e4..f1f2c23 100644
--- a/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/variable_name_contributor_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(VariableNameContributorTest);
-    defineReflectiveTests(VariableNameContributorTest_UseCFE);
   });
 }
 
@@ -243,9 +242,3 @@
     assertSuggestName('a');
   }
 }
-
-@reflectiveTest
-class VariableNameContributorTest_UseCFE extends VariableNameContributorTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
index 6d35673..e72c2e8 100644
--- a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
@@ -2,9 +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 'dart:async';
+
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/services/completion/postfix/postfix_completion.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -13,29 +14,20 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_AssertTest);
-    defineReflectiveTests(_AssertTest_UseCfe);
     defineReflectiveTests(_ForTest);
-    defineReflectiveTests(_ForTest_UseCfe);
     defineReflectiveTests(_NegateTest);
-    defineReflectiveTests(_NegateTest_UseCfe);
     defineReflectiveTests(_IfTest);
-    defineReflectiveTests(_IfTest_UseCfe);
     defineReflectiveTests(_NotNullTest);
-    defineReflectiveTests(_NotNullTest_UseCfe);
     defineReflectiveTests(_ParenTest);
-    defineReflectiveTests(_ParenTest_UseCfe);
     defineReflectiveTests(_ReturnTest);
-    defineReflectiveTests(_ReturnTest_UseCfe);
     defineReflectiveTests(_SwitchTest);
-    defineReflectiveTests(_SwitchTest_UseCfe);
     defineReflectiveTests(_TryTest);
-    defineReflectiveTests(_TryTest_UseCfe);
     defineReflectiveTests(_WhileTest);
-    defineReflectiveTests(_WhileTest_UseCfe);
   });
 }
 
 class PostfixCompletionTest extends AbstractSingleUnitTest {
+  PostfixCompletionProcessor processor;
   SourceChange change;
 
   void _assertHasChange(String message, String expectedCode, [Function cmp]) {
@@ -59,39 +51,44 @@
     fail("Expected to find |$message| but got: " + change.message);
   }
 
-  _computeCompletion(int offset, String key) async {
-    driver.changeFile(testFile);
-    AnalysisResult result = await driver.getResult(testFile);
-    PostfixCompletionContext context = new PostfixCompletionContext(
-        testFile,
-        result.lineInfo,
-        offset,
-        key,
-        result.driver,
-        testUnit,
-        testUnitElement,
-        result.errors);
-    PostfixCompletionProcessor processor =
-        new PostfixCompletionProcessor(context);
+  Future<void> _assertNotApplicable(String key, String code) async {
+    await _prepareProcessor(key, code);
+
+    bool isApplicable = await processor.isApplicable();
+    expect(isApplicable, isFalse);
+  }
+
+  Future<void> _prepareCompletion(String key, String code) async {
+    await _prepareProcessor(key, code);
+
     bool isApplicable = await processor.isApplicable();
     if (!isApplicable) {
       fail("Postfix completion not applicable at given location");
     }
-    PostfixCompletion completion = await processor.compute();
-    change = completion.change;
+
+    if (isApplicable) {
+      PostfixCompletion completion = await processor.compute();
+      change = completion.change;
+    }
   }
 
-  _prepareCompletion(String key, String sourceCode) async {
-    testCode = sourceCode.replaceAll('////', '');
-    int offset = findOffset(key);
-    testCode = testCode.replaceFirst(key, '', offset);
-    await _prepareCompletionAt(offset, key, testCode);
-  }
+  Future<void> _prepareProcessor(String key, String code) async {
+    int offset = code.indexOf(key);
+    code = code.replaceFirst(key, '', offset);
 
-  _prepareCompletionAt(int offset, String key, String sourceCode) async {
     verifyNoTestUnitErrors = false;
-    await resolveTestUnit(sourceCode);
-    await _computeCompletion(offset, key);
+    await resolveTestUnit(code);
+
+    PostfixCompletionContext context = new PostfixCompletionContext(
+        testFile,
+        testAnalysisResult.lineInfo,
+        offset,
+        key,
+        testAnalysisResult.driver,
+        testUnit,
+        testUnitElement,
+        testAnalysisResult.errors);
+    processor = new PostfixCompletionProcessor(context);
   }
 }
 
@@ -123,9 +120,8 @@
 ''');
   }
 
-  @failingTest
   test_assertFunc_invalid() async {
-    await _prepareCompletion('.assert', '''
+    await _assertNotApplicable('.assert', '''
 f() {
   () => null.assert
 }
@@ -147,16 +143,9 @@
 }
 
 @reflectiveTest
-class _AssertTest_UseCfe extends _AssertTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _ForTest extends PostfixCompletionTest {
-  @failingTest
   test_for_invalid() async {
-    await _prepareCompletion('.for', '''
+    await _assertNotApplicable('.for', '''
 f() {
   {}.for
 }
@@ -208,9 +197,8 @@
 ''');
   }
 
-  @failingTest
   test_fori_invalid() async {
-    await _prepareCompletion('.fori', '''
+    await _assertNotApplicable('.fori', '''
 f() {
   [].fori
 }
@@ -283,12 +271,6 @@
 }
 
 @reflectiveTest
-class _ForTest_UseCfe extends _ForTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _IfTest extends PostfixCompletionTest {
   test_Else() async {
     await _prepareCompletion('.else', '''
@@ -320,15 +302,23 @@
 ''');
   }
 
-  @failingTest
   test_if_invalid() async {
-    await _prepareCompletion('.if', '''
+    await _assertNotApplicable('.if', '''
 f(List expr) {
   expr.if
 }
 ''');
   }
 
+  test_if_invalid_importPrefix() async {
+    await _assertNotApplicable('.if', '''
+import 'dart:async' as p;
+f() {
+  p.if
+}
+''');
+  }
+
   test_ifDynamic() async {
     await _prepareCompletion('.if', '''
 f(expr) {
@@ -346,12 +336,6 @@
 }
 
 @reflectiveTest
-class _IfTest_UseCfe extends _IfTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _NegateTest extends PostfixCompletionTest {
   test_negate() async {
     await _prepareCompletion('.not', '''
@@ -366,9 +350,8 @@
 ''');
   }
 
-  @failingTest
   test_negate_invalid() async {
-    await _prepareCompletion('.not', '''
+    await _assertNotApplicable('.not', '''
 f(int expr) {
   if (expr.not)
 }
@@ -455,12 +438,6 @@
 }
 
 @reflectiveTest
-class _NegateTest_UseCfe extends _NegateTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _NotNullTest extends PostfixCompletionTest {
   test_nn() async {
     await _prepareCompletion('.nn', '''
@@ -479,9 +456,8 @@
 ''');
   }
 
-  @failingTest
   test_nn_invalid() async {
-    await _prepareCompletion('.nn', '''
+    await _assertNotApplicable('.nn', '''
 f(expr) {
   var list = [1,2,3];
 }.nn
@@ -569,12 +545,6 @@
 }
 
 @reflectiveTest
-class _NotNullTest_UseCfe extends _NotNullTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _ParenTest extends PostfixCompletionTest {
   test_paren() async {
     await _prepareCompletion('.par', '''
@@ -591,12 +561,6 @@
 }
 
 @reflectiveTest
-class _ParenTest_UseCfe extends _ParenTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _ReturnTest extends PostfixCompletionTest {
   test_return() async {
     await _prepareCompletion('.return', '''
@@ -613,12 +577,6 @@
 }
 
 @reflectiveTest
-class _ReturnTest_UseCfe extends _ReturnTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _SwitchTest extends PostfixCompletionTest {
   test_return() async {
     await _prepareCompletion('.switch', '''
@@ -637,12 +595,6 @@
 }
 
 @reflectiveTest
-class _SwitchTest_UseCfe extends _SwitchTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _TryTest extends PostfixCompletionTest {
   test_try() async {
     await _prepareCompletion('.try', '''
@@ -661,10 +613,9 @@
 ''');
   }
 
-  @failingTest
   test_try_invalid() async {
     // The semicolon is fine; this fails because of the do-statement.
-    await _prepareCompletion('.try', '''
+    await _assertNotApplicable('.try', '''
 f() {
   do {} while (true);.try
 }
@@ -749,12 +700,6 @@
 }
 
 @reflectiveTest
-class _TryTest_UseCfe extends _TryTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _WhileTest extends PostfixCompletionTest {
   test_while() async {
     await _prepareCompletion('.while', '''
@@ -771,9 +716,3 @@
 ''');
   }
 }
-
-@reflectiveTest
-class _WhileTest_UseCfe extends _WhileTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
index bf2de54..9ef3195 100644
--- a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
@@ -12,28 +12,17 @@
 
 main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(_DeclarationCompletionTest);
-    defineReflectiveTests(_DeclarationCompletionTest_UseCfe);
     defineReflectiveTests(_ControlFlowCompletionTest);
-    defineReflectiveTests(_ControlFlowCompletionTest_UseCfe);
+    defineReflectiveTests(_DeclarationCompletionTest);
     defineReflectiveTests(_DoCompletionTest);
-    defineReflectiveTests(_DoCompletionTest_UseCfe);
     defineReflectiveTests(_ExpressionCompletionTest);
-    defineReflectiveTests(_ExpressionCompletionTest_UseCfe);
     defineReflectiveTests(_ForCompletionTest);
-    defineReflectiveTests(_ForCompletionTest_UseCfe);
     defineReflectiveTests(_ForEachCompletionTest);
-    defineReflectiveTests(_ForEachCompletionTest_UseCfe);
     defineReflectiveTests(_IfCompletionTest);
-    defineReflectiveTests(_IfCompletionTest_UseCfe);
     defineReflectiveTests(_SimpleCompletionTest);
-    defineReflectiveTests(_SimpleCompletionTest_UseCfe);
     defineReflectiveTests(_SwitchCompletionTest);
-    defineReflectiveTests(_SwitchCompletionTest_UseCfe);
     defineReflectiveTests(_TryCompletionTest);
-    defineReflectiveTests(_TryCompletionTest_UseCfe);
     defineReflectiveTests(_WhileCompletionTest);
-    defineReflectiveTests(_WhileCompletionTest_UseCfe);
   });
 }
 
@@ -297,12 +286,6 @@
 }
 
 @reflectiveTest
-class _ControlFlowCompletionTest_UseCfe extends _ControlFlowCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _DeclarationCompletionTest extends StatementCompletionTest {
   test_classNameNoBody() async {
     await _prepareCompletion(
@@ -470,12 +453,6 @@
 }
 
 @reflectiveTest
-class _DeclarationCompletionTest_UseCfe extends _DeclarationCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _DoCompletionTest extends StatementCompletionTest {
   test_emptyCondition() async {
     await _prepareCompletion(
@@ -608,16 +585,6 @@
 }
 
 @reflectiveTest
-class _DoCompletionTest_UseCfe extends _DoCompletionTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_keywordOnly() => super.test_keywordOnly();
-}
-
-@reflectiveTest
 class _ExpressionCompletionTest extends StatementCompletionTest {
   test_listAssign() async {
     await _prepareCompletion(
@@ -835,12 +802,6 @@
 }
 
 @reflectiveTest
-class _ExpressionCompletionTest_UseCfe extends _ExpressionCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _ForCompletionTest extends StatementCompletionTest {
   test_emptyCondition() async {
     await _prepareCompletion(
@@ -1079,20 +1040,6 @@
 }
 
 @reflectiveTest
-class _ForCompletionTest_UseCfe extends _ForCompletionTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_emptyInitializers() => super.test_emptyInitializers();
-
-  @failingTest
-  @override
-  test_emptyInitializersAfterBody() => super.test_emptyInitializersAfterBody();
-}
-
-@reflectiveTest
 class _ForEachCompletionTest extends StatementCompletionTest {
   test_emptyIdentifier() async {
     await _prepareCompletion(
@@ -1186,12 +1133,6 @@
 }
 
 @reflectiveTest
-class _ForEachCompletionTest_UseCfe extends _ForEachCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _IfCompletionTest extends StatementCompletionTest {
   test_afterCondition() async {
     await _prepareCompletion(
@@ -1412,16 +1353,6 @@
 }
 
 @reflectiveTest
-class _IfCompletionTest_UseCfe extends _IfCompletionTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_keywordOnly() => super.test_keywordOnly();
-}
-
-@reflectiveTest
 class _SimpleCompletionTest extends StatementCompletionTest {
   test_enter() async {
     await _prepareCompletion(
@@ -1639,12 +1570,6 @@
 }
 
 @reflectiveTest
-class _SimpleCompletionTest_UseCfe extends _SimpleCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _SwitchCompletionTest extends StatementCompletionTest {
   test_caseNoColon() async {
     await _prepareCompletion(
@@ -1757,12 +1682,6 @@
 }
 
 @reflectiveTest
-class _SwitchCompletionTest_UseCfe extends _SwitchCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _TryCompletionTest extends StatementCompletionTest {
   test_catchOnly() async {
     await _prepareCompletion(
@@ -2019,12 +1938,6 @@
 }
 
 @reflectiveTest
-class _TryCompletionTest_UseCfe extends _TryCompletionTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class _WhileCompletionTest extends StatementCompletionTest {
   /*
      The implementation of completion for while-statements is shared with
@@ -2054,13 +1967,3 @@
         (s) => _after(s, 'while ('));
   }
 }
-
-@reflectiveTest
-class _WhileCompletionTest_UseCfe extends _WhileCompletionTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_keywordOnly() => super.test_keywordOnly();
-}
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index 0b387a7..5b2765e 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -25,7 +25,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssistProcessorTest);
-    defineReflectiveTests(AssistProcessorTest_UseCFE);
   });
 }
 
@@ -1013,6 +1012,21 @@
 ''');
   }
 
+  test_convertToAsyncBody_OK_getter_expression_noSpace() async {
+    await resolveTestUnit('''
+class C {
+  int get g=>0;
+}
+''');
+    await assertHasAssistAt('get g', DartAssistKind.CONVERT_INTO_ASYNC_BODY, '''
+import 'dart:async';
+
+class C {
+  Future<int> get g async =>0;
+}
+''');
+  }
+
   test_convertToAsyncBody_OK_method() async {
     await resolveTestUnit('''
 class C {
@@ -1029,6 +1043,21 @@
 ''');
   }
 
+  test_convertToAsyncBody_OK_method_abstract() async {
+    await resolveTestUnit('''
+abstract class C {
+  int m();
+}
+''');
+    await assertHasAssistAt('m()', DartAssistKind.CONVERT_INTO_ASYNC_BODY, '''
+import 'dart:async';
+
+abstract class C {
+  Future<int> m();
+}
+''');
+  }
+
   test_convertToAsyncBody_OK_method_noReturnType() async {
     await resolveTestUnit('''
 class C {
@@ -4212,6 +4241,44 @@
 ''');
   }
 
+  test_flutterWrapContainer_BAD_onContainer() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+main() {
+  return /*caret*/new Container();
+}
+''');
+    _setCaretLocation();
+    await assertNoAssist(DartAssistKind.FLUTTER_WRAP_CONTAINER);
+  }
+
+  test_flutterWrapContainer_OK() async {
+    addFlutterPackage();
+    await resolveTestUnit('''
+import 'package:flutter/widgets.dart';
+main() {
+  /*caret*/new Text('a');
+}
+''');
+    _setCaretLocation();
+    if (omitNew) {
+      await assertHasAssist(DartAssistKind.FLUTTER_WRAP_CONTAINER, '''
+import 'package:flutter/widgets.dart';
+main() {
+  /*caret*/Container(child: new Text('a'));
+}
+''');
+    } else {
+      await assertHasAssist(DartAssistKind.FLUTTER_WRAP_CONTAINER, '''
+import 'package:flutter/widgets.dart';
+main() {
+  /*caret*/new Center(child: new Text('a'));
+}
+''');
+    }
+  }
+
   test_flutterWrapPadding_BAD_onPadding() async {
     addFlutterPackage();
     await resolveTestUnit('''
@@ -6310,17 +6377,6 @@
   }
 }
 
-@reflectiveTest
-class AssistProcessorTest_UseCFE extends AssistProcessorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_importAddShow_BAD_unresolvedUri() =>
-      super.test_importAddShow_BAD_unresolvedUri();
-}
-
 class _DartAssistContextForValues implements DartAssistContext {
   @override
   final Source source;
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 2fc6261..63b5a1c 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -30,9 +30,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FixProcessorTest);
-    defineReflectiveTests(FixProcessorTest_UseCFE);
     defineReflectiveTests(LintFixTest);
-    defineReflectiveTests(LintFixTest_UseCFE);
   });
 }
 
@@ -306,6 +304,7 @@
     await assertNoFix(DartFixKind.ADD_ASYNC);
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_addAsync_blockFunctionBody() async {
     await resolveTestUnit('''
 foo() {}
@@ -366,6 +365,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_addAsync_expressionFunctionBody() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
@@ -380,6 +380,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_addAsync_returnFuture() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
@@ -402,6 +403,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_addAsync_returnFuture_alreadyFuture() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
@@ -424,6 +426,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_addAsync_returnFuture_dynamic() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
@@ -444,6 +447,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_addAsync_returnFuture_noType() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
@@ -5632,6 +5636,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_replaceVarWithDynamic() async {
     errorFilter = (AnalysisError error) {
       return error.errorCode == ParserErrorCode.VAR_AS_TYPE_NAME;
@@ -7073,593 +7078,6 @@
 }
 
 @reflectiveTest
-class FixProcessorTest_UseCFE extends FixProcessorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_addAsync_blockFunctionBody() => super.test_addAsync_blockFunctionBody();
-
-  @failingTest
-  @override
-  test_addAsync_closure() => super.test_addAsync_closure();
-
-  @failingTest
-  @override
-  test_addAsync_expressionFunctionBody() =>
-      super.test_addAsync_expressionFunctionBody();
-
-  @failingTest
-  @override
-  test_addAsync_returnFuture() => super.test_addAsync_returnFuture();
-
-  @failingTest
-  @override
-  test_addAsync_returnFuture_alreadyFuture() =>
-      super.test_addAsync_returnFuture_alreadyFuture();
-
-  @failingTest
-  @override
-  test_addAsync_returnFuture_dynamic() =>
-      super.test_addAsync_returnFuture_dynamic();
-
-  @failingTest
-  @override
-  test_addAsync_returnFuture_noType() =>
-      super.test_addAsync_returnFuture_noType();
-
-  @failingTest
-  @override
-  test_addExplicitCast_assignment_list() =>
-      super.test_addExplicitCast_assignment_list();
-
-  @failingTest
-  @override
-  test_addExplicitCast_assignment_list_all() =>
-      super.test_addExplicitCast_assignment_list_all();
-
-  @failingTest
-  @override
-  test_addExplicitCast_assignment_needsParens() =>
-      super.test_addExplicitCast_assignment_needsParens();
-
-  @failingTest
-  @override
-  test_addExplicitCast_assignment_needsParens_all() =>
-      super.test_addExplicitCast_assignment_needsParens_all();
-
-  @failingTest
-  @override
-  test_addExplicitCast_declaration_list() =>
-      super.test_addExplicitCast_declaration_list();
-
-  @failingTest
-  @override
-  test_addExplicitCast_declaration_list_all() =>
-      super.test_addExplicitCast_declaration_list_all();
-
-  @failingTest
-  @override
-  test_addExplicitCast_declaration_needsParens() =>
-      super.test_addExplicitCast_declaration_needsParens();
-
-  @failingTest
-  @override
-  test_addExplicitCast_declaration_needsParens_all() =>
-      super.test_addExplicitCast_declaration_needsParens_all();
-
-  @failingTest
-  @override
-  test_addFieldFormalParameters_flutter() =>
-      super.test_addFieldFormalParameters_flutter();
-
-  @failingTest
-  @override
-  test_addFieldFormalParameters_hasRequiredParameter() =>
-      super.test_addFieldFormalParameters_hasRequiredParameter();
-
-  @failingTest
-  @override
-  test_addFieldFormalParameters_noParameters() =>
-      super.test_addFieldFormalParameters_noParameters();
-
-  @failingTest
-  @override
-  test_addFieldFormalParameters_noRequiredParameter() =>
-      super.test_addFieldFormalParameters_noRequiredParameter();
-
-  @failingTest
-  @override
-  test_addFieldFormalParameters_notAllFinal() =>
-      super.test_addFieldFormalParameters_notAllFinal();
-
-  @failingTest
-  @override
-  test_addMissingRequiredArg_multiple() =>
-      super.test_addMissingRequiredArg_multiple();
-
-  @failingTest
-  @override
-  test_addMissingRequiredArg_multiple_2() =>
-      super.test_addMissingRequiredArg_multiple_2();
-
-  @failingTest
-  @override
-  test_addMissingRequiredArg_single() =>
-      super.test_addMissingRequiredArg_single();
-
-  @failingTest
-  @override
-  test_addMissingRequiredArg_single_normal() =>
-      super.test_addMissingRequiredArg_single_normal();
-
-  @failingTest
-  @override
-  test_addMissingRequiredArg_single_with_details() =>
-      super.test_addMissingRequiredArg_single_with_details();
-
-  @failingTest
-  @override
-  test_addStatic_multipleFields() => super.test_addStatic_multipleFields();
-
-  @failingTest
-  @override
-  test_addStatic_oneField() => super.test_addStatic_oneField();
-
-  @failingTest
-  @override
-  test_boolean() => super.test_boolean();
-
-  @failingTest
-  @override
-  test_boolean_all() => super.test_boolean_all();
-
-  @failingTest
-  @override
-  test_changeToStaticAccess_method() =>
-      super.test_changeToStaticAccess_method();
-
-  @failingTest
-  @override
-  test_changeToStaticAccess_method_importType() =>
-      super.test_changeToStaticAccess_method_importType();
-
-  @failingTest
-  @override
-  test_changeToStaticAccess_method_prefixLibrary() =>
-      super.test_changeToStaticAccess_method_prefixLibrary();
-
-  @failingTest
-  @override
-  test_changeToStaticAccess_property() =>
-      super.test_changeToStaticAccess_property();
-
-  @failingTest
-  @override
-  test_changeToStaticAccess_property_importType() =>
-      super.test_changeToStaticAccess_property_importType();
-
-  @failingTest
-  @override
-  test_changeTypeAnnotation_OK_simple() =>
-      super.test_changeTypeAnnotation_OK_simple();
-
-  @failingTest
-  @override
-  test_createClass_instanceCreation_withoutNew_fromMethod() =>
-      super.test_createClass_instanceCreation_withoutNew_fromMethod();
-
-  @failingTest
-  @override
-  test_createClass_itemOfList_inAnnotation() =>
-      super.test_createClass_itemOfList_inAnnotation();
-
-  @failingTest
-  @override
-  test_createConstructor_named() => super.test_createConstructor_named();
-
-  @failingTest
-  @override
-  test_createConstructor_named_emptyClassBody() =>
-      super.test_createConstructor_named_emptyClassBody();
-
-  @failingTest
-  @override
-  test_createConstructorSuperImplicit() =>
-      super.test_createConstructorSuperImplicit();
-
-  @failingTest
-  @override
-  test_createConstructorSuperImplicit_fieldInitializer() =>
-      super.test_createConstructorSuperImplicit_fieldInitializer();
-
-  @failingTest
-  @override
-  test_createConstructorSuperImplicit_importType() =>
-      super.test_createConstructorSuperImplicit_importType();
-
-  @failingTest
-  @override
-  test_createConstructorSuperImplicit_named() =>
-      super.test_createConstructorSuperImplicit_named();
-
-  @failingTest
-  @override
-  test_createConstructorSuperImplicit_typeArgument() =>
-      super.test_createConstructorSuperImplicit_typeArgument();
-
-  @failingTest
-  @override
-  test_createField_getter_unqualified_instance_asInvocationArgument() =>
-      super.test_createField_getter_unqualified_instance_asInvocationArgument();
-
-  @failingTest
-  @override
-  test_createField_getter_unqualified_instance_assignmentRhs() =>
-      super.test_createField_getter_unqualified_instance_assignmentRhs();
-
-  @failingTest
-  @override
-  test_createField_getter_unqualified_instance_asStatement() =>
-      super.test_createField_getter_unqualified_instance_asStatement();
-
-  @failingTest
-  @override
-  test_createField_invalidInitializer_withoutType() =>
-      super.test_createField_invalidInitializer_withoutType();
-
-  @failingTest
-  @override
-  test_createField_invalidInitializer_withType() =>
-      super.test_createField_invalidInitializer_withType();
-
-  @failingTest
-  @override
-  test_createField_setter_generic_OK_local() =>
-      super.test_createField_setter_generic_OK_local();
-
-  @failingTest
-  @override
-  test_createField_setter_unqualified_instance() =>
-      super.test_createField_setter_unqualified_instance();
-
-  @failingTest
-  @override
-  test_createFile_forImport() => super.test_createFile_forImport();
-
-  @failingTest
-  @override
-  test_createFile_forImport_BAD_inPackage_lib_justLib() =>
-      super.test_createFile_forImport_BAD_inPackage_lib_justLib();
-
-  @failingTest
-  @override
-  test_createFile_forImport_BAD_notDart() =>
-      super.test_createFile_forImport_BAD_notDart();
-
-  @failingTest
-  @override
-  test_createFile_forImport_inPackage_lib() =>
-      super.test_createFile_forImport_inPackage_lib();
-
-  @failingTest
-  @override
-  test_createFile_forImport_inPackage_test() =>
-      super.test_createFile_forImport_inPackage_test();
-
-  @failingTest
-  @override
-  test_createFile_forPart() => super.test_createFile_forPart();
-
-  @failingTest
-  @override
-  test_createFile_forPart_inPackageLib() =>
-      super.test_createFile_forPart_inPackageLib();
-
-  @failingTest
-  @override
-  test_createGetter_unqualified_instance_asInvocationArgument() =>
-      super.test_createGetter_unqualified_instance_asInvocationArgument();
-
-  @failingTest
-  @override
-  test_createGetter_unqualified_instance_assignmentLhs() =>
-      super.test_createGetter_unqualified_instance_assignmentLhs();
-
-  @failingTest
-  @override
-  test_createGetter_unqualified_instance_assignmentRhs() =>
-      super.test_createGetter_unqualified_instance_assignmentRhs();
-
-  @failingTest
-  @override
-  test_createGetter_unqualified_instance_asStatement() =>
-      super.test_createGetter_unqualified_instance_asStatement();
-
-  @failingTest
-  @override
-  test_createLocalVariable_write_assignment() =>
-      super.test_createLocalVariable_write_assignment();
-
-  @failingTest
-  @override
-  test_createLocalVariable_write_assignment_compound() =>
-      super.test_createLocalVariable_write_assignment_compound();
-
-  @failingTest
-  @override
-  test_createMissingOverrides_functionTypedParameter() =>
-      super.test_createMissingOverrides_functionTypedParameter();
-
-  @failingTest
-  @override
-  test_createMissingOverrides_method() =>
-      super.test_createMissingOverrides_method();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_cascadeSecond() =>
-      super.test_creationFunction_forFunctionType_cascadeSecond();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_dynamicArgument() =>
-      super.test_creationFunction_forFunctionType_dynamicArgument();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_function() =>
-      super.test_creationFunction_forFunctionType_function();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_function_namedArgument() =>
-      super.test_creationFunction_forFunctionType_function_namedArgument();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_importType() =>
-      super.test_creationFunction_forFunctionType_importType();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_method_enclosingClass_static() => super
-      .test_creationFunction_forFunctionType_method_enclosingClass_static();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_method_enclosingClass_static2() => super
-      .test_creationFunction_forFunctionType_method_enclosingClass_static2();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_method_targetClass() =>
-      super.test_creationFunction_forFunctionType_method_targetClass();
-
-  @failingTest
-  @override
-  test_creationFunction_forFunctionType_method_targetClass_hasOtherMember() => super
-      .test_creationFunction_forFunctionType_method_targetClass_hasOtherMember();
-
-  @failingTest
-  @override
-  test_illegalAsyncReturnType_adjacentNodes() =>
-      super.test_illegalAsyncReturnType_adjacentNodes();
-
-  @failingTest
-  @override
-  test_illegalAsyncReturnType_asyncLibrary_import() =>
-      super.test_illegalAsyncReturnType_asyncLibrary_import();
-
-  @failingTest
-  @override
-  test_illegalAsyncReturnType_asyncLibrary_usePrefix() =>
-      super.test_illegalAsyncReturnType_asyncLibrary_usePrefix();
-
-  @failingTest
-  @override
-  test_illegalAsyncReturnType_complexTypeName() =>
-      super.test_illegalAsyncReturnType_complexTypeName();
-
-  @failingTest
-  @override
-  test_importLibraryProject_BAD_inLibSrc_differentContextRoot() =>
-      super.test_importLibraryProject_BAD_inLibSrc_differentContextRoot();
-
-  @failingTest
-  @override
-  test_importLibraryProject_OK_inLibSrc_thisContextRoot() =>
-      super.test_importLibraryProject_OK_inLibSrc_thisContextRoot();
-
-  @failingTest
-  @override
-  test_importLibraryProject_withClass_annotation() =>
-      super.test_importLibraryProject_withClass_annotation();
-
-  @failingTest
-  @override
-  test_importLibraryProject_withFunction_unresolvedMethod() =>
-      super.test_importLibraryProject_withFunction_unresolvedMethod();
-
-  @failingTest
-  @override
-  test_importLibrarySdk_withClass_instanceCreation_explicitNew() =>
-      super.test_importLibrarySdk_withClass_instanceCreation_explicitNew();
-
-  @failingTest
-  @override
-  test_importLibrarySdk_withClass_instanceCreation_explicitNew_namedConstructor() =>
-      super
-          .test_importLibrarySdk_withClass_instanceCreation_explicitNew_namedConstructor();
-
-  @failingTest
-  @override
-  test_importLibrarySdk_withClass_instanceCreation_implicitNew() =>
-      super.test_importLibrarySdk_withClass_instanceCreation_implicitNew();
-
-  @failingTest
-  @override
-  test_importLibrarySdk_withClass_instanceCreation_implicitNew_namedConstructor() =>
-      super
-          .test_importLibrarySdk_withClass_instanceCreation_implicitNew_namedConstructor();
-
-  @failingTest
-  @override
-  test_importLibrarySdk_withClass_itemOfList_inAnnotation() =>
-      super.test_importLibrarySdk_withClass_itemOfList_inAnnotation();
-
-  @failingTest
-  @override
-  test_importLibrarySdk_withTopLevelVariable_annotation() =>
-      super.test_importLibrarySdk_withTopLevelVariable_annotation();
-
-  @failingTest
-  @override
-  test_importLibraryShow_project() => super.test_importLibraryShow_project();
-
-  @failingTest
-  @override
-  test_importLibraryShow_sdk() => super.test_importLibraryShow_sdk();
-
-  @failingTest
-  @override
-  test_makeFieldNotFinal_hasType() => super.test_makeFieldNotFinal_hasType();
-
-  @failingTest
-  @override
-  test_makeFieldNotFinal_noType() => super.test_makeFieldNotFinal_noType();
-
-  @failingTest
-  @override
-  test_noException_1() => super.test_noException_1();
-
-  @failingTest
-  @override
-  test_nonBoolCondition_addNotNull() =>
-      super.test_nonBoolCondition_addNotNull();
-
-  @failingTest
-  @override
-  test_nonBoolCondition_addNotNull_all() =>
-      super.test_nonBoolCondition_addNotNull_all();
-
-  @failingTest
-  @override
-  test_removeParentheses_inGetterInvocation() =>
-      super.test_removeParentheses_inGetterInvocation();
-
-  @failingTest
-  @override
-  test_replaceVarWithDynamic() => super.test_replaceVarWithDynamic();
-
-  @failingTest
-  @override
-  test_replaceWithConstInstanceCreation_explicitNew() =>
-      super.test_replaceWithConstInstanceCreation_explicitNew();
-
-  @failingTest
-  @override
-  test_undefinedClass_useSimilar_BAD_prefixed() =>
-      super.test_undefinedClass_useSimilar_BAD_prefixed();
-
-  @failingTest
-  @override
-  test_undefinedClass_useSimilar_fromImport() =>
-      super.test_undefinedClass_useSimilar_fromImport();
-
-  @failingTest
-  @override
-  test_undefinedFunction_create_fromMethod() =>
-      super.test_undefinedFunction_create_fromMethod();
-
-  @failingTest
-  @override
-  test_undefinedFunction_create_generic_BAD() =>
-      super.test_undefinedFunction_create_generic_BAD();
-
-  @failingTest
-  @override
-  test_undefinedFunction_create_generic_OK() =>
-      super.test_undefinedFunction_create_generic_OK();
-
-  @failingTest
-  @override
-  test_undefinedFunction_useSimilar_fromImport() =>
-      super.test_undefinedFunction_useSimilar_fromImport();
-
-  @failingTest
-  @override
-  test_undefinedFunction_useSimilar_prefixed_fromImport() =>
-      super.test_undefinedFunction_useSimilar_prefixed_fromImport();
-
-  @failingTest
-  @override
-  test_undefinedFunction_useSimilar_thisLibrary() =>
-      super.test_undefinedFunction_useSimilar_thisLibrary();
-
-  @failingTest
-  @override
-  test_undefinedGetter_useSimilar_unqualified() =>
-      super.test_undefinedGetter_useSimilar_unqualified();
-
-  @failingTest
-  @override
-  test_undefinedMethod_create_BAD_targetIsEnum() =>
-      super.test_undefinedMethod_create_BAD_targetIsEnum();
-
-  @failingTest
-  @override
-  test_undefinedMethod_create_generic_OK_local() =>
-      super.test_undefinedMethod_create_generic_OK_local();
-
-  @failingTest
-  @override
-  test_undefinedMethod_createUnqualified_duplicateArgumentNames() =>
-      super.test_undefinedMethod_createUnqualified_duplicateArgumentNames();
-
-  @failingTest
-  @override
-  test_undefinedMethod_createUnqualified_parameters() =>
-      super.test_undefinedMethod_createUnqualified_parameters();
-
-  @failingTest
-  @override
-  test_undefinedMethod_createUnqualified_parameters_named() =>
-      super.test_undefinedMethod_createUnqualified_parameters_named();
-
-  @failingTest
-  @override
-  test_undefinedMethod_createUnqualified_returnType() =>
-      super.test_undefinedMethod_createUnqualified_returnType();
-
-  @failingTest
-  @override
-  test_undefinedMethod_parameterType_differentPrefixInTargetUnit() =>
-      super.test_undefinedMethod_parameterType_differentPrefixInTargetUnit();
-
-  @failingTest
-  @override
-  test_undefinedMethod_parameterType_inTargetUnit() =>
-      super.test_undefinedMethod_parameterType_inTargetUnit();
-
-  @failingTest
-  @override
-  test_undefinedMethod_useSimilar_unqualified_superClass() =>
-      super.test_undefinedMethod_useSimilar_unqualified_superClass();
-
-  @failingTest
-  @override
-  test_undefinedMethod_useSimilar_unqualified_thisClass() =>
-      super.test_undefinedMethod_useSimilar_unqualified_thisClass();
-
-  @failingTest
-  @override
-  test_undefinedSetter_useSimilar_unqualified() =>
-      super.test_undefinedSetter_useSimilar_unqualified();
-}
-
-@reflectiveTest
 class LintFixTest extends BaseFixProcessorTest {
   AnalysisError error;
 
@@ -9007,17 +8425,6 @@
   }
 }
 
-@reflectiveTest
-class LintFixTest_UseCFE extends LintFixTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_lint_addMissingOverride_method_with_doc_comment_and_metadata() =>
-      super.test_lint_addMissingOverride_method_with_doc_comment_and_metadata();
-}
-
 class _DartFixContextImpl implements DartFixContext {
   @override
   final ResourceProvider resourceProvider;
diff --git a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
index beb4fe9..d0ac381 100644
--- a/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
+++ b/pkg/analysis_server/test/services/correction/name_suggestion_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(VariableNameSuggestionTest);
-    defineReflectiveTests(VariableNameSuggestionTest_UseCFE);
   });
 }
 
@@ -368,14 +367,3 @@
     }
   }
 }
-
-@reflectiveTest
-class VariableNameSuggestionTest_UseCFE extends VariableNameSuggestionTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_forExpression_instanceCreation() =>
-      super.test_forExpression_instanceCreation();
-}
diff --git a/pkg/analysis_server/test/services/correction/organize_directives_test.dart b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
index 8c20bad..d2b6796 100644
--- a/pkg/analysis_server/test/services/correction/organize_directives_test.dart
+++ b/pkg/analysis_server/test/services/correction/organize_directives_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(OrganizeDirectivesTest);
-    defineReflectiveTests(OrganizeDirectivesTest_UseCFE);
   });
 }
 
@@ -341,32 +340,3 @@
     testErrors = result.errors;
   }
 }
-
-@reflectiveTest
-class OrganizeDirectivesTest_UseCFE extends OrganizeDirectivesTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_remove_unresolvedDirectives() =>
-      super.test_remove_unresolvedDirectives();
-
-  @failingTest
-  @override
-  test_remove_unusedImports_hasUnresolvedError() =>
-      super.test_remove_unusedImports_hasUnresolvedError();
-
-  @failingTest
-  @override
-  test_sort() => super.test_sort();
-
-  @failingTest
-  @override
-  test_sort_hasComments() => super.test_sort_hasComments();
-
-  @failingTest
-  @override
-  test_sort_imports_packageAndPath() =>
-      super.test_sort_imports_packageAndPath();
-}
diff --git a/pkg/analysis_server/test/services/correction/sort_members_test.dart b/pkg/analysis_server/test/services/correction/sort_members_test.dart
index 88942ee..d89bb36 100644
--- a/pkg/analysis_server/test/services/correction/sort_members_test.dart
+++ b/pkg/analysis_server/test/services/correction/sort_members_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SortMembersTest);
-    defineReflectiveTests(SortMembersTest_UseCFE);
   });
 }
 
@@ -809,9 +808,3 @@
     testUnit = result.unit;
   }
 }
-
-@reflectiveTest
-class SortMembersTest_UseCFE extends SortMembersTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/correction/status_test.dart b/pkg/analysis_server/test/services/correction/status_test.dart
index b884f3d..cce27cd 100644
--- a/pkg/analysis_server/test/services/correction/status_test.dart
+++ b/pkg/analysis_server/test/services/correction/status_test.dart
@@ -18,7 +18,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RefactoringLocationTest);
-    defineReflectiveTests(RefactoringLocationTest_UseCFE);
     defineReflectiveTests(RefactoringStatusTest);
   });
 }
@@ -83,12 +82,6 @@
 }
 
 @reflectiveTest
-class RefactoringLocationTest_UseCFE extends RefactoringLocationTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class RefactoringStatusTest {
   void test_addError() {
     RefactoringStatus refactoringStatus = new RefactoringStatus();
diff --git a/pkg/analysis_server/test/services/correction/util_test.dart b/pkg/analysis_server/test/services/correction/util_test.dart
index cba58c5..3e1981c 100644
--- a/pkg/analysis_server/test/services/correction/util_test.dart
+++ b/pkg/analysis_server/test/services/correction/util_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(UtilTest);
-    defineReflectiveTests(UtilTest_UseCFE);
   });
 }
 
@@ -306,12 +305,6 @@
   }
 }
 
-@reflectiveTest
-class UtilTest_UseCFE extends UtilTest {
-  @override
-  bool get useCFE => true;
-}
-
 class _SourceMock implements Source {
   @override
   final String fullName;
diff --git a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
index b823bc0..6702055 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertGetterToMethodTest);
-    defineReflectiveTests(ConvertGetterToMethodTest_UseCFE);
   });
 }
 
@@ -162,9 +161,3 @@
     _createRefactoringForElement(element);
   }
 }
-
-@reflectiveTest
-class ConvertGetterToMethodTest_UseCFE extends ConvertGetterToMethodTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
index ad14c41..60f38f8 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ConvertMethodToGetterTest);
-    defineReflectiveTests(ConvertMethodToGetterTest_UseCFE);
   });
 }
 
@@ -214,9 +213,3 @@
     _createRefactoringForElement(element);
   }
 }
-
-@reflectiveTest
-class ConvertMethodToGetterTest_UseCFE extends ConvertMethodToGetterTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 95714c8..df1e893c 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractLocalTest);
-    defineReflectiveTests(ExtractLocalTest_UseCFE);
   });
 }
 
@@ -933,6 +932,7 @@
 ''');
   }
 
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/33992')
   test_singleExpression_hasParseError_expectedSemicolon() async {
     verifyNoTestUnitErrors = false;
     await indexTestUnit('''
@@ -1344,14 +1344,3 @@
     return subExpressions;
   }
 }
-
-@reflectiveTest
-class ExtractLocalTest_UseCFE extends ExtractLocalTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_singleExpression_hasParseError_expectedSemicolon() =>
-      super.test_singleExpression_hasParseError_expectedSemicolon();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index f37dc32..59f1a21 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractMethodTest);
-    defineReflectiveTests(ExtractMethodTest_UseCFE);
   });
 }
 
@@ -2934,14 +2933,3 @@
     }).toList();
   }
 }
-
-@reflectiveTest
-class ExtractMethodTest_UseCFE extends ExtractMethodTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_statements_parameters_localFunction() =>
-      super.test_statements_parameters_localFunction();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart b/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
index 071fc76..55a9cff 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
@@ -16,7 +16,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ExtractWidgetTest);
-    defineReflectiveTests(ExtractWidgetTest_UseCFE);
   });
 }
 
@@ -1255,59 +1254,3 @@
     _createRefactoring(offset, 0);
   }
 }
-
-@reflectiveTest
-class ExtractWidgetTest_UseCFE extends ExtractWidgetTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_invocation_otherClass() => super.test_invocation_otherClass();
-
-  @failingTest
-  @override
-  test_method_parameters() => super.test_method_parameters();
-
-  @failingTest
-  @override
-  test_method_parameters_named() => super.test_method_parameters_named();
-
-  @failingTest
-  @override
-  test_parameters_field_read_enclosingClass() =>
-      super.test_parameters_field_read_enclosingClass();
-
-  @failingTest
-  @override
-  test_parameters_field_read_otherClass() =>
-      super.test_parameters_field_read_otherClass();
-
-  @failingTest
-  @override
-  test_parameters_field_write_otherClass() =>
-      super.test_parameters_field_write_otherClass();
-
-  @failingTest
-  @override
-  test_parameters_local_read_enclosingScope() =>
-      super.test_parameters_local_read_enclosingScope();
-
-  @failingTest
-  @override
-  test_parameters_private() => super.test_parameters_private();
-
-  @failingTest
-  @override
-  test_parameters_private_conflictWithPublic() =>
-      super.test_parameters_private_conflictWithPublic();
-
-  @failingTest
-  @override
-  test_parameters_readField_readLocal() =>
-      super.test_parameters_readField_readLocal();
-
-  @failingTest
-  @override
-  test_statements() => super.test_statements();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
index 01d9e19..3c224ee 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InlineLocalTest);
-    defineReflectiveTests(InlineLocalTest_UseCFE);
   });
 }
 
@@ -638,9 +637,3 @@
         new InlineLocalRefactoring(searchEngine, astProvider, testUnit, offset);
   }
 }
-
-@reflectiveTest
-class InlineLocalTest_UseCFE extends InlineLocalTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index e75781d..64c50e0 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(InlineMethodTest);
-    defineReflectiveTests(InlineMethodTest_UseCFE);
   });
 }
 
@@ -1760,19 +1759,3 @@
         searchEngine, astProvider, testUnit, offset);
   }
 }
-
-@reflectiveTest
-class InlineMethodTest_UseCFE extends InlineMethodTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_noArgument_named_hasDefault() =>
-      super.test_noArgument_named_hasDefault();
-
-  @failingTest
-  @override
-  test_noArgument_positional_hasDefault() =>
-      super.test_noArgument_positional_hasDefault();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
index 2b34847..0faf26a 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -8,13 +8,11 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../test_utilities/utillities.dart';
 import 'abstract_refactoring.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(MoveFileTest);
-    defineReflectiveTests(MoveFileTest_UseCFE);
   });
 }
 
@@ -251,14 +249,3 @@
     fail(message);
   }
 }
-
-@reflectiveTest
-class MoveFileTest_UseCFE extends MoveFileTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_file_containing_imports_exports_parts() =>
-      callFailingTest(super.test_file_containing_imports_exports_parts());
-}
diff --git a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
index ab5843c..6973932 100644
--- a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(NamingConventionsTest);
-    defineReflectiveTests(NamingConventionsTest_UseCFE);
   });
 }
 
@@ -760,9 +759,3 @@
         expectedMessage: 'Avoid using built-in identifiers as names.');
   }
 }
-
-@reflectiveTest
-class NamingConventionsTest_UseCFE extends NamingConventionsTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index 5b3e255..00006c5 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -13,7 +13,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameClassMemberTest);
-    defineReflectiveTests(RenameClassMemberTest_UseCFE);
   });
 }
 
@@ -918,14 +917,3 @@
 ''');
   }
 }
-
-@reflectiveTest
-class RenameClassMemberTest_UseCFE extends RenameClassMemberTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_checkFinalConditions_shadowed_byParameter_inSameClass() =>
-      super.test_checkFinalConditions_shadowed_byParameter_inSameClass();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 752dd14..2f0f4a3 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameConstructorTest);
-    defineReflectiveTests(RenameConstructorTest_UseCFE);
   });
 }
 
@@ -248,21 +247,3 @@
     createRenameRefactoringForElement(element);
   }
 }
-
-@reflectiveTest
-class RenameConstructorTest_UseCFE extends RenameConstructorTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_createChange_add() => super.test_createChange_add();
-
-  @failingTest
-  @override
-  test_createChange_change() => super.test_createChange_change();
-
-  @failingTest
-  @override
-  test_createChange_remove() => super.test_createChange_remove();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
index 61e1d63..ed29086 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_import_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameImportTest);
-    defineReflectiveTests(RenameImportTest_UseCFE);
   });
 }
 
@@ -229,28 +228,3 @@
     createRenameRefactoringForElement(directive.element);
   }
 }
-
-@reflectiveTest
-class RenameImportTest_UseCFE extends RenameImportTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_createChange_change_className() =>
-      super.test_createChange_change_className();
-
-  @failingTest
-  @override
-  test_createChange_change_function() =>
-      super.test_createChange_change_function();
-
-  @failingTest
-  @override
-  test_createChange_change_onPrefixElement() =>
-      super.test_createChange_change_onPrefixElement();
-
-  @failingTest
-  @override
-  test_createChange_remove() => super.test_createChange_remove();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_label_test.dart b/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
index 9fe5d67..076ec77 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_label_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameLabelTest);
-    defineReflectiveTests(RenameLabelTest_UseCFE);
   });
 }
 
@@ -82,13 +81,3 @@
     expect(refactoring.oldName, 'test');
   }
 }
-
-@reflectiveTest
-class RenameLabelTest_UseCFE extends RenameLabelTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_createChange() => super.test_createChange();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
index d0da82b..19d2a4d 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
@@ -11,7 +11,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameLibraryTest);
-    defineReflectiveTests(RenameLibraryTest_UseCFE);
   });
 }
 
@@ -90,18 +89,3 @@
     createRenameRefactoringForElement(testUnitElement.library);
   }
 }
-
-@reflectiveTest
-class RenameLibraryTest_UseCFE extends RenameLibraryTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_createChange() => super.test_createChange();
-
-  @failingTest
-  @override
-  test_createChange_hasWhitespaces() =>
-      super.test_createChange_hasWhitespaces();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
index 578caaf..6b8c273 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameLocalTest);
-    defineReflectiveTests(RenameLocalTest_UseCFE);
   });
 }
 
@@ -573,14 +572,3 @@
     expect(refactoring.oldName, 'test');
   }
 }
-
-@reflectiveTest
-class RenameLocalTest_UseCFE extends RenameLocalTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_checkFinalConditions_shadows_classMember_namedParameter() =>
-      super.test_checkFinalConditions_shadows_classMember_namedParameter();
-}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 9046642..e5c22bf 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -7,13 +7,11 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../test_utilities/utillities.dart';
 import 'abstract_rename.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RenameUnitMemberTest);
-    defineReflectiveTests(RenameUnitMemberTest_UseCFE);
   });
 }
 
@@ -612,15 +610,3 @@
 ''');
   }
 }
-
-@reflectiveTest
-class RenameUnitMemberTest_UseCFE extends RenameUnitMemberTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator() =>
-      callFailingTest(super
-          .test_checkFinalConditions_shadowsInSubClass_importedLib_hideCombinator());
-}
diff --git a/pkg/analysis_server/test/services/search/element_visitors_test.dart b/pkg/analysis_server/test/services/search/element_visitors_test.dart
index 1bc5725..ef2c208 100644
--- a/pkg/analysis_server/test/services/search/element_visitors_test.dart
+++ b/pkg/analysis_server/test/services/search/element_visitors_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FindElementByNameOffsetTest);
-    defineReflectiveTests(FindElementByNameOffsetTest_UseCFE);
   });
 }
 
@@ -67,9 +66,3 @@
     expect(element.name, name);
   }
 }
-
-@reflectiveTest
-class FindElementByNameOffsetTest_UseCFE extends FindElementByNameOffsetTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index b36529c..b824347 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(HierarchyTest);
-    defineReflectiveTests(HierarchyTest_UseCFE);
   });
 }
 
@@ -450,9 +449,3 @@
     await resolveTestUnit(code);
   }
 }
-
-@reflectiveTest
-class HierarchyTest_UseCFE extends HierarchyTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index d458443..c8a7acf 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -21,12 +21,10 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../mock_sdk.dart';
-import '../../test_utilities/utillities.dart';
 
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchEngineImplTest);
-    defineReflectiveTests(SearchEngineImplTest_UseCFE);
   });
 }
 
@@ -41,11 +39,6 @@
 
   AnalysisDriverScheduler scheduler;
 
-  /**
-   * Return `true` to enable the Dart 2.0 Common Front End.
-   */
-  bool get useCFE => false;
-
   void setUp() {
     sdk = new MockSdk(resourceProvider: resourceProvider);
     logger = new PerformanceLog(logBuffer);
@@ -200,9 +193,9 @@
     var searchEngine = new SearchEngineImpl([driver]);
     Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
     expect(subtypes, hasLength(3));
-    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'A')));
-    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'B')));
-    expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
+    _assertContainsClass(subtypes, 'A');
+    _assertContainsClass(subtypes, 'B');
+    _assertContainsClass(subtypes, 'C');
   }
 
   test_searchAllSubtypes_acrossDrivers() async {
@@ -233,6 +226,35 @@
     expect(subtypes, contains(predicate((ClassElement e) => e.name == 'C')));
   }
 
+  test_searchAllSubtypes_mixin() async {
+    var p = newFile('/test.dart', content: '''
+class T {}
+
+mixin A on T {}
+mixin B implements T {}
+
+class C extends T {}
+
+mixin D on C {}
+mixin E implements C {}
+''').path;
+
+    var driver = _newDriver();
+    driver.addFile(p);
+
+    var resultA = await driver.getResult(p);
+    ClassElement element = resultA.unit.declaredElement.types[0];
+
+    var searchEngine = new SearchEngineImpl([driver]);
+    Set<ClassElement> subtypes = await searchEngine.searchAllSubtypes(element);
+    expect(subtypes, hasLength(5));
+    _assertContainsClass(subtypes, 'A');
+    _assertContainsClass(subtypes, 'B');
+    _assertContainsClass(subtypes, 'C');
+    _assertContainsClass(subtypes, 'D');
+    _assertContainsClass(subtypes, 'E');
+  }
+
   test_searchMemberDeclarations() async {
     var codeA = '''
 class A {
@@ -396,10 +418,9 @@
     }
 
     var searchEngine = new SearchEngineImpl([driver1, driver2]);
-    List<SearchMatch> matches =
-        await searchEngine.searchTopLevelDeclarations('.*');
-    expect(
-        matches.where((match) => !match.libraryElement.isInSdk), hasLength(4));
+    var matches = await searchEngine.searchTopLevelDeclarations('.*');
+    matches.removeWhere((match) => match.libraryElement.isInSdk);
+    expect(matches, hasLength(4));
 
     void assertHasOneElement(String name) {
       Iterable<SearchMatch> nameMatches = matches.where((SearchMatch m) =>
@@ -475,25 +496,10 @@
         contentOverlay,
         null,
         new SourceFactory(resolvers, null, resourceProvider),
-        new AnalysisOptionsImpl(),
-        useCFE: useCFE);
+        new AnalysisOptionsImpl());
   }
-}
 
-@reflectiveTest
-class SearchEngineImplTest_UseCFE extends SearchEngineImplTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_searchMemberReferences() =>
-      callFailingTest(super.test_searchMemberReferences());
-
-  @failingTest
-  @override
-  test_searchReferences_discover_owned() {
-    fail('Timeout');
-//    return callFailingTest(super.test_searchReferences_discover_owned);
+  static void _assertContainsClass(Set<ClassElement> subtypes, String name) {
+    expect(subtypes, contains(predicate((ClassElement e) => e.name == name)));
   }
 }
diff --git a/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart b/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart
index f63237e..1c5ec8d 100644
--- a/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/closingLabels_computer_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ClosingLabelsComputerTest);
-    defineReflectiveTests(ClosingLabelsComputerTest_UseCFE);
   });
 }
 
@@ -407,9 +406,3 @@
     return computer.compute();
   }
 }
-
-@reflectiveTest
-class ClosingLabelsComputerTest_UseCFE extends ClosingLabelsComputerTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/src/computer/folding_computer_test.dart b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
index abf0480..dee139a 100644
--- a/pkg/analysis_server/test/src/computer/folding_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FoldingComputerTest);
-    defineReflectiveTests(FoldingComputerTest_UseCFE);
   });
 }
 
@@ -306,6 +305,23 @@
     _compareRegions(regions, content);
   }
 
+  test_mixin() async {
+    String content = """
+// Content before
+
+mixin M {/*1:INC*/
+  void m() {/*3:INC*/
+    print("Got to m");
+  /*3:INC:FUNCTION_BODY*/}
+/*1:INC:CLASS_BODY*/}
+
+// Content after
+""";
+
+    final regions = await _computeRegions(content);
+    _compareRegions(regions, content);
+  }
+
   test_multiple_directive_types() async {
     String content = """
 import/*1:INC*/ 'dart:async';
@@ -439,21 +455,3 @@
     return computer.compute();
   }
 }
-
-@reflectiveTest
-class FoldingComputerTest_UseCFE extends FoldingComputerTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_annotations() => super.test_annotations();
-
-  @failingTest
-  @override
-  test_multiple_directive_types() => super.test_multiple_directive_types();
-
-  @failingTest
-  @override
-  test_multiple_import_directives() => super.test_multiple_import_directives();
-}
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 631177c..72199c9 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
@@ -17,7 +17,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportElementsComputerTest);
-    defineReflectiveTests(ImportElementsComputerTest_UseCFE);
   });
 }
 
@@ -359,13 +358,3 @@
 ''');
   }
 }
-
-@reflectiveTest
-class ImportElementsComputerTest_UseCFE extends ImportElementsComputerTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_createEdits_invalidUri() => super.test_createEdits_invalidUri();
-}
diff --git a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
index 574c073..55c106b 100644
--- a/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/imported_elements_computer_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(ImportElementsComputerTest);
-    defineReflectiveTests(ImportElementsComputerTest_UseCFE);
   });
 }
 
@@ -399,9 +398,3 @@
     return computer.compute();
   }
 }
-
-@reflectiveTest
-class ImportElementsComputerTest_UseCFE extends ImportElementsComputerTest {
-  @override
-  bool get useCFE => true;
-}
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 dcd2eba..340045a 100644
--- a/pkg/analysis_server/test/src/computer/outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/outline_computer_test.dart
@@ -16,9 +16,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterOutlineComputerTest);
-    defineReflectiveTests(FlutterOutlineComputerTest_UseCFE);
     defineReflectiveTests(OutlineComputerTest);
-    defineReflectiveTests(OutlineComputerTest_UseCFE);
   });
 }
 
@@ -140,12 +138,6 @@
 }
 
 @reflectiveTest
-class FlutterOutlineComputerTest_UseCFE extends FlutterOutlineComputerTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class OutlineComputerTest extends AbstractOutlineComputerTest {
   test_class() async {
     Outline unitOutline = await _computeOutline('''
@@ -838,6 +830,77 @@
     }
   }
 
+  test_mixin() async {
+    Outline unitOutline = await _computeOutline('''
+mixin M<N> {
+  c(int d) {}
+  String get e => null;
+  set f(int g) {}
+}
+''');
+    List<Outline> topOutlines = unitOutline.children;
+    expect(topOutlines, hasLength(1));
+    // M
+    {
+      Outline outline_M = topOutlines[0];
+      Element element_M = outline_M.element;
+      expect(element_M.kind, ElementKind.MIXIN);
+      expect(element_M.name, "M");
+      expect(element_M.typeParameters, "<N>");
+      {
+        Location location = element_M.location;
+        expect(location.offset, testCode.indexOf("M<N>"));
+        expect(location.length, 1);
+      }
+      expect(element_M.parameters, isNull);
+      expect(element_M.returnType, isNull);
+      // M children
+      List<Outline> outlines_M = outline_M.children;
+      expect(outlines_M, hasLength(3));
+      {
+        Outline outline = outlines_M[0];
+        Element element = outline.element;
+        expect(element.kind, ElementKind.METHOD);
+        expect(element.name, "c");
+        {
+          Location location = element.location;
+          expect(location.offset, testCode.indexOf("c(int d)"));
+          expect(location.length, 1);
+        }
+        expect(element.parameters, "(int d)");
+        expect(element.returnType, "");
+        expect(element.isAbstract, isFalse);
+        expect(element.isStatic, isFalse);
+      }
+      {
+        Outline outline = outlines_M[1];
+        Element element = outline.element;
+        expect(element.kind, ElementKind.GETTER);
+        expect(element.name, "e");
+        {
+          Location location = element.location;
+          expect(location.offset, testCode.indexOf("e => null"));
+          expect(location.length, 1);
+        }
+        expect(element.parameters, isNull);
+        expect(element.returnType, "String");
+      }
+      {
+        Outline outline = outlines_M[2];
+        Element element = outline.element;
+        expect(element.kind, ElementKind.SETTER);
+        expect(element.name, "f");
+        {
+          Location location = element.location;
+          expect(location.offset, testCode.indexOf("f(int g)"));
+          expect(location.length, 1);
+        }
+        expect(element.parameters, "(int g)");
+        expect(element.returnType, "");
+      }
+    }
+  }
+
   test_sourceRanges_fields() async {
     Outline unitOutline = await _computeOutline('''
 class A {
@@ -1160,9 +1223,3 @@
     expect(element.returnType, isNull);
   }
 }
-
-@reflectiveTest
-class OutlineComputerTest_UseCFE extends OutlineComputerTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/src/domain_abstract_test.dart b/pkg/analysis_server/test/src/domain_abstract_test.dart
index fdd414a..dde70ce 100644
--- a/pkg/analysis_server/test/src/domain_abstract_test.dart
+++ b/pkg/analysis_server/test/src/domain_abstract_test.dart
@@ -18,7 +18,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AbstractRequestHandlerTest);
-    defineReflectiveTests(AbstractRequestHandlerTest_UseCFE);
   });
 }
 
@@ -95,12 +94,6 @@
   }
 }
 
-@reflectiveTest
-class AbstractRequestHandlerTest_UseCFE extends AbstractRequestHandlerTest {
-  @override
-  bool get useCFE => true;
-}
-
 class TestAbstractRequestHandler extends AbstractRequestHandler {
   TestAbstractRequestHandler(server) : super(server);
 
diff --git a/pkg/analysis_server/test/src/domains/execution/completion_test.dart b/pkg/analysis_server/test/src/domains/execution/completion_test.dart
index 263c8b8..4ba0ecd 100644
--- a/pkg/analysis_server/test/src/domains/execution/completion_test.dart
+++ b/pkg/analysis_server/test/src/domains/execution/completion_test.dart
@@ -14,7 +14,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(RuntimeCompletionComputerTest);
-    defineReflectiveTests(RuntimeCompletionComputerTest_UseCFE);
   });
 }
 
@@ -378,19 +377,3 @@
     assertSuggested('b', returnType: 'double');
   }
 }
-
-@reflectiveTest
-class RuntimeCompletionComputerTest_UseCFE
-    extends RuntimeCompletionComputerTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_parameters_function_nested() => super.test_parameters_function_nested();
-
-  @failingTest
-  @override
-  test_parameters_functionExpression() =>
-      super.test_parameters_functionExpression();
-}
diff --git a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
index 2f20d00..4501d68 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_correction_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterCorrectionTest);
-    defineReflectiveTests(FlutterCorrectionTest_UseCFE);
   });
 }
 
@@ -134,9 +133,3 @@
         unit: testUnit);
   }
 }
-
-@reflectiveTest
-class FlutterCorrectionTest_UseCFE extends FlutterCorrectionTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index 61450ac..e4b62c4 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -15,7 +15,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterOutlineComputerTest);
-    defineReflectiveTests(FlutterOutlineComputerTest_UseCFE);
   });
 }
 
@@ -699,9 +698,3 @@
     return buffer.toString();
   }
 }
-
-@reflectiveTest
-class FlutterOutlineComputerTest_UseCFE extends FlutterOutlineComputerTest {
-  @override
-  bool get useCFE => true;
-}
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
index 929d19a..84f8f04 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_notification_test.dart
@@ -18,7 +18,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterNotificationOutlineTest);
-    defineReflectiveTests(FlutterNotificationOutlineTest_UseCFE);
   });
 }
 
@@ -119,17 +118,3 @@
     expect(textOutlineB.offset, code.indexOf("const Text('bbb')"));
   }
 }
-
-@reflectiveTest
-class FlutterNotificationOutlineTest_UseCFE
-    extends FlutterNotificationOutlineTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_children() async {
-    fail('Timeout');
-//    return callFailingTest(super.test_children);
-  }
-}
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index 0d6d026..b4a0ef0 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -12,7 +12,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(FlutterTest);
-    defineReflectiveTests(FlutterTest_UseCFE);
   });
 }
 
@@ -350,9 +349,3 @@
         as InstanceCreationExpression;
   }
 }
-
-@reflectiveTest
-class FlutterTest_UseCFE extends FlutterTest {
-  @override
-  bool get useCFE => true;
-}
diff --git a/pkg/analysis_server/test/stress/completion/completion.dart b/pkg/analysis_server/test/stress/completion/completion.dart
index a16fb14..81ebf7a 100644
--- a/pkg/analysis_server/test/stress/completion/completion.dart
+++ b/pkg/analysis_server/test/stress/completion/completion.dart
@@ -23,7 +23,6 @@
         printMissing: result['missing'],
         printQuality: result['quality'],
         timing: result['timing'],
-        useCFE: result['use-cfe'],
         verbose: result['verbose']);
     await runner.runAll(analysisRoot);
     await stdout.flush();
@@ -57,11 +56,6 @@
     negatable: false,
   );
   parser.addFlag(
-    'use-cfe',
-    help: 'Use the CFE to perform the analysis',
-    negatable: false,
-  );
-  parser.addFlag(
     'verbose',
     abbr: 'v',
     help: 'Produce verbose output',
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 886a07d..3605038 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -46,11 +46,6 @@
   final bool timing;
 
   /**
-   * A flag indicating whether to use the CFE when running the tests.
-   */
-  final bool useCFE;
-
-  /**
    * A flag indicating whether to produce verbose output.
    */
   final bool verbose;
@@ -69,13 +64,11 @@
       bool printMissing,
       bool printQuality,
       bool timing,
-      bool useCFE,
       bool verbose})
       : this.output = output ?? new NullStringSink(),
         this.printMissing = printMissing ?? false,
         this.printQuality = printQuality ?? false,
         this.timing = timing ?? false,
-        this.useCFE = useCFE ?? false,
         this.verbose = verbose ?? false;
 
   /**
@@ -87,8 +80,7 @@
         new OverlayResourceProvider(PhysicalResourceProvider.INSTANCE);
     AnalysisContextCollection collection = new AnalysisContextCollection(
         includedPaths: <String>[analysisRoot],
-        resourceProvider: resourceProvider,
-        useCFE: useCFE); // ignore: deprecated_member_use
+        resourceProvider: resourceProvider);
     DartCompletionManager contributor = new DartCompletionManager();
     CompletionPerformance performance = new CompletionPerformance();
     int stamp = 1;
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java b/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java
index 04da8df..736531f 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ElementDeclaration.java
@@ -82,6 +82,12 @@
   private final String className;
 
   /**
+   * The name of the mixin enclosing this declaration. If the declaration is not a mixin member, this
+   * field will be absent.
+   */
+  private final String mixinName;
+
+  /**
    * The parameter list for the element. If the element is not a method or function this field will
    * not be defined. If the element doesn't have parameters (e.g. getter), this field will not be
    * defined. If the element has zero parameters, this field will have a value of "()". The value
@@ -93,7 +99,7 @@
   /**
    * Constructor for {@link ElementDeclaration}.
    */
-  public ElementDeclaration(String name, String kind, int fileIndex, int offset, int line, int column, int codeOffset, int codeLength, String className, String parameters) {
+  public ElementDeclaration(String name, String kind, int fileIndex, int offset, int line, int column, int codeOffset, int codeLength, String className, String mixinName, String parameters) {
     this.name = name;
     this.kind = kind;
     this.fileIndex = fileIndex;
@@ -103,6 +109,7 @@
     this.codeOffset = codeOffset;
     this.codeLength = codeLength;
     this.className = className;
+    this.mixinName = mixinName;
     this.parameters = parameters;
   }
 
@@ -120,6 +127,7 @@
         other.codeOffset == codeOffset &&
         other.codeLength == codeLength &&
         ObjectUtilities.equals(other.className, className) &&
+        ObjectUtilities.equals(other.mixinName, mixinName) &&
         ObjectUtilities.equals(other.parameters, parameters);
     }
     return false;
@@ -135,8 +143,9 @@
     int codeOffset = jsonObject.get("codeOffset").getAsInt();
     int codeLength = jsonObject.get("codeLength").getAsInt();
     String className = jsonObject.get("className") == null ? null : jsonObject.get("className").getAsString();
+    String mixinName = jsonObject.get("mixinName") == null ? null : jsonObject.get("mixinName").getAsString();
     String parameters = jsonObject.get("parameters") == null ? null : jsonObject.get("parameters").getAsString();
-    return new ElementDeclaration(name, kind, fileIndex, offset, line, column, codeOffset, codeLength, className, parameters);
+    return new ElementDeclaration(name, kind, fileIndex, offset, line, column, codeOffset, codeLength, className, mixinName, parameters);
   }
 
   public static List<ElementDeclaration> fromJsonArray(JsonArray jsonArray) {
@@ -202,6 +211,14 @@
   }
 
   /**
+   * The name of the mixin enclosing this declaration. If the declaration is not a mixin member, this
+   * field will be absent.
+   */
+  public String getMixinName() {
+    return mixinName;
+  }
+
+  /**
    * The name of the declaration.
    */
   public String getName() {
@@ -238,6 +255,7 @@
     builder.append(codeOffset);
     builder.append(codeLength);
     builder.append(className);
+    builder.append(mixinName);
     builder.append(parameters);
     return builder.toHashCode();
   }
@@ -255,6 +273,9 @@
     if (className != null) {
       jsonObject.addProperty("className", className);
     }
+    if (mixinName != null) {
+      jsonObject.addProperty("mixinName", mixinName);
+    }
     if (parameters != null) {
       jsonObject.addProperty("parameters", parameters);
     }
@@ -283,6 +304,8 @@
     builder.append(codeLength + ", ");
     builder.append("className=");
     builder.append(className + ", ");
+    builder.append("mixinName=");
+    builder.append(mixinName + ", ");
     builder.append("parameters=");
     builder.append(parameters);
     builder.append("]");
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 f572d75..3991c56 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ElementKind.java
@@ -49,6 +49,8 @@
 
   public static final String METHOD = "METHOD";
 
+  public static final String MIXIN = "MIXIN";
+
   public static final String PARAMETER = "PARAMETER";
 
   public static final String PREFIX = "PREFIX";
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 3ecf1ea..2334b39 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -7,7 +7,7 @@
 <body>
 <h1>Analysis Server API Specification</h1>
 <h1 style="color:#999999">Version
-  <version>1.20.5</version>
+  <version>1.21.0</version>
 </h1>
 <p>
   This document contains a specification of the API provided by the
@@ -3195,6 +3195,13 @@
           is not a class member, this field will be absent.
         </p>
       </field>
+      <field name="mixinName" optional="true">
+        <ref>String</ref>
+        <p>
+          The name of the mixin enclosing this declaration. If the declaration
+          is not a mixin member, this field will be absent.
+        </p>
+      </field>
       <field name="parameters" optional="true">
         <ref>String</ref>
         <p>
diff --git a/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
index 73a5b06..2405a63 100644
--- a/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/dart/analysis/analysis_context_collection.dart
@@ -20,8 +20,7 @@
   /// system, otherwise the default resource provider will be used.
   factory AnalysisContextCollection(
       {@required List<String> includedPaths,
-      ResourceProvider resourceProvider,
-      @deprecated bool useCFE}) = AnalysisContextCollectionImpl;
+      ResourceProvider resourceProvider}) = AnalysisContextCollectionImpl;
 
   /// Return all of the analysis contexts in this collection.
   List<AnalysisContext> get contexts;
diff --git a/pkg/analyzer/lib/dart/analysis/context_builder.dart b/pkg/analyzer/lib/dart/analysis/context_builder.dart
index 1d5a2c6..69ef376 100644
--- a/pkg/analyzer/lib/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/dart/analysis/context_builder.dart
@@ -38,6 +38,5 @@
   AnalysisContext createContext(
       {@required ContextRoot contextRoot,
       DeclaredVariables declaredVariables,
-      String sdkPath,
-      @deprecated bool useCFE});
+      String sdkPath});
 }
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 84c538a..777bdc3 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -5185,6 +5185,9 @@
  * Clients may not extend, implement or mix-in this class.
  */
 abstract class MixinDeclaration extends NamedCompilationUnitMember {
+  @override
+  ClassElement get declaredElement;
+
   /**
    * Return the implements clause for the mixin, or `null` if the mixin does not
    * implement any interfaces.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 7e2ca4c..ed74e72 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -189,8 +189,8 @@
    * Return a list containing all of the superclass constraints defined for this
    * class. The list will be empty if this class does not represent a mixin
    * declaration. If this class _does_ represent a mixin declaration but the
-   * declaration does not have an on clause, then the list will contain the type
-   * for the class `Object`.
+   * declaration does not have an `on` clause, then the list will contain the
+   * type for the class `Object`.
    *
    * <b>Note:</b> Because the element model represents the state of the code, it
    * is possible for it to be semantically invalid. In particular, it is not
@@ -491,6 +491,12 @@
   LineInfo get lineInfo;
 
   /**
+   * Return a list containing all of the mixins contained in this compilation
+   * unit.
+   */
+  List<ClassElement> get mixins;
+
+  /**
    * Return a list containing all of the top-level variables contained in this
    * compilation unit.
    */
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 5662d2f..bda2290 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -130,7 +130,6 @@
   CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY,
   CompileTimeErrorCode.EXTENDS_DEFERRED_CLASS,
   CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-  CompileTimeErrorCode.EXTENDS_ENUM,
   CompileTimeErrorCode.EXTENDS_NON_CLASS,
   CompileTimeErrorCode.EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS,
   CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS,
@@ -150,8 +149,6 @@
   CompileTimeErrorCode.ILLEGAL_MIXIN,
   CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS,
   CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
-  CompileTimeErrorCode.IMPLEMENTS_DYNAMIC,
-  CompileTimeErrorCode.IMPLEMENTS_ENUM,
   CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
   CompileTimeErrorCode.IMPLEMENTS_REPEATED,
   CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS,
@@ -195,6 +192,7 @@
   CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL,
   CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL,
   CompileTimeErrorCode.MISSING_DART_LIBRARY,
+  CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR,
   CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
   CompileTimeErrorCode.MIXIN_DEFERRED_CLASS,
   CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS,
@@ -203,9 +201,11 @@
   CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION,
   CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT,
   CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
-  CompileTimeErrorCode.MIXIN_OF_ENUM,
   CompileTimeErrorCode.MIXIN_OF_NON_CLASS,
   CompileTimeErrorCode.MIXIN_REFERENCES_SUPER,
+  CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS,
+  CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
+  CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS,
   CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS,
   CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS,
   CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS,
@@ -429,6 +429,7 @@
   ParserErrorCode.GETTER_WITH_PARAMETERS,
   ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE,
   ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS,
+  ParserErrorCode.IMPLEMENTS_BEFORE_ON,
   ParserErrorCode.IMPLEMENTS_BEFORE_WITH,
   ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
   ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH,
@@ -474,6 +475,7 @@
   ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH,
   ParserErrorCode.MIXED_PARAMETER_GROUPS,
   ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES,
+  ParserErrorCode.MULTIPLE_ON_CLAUSES,
   ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES,
   ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES,
   ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS,
@@ -593,11 +595,8 @@
   StaticWarningCode.CASE_BLOCK_NOT_TERMINATED,
   StaticWarningCode.CAST_TO_NON_TYPE,
   StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
-  StaticWarningCode.CONFLICTING_DART_IMPORT,
-  StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER,
   StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER,
   StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2,
-  StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER,
   StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER,
   StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER,
   StaticWarningCode.CONST_WITH_ABSTRACT_CLASS,
diff --git a/pkg/analyzer/lib/source/error_processor.dart b/pkg/analyzer/lib/source/error_processor.dart
index 4a7559a..9a00004 100644
--- a/pkg/analyzer/lib/source/error_processor.dart
+++ b/pkg/analyzer/lib/source/error_processor.dart
@@ -127,7 +127,7 @@
       return true;
     }
     if (errorCode is StaticWarningCode) {
-      return errorCode.isStrongModeError;
+      return true;
     }
     return false;
   }
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index 9c4118d..6e91ddd 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -32,7 +32,6 @@
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart';
 import 'package:analyzer/src/task/options.dart';
-import 'package:analyzer/src/util/sdk.dart';
 import 'package:args/args.dart';
 import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
@@ -136,11 +135,6 @@
   bool get previewDart2 => true;
 
   /**
-   * Whether to enable the Dart 2.0 Common Front End implementation.
-   */
-  bool useCFE = false;
-
-  /**
    * Initialize a newly created builder to be ready to build a context rooted in
    * the directory with the given [rootDirectoryPath].
    */
@@ -179,18 +173,6 @@
     //_processAnalysisOptions(context, optionMap);
     final sf = createSourceFactory(path, options);
 
-    // The folder with `vm_platform_strong.dill`, which has required patches.
-    Folder kernelPlatformFolder;
-    if (useCFE) {
-      DartSdk sdk = sf.dartSdk;
-      if (sdk is FolderBasedDartSdk) {
-        var binariesPath = computePlatformBinariesPath(sdk.directory.path);
-        if (binariesPath != null) {
-          kernelPlatformFolder = resourceProvider.getFolder(binariesPath);
-        }
-      }
-    }
-
     AnalysisDriver driver = new AnalysisDriver(
         analysisDriverScheduler,
         performanceLog,
@@ -199,9 +181,7 @@
         fileContentOverlay,
         contextRoot,
         sf,
-        options,
-        useCFE: useCFE,
-        kernelPlatformFolder: kernelPlatformFolder);
+        options);
     // temporary plugin support:
     if (onCreateAnalysisDriver != null) {
       onCreateAnalysisDriver(driver, analysisDriverScheduler, performanceLog,
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index c1e0f20..c8bf328 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -322,7 +322,7 @@
       this._options.implicitCasts = options.implicitCasts;
       this._options.nonnullableTypes = options.nonnullableTypes;
       this._options.implicitDynamic = options.implicitDynamic;
-      this._options.useCFE = options.useCFE;
+      this._options.isMixinSupportEnabled = options.isMixinSupportEnabled;
     }
     if (needsRecompute) {
       for (WorkManager workManager in workManagers) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
index 1ea2e28..a474878 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
@@ -22,8 +22,7 @@
   AnalysisContextCollectionImpl(
       {@required List<String> includedPaths,
       ResourceProvider resourceProvider,
-      String sdkPath,
-      @deprecated bool useCFE})
+      String sdkPath})
       : resourceProvider =
             resourceProvider ?? PhysicalResourceProvider.INSTANCE {
     _throwIfAnyNotAbsoluteNormalizedPath(includedPaths);
@@ -39,8 +38,8 @@
       var contextBuilder = new ContextBuilder(
         resourceProvider: this.resourceProvider,
       );
-      var context = contextBuilder.createContext(
-          contextRoot: root, sdkPath: sdkPath, useCFE: useCFE);
+      var context =
+          contextBuilder.createContext(contextRoot: root, sdkPath: sdkPath);
       contexts.add(context);
     }
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index 3f961e4..3ede35d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -52,8 +52,7 @@
   AnalysisContext createContext(
       {@required ContextRoot contextRoot,
       DeclaredVariables declaredVariables,
-      String sdkPath,
-      @deprecated bool useCFE}) {
+      String sdkPath}) {
     PerformanceLog performanceLog = new PerformanceLog(new StringBuffer());
     AnalysisDriverScheduler scheduler =
         new AnalysisDriverScheduler(performanceLog);
@@ -79,7 +78,6 @@
     builder.byteStore = new MemoryByteStore();
     builder.fileContentOverlay = new FileContentOverlay();
     builder.performanceLog = performanceLog;
-    builder.useCFE = useCFE ?? false;
 
     old.ContextRoot oldContextRoot = new old.ContextRoot(
         contextRoot.root.path, contextRoot.excludedPaths.toList(),
diff --git a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
index 58d0a65..44baa00 100644
--- a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
@@ -33,6 +33,9 @@
       if (member is ClassDeclaration) {
         member.members.forEach(appendClassMemberName);
       }
+      if (member is MixinDeclaration) {
+        member.members.forEach(appendClassMemberName);
+      }
     } else if (member is TopLevelVariableDeclaration) {
       for (VariableDeclaration variable in member.variables.variables) {
         appendName(names.topLevelNames, variable.name);
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index b07b1140..37bd368 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -19,9 +19,7 @@
 import 'package:analyzer/src/context/context_root.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/file_tracker.dart';
-import 'package:analyzer/src/dart/analysis/frontend_resolution.dart';
 import 'package:analyzer/src/dart/analysis/index.dart';
-import 'package:analyzer/src/dart/analysis/kernel_context.dart';
 import 'package:analyzer/src/dart/analysis/library_analyzer.dart';
 import 'package:analyzer/src/dart/analysis/library_context.dart';
 import 'package:analyzer/src/dart/analysis/search.dart';
@@ -94,7 +92,7 @@
   /**
    * The version of data format, should be incremented on every format change.
    */
-  static const int DATA_VERSION = 63;
+  static const int DATA_VERSION = 65;
 
   /**
    * The number of exception contexts allowed to write. Once this field is
@@ -103,19 +101,6 @@
   static int allowedNumberOfContextsToWrite = 10;
 
   /**
-   * Whether kernel should be used to resynthesize elements.
-   */
-  final bool _useCFE;
-
-  /**
-   * The [Folder] with the `vm_platform.dill` file.
-   *
-   * We use `vm_platform.dill`, because loading patches is not yet implemented,
-   * and patches are not a part of SDK distribution.
-   */
-  final Folder _kernelPlatformFolder;
-
-  /**
    * The scheduler that schedules analysis work in this, and possibly other
    * analysis drivers.
    */
@@ -183,12 +168,6 @@
   final Uint32List _salt = new Uint32List(1 + AnalysisOptions.signatureLength);
 
   /**
-   * If [enableKernelDriver], then the instance of [FrontEndCompiler].
-   * Otherwise `null`.
-   */
-  FrontEndCompiler _frontEndCompiler;
-
-  /**
    * The set of priority files, that should be analyzed sooner.
    */
   final _priorityFiles = new LinkedHashSet<String>();
@@ -351,22 +330,17 @@
       this.contextRoot,
       SourceFactory sourceFactory,
       this._analysisOptions,
-      {bool useCFE: false,
-      Folder kernelPlatformFolder,
-      PackageBundle sdkBundle,
+      {PackageBundle sdkBundle,
       this.disableChangesAndCacheAllResults: false,
       SummaryDataStore externalSummaries})
       : _logger = logger,
         _sourceFactory = sourceFactory.clone(),
         _sdkBundle = sdkBundle,
-        _externalSummaries = externalSummaries,
-        _useCFE = useCFE,
-        _kernelPlatformFolder = kernelPlatformFolder {
+        _externalSummaries = externalSummaries {
     _createNewSession();
     _onResults = _resultController.stream.asBroadcastStream();
     _testView = new AnalysisDriverTestView(this);
     _createFileTracker();
-    _createKernelDriver();
     _scheduler.add(this);
     _search = new Search(this);
   }
@@ -597,7 +571,6 @@
     Iterable<String> addedFiles = _fileTracker.addedFiles;
     _createFileTracker();
     _fileTracker.addFiles(addedFiles);
-    _createKernelDriver();
   }
 
   /**
@@ -1158,7 +1131,6 @@
   void removeFile(String path) {
     _throwIfNotAbsolutePath(path);
     _throwIfChangesAreNotAllowed();
-    _frontEndCompilerInvalidate(path);
     _fileTracker.removeFile(path);
     _priorityResults.clear();
   }
@@ -1167,7 +1139,6 @@
    * Implementation for [changeFile].
    */
   void _changeFile(String path) {
-    _frontEndCompilerInvalidate(path);
     _fileTracker.changeFile(path);
     _priorityResults.clear();
   }
@@ -1243,43 +1214,25 @@
       await null;
       try {
         LibraryContext libraryContext;
-        KernelContext kernelContext;
         try {
           _testView.numOfAnalyzedLibraries++;
 
-          LibraryAnalyzer analyzer;
-          if (_useCFE) {
-            kernelContext = await _createKernelContext(library);
-            analyzer = new LibraryAnalyzer(
-                _logger,
-                analysisOptions,
-                declaredVariables,
-                sourceFactory,
-                kernelContext.isLibraryUri,
-                kernelContext.analysisContext,
-                kernelContext.resynthesizer,
-                library,
-                useCFE: true,
-                frontEndCompiler: _frontEndCompiler);
-          } else {
-            if (!_fsState.getFileForUri(Uri.parse('dart:core')).exists) {
-              return _newMissingDartLibraryResult(file, 'dart:core');
-            }
-            if (!_fsState.getFileForUri(Uri.parse('dart:async')).exists) {
-              return _newMissingDartLibraryResult(file, 'dart:async');
-            }
-            libraryContext = await _createLibraryContext(library);
-            analyzer = new LibraryAnalyzer(
-                _logger,
-                analysisOptions,
-                declaredVariables,
-                sourceFactory,
-                libraryContext.isLibraryUri,
-                libraryContext.analysisContext,
-                libraryContext.resynthesizer,
-                library);
+          if (!_fsState.getFileForUri(Uri.parse('dart:core')).exists) {
+            return _newMissingDartLibraryResult(file, 'dart:core');
           }
+          if (!_fsState.getFileForUri(Uri.parse('dart:async')).exists) {
+            return _newMissingDartLibraryResult(file, 'dart:async');
+          }
+          libraryContext = await _createLibraryContext(library);
 
+          LibraryAnalyzer analyzer = new LibraryAnalyzer(
+              analysisOptions,
+              declaredVariables,
+              sourceFactory,
+              libraryContext.isLibraryUri,
+              libraryContext.analysisContext,
+              libraryContext.resynthesizer,
+              library);
           Map<FileState, UnitAnalysisResult> results = await analyzer.analyze();
 
           List<int> bytes;
@@ -1315,7 +1268,6 @@
           return result;
         } finally {
           libraryContext?.dispose();
-          kernelContext?.dispose();
         }
       } catch (exception, stackTrace) {
         String contextKey = _storeExceptionContextDuringAnalysis(
@@ -1349,28 +1301,15 @@
       }
     }
 
-    if (_useCFE) {
-      var kernelContext = await _createKernelContext(library);
-      try {
-        CompilationUnitElement element =
-            kernelContext.computeUnitElement(library.source, file.source);
-        String signature = library.transitiveSignature;
-        return new UnitElementResult(
-            currentSession, path, file.uri, signature, element);
-      } finally {
-        kernelContext.dispose();
-      }
-    } else {
-      LibraryContext libraryContext = await _createLibraryContext(library);
-      try {
-        CompilationUnitElement element =
-            libraryContext.computeUnitElement(library.source, file.source);
-        String signature = library.transitiveSignature;
-        return new UnitElementResult(
-            currentSession, path, file.uri, signature, element);
-      } finally {
-        libraryContext.dispose();
-      }
+    LibraryContext libraryContext = await _createLibraryContext(library);
+    try {
+      CompilationUnitElement element =
+          libraryContext.computeUnitElement(library.source, file.source);
+      String signature = library.transitiveSignature;
+      return new UnitElementResult(
+          currentSession, path, file.uri, signature, element);
+    } finally {
+      libraryContext.dispose();
     }
   }
 
@@ -1406,38 +1345,6 @@
     _fileTracker = new FileTracker(_logger, _fsState, _changeHook);
   }
 
-  Future<KernelContext> _createKernelContext(FileState library) async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
-    return await KernelContext.forSingleLibrary(
-        library,
-        _logger,
-        _analysisOptions,
-        declaredVariables,
-        _sourceFactory,
-        fsState,
-        _frontEndCompiler);
-  }
-
-  /**
-   * Creates a new [FrontEndCompiler] in [_frontEndCompiler].
-   *
-   * This is used both on initial construction and whenever the configuration
-   * changes.
-   */
-  void _createKernelDriver() {
-    if (_useCFE) {
-      _frontEndCompiler = new FrontEndCompiler(
-          _logger,
-          _byteStore,
-          analysisOptions,
-          _kernelPlatformFolder,
-          sourceFactory,
-          fsState,
-          _resourceProvider.pathContext);
-    }
-  }
-
   /**
    * Return the context in which the [library] should be analyzed.
    */
@@ -1485,16 +1392,6 @@
   }
 
   /**
-   * Invalidate the file with the given [path] in the [_frontEndCompiler].
-   */
-  void _frontEndCompilerInvalidate(String path) {
-    if (_frontEndCompiler != null) {
-      var fileUri = _resourceProvider.pathContext.toUri(path);
-      _frontEndCompiler.invalidate(fileUri);
-    }
-  }
-
-  /**
    * Load the [AnalysisResult] for the given [file] from the [bytes]. Set
    * optional [content] and [resolvedUnit].
    */
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index d7cab63..b048577 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -630,7 +630,6 @@
     AnalysisOptions analysisOptions = _fsState._analysisOptions;
     CharSequenceReader reader = new CharSequenceReader(content);
     Scanner scanner = new Scanner(source, reader, errorListener);
-    scanner.scanGenericMethodComments = true;
     Token token = PerformanceStatistics.scan.makeCurrentWhile(() {
       return scanner.tokenize();
     });
@@ -639,7 +638,6 @@
     bool useFasta = analysisOptions.useFastaParser;
     Parser parser = new Parser(source, errorListener, useFasta: useFasta);
     parser.enableOptionalNewAndConst = true;
-    parser.parseGenericMethodComments = true;
     CompilationUnit unit = parser.parseCompilationUnit(token);
     unit.lineInfo = lineInfo;
 
@@ -896,7 +894,7 @@
       Source fileSource = resource.createSource();
       Uri uri = _sourceFactory.restoreUri(fileSource);
       Source uriSource = _sourceFactory.forUri2(uri);
-      flag = uriSource.fullName == path;
+      flag = uriSource?.fullName == path;
       _hasUriForPath[path] = flag;
     }
     return flag;
diff --git a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart b/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
deleted file mode 100644
index 2d056ef..0000000
--- a/pkg/analyzer/lib/src/dart/analysis/frontend_resolution.dart
+++ /dev/null
@@ -1,602 +0,0 @@
-import 'dart:async';
-import 'dart:convert';
-
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/kernel_metadata.dart';
-import 'package:analyzer/src/fasta/resolution_storer.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:front_end/src/api_prototype/byte_store.dart';
-import 'package:front_end/src/api_prototype/compilation_message.dart';
-import 'package:front_end/src/api_prototype/compiler_options.dart';
-import 'package:front_end/src/api_prototype/file_system.dart' as front_end;
-import 'package:front_end/src/base/libraries_specification.dart';
-import 'package:front_end/src/base/performance_logger.dart';
-import 'package:front_end/src/base/processed_options.dart';
-import 'package:front_end/src/fasta/builder/builder.dart';
-import 'package:front_end/src/fasta/compiler_context.dart';
-import 'package:front_end/src/fasta/dill/dill_target.dart';
-import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
-import 'package:front_end/src/fasta/kernel/kernel_target.dart';
-import 'package:front_end/src/fasta/kernel/metadata_collector.dart';
-import 'package:front_end/src/fasta/source/diet_listener.dart';
-import 'package:front_end/src/fasta/source/outline_listener.dart';
-import 'package:front_end/src/fasta/source/source_library_builder.dart';
-import 'package:front_end/src/fasta/source/source_loader.dart';
-import 'package:front_end/src/fasta/source/stack_listener.dart';
-import 'package:front_end/src/fasta/target_implementation.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_engine.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
-import 'package:front_end/src/fasta/uri_translator.dart';
-import 'package:front_end/src/fasta/uri_translator_impl.dart';
-import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/core_types.dart';
-import 'package:kernel/kernel.dart';
-import 'package:kernel/target/targets.dart';
-import 'package:package_config/packages.dart';
-import 'package:package_config/src/packages_impl.dart';
-import 'package:path/path.dart' as pathos;
-
-/// Resolution information in a single function body.
-class CollectedResolution {
-  final Map<int, ResolutionData> kernelData = {};
-
-  final Map<TypeParameter, int> typeVariableDeclarations =
-      new Map<TypeParameter, int>.identity();
-}
-
-/// The compilation result for a single file.
-class FileCompilationResult {
-  /// The file system URI of the file.
-  final Uri fileUri;
-
-  /// The collected resolution for the file.
-  final CollectedResolution resolution;
-
-  /// The list of all FrontEnd errors in the file.
-  final List<CompilationMessage> errors;
-
-  FileCompilationResult(this.fileUri, this.resolution, this.errors);
-}
-
-/// The wrapper around FrontEnd compiler that can be used incrementally.
-///
-/// When the client needs the kernel, resolution information, and errors for
-/// a library, it should call [compile].  The compiler will compile the library
-/// and the transitive closure of its dependencies.  The results are cached,
-/// so the next invocation for a dependency will be served from the cache.
-///
-/// If a file is changed, [invalidate] should be invoked.  This will invalidate
-/// the file, its library, and the transitive closure of dependencies.  So, the
-/// next invocation of [compile] will recompile libraries required for the
-/// requested library.
-class FrontEndCompiler {
-  static const MSG_PENDING_COMPILE =
-      'A compile() invocation is still executing.';
-
-  /// Options used by the kernel compiler.
-  final CompilerOptions _compilerOptions;
-
-  /// The logger to report compilation progress.
-  final PerformanceLog _logger;
-
-  /// The [FileSystem] to access file during compilation.
-  final front_end.FileSystem _fileSystem;
-
-  /// The object that knows how to resolve "package:" and "dart:" URIs.
-  final UriTranslator uriTranslator;
-
-  /// The listener / recorder for compilation errors produced by the compiler.
-  final _ErrorListener _errorListener;
-
-  /// Each key is the absolute URI of a library.
-  /// Each value is the compilation result of the key library.
-  final Map<Uri, LibraryCompilationResult> _results = {};
-
-  /// Index of metadata in [_component].
-  final AnalyzerMetadataIndex _metadataIndex = new AnalyzerMetadataIndex();
-
-  /// The [Component] with currently valid libraries. When a file is invalidated,
-  /// we remove the file, its library, and everything affected from [_component].
-  Component _component = new Component();
-
-  /// The [DillTarget] that is filled with [_component] libraries before
-  /// compilation of a new library.
-  DillTarget _dillTarget;
-
-  /// Each key is the file system URI of a library.
-  /// Each value is the libraries that directly depend on the key library.
-  final Map<Uri, Set<Uri>> _directLibraryDependencies = {};
-
-  /// Each key is the file system URI of a library.
-  /// Each value is the [Library] that is still in the [_component].
-  final Map<Uri, Library> _uriToLibrary = {};
-
-  /// Each key is the file system URI of a part.
-  /// Each value is the file system URI of the library that sources the part.
-  final Map<Uri, Uri> _partToLibrary = {};
-
-  /// Whether [compile] is executing.
-  bool _isCompileExecuting = false;
-
-  factory FrontEndCompiler(
-      PerformanceLog logger,
-      ByteStore byteStore,
-      AnalysisOptions analysisOptions,
-      Folder sdkFolder,
-      SourceFactory sourceFactory,
-      FileSystemState fsState,
-      pathos.Context pathContext) {
-    // Prepare SDK libraries.
-    Map<String, LibraryInfo> dartLibraries = {};
-    {
-      DartSdk dartSdk = sourceFactory.dartSdk;
-      dartSdk.sdkLibraries.forEach((sdkLibrary) {
-        var dartUri = sdkLibrary.shortName;
-        var name = Uri.parse(dartUri).path;
-        var path = dartSdk.mapDartUri(dartUri).fullName;
-        var fileUri = pathContext.toUri(path);
-        dartLibraries[name] = new LibraryInfo(name, fileUri, const []);
-      });
-    }
-
-    // Prepare packages.
-    Packages packages = Packages.noPackages;
-    {
-      Map<String, List<Folder>> packageMap = sourceFactory.packageMap;
-      if (packageMap != null) {
-        var map = <String, Uri>{};
-        for (var name in packageMap.keys) {
-          map[name] = packageMap[name].first.toUri();
-        }
-        packages = new MapPackages(map);
-      }
-    }
-
-    // TODO(scheglov) Should we restore this?
-//    // Try to find the SDK outline.
-//    // It is not used for unit testing, we compile SDK sources.
-//    // But for running shared tests we need the patched SDK.
-//    List<int> sdkOutlineBytes;
-//    if (sdkFolder != null) {
-//      try {
-//        sdkOutlineBytes = sdkFolder
-//            .getChildAssumingFile('vm_platform_strong.dill')
-//            .readAsBytesSync();
-//      } catch (_) {}
-//    }
-
-    var uriTranslator = new UriTranslatorImpl(
-        new TargetLibrariesSpecification('none', dartLibraries), packages);
-    var errorListener = new _ErrorListener();
-    var compilerOptions = new CompilerOptions()
-      ..target = new _AnalyzerTarget(new TargetFlags(strongMode: true),
-          enableSuperMixins: analysisOptions.enableSuperMixins)
-      ..reportMessages = false
-      ..logger = logger
-      ..fileSystem = new _FileSystemAdaptor(fsState, pathContext)
-      ..byteStore = byteStore
-      ..onError = errorListener.onError;
-
-    return new FrontEndCompiler._(
-        compilerOptions, uriTranslator, errorListener);
-  }
-
-  FrontEndCompiler._(
-      this._compilerOptions, this.uriTranslator, this._errorListener)
-      : _logger = _compilerOptions.logger,
-        _fileSystem = _compilerOptions.fileSystem;
-
-  /// Compile the library with the given absolute [uri], and everything it
-  /// depends on. Return the result of the requested library compilation.
-  ///
-  /// If there is the cached result for the library (compiled directly, or as
-  /// a result of compilation of another library), it will be returned quickly.
-  ///
-  /// Throw [StateError] if another compilation is pending.
-  Future<LibraryCompilationResult> compile(Uri uri) {
-    if (_isCompileExecuting) {
-      throw new StateError(MSG_PENDING_COMPILE);
-    }
-    _isCompileExecuting = true;
-
-    {
-      LibraryCompilationResult result = _results[uri];
-      if (result != null) {
-        _isCompileExecuting = false;
-        return new Future.value(result);
-      }
-    }
-
-    return _runWithFrontEndContext('Compile', uri, (processedOptions) async {
-      try {
-        // Initialize the dill target once.
-        if (_dillTarget == null) {
-          _dillTarget = new DillTarget(
-            processedOptions.ticker,
-            uriTranslator,
-            processedOptions.target,
-          );
-        }
-
-        // Append new libraries from the current component.
-        await _logger.runAsync('Load dill libraries', () async {
-          _dillTarget.loader.appendLibraries(_component,
-              filter: (uri) => !_dillTarget.loader.builders.containsKey(uri));
-          await _dillTarget.buildOutlines();
-        });
-
-        // Create the target to compile the library.
-        var kernelTarget = new _AnalyzerKernelTarget(_fileSystem, _dillTarget,
-            uriTranslator, new AnalyzerMetadataCollector());
-        kernelTarget.read(uri);
-
-        // Compile the entry point into the new component.
-        _component = await _logger.runAsync('Compile', () async {
-          await kernelTarget.buildOutlines(nameRoot: _component.root);
-          Component newComponent = await kernelTarget.buildComponent();
-          if (newComponent != null) {
-            _metadataIndex.replaceComponent(newComponent);
-            return newComponent;
-          } else {
-            return _component;
-          }
-        });
-
-        _ShadowCleaner cleaner = new _ShadowCleaner();
-        for (var library in _component.libraries) {
-          if (!_results.containsKey(library.importUri)) {
-            _component.computeCanonicalNamesForLibrary(library);
-            library.accept(cleaner);
-          }
-        }
-
-        _logger.run('Compute dependencies', _computeDependencies);
-
-        // Add results for new libraries.
-        for (var library in _component.libraries) {
-          if (!_results.containsKey(library.importUri)) {
-            Map<Uri, CollectedResolution> libraryResolutions =
-                kernelTarget.resolutions[library.fileUri];
-
-            var files = <Uri, FileCompilationResult>{};
-
-            void addFileResult(Uri fileUri) {
-              if (libraryResolutions != null) {
-                files[fileUri] = new FileCompilationResult(
-                    fileUri,
-                    libraryResolutions[fileUri] ?? new CollectedResolution(),
-                    _errorListener.fileUriToErrors[fileUri] ?? []);
-              }
-            }
-
-            addFileResult(library.fileUri);
-            for (var part in library.parts) {
-              addFileResult(library.fileUri.resolve(part.partUri));
-            }
-
-            var libraryResult = new LibraryCompilationResult(
-                _component, library.importUri, library, files);
-            _results[library.importUri] = libraryResult;
-          }
-        }
-        _errorListener.fileUriToErrors.clear();
-
-        // The result must have been computed.
-        return _results[uri];
-      } finally {
-        _isCompileExecuting = false;
-      }
-    });
-  }
-
-  /// Invalidate the file with the given file [uri], its library and the
-  /// transitive the of libraries that use it.  The next time when any of these
-  /// libraries is be requested in [compile], it will be recompiled again.
-  void invalidate(Uri uri) {
-    void invalidateLibrary(Uri libraryUri) {
-      Library library = _uriToLibrary.remove(libraryUri);
-      if (library == null) return;
-
-      // Invalidate the library.
-      _metadataIndex.invalidate(library);
-      _component.libraries.remove(library);
-      _component.root.removeChild('${library.importUri}');
-      _component.uriToSource.remove(libraryUri);
-      _dillTarget.loader.builders.remove(library.importUri);
-      _dillTarget.loader.libraries.remove(library);
-      _dillTarget.loader.uriToSource.remove(libraryUri);
-      _results.remove(library.importUri);
-
-      // Recursively invalidate dependencies.
-      Set<Uri> directDependencies =
-          _directLibraryDependencies.remove(libraryUri);
-      directDependencies?.forEach(invalidateLibrary);
-    }
-
-    Uri libraryUri = _partToLibrary.remove(uri) ?? uri;
-    invalidateLibrary(libraryUri);
-  }
-
-  /// Recompute [_directLibraryDependencies] for the current [_component].
-  void _computeDependencies() {
-    _directLibraryDependencies.clear();
-    _uriToLibrary.clear();
-    _partToLibrary.clear();
-
-    void processLibrary(Library library) {
-      if (_uriToLibrary.containsKey(library.fileUri)) {
-        return;
-      }
-      _uriToLibrary[library.fileUri] = library;
-
-      // Remember libraries for parts.
-      for (var part in library.parts) {
-        _partToLibrary[library.fileUri.resolve(part.partUri)] = library.fileUri;
-      }
-
-      // Record reverse dependencies.
-      for (LibraryDependency dependency in library.dependencies) {
-        Library targetLibrary = dependency.targetLibrary;
-        _directLibraryDependencies
-            .putIfAbsent(targetLibrary.fileUri, () => new Set<Uri>())
-            .add(library.fileUri);
-        processLibrary(targetLibrary);
-      }
-    }
-
-    // Record dependencies for every library in the component.
-    _component.libraries.forEach(processLibrary);
-  }
-
-  Future<T> _runWithFrontEndContext<T>(
-      String msg, Uri input, Future<T> Function(ProcessedOptions) f) async {
-    var processedOptions = new ProcessedOptions(_compilerOptions, [input]);
-    return await CompilerContext.runWithOptions(processedOptions, (context) {
-      context.disableColors();
-      return _logger.runAsync(msg, () => f(processedOptions));
-    });
-  }
-}
-
-/// The compilation result for a single library.
-class LibraryCompilationResult {
-  /// The full current [Component]. It has all libraries that are required by
-  /// this library, but might also have other libraries, that are not required.
-  ///
-  /// The object is mutable, and is changed when files are invalidated.
-  final Component component;
-
-  /// The absolute URI of the library.
-  final Uri uri;
-
-  /// The kernel [Library] of the library.
-  final Library kernel;
-
-  /// The map from file system URIs to results for the defining unit and parts.
-  final Map<Uri, FileCompilationResult> files;
-
-  LibraryCompilationResult(this.component, this.uri, this.kernel, this.files);
-}
-
-/// The [DietListener] that record resolution information.
-class _AnalyzerDietListener extends DietListener {
-  final Map<Uri, ResolutionStorer> _storerMap = {};
-
-  _AnalyzerDietListener(
-      SourceLibraryBuilder library,
-      ClassHierarchy hierarchy,
-      CoreTypes coreTypes,
-      TypeInferenceEngine typeInferenceEngine,
-      Map<Uri, CollectedResolution> resolutions)
-      : super(library, hierarchy, coreTypes, typeInferenceEngine) {
-    for (var fileUri in resolutions.keys) {
-      var resolution = resolutions[fileUri];
-      _storerMap[fileUri] = new ResolutionStorer(
-          resolution.kernelData, resolution.typeVariableDeclarations);
-    }
-  }
-
-  StackListener createListener(
-      ModifierBuilder builder, Scope memberScope, bool isInstanceMember,
-      [Scope formalParameterScope,
-      TypeInferenceListener<int, Node, int> listener]) {
-    ResolutionStorer storer = _storerMap[builder.fileUri];
-    return super.createListener(
-        builder, memberScope, isInstanceMember, formalParameterScope, storer);
-  }
-}
-
-/// The [KernelTarget] that records resolution information.
-class _AnalyzerKernelTarget extends KernelTarget {
-  final Map<Uri, Map<Uri, CollectedResolution>> resolutions = {};
-
-  _AnalyzerKernelTarget(front_end.FileSystem fileSystem, DillTarget dillTarget,
-      UriTranslator uriTranslator, MetadataCollector metadataCollector)
-      : super(fileSystem, true, dillTarget, uriTranslator,
-            metadataCollector: metadataCollector);
-
-  @override
-  _AnalyzerSourceLoader<Library> createLoader() {
-    return new _AnalyzerSourceLoader<Library>(fileSystem, this, resolutions);
-  }
-
-  @override
-  Declaration getAbstractClassInstantiationError(loader) {
-    return loader.coreLibrary.getConstructor('Exception');
-  }
-
-  @override
-  Declaration getDuplicatedFieldInitializerError(loader) {
-    return loader.coreLibrary.getConstructor('Exception');
-  }
-}
-
-/// [OutlineListener] that records resolution.
-class _AnalyzerOutlineListener implements OutlineListener {
-  final Uri fileUri;
-  final CollectedResolution resolution;
-
-  _AnalyzerOutlineListener(this.fileUri, this.resolution);
-
-  @override
-  void store(int offset, bool isSynthetic,
-      {int importIndex,
-      bool isNamespaceCombinatorReference = false,
-      Node reference,
-      DartType type}) {
-//    if (fileUri.toString().endsWith('test.dart')) {
-//      print('[store][offset: $offset][reference: $reference][type: $type]');
-//    }
-    var encodedLocation = 2 * offset + (isSynthetic ? 1 : 0);
-    resolution.kernelData[encodedLocation] = new ResolutionData(
-        isNamespaceCombinatorReference: isNamespaceCombinatorReference,
-        isOutline: true,
-        prefixInfo: importIndex,
-        reference: reference,
-        inferredType: type);
-  }
-}
-
-/// The [SourceLoader] that record resolution information.
-class _AnalyzerSourceLoader<L> extends SourceLoader<L> {
-  final Map<Uri, CollectedResolution> _fileResolutions = {};
-  final Map<Uri, Map<Uri, CollectedResolution>> _resolutions;
-
-  _AnalyzerSourceLoader(front_end.FileSystem fileSystem,
-      TargetImplementation target, this._resolutions)
-      : super(fileSystem, true, target);
-
-  @override
-  _AnalyzerDietListener createDietListener(SourceLibraryBuilder library) {
-    var libraryResolutions = <Uri, CollectedResolution>{};
-    libraryResolutions[library.fileUri] = _fileResolution(library.fileUri);
-    for (var part in library.parts) {
-      libraryResolutions[part.fileUri] = _fileResolution(part.fileUri);
-    }
-    _resolutions[library.fileUri] = libraryResolutions;
-
-    return new _AnalyzerDietListener(
-        library, hierarchy, coreTypes, typeInferenceEngine, libraryResolutions);
-  }
-
-  @override
-  OutlineListener createOutlineListener(Uri fileUri) {
-    var resolution = _fileResolution(fileUri);
-    return new _AnalyzerOutlineListener(fileUri, resolution);
-  }
-
-  @override
-  Severity rewriteSeverity(severity, message, fileUri) => severity;
-
-  CollectedResolution _fileResolution(Uri fileUri) {
-    CollectedResolution resolution = _fileResolutions[fileUri];
-    if (resolution == null) {
-      resolution = new CollectedResolution();
-      _fileResolutions[fileUri] = resolution;
-    }
-    return resolution;
-  }
-}
-
-/**
- * [Target] for static analysis, with all features enabled.
- */
-class _AnalyzerTarget extends NoneTarget {
-  @override
-  bool enableSuperMixins;
-
-  _AnalyzerTarget(TargetFlags flags, {this.enableSuperMixins = false})
-      : super(flags);
-
-  @override
-  List<String> get extraRequiredLibraries => const <String>['dart:_internal'];
-
-  @override
-  bool enableNative(Uri uri) => true;
-}
-
-/// The listener for [CompilationMessage]s from FrontEnd.
-class _ErrorListener {
-  final Map<Uri, List<CompilationMessage>> fileUriToErrors = {};
-
-  void onError(CompilationMessage error) {
-    var fileUri = error.span.sourceUrl;
-    fileUriToErrors.putIfAbsent(fileUri, () => []).add(error);
-  }
-}
-
-/// Adapter of [FileSystemState] to [front_end.FileSystem].
-class _FileSystemAdaptor implements front_end.FileSystem {
-  final FileSystemState fsState;
-  final pathos.Context pathContext;
-
-  _FileSystemAdaptor(this.fsState, this.pathContext);
-
-  @override
-  front_end.FileSystemEntity entityForUri(Uri uri) {
-    if (uri.isScheme('file')) {
-      var path = pathContext.fromUri(uri);
-      var file = fsState.getFileForPath(path);
-      return new _FileSystemEntityAdaptor(uri, file);
-    } else {
-      throw new front_end.FileSystemException(
-          uri, 'Only file:// URIs are supported, but $uri is given.');
-    }
-  }
-}
-
-/// Adapter of [FileState] to [front_end.FileSystemEntity].
-class _FileSystemEntityAdaptor implements front_end.FileSystemEntity {
-  final Uri uri;
-  final FileState file;
-
-  _FileSystemEntityAdaptor(this.uri, this.file);
-
-  @override
-  Future<bool> exists() async {
-    return file.exists;
-  }
-
-  @override
-  Future<List<int>> readAsBytes() async {
-    _throwIfDoesNotExist();
-    // TODO(scheglov) Optimize.
-    return utf8.encode(file.content);
-  }
-
-  @override
-  Future<String> readAsString() async {
-    _throwIfDoesNotExist();
-    return file.content;
-  }
-
-  void _throwIfDoesNotExist() {
-    if (!file.exists) {
-      throw new front_end.FileSystemException(uri, 'File not found');
-    }
-  }
-}
-
-/// Visitor that removes from shadow AST information that is not needed once
-/// resolution is done, and causes memory leaks during incremental compilation.
-class _ShadowCleaner extends RecursiveVisitor {
-  @override
-  visitField(Field node) {
-    if (node is ShadowField) {
-      node.inferenceNode = null;
-      node.typeInferrer = null;
-    }
-    return super.visitField(node);
-  }
-
-  @override
-  visitProcedure(Procedure node) {
-    if (node is ShadowProcedure) {
-      node.inferenceNode = null;
-    }
-    return super.visitProcedure(node);
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 13153c0..1afbb1d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -627,6 +627,13 @@
   }
 
   @override
+  visitOnClause(OnClause node) {
+    for (TypeName typeName in node.superclassConstraints) {
+      recordSuperType(typeName, IndexRelationKind.IS_IMPLEMENTED_BY);
+    }
+  }
+
+  @override
   visitPartDirective(PartDirective node) {
     CompilationUnitElement element = node.element;
     if (element?.source != null) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart b/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
deleted file mode 100644
index fdf172c..0000000
--- a/pkg/analyzer/lib/src/dart/analysis/kernel_context.dart
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-
-import 'package:analyzer/dart/analysis/declared_variables.dart';
-import 'package:analyzer/dart/element/element.dart' show CompilationUnitElement;
-import 'package:analyzer/src/context/context.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/frontend_resolution.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/handle.dart';
-import 'package:analyzer/src/generated/engine.dart'
-    show AnalysisContext, AnalysisEngine, AnalysisOptions;
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/kernel/resynthesize.dart';
-import 'package:front_end/src/base/performance_logger.dart';
-import 'package:front_end/src/base/resolve_relative_uri.dart';
-import 'package:kernel/ast.dart' as kernel;
-import 'package:kernel/text/ast_to_text.dart' as kernel;
-
-/**
- * Support for resynthesizing element model from Kernel.
- */
-class KernelContext {
-  /**
-   * The [AnalysisContext] which is used to do the analysis.
-   */
-  final AnalysisContext analysisContext;
-
-  /**
-   * The resynthesizer that resynthesizes elements in [analysisContext].
-   */
-  final ElementResynthesizer resynthesizer;
-
-  KernelContext._(this.analysisContext, this.resynthesizer);
-
-  /**
-   * Computes a [CompilationUnitElement] for the given library/unit pair.
-   */
-  CompilationUnitElement computeUnitElement(
-      Source librarySource, Source unitSource) {
-    String libraryUri = librarySource.uri.toString();
-    String unitUri = unitSource.uri.toString();
-    return resynthesizer.getElement(
-        new ElementLocationImpl.con3(<String>[libraryUri, unitUri]));
-  }
-
-  /**
-   * Cleans up any persistent resources used by this [KernelContext].
-   *
-   * Should be called once the [KernelContext] is no longer needed.
-   */
-  void dispose() {
-    analysisContext.dispose();
-  }
-
-  /**
-   * Return `true` if the given [uri] is known to be a library.
-   */
-  bool isLibraryUri(Uri uri) {
-    // TODO(scheglov) implement
-    return true;
-//    String uriStr = uri.toString();
-//    return store.unlinkedMap[uriStr]?.isPartOf == false;
-  }
-
-  static KernelResynthesizer buildResynthesizer(
-      FileSystemState fsState,
-      LibraryCompilationResult libraryResult,
-      AnalysisContextImpl analysisContext) {
-    // Remember Kernel libraries produced by the compiler.
-    // There might be more libraries than we actually need.
-    // This is probably OK, because we consume them lazily.
-    var fileInfoMap = <String, KernelFileInfo>{};
-
-    void addFileInfo(FileState file, {kernel.Library library}) {
-      String uriStr = file.uriStr;
-      if (!fileInfoMap.containsKey(uriStr)) {
-        fileInfoMap[file.uriStr] = new KernelFileInfo(
-            file?.exists ?? false,
-            file?.content?.length ?? 0,
-            file?.lineInfo ?? new LineInfo([0]),
-            library);
-      }
-    }
-
-    bool coreFound = false;
-    for (var library in libraryResult.component.libraries) {
-      String uriStr = library.importUri.toString();
-      if (uriStr == 'dart:core') {
-        coreFound = true;
-      }
-      FileState file = fsState.getFileForUri(library.importUri);
-      addFileInfo(file, library: library);
-      for (var part in library.parts) {
-        var relativePartUri = Uri.parse(part.partUri);
-        var partUri = resolveRelativeUri(library.importUri, relativePartUri);
-        FileState partFile = fsState.getFileForUri(partUri);
-        addFileInfo(partFile);
-      }
-    }
-    if (!coreFound) {
-      throw new StateError('No dart:core library found (dartbug.com/33686)');
-    }
-
-    // Create the resynthesizer bound to the analysis context.
-    var resynthesizer = new KernelResynthesizer(analysisContext, fileInfoMap);
-    return resynthesizer;
-  }
-
-  /**
-   * Create a [KernelContext] which is prepared to analyze [targetLibrary].
-   */
-  static Future<KernelContext> forSingleLibrary(
-      FileState targetLibrary,
-      PerformanceLog logger,
-      AnalysisOptions analysisOptions,
-      DeclaredVariables declaredVariables,
-      SourceFactory sourceFactory,
-      FileSystemState fsState,
-      FrontEndCompiler compiler) async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
-    return logger.runAsync('Create kernel context', () async {
-      Uri targetUri = targetLibrary.uri;
-      LibraryCompilationResult libraryResult =
-          await compiler.compile(targetUri);
-
-      // Create and configure a new context.
-      AnalysisContextImpl analysisContext =
-          AnalysisEngine.instance.createAnalysisContext();
-      analysisContext.useSdkCachePartition = false;
-      analysisContext.analysisOptions = analysisOptions;
-      analysisContext.declaredVariables = declaredVariables;
-      analysisContext.sourceFactory = sourceFactory.clone();
-      analysisContext.contentCache = new _ContentCacheWrapper(fsState);
-
-      KernelResynthesizer resynthesizer =
-          buildResynthesizer(fsState, libraryResult, analysisContext);
-      return new KernelContext._(analysisContext, resynthesizer);
-    });
-  }
-}
-
-/**
- * [ContentCache] wrapper around [FileContentOverlay].
- */
-class _ContentCacheWrapper implements ContentCache {
-  final FileSystemState fsState;
-
-  _ContentCacheWrapper(this.fsState);
-
-  @override
-  void accept(ContentCacheVisitor visitor) {
-    throw new UnimplementedError();
-  }
-
-  @override
-  String getContents(Source source) {
-    return _getFileForSource(source).content;
-  }
-
-  @override
-  bool getExists(Source source) {
-    return _getFileForSource(source).exists;
-  }
-
-  @override
-  int getModificationStamp(Source source) {
-    return _getFileForSource(source).exists ? 0 : -1;
-  }
-
-  @override
-  String setContents(Source source, String contents) {
-    throw new UnimplementedError();
-  }
-
-  FileState _getFileForSource(Source source) {
-    String path = source.fullName;
-    return fsState.getFileForPath(path);
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/kernel_metadata.dart b/pkg/analyzer/lib/src/dart/analysis/kernel_metadata.dart
deleted file mode 100644
index 59be9f0..0000000
--- a/pkg/analyzer/lib/src/dart/analysis/kernel_metadata.dart
+++ /dev/null
@@ -1,225 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:convert';
-
-import 'package:front_end/src/fasta/builder/qualified_name.dart';
-import 'package:front_end/src/fasta/kernel/metadata_collector.dart';
-import 'package:front_end/src/incremental/kernel_driver.dart';
-import 'package:kernel/kernel.dart' as kernel;
-
-/// Additional information that Analyzer needs for nodes.
-class AnalyzerMetadata {
-  /// The offset of the beginning of the node code.
-  int codeOffset = -1;
-
-  /// The length of the node code.
-  int codeLength = 0;
-
-  /// If the node is a named constructor, the offset of the name.
-  /// Otherwise `-1`.
-  int constructorNameOffset = -1;
-
-  /// Optional documentation comment, may be `null`.
-  String documentationComment;
-
-  /// If the node is an import library dependency, the offset of the prefix.
-  /// Otherwise `-1`.
-  int importPrefixOffset = -1;
-
-  /// Return the [AnalyzerMetadata] for the [node], or `null` absent.
-  static AnalyzerMetadata forNode(kernel.TreeNode node) {
-    var repository =
-        node.enclosingComponent.metadata[AnalyzerMetadataRepository.TAG];
-    if (repository != null) {
-      return repository.mapping[node];
-    }
-    return null;
-  }
-}
-
-/// Analyzer specific implementation of [MetadataCollector].
-class AnalyzerMetadataCollector implements MetadataCollector {
-  @override
-  final AnalyzerMetadataRepository repository =
-      new AnalyzerMetadataRepository();
-
-  @override
-  void setCodeStartEnd(kernel.TreeNode node, int start, int end) {
-    var metadata = repository._forWriting(node);
-    metadata.codeOffset = start;
-    metadata.codeLength = end - start;
-  }
-
-  @override
-  void setConstructorNameOffset(kernel.Member node, Object name) {
-    if (name is QualifiedName) {
-      var metadata = repository._forWriting(node);
-      metadata.constructorNameOffset = name.charOffset;
-    }
-  }
-
-  @override
-  void setDocumentationComment(kernel.NamedNode node, String comment) {
-    var metadata = repository._forWriting(node);
-    metadata.documentationComment = comment;
-  }
-
-  @override
-  void setImportPrefixOffset(kernel.LibraryDependency node, int offset) {
-    var metadata = repository._forWriting(node);
-    metadata.importPrefixOffset = offset;
-  }
-}
-
-/// Factory for creating Analyzer specific sink and repository.
-class AnalyzerMetadataFactory implements MetadataFactory {
-  @override
-  int get version => 1;
-
-  @override
-  MetadataCollector newCollector() {
-    return new AnalyzerMetadataCollector();
-  }
-
-  @override
-  kernel.MetadataRepository newRepositoryForReading() {
-    return new AnalyzerMetadataRepository();
-  }
-}
-
-/// Index of metadata.
-class AnalyzerMetadataIndex {
-  final Map<kernel.Library, List<kernel.TreeNode>> libraryNodes = {};
-  AnalyzerMetadataRepository repository;
-
-  /// The [library] was invalidated, flush its metadata.
-  void invalidate(kernel.Library library) {
-    var nodes = libraryNodes.remove(library);
-    nodes?.forEach(repository.mapping.remove);
-  }
-
-  /// A [newComponent] has been compiled, with new, and only new, metadata.
-  /// Merge the existing [repository] into the new one, and replace it.
-  void replaceComponent(kernel.Component newComponent) {
-    AnalyzerMetadataRepository newRepository =
-        newComponent.metadata[AnalyzerMetadataRepository.TAG];
-    if (newRepository != null) {
-      _indexNewMetadata(newRepository);
-      if (repository != null) {
-        // Copy the new (partial) metadata into the existing metadata repository
-        // and replace the reference to the partial data with the full data.
-        repository.mapping.addAll(newRepository.mapping);
-        newComponent.metadata[AnalyzerMetadataRepository.TAG] = repository;
-      } else {
-        repository = newRepository;
-      }
-    } else {
-      newComponent.metadata[AnalyzerMetadataRepository.TAG] = repository;
-    }
-  }
-
-  void _indexNewMetadata(AnalyzerMetadataRepository newRepository) {
-    for (var node in newRepository.mapping.keys) {
-      var library = _enclosingLibrary(node);
-      assert(library != null);
-
-      var nodes = libraryNodes[library];
-      if (nodes == null) {
-        nodes = <kernel.TreeNode>[];
-        libraryNodes[library] = nodes;
-      }
-
-      nodes.add(node);
-    }
-  }
-
-  static kernel.Library _enclosingLibrary(kernel.TreeNode node) {
-    for (; node != null; node = node.parent) {
-      if (node is kernel.Library) {
-        return node;
-      }
-    }
-    return null;
-  }
-}
-
-/// Analyzer specific implementation of [kernel.MetadataRepository].
-class AnalyzerMetadataRepository
-    implements kernel.MetadataRepository<AnalyzerMetadata> {
-  static const TAG = 'kernel.metadata.analyzer';
-
-  @override
-  final String tag = TAG;
-
-  @override
-  final Map<kernel.TreeNode, AnalyzerMetadata> mapping =
-      <kernel.TreeNode, AnalyzerMetadata>{};
-
-  @override
-  AnalyzerMetadata readFromBinary(
-      kernel.Node node, kernel.BinarySource source) {
-    return new AnalyzerMetadata()
-      ..codeOffset = _readOffset(source)
-      ..codeLength = _readLength(source)
-      ..constructorNameOffset = _readOffset(source)
-      ..documentationComment = _readOptionalString(source)
-      ..importPrefixOffset = _readOffset(source);
-  }
-
-  @override
-  void writeToBinary(
-      AnalyzerMetadata metadata, kernel.Node node, kernel.BinarySink sink) {
-    _writeOffset(sink, metadata.codeOffset);
-    _writeLength(sink, metadata.codeLength);
-    _writeOffset(sink, metadata.constructorNameOffset);
-    _writeOptionalString(sink, metadata.documentationComment);
-    _writeOffset(sink, metadata.importPrefixOffset);
-  }
-
-  /// Return the existing or new [AnalyzerMetadata] instance for the [node].
-  AnalyzerMetadata _forWriting(kernel.TreeNode node) {
-    return mapping[node] ??= new AnalyzerMetadata();
-  }
-
-  int _readLength(kernel.BinarySource source) {
-    return source.readUint32();
-  }
-
-  int _readOffset(kernel.BinarySource source) {
-    return source.readUint32() - 1;
-  }
-
-  String _readOptionalString(kernel.BinarySource source) {
-    int flag = source.readByte();
-    if (flag == 1) {
-      List<int> bytes = source.readByteList();
-      return utf8.decode(bytes);
-    } else {
-      return null;
-    }
-  }
-
-  /// The [length] value must be `>= 0`.
-  void _writeLength(kernel.BinarySink sink, int length) {
-    assert(length >= 0);
-    sink.writeUInt32(length);
-  }
-
-  /// The [offset] value must be `>= -1`.
-  void _writeOffset(kernel.BinarySink sink, int offset) {
-    assert(offset >= -1);
-    sink.writeUInt32(1 + offset);
-  }
-
-  void _writeOptionalString(kernel.BinarySink sink, String str) {
-    if (str != null) {
-      sink.writeByte(1);
-      List<int> bytes = utf8.encode(str);
-      sink.writeByteList(bytes);
-    } else {
-      sink.writeByte(0);
-    }
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index d5a934b..c2c7f2c 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -8,53 +8,39 @@
 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/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/context/context.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/frontend_resolution.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/constant/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/handle.dart';
-import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/error/pending_error.dart';
-import 'package:analyzer/src/fasta/error_converter.dart';
-import 'package:analyzer/src/fasta/resolution_applier.dart';
-import 'package:analyzer/src/fasta/resolution_storer.dart' as kernel;
 import 'package:analyzer/src/generated/declaration_resolver.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/error_verifier.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/kernel/resynthesize.dart';
 import 'package:analyzer/src/lint/linter.dart';
 import 'package:analyzer/src/lint/linter_visitor.dart';
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/task/dart.dart';
 import 'package:analyzer/src/task/strong/checker.dart';
-import 'package:front_end/src/base/performance_logger.dart';
 import 'package:front_end/src/dependency_walker.dart';
-import 'package:kernel/kernel.dart' as kernel;
-import 'package:kernel/type_algebra.dart' as kernel;
 
 /**
  * Analyzer of a single library.
  */
 class LibraryAnalyzer {
-  final PerformanceLog _logger;
   final AnalysisOptions _analysisOptions;
   final DeclaredVariables _declaredVariables;
   final SourceFactory _sourceFactory;
   final FileState _library;
 
-  final bool _useCFE;
-  final FrontEndCompiler _frontEndCompiler;
-
   final bool Function(Uri) _isLibraryUri;
   final AnalysisContextImpl _context;
   final ElementResynthesizer _resynthesizer;
@@ -73,19 +59,14 @@
   final List<ConstantEvaluationTarget> _constants = [];
 
   LibraryAnalyzer(
-      this._logger,
       this._analysisOptions,
       this._declaredVariables,
       this._sourceFactory,
       this._isLibraryUri,
       this._context,
       this._resynthesizer,
-      this._library,
-      {bool useCFE: false,
-      FrontEndCompiler frontEndCompiler})
-      : _typeProvider = _context.typeProvider,
-        _useCFE = useCFE,
-        _frontEndCompiler = frontEndCompiler;
+      this._library)
+      : _typeProvider = _context.typeProvider;
 
   /**
    * Compute analysis results for all units of the library.
@@ -94,13 +75,7 @@
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
     return PerformanceStatistics.analysis.makeCurrentWhileAsync(() async {
-      // TODO(brianwilkerson) Determine whether this await is necessary.
-      await null;
-      if (_useCFE) {
-        return await _analyze2();
-      } else {
-        return _analyze();
-      }
+      return _analyze();
     });
   }
 
@@ -180,105 +155,6 @@
     return results;
   }
 
-  Future<Map<FileState, UnitAnalysisResult>> _analyze2() async {
-    return await _logger.runAsync('Analyze', () async {
-      Map<FileState, CompilationUnit> units = {};
-
-      // Parse all files.
-      _logger.run('Parse units', () {
-        units[_library] = _parse(_library);
-        for (FileState part in _library.partedFiles) {
-          units[part] = _parse(part);
-        }
-      });
-
-      // Resolve URIs in directives to corresponding sources.
-      units.forEach((file, unit) {
-        _resolveUriBasedDirectives(file, unit);
-      });
-
-      try {
-        _libraryElement = _resynthesizer
-            .getElement(new ElementLocationImpl.con3([_library.uriStr]));
-
-        _resolveDirectives(units);
-
-        var libraryResult = await _logger.runAsync('Compile library', () {
-          return _frontEndCompiler.compile(_library.uri);
-        });
-
-        _logger.run('Apply resolution', () {
-          units.forEach((file, unit) {
-            var resolution = libraryResult.files[file.fileUri].resolution;
-
-            _resolveFile2(file, unit, resolution);
-            _computePendingMissingRequiredParameters(file, unit);
-
-            // Invalid part URIs can result in an element with a null source
-            if (unit.declaredElement.source != null) {
-              var reporter = new FastaErrorReporter(_getErrorReporter(file));
-              var fileResult = libraryResult.files[file.fileUri];
-              if (fileResult?.errors != null) {
-                for (var error in fileResult.errors) {
-                  reporter.reportCompilationMessage(error);
-                }
-              }
-            }
-          });
-        });
-
-        units.values.forEach(_findConstants);
-        _computeConstants();
-
-        units.forEach((file, unit) {
-          ErrorReporter errorReporter = _getErrorReporter(file);
-          _computeConstantErrors(errorReporter, unit);
-        });
-
-        if (_analysisOptions.hint) {
-          PerformanceStatistics.hints.makeCurrentWhile(() {
-            units.forEach((file, unit) {
-              {
-                var visitor =
-                    new GatherUsedLocalElementsVisitor(_libraryElement);
-                unit.accept(visitor);
-                _usedLocalElementsList.add(visitor.usedElements);
-              }
-              {
-                var visitor =
-                    new GatherUsedImportedElementsVisitor(_libraryElement);
-                unit.accept(visitor);
-                _usedImportedElementsList.add(visitor.usedElements);
-              }
-            });
-            units.forEach((file, unit) {
-              _computeHints(file, unit);
-            });
-          });
-        }
-
-        if (_analysisOptions.lint) {
-          PerformanceStatistics.lints.makeCurrentWhile(() {
-            units.forEach((file, unit) {
-              _computeLints(file, unit);
-            });
-          });
-        }
-      } finally {
-        _context.dispose();
-      }
-
-      // Return full results.
-      Map<FileState, UnitAnalysisResult> results = {};
-      units.forEach((file, unit) {
-        List<AnalysisError> errors = _getErrorListener(file).errors;
-        errors = _filterIgnoredErrors(file, errors);
-        results[file] = new UnitAnalysisResult(file, unit, errors);
-      });
-      return results;
-    });
-  }
-
   void _computeConstantErrors(
       ErrorReporter errorReporter, CompilationUnit unit) {
     ConstantVerifier constantVerifier = new ConstantVerifier(
@@ -536,8 +412,7 @@
    * Return a new parsed unresolved [CompilationUnit].
    */
   CompilationUnit _parse(FileState file) {
-    AnalysisErrorListener errorListener =
-        _useCFE ? AnalysisErrorListener.NULL_LISTENER : _getErrorListener(file);
+    AnalysisErrorListener errorListener = _getErrorListener(file);
     String content = file.content;
     CompilationUnit unit = file.parse(errorListener);
 
@@ -553,22 +428,11 @@
     definingCompilationUnit.element = _libraryElement.definingCompilationUnit;
 
     bool matchNodeElement(Directive node, Element element) {
-      if (_useCFE) {
-        return node.keyword.offset == element.nameOffset;
-      } else {
-        return node.offset == element.nameOffset;
-      }
+      return node.offset == element.nameOffset;
     }
 
     ErrorReporter libraryErrorReporter = _getErrorReporter(_library);
 
-    void reportErrorReportedByFrontEnd(
-        ErrorCode errorCode, AstNode node, List<Object> arguments) {
-      if (!_useCFE) {
-        libraryErrorReporter.reportErrorForNode(errorCode, node, arguments);
-      }
-    }
-
     LibraryIdentifier libraryNameNode = null;
     var seenPartSources = new Set<Source>();
     var directivesToResolve = <Directive>[];
@@ -624,7 +488,7 @@
         // Validate that the part source is unique in the library.
         //
         if (!seenPartSources.add(partSource)) {
-          reportErrorReportedByFrontEnd(
+          libraryErrorReporter.reportErrorForNode(
               CompileTimeErrorCode.DUPLICATE_PART, partUri, [partSource.uri]);
         }
 
@@ -636,16 +500,18 @@
           _NameOrSource nameOrSource = _getPartLibraryNameOrUri(
               partSource, partUnit, directivesToResolve);
           if (nameOrSource == null) {
-            reportErrorReportedByFrontEnd(CompileTimeErrorCode.PART_OF_NON_PART,
-                partUri, [partUri.toSource()]);
+            libraryErrorReporter.reportErrorForNode(
+                CompileTimeErrorCode.PART_OF_NON_PART,
+                partUri,
+                [partUri.toSource()]);
           } else {
             String name = nameOrSource.name;
             if (name != null) {
               if (libraryNameNode == null) {
-                reportErrorReportedByFrontEnd(
+                libraryErrorReporter.reportErrorForNode(
                     ResolverErrorCode.PART_OF_UNNAMED_LIBRARY, partUri, [name]);
               } else if (libraryNameNode.name != name) {
-                reportErrorReportedByFrontEnd(
+                libraryErrorReporter.reportErrorForNode(
                     StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
                     partUri,
                     [libraryNameNode.name, name]);
@@ -653,7 +519,7 @@
             } else {
               Source source = nameOrSource.source;
               if (source != _library.source) {
-                reportErrorReportedByFrontEnd(
+                libraryErrorReporter.reportErrorForNode(
                     StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
                     partUri,
                     [_library.uriStr, source.uri]);
@@ -728,143 +594,6 @@
         _libraryElement, source, _typeProvider, errorListener));
   }
 
-  void _resolveFile2(FileState file, CompilationUnitImpl unit,
-      CollectedResolution resolution) {
-    CompilationUnitElement unitElement = unit.declaredElement;
-    new DeclarationResolver(useCFE: true).resolve(unit, unitElement);
-
-    var applierContext = new _ResolutionApplierContext(_resynthesizer,
-        _typeProvider, _libraryElement, resolution, unit.localDeclarations);
-    var applier = applierContext.applier;
-
-    for (var directive in unit.directives) {
-      if (directive.metadata.isNotEmpty) {
-        applier.applyToAnnotations(directive);
-      }
-      if (directive is NamespaceDirective) {
-        directive.combinators.accept(applier);
-      }
-    }
-    for (var declaration in unit.declarations) {
-      if (declaration is ClassDeclaration) {
-        if (declaration.metadata.isNotEmpty) {
-          applier.applyToAnnotations(declaration);
-        }
-
-        var context = declaration.declaredElement as ClassElementImpl;
-        applierContext.setContext(context);
-        declaration.typeParameters?.accept(applier);
-        declaration.extendsClause?.accept(applier);
-        declaration.withClause?.accept(applier);
-        declaration.implementsClause?.accept(applier);
-
-        for (var member in declaration.members) {
-          if (member is ConstructorDeclaration) {
-            var context = member.declaredElement as ConstructorElementImpl;
-            applierContext.setContext(context);
-            ConstructorName redirectName = member.redirectedConstructor;
-            if (redirectName != null) {
-              var redirectedConstructor = context.redirectedConstructor;
-              redirectName.staticElement = redirectedConstructor;
-              // TODO(scheglov) Support for import prefix?
-              if (redirectedConstructor != null) {
-                DeclarationResolver.applyConstructorElement(
-                    _libraryElement,
-                    null,
-                    redirectedConstructor,
-                    redirectedConstructor.returnType,
-                    redirectName);
-              }
-              // TODO(scheglov) Add support for type parameterized redirects.
-              // Annotations are stored separately for each formal parameter.
-              for (var parameter in member.parameters.parameters) {
-                if (parameter.metadata.isNotEmpty) {
-                  parameter.metadata.accept(applier);
-                }
-              }
-            } else {
-              member.initializers.accept(applier);
-              member.parameters.accept(applier);
-              member.body.accept(applier);
-              applier.applyToAnnotations(member);
-            }
-          } else if (member is FieldDeclaration) {
-            VariableDeclarationList fieldList = member.fields;
-            List<VariableDeclaration> fields = fieldList.variables;
-            var element = fields[0].declaredElement;
-            var context = (element.initializer ?? element) as ElementImpl;
-            applierContext.setContext(context);
-            fieldList.type?.accept(applier);
-            for (var field in fields.reversed) {
-              field.initializer?.accept(applier);
-              if (element is ConstVariableElement) {
-                (element as ConstVariableElement).constantInitializer =
-                    field.initializer;
-              }
-            }
-            applier.applyToAnnotations(member);
-          } else if (member is MethodDeclaration) {
-            ExecutableElementImpl context = member.declaredElement;
-            applierContext.setContext(context);
-            member.typeParameters?.accept(applier);
-            member.returnType?.accept(applier);
-            member.parameters?.accept(applier);
-            member.body.accept(applier);
-            applier.applyToAnnotations(member);
-          } else {
-            throw new StateError('(${declaration.runtimeType}) $declaration');
-          }
-        }
-      } else if (declaration is ClassTypeAlias) {
-        applierContext.setContext(declaration.declaredElement);
-        declaration.typeParameters?.accept(applier);
-        declaration.superclass.accept(applier);
-        declaration.withClause?.accept(applier);
-        declaration.implementsClause?.accept(applier);
-      } else if (declaration is EnumDeclaration) {
-        // No bodies to resolve.
-      } else if (declaration is FunctionDeclaration) {
-        var context = declaration.declaredElement as ExecutableElementImpl;
-        applierContext.setContext(context);
-        declaration.returnType?.accept(applier);
-        declaration.functionExpression.typeParameters?.accept(applier);
-        declaration.functionExpression.parameters?.accept(applier);
-        declaration.functionExpression.body.accept(applier);
-        applier.applyToAnnotations(declaration);
-      } else if (declaration is FunctionTypeAlias) {
-        applierContext.setContext(declaration.declaredElement);
-        declaration.typeParameters?.accept(applier);
-        declaration.returnType?.accept(applier);
-      } else if (declaration is GenericTypeAlias) {
-        declaration.typeParameters?.accept(applier);
-        GenericFunctionType functionType = declaration.functionType;
-        if (functionType != null) {
-          applierContext.setContext(functionType.type.element);
-          functionType.typeParameters?.accept(applier);
-          functionType.returnType?.accept(applier);
-        }
-      } else if (declaration is TopLevelVariableDeclaration) {
-        VariableDeclarationList variableList = declaration.variables;
-        List<VariableDeclaration> variables = variableList.variables;
-        var element = variables[0].declaredElement;
-        var context = (element.initializer ?? element) as ElementImpl;
-        applierContext.setContext(context);
-        variableList.type?.accept(applier);
-        for (var variable in variables.reversed) {
-          variable.initializer?.accept(applier);
-          var element = variable.declaredElement;
-          if (element is ConstVariableElement) {
-            (element as ConstVariableElement).constantInitializer =
-                variable.initializer;
-          }
-        }
-        applier.applyToAnnotations(declaration);
-      } else {
-        throw new StateError('(${declaration.runtimeType}) $declaration');
-      }
-    }
-  }
-
   /**
    * Return the result of resolve the given [uriContent], reporting errors
    * against the [uriLiteral].
@@ -1045,174 +774,3 @@
 
   _NameOrSource(this.name, this.source);
 }
-
-/// Concrete implementation of [TypeContext].
-class _ResolutionApplierContext implements TypeContext {
-  final KernelResynthesizer resynthesizer;
-  final TypeProvider typeProvider;
-  final LibraryElement libraryElement;
-  final CollectedResolution resolution;
-  final Map<int, AstNode> localDeclarations;
-
-  @override
-  ClassElement enclosingClassElement;
-
-  List<ElementImpl> contextStack = [];
-  ElementImpl context;
-
-  ResolutionApplier applier;
-
-  _ResolutionApplierContext(this.resynthesizer, this.typeProvider,
-      this.libraryElement, this.resolution, this.localDeclarations) {
-    applier =
-        new ResolutionApplier(libraryElement, this, resolution.kernelData);
-  }
-
-  @override
-  DartType get stringType => typeProvider.stringType;
-
-  @override
-  DartType get typeType => typeProvider.typeType;
-
-  @override
-  void encloseVariable(ElementImpl element) {
-    context.encloseElement(element);
-  }
-
-  @override
-  void enterLocalFunction(FunctionTypedElementImpl element) {
-    context.encloseElement(element);
-
-    // The function is the new resolution context.
-    contextStack.add(context);
-    context = element;
-  }
-
-  @override
-  void exitLocalFunction(FunctionTypedElementImpl element) {
-    assert(identical(context, element));
-    context = contextStack.removeLast();
-  }
-
-  void setContext(ElementImpl context) {
-    this.context = context;
-    for (Element element = context;
-        element != null;
-        element = element.enclosingElement) {
-      if (element is ClassElement) {
-        enclosingClassElement = element;
-        break;
-      }
-    }
-  }
-
-  @override
-  Element translateDeclaration(int declarationOffset) {
-    if (declarationOffset == null) return null;
-    var declaration = localDeclarations[declarationOffset];
-    Element element;
-    if (declaration is VariableDeclaration) {
-      element = declaration.declaredElement;
-    } else if (declaration is FormalParameter) {
-      element = declaration.declaredElement;
-    } else if (declaration is DeclaredSimpleIdentifier) {
-      element = declaration.staticElement;
-    } else if (declaration is FunctionDeclaration) {
-      element = declaration.declaredElement;
-    } else if (declaration is TypeParameter) {
-      element = declaration.declaredElement;
-    } else {
-      throw new UnimplementedError('${declaration.runtimeType}');
-    }
-    assert(element != null);
-    return element;
-  }
-
-  @override
-  PrefixElement translatePrefixInfo(int importIndex) {
-    if (importIndex == null) return null;
-    return libraryElement.imports[importIndex].prefix;
-  }
-
-  @override
-  Element translateReference(kernel.Node referencedNode,
-      {bool isNamespaceCombinatorReference = false,
-      bool isTypeReference = false,
-      bool isWriteReference = false,
-      kernel.DartType inferredType,
-      kernel.DartType receiverType}) {
-    if (referencedNode == null) {
-      if (isTypeReference && inferredType is kernel.DynamicType) {
-        return typeProvider.dynamicType.element;
-      }
-      return null;
-    }
-    Element element;
-    if (referencedNode is kernel.NamedNode) {
-      element = resynthesizer
-          .getElementFromCanonicalName(referencedNode.canonicalName);
-    } else if (referencedNode is kernel.FunctionType) {
-      element = resynthesizer
-          .getElementFromCanonicalName(referencedNode.typedef.canonicalName);
-      assert(element != null);
-    } else if (referencedNode is kernel.InterfaceType) {
-      element = resynthesizer
-          .getElementFromCanonicalName(referencedNode.classNode.canonicalName);
-      assert(element != null);
-    } else if (referencedNode is kernel.TypeParameterType) {
-      element =
-          resynthesizer.getTypeParameter(context, referencedNode.parameter);
-      assert(element != null);
-    } else if (referencedNode is kernel.DynamicType) {
-      element = DynamicElementImpl.instance;
-    } else if (referencedNode is kernel.TypeParameter) {
-      element = resynthesizer.getTypeParameter(context, referencedNode);
-    } else if (referencedNode is kernel.InvalidType) {
-      element = DynamicElementImpl.instance;
-    } else {
-      throw new UnimplementedError(
-          'TODO(paulberry): ${referencedNode.runtimeType}');
-    }
-    if (isNamespaceCombinatorReference) {
-      return element;
-    }
-    if (element is PropertyInducingElement) {
-      PropertyInducingElement property = element;
-      element = isWriteReference ? property.setter : property.getter;
-    }
-    if (element is ConstructorElement &&
-        inferredType is kernel.InterfaceType &&
-        inferredType.typeArguments.isNotEmpty) {
-      InterfaceType type = translateType(inferredType);
-      return ConstructorMember.from(element, type);
-    }
-    if (receiverType is kernel.InterfaceType &&
-        receiverType.typeArguments.isNotEmpty) {
-      InterfaceType type = translateType(receiverType);
-      if (element is MethodElement) {
-        return MethodMember.from(element, type);
-      }
-      if (element is PropertyAccessorElement) {
-        return PropertyAccessorMember.from(element, type);
-      }
-    }
-    return element;
-  }
-
-  @override
-  DartType translateType(kernel.DartType kernelType) {
-    if (kernelType == null) {
-      return null;
-    } else if (kernelType is kernel.TypeArgumentsDartType) {
-      // TODO(paulberry): get rid of this case
-      List<kernel.DartType> kernelTypes = kernelType.types;
-      var types = new List<DartType>(kernelTypes.length);
-      for (var i = 0; i < kernelTypes.length; i++) {
-        types[i] = translateType(kernelTypes[i]);
-      }
-      return new TypeArgumentsDartType(types);
-    } else {
-      return resynthesizer.getType(context, kernelType);
-    }
-  }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index 53a8b68..7988281 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -122,7 +122,7 @@
         }, (String uri) {
           UnlinkedUnit unlinkedUnit = store.unlinkedMap[uri];
           return unlinkedUnit;
-        }, (_) => null, true);
+        }, (_) => null);
         logger.writeln('Linked ${linkedLibraries.length} bundles.');
       });
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 61ace7d..b998712 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -40,6 +40,7 @@
   final int codeOffset;
   final int codeLength;
   final String className;
+  final String mixinName;
   final String parameters;
 
   Declaration(
@@ -52,6 +53,7 @@
       this.codeOffset,
       this.codeLength,
       this.className,
+      this.mixinName,
       this.parameters);
 }
 
@@ -69,6 +71,7 @@
   FUNCTION_TYPE_ALIAS,
   GETTER,
   METHOD,
+  MIXIN,
   SETTER,
   VARIABLE
 }
@@ -82,7 +85,7 @@
   Search(this._driver);
 
   /**
-   * Returns class members with the given [name].
+   * Returns class or mixin members with the given [name].
    */
   Future<List<Element>> classMembers(String name) async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
@@ -95,15 +98,18 @@
       }
     }
 
+    void addElements(ClassElement element) {
+      element.accessors.forEach(addElement);
+      element.fields.forEach(addElement);
+      element.methods.forEach(addElement);
+    }
+
     List<String> files = await _driver.getFilesDefiningClassMemberName(name);
     for (String file in files) {
       UnitElementResult unitResult = await _driver.getUnitElement(file);
       if (unitResult != null) {
-        for (ClassElement clazz in unitResult.element.types) {
-          clazz.accessors.forEach(addElement);
-          clazz.fields.forEach(addElement);
-          clazz.methods.forEach(addElement);
-        }
+        unitResult.element.types.forEach(addElements);
+        unitResult.element.mixins.forEach(addElements);
       }
     }
     return elements;
@@ -161,7 +167,7 @@
 
         void addDeclaration(String name, DeclarationKind kind, int offset,
             int codeOffset, int codeLength,
-            {String className, String parameters}) {
+            {String className, String mixinName, String parameters}) {
           if (maxResults != null && declarations.length >= maxResults) {
             throw const _MaxNumberOfDeclarationsError();
           }
@@ -189,6 +195,7 @@
               codeOffset,
               codeLength,
               className,
+              mixinName,
               parameters));
         }
 
@@ -208,22 +215,17 @@
           return getParametersString(executable.parameters);
         }
 
-        for (var class_ in unlinkedUnit.classes) {
-          String className = class_.name;
-          addDeclaration(
-              className,
-              class_.isMixinApplication
-                  ? DeclarationKind.CLASS_TYPE_ALIAS
-                  : DeclarationKind.CLASS,
-              class_.nameOffset,
-              class_.codeRange.offset,
-              class_.codeRange.length);
+        void addUnlinkedClass(UnlinkedClass class_, DeclarationKind kind,
+            {String className, String mixinName}) {
+          addDeclaration(class_.name, kind, class_.nameOffset,
+              class_.codeRange.offset, class_.codeRange.length);
+
           parameterComposer.outerTypeParameters = class_.typeParameters;
 
           for (var field in class_.fields) {
             addDeclaration(field.name, DeclarationKind.FIELD, field.nameOffset,
                 field.codeRange.offset, field.codeRange.length,
-                className: className);
+                className: className, mixinName: mixinName);
           }
 
           for (var executable in class_.executables) {
@@ -235,6 +237,7 @@
                 executable.codeRange.offset,
                 executable.codeRange.length,
                 className: className,
+                mixinName: mixinName,
                 parameters: getExecutableParameters(executable));
             parameterComposer.innerTypeParameters = const [];
           }
@@ -242,6 +245,17 @@
           parameterComposer.outerTypeParameters = const [];
         }
 
+        for (var class_ in unlinkedUnit.classes) {
+          var kind = class_.isMixinApplication
+              ? DeclarationKind.CLASS_TYPE_ALIAS
+              : DeclarationKind.CLASS;
+          addUnlinkedClass(class_, kind, className: class_.name);
+        }
+
+        for (var mixin in unlinkedUnit.mixins) {
+          addUnlinkedClass(mixin, DeclarationKind.MIXIN, mixinName: mixin.name);
+        }
+
         for (var enum_ in unlinkedUnit.enums) {
           addDeclaration(enum_.name, DeclarationKind.ENUM, enum_.nameOffset,
               enum_.codeRange.offset, enum_.codeRange.length);
@@ -428,6 +442,7 @@
         unitElement.enums.forEach(addElement);
         unitElement.functions.forEach(addElement);
         unitElement.functionTypeAliases.forEach(addElement);
+        unitElement.mixins.forEach(addElement);
         unitElement.topLevelVariables.forEach(addElement);
         unitElement.types.forEach(addElement);
       }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index c655ac4..573adfe 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -7816,8 +7816,7 @@
     ..add(rightBracket);
 
   @override
-//  MixinElement get declaredElement => _name?.staticElement as MixinElement;
-  Element get declaredElement => throw new UnimplementedError();
+  ClassElement get declaredElement => _name?.staticElement as ClassElement;
 
   @deprecated
   @override
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 15dc365..3e444e6 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -2243,10 +2243,10 @@
       int rightValue = rightOperand.value;
       if (rightValue == null) {
         return UNKNOWN_VALUE;
-      } else if (rightValue == 0) {
-        return new DoubleState(value.toDouble() % rightValue.toDouble());
       }
-      return new IntState(value.remainder(rightValue));
+      if (rightValue != 0) {
+        return new IntState(value % rightValue);
+      }
     } else if (rightOperand is DoubleState) {
       double rightValue = rightOperand.value;
       if (rightValue == null) {
@@ -2273,7 +2273,9 @@
       } else if (rightValue.bitLength > 31) {
         return UNKNOWN_VALUE;
       }
-      return new IntState(value << rightValue);
+      if (rightValue >= 0) {
+        return new IntState(value << rightValue);
+      }
     } else if (rightOperand is DynamicState || rightOperand is NumState) {
       return UNKNOWN_VALUE;
     }
@@ -2294,7 +2296,9 @@
       } else if (rightValue.bitLength > 31) {
         return UNKNOWN_VALUE;
       }
-      return new IntState(value >> rightValue);
+      if (rightValue >= 0) {
+        return new IntState(value >> rightValue);
+      }
     } else if (rightOperand is DynamicState || rightOperand is NumState) {
       return UNKNOWN_VALUE;
     }
diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
index 236e332..567dd7c 100644
--- a/pkg/analyzer/lib/src/dart/element/builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart
@@ -82,25 +82,8 @@
       }
     }
 
-    ElementHolder holder = new ElementHolder();
-    //
-    // Process field declarations before constructors and methods so that field
-    // formal parameters can be correctly resolved to their fields.
-    //
-    ElementHolder previousHolder = _currentHolder;
-    _currentHolder = holder;
-    try {
-      List<ClassMember> nonFields = new List<ClassMember>();
-      node.visitChildren(
-          new _ElementBuilder_visitClassDeclaration(this, nonFields));
-      _buildFieldMap(holder.fieldsWithoutFlushing);
-      int count = nonFields.length;
-      for (int i = 0; i < count; i++) {
-        nonFields[i].accept(this);
-      }
-    } finally {
-      _currentHolder = previousHolder;
-    }
+    ElementHolder holder = _buildClassMembers(node);
+
     SimpleIdentifier className = node.name;
     ClassElementImpl element = new ClassElementImpl.forNode(className);
     _setCodeRange(element, node);
@@ -603,6 +586,26 @@
   }
 
   @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    ElementHolder holder = _buildClassMembers(node);
+
+    SimpleIdentifier nameNode = node.name;
+    MixinElementImpl element = new MixinElementImpl.forNode(nameNode);
+    _setCodeRange(element, node);
+    element.metadata = _createElementAnnotations(node.metadata);
+    element.typeParameters = holder.typeParameters;
+    setElementDocumentationComment(element, node);
+    element.accessors = holder.accessors;
+    element.constructors = holder.constructors;
+    element.fields = holder.fields;
+    element.methods = holder.methods;
+    _currentHolder.addMixin(element);
+    nameNode.staticElement = element;
+    holder.validate();
+    return null;
+  }
+
+  @override
   Object visitPartDirective(PartDirective node) {
     List<ElementAnnotation> annotations =
         _createElementAnnotations(node.metadata);
@@ -694,6 +697,29 @@
     return null;
   }
 
+  ElementHolder _buildClassMembers(AstNode classNode) {
+    ElementHolder holder = new ElementHolder();
+    //
+    // Process field declarations before constructors and methods so that field
+    // formal parameters can be correctly resolved to their fields.
+    //
+    ElementHolder previousHolder = _currentHolder;
+    _currentHolder = holder;
+    try {
+      List<ClassMember> nonFields = new List<ClassMember>();
+      classNode.visitChildren(
+          new _ClassNotExecutableElementsBuilder(this, nonFields));
+      _buildFieldMap(holder.fieldsWithoutFlushing);
+      int count = nonFields.length;
+      for (int i = 0; i < count; i++) {
+        nonFields[i].accept(this);
+      }
+    } finally {
+      _currentHolder = previousHolder;
+    }
+    return holder;
+  }
+
   /**
    * Build the table mapping field names to field elements for the [fields]
    * defined in the current class.
@@ -783,6 +809,7 @@
       element.functions = holder.functions;
       element.source = source;
       element.librarySource = librarySource;
+      element.mixins = holder.mixins;
       element.typeAliases = holder.typeAliases;
       element.types = holder.types;
       element.topLevelVariables = holder.topLevelVariables;
@@ -1667,12 +1694,14 @@
   }
 }
 
-class _ElementBuilder_visitClassDeclaration extends UnifyingAstVisitor<Object> {
+/**
+ * Builds elements for all node that are not constructors or methods.
+ */
+class _ClassNotExecutableElementsBuilder extends UnifyingAstVisitor<Object> {
   final ApiElementBuilder builder;
+  final List<ClassMember> nonFields;
 
-  List<ClassMember> nonFields;
-
-  _ElementBuilder_visitClassDeclaration(this.builder, this.nonFields) : super();
+  _ClassNotExecutableElementsBuilder(this.builder, this.nonFields);
 
   @override
   Object visitConstructorDeclaration(ConstructorDeclaration node) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 73e23a7..e3c4b49 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -10,7 +10,6 @@
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/analysis/kernel_metadata.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/constant/value.dart';
 import 'package:analyzer/src/dart/element/handle.dart';
@@ -29,8 +28,6 @@
 import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/task/dart.dart';
-import 'package:kernel/kernel.dart' as kernel;
-import 'package:kernel/type_algebra.dart' as kernel;
 
 /**
  * Assert that the given [object] is null, which in the places where this
@@ -72,12 +69,6 @@
   AbstractClassElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize for resynthesizing from kernel.
-   */
-  AbstractClassElementImpl.forKernel(CompilationUnitElementImpl enclosingUnit)
-      : super.forKernel(enclosingUnit);
-
-  /**
    * Initialize a newly created class element to have the given [name].
    */
   AbstractClassElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -451,26 +442,11 @@
   final UnlinkedClass _unlinkedClass;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.Class _kernel;
-
-  /**
    * If this class is resynthesized, whether it has a constant constructor.
    */
   bool _hasConstConstructorCached;
 
   /**
-   * The actual supertype extracted from desugared [_kernel].
-   */
-  kernel.Supertype _kernelSupertype;
-
-  /**
-   * The mixed-in types extracted from desugared [_kernel].
-   */
-  List<kernel.Supertype> _kernelMixins;
-
-  /**
    * The superclass of the class, or `null` for [Object].
    */
   InterfaceType _supertype;
@@ -521,23 +497,13 @@
    */
   ClassElementImpl(String name, int offset)
       : _unlinkedClass = null,
-        _kernel = null,
         super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ClassElementImpl.forKernel(
-      CompilationUnitElementImpl enclosingUnit, this._kernel)
-      : _unlinkedClass = null,
-        super.forKernel(enclosingUnit);
-
-  /**
    * Initialize a newly created class element to have the given [name].
    */
   ClassElementImpl.forNode(Identifier name)
       : _unlinkedClass = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -545,8 +511,7 @@
    */
   ClassElementImpl.forSerialized(
       this._unlinkedClass, CompilationUnitElementImpl enclosingUnit)
-      : _kernel = null,
-        super.forSerialized(enclosingUnit);
+      : super.forSerialized(enclosingUnit);
 
   /**
    * Set whether this class is abstract.
@@ -559,7 +524,7 @@
   @override
   List<PropertyAccessorElement> get accessors {
     if (_accessors == null) {
-      if (_kernel != null || _unlinkedClass != null) {
+      if (_unlinkedClass != null) {
         _resynthesizeFieldsAndPropertyAccessors();
       }
     }
@@ -581,10 +546,6 @@
 
   @override
   int get codeLength {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeLength;
-    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.codeRange?.length;
     }
@@ -593,10 +554,6 @@
 
   @override
   int get codeOffset {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeOffset;
-    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.codeRange?.offset;
     }
@@ -608,17 +565,6 @@
     if (isMixinApplication) {
       return _computeMixinAppConstructors();
     }
-    if (_kernel != null && _constructors == null) {
-      var constructors = _kernel.constructors
-          .map((k) => new ConstructorElementImpl.forKernel(this, k, null));
-      var factories = _kernel.procedures
-          .where((k) => k.isFactory)
-          .map((k) => new ConstructorElementImpl.forKernel(this, null, k));
-      _constructors = <ConstructorElement>[]
-        ..addAll(constructors)
-        ..addAll(factories);
-      _constructors.sort((a, b) => a.nameOffset - b.nameOffset);
-    }
     if (_unlinkedClass != null && _constructors == null) {
       _constructors = _unlinkedClass.executables
           .where((e) => e.kind == UnlinkedExecutableKind.constructor)
@@ -652,10 +598,6 @@
 
   @override
   String get documentationComment {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.documentationComment;
-    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.documentationComment?.text;
     }
@@ -712,7 +654,7 @@
   @override
   List<FieldElement> get fields {
     if (_fields == null) {
-      if (_kernel != null || _unlinkedClass != null) {
+      if (_unlinkedClass != null) {
         _resynthesizeFieldsAndPropertyAccessors();
       }
     }
@@ -810,10 +752,6 @@
   @override
   List<InterfaceType> get interfaces {
     if (_interfaces == null) {
-      if (_kernel != null) {
-        var context = enclosingUnit._kernelContext;
-        _interfaces = context.getInterfaceTypes(this, _kernel.implementedTypes);
-      }
       if (_unlinkedClass != null) {
         ResynthesizerContext context = enclosingUnit.resynthesizerContext;
         _interfaces = _unlinkedClass.interfaces
@@ -833,9 +771,6 @@
 
   @override
   bool get isAbstract {
-    if (_kernel != null) {
-      return _kernel.isAbstract;
-    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.isAbstract;
     }
@@ -844,9 +779,6 @@
 
   @override
   bool get isMixinApplication {
-    if (_kernel != null) {
-      return _kernel.mixedInType != null;
-    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.isMixinApplication;
     }
@@ -886,14 +818,7 @@
   }
 
   @override
-  List<kernel.TypeParameter> get kernelTypeParams => _kernel?.typeParameters;
-
-  @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (_unlinkedClass != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, _unlinkedClass.annotations);
@@ -903,15 +828,6 @@
 
   @override
   List<MethodElement> get methods {
-    if (_kernel != null) {
-      _methods ??= _kernel.procedures
-          .where((k) =>
-              !k.isSyntheticForwarder &&
-              (k.kind == kernel.ProcedureKind.Method ||
-                  k.kind == kernel.ProcedureKind.Operator))
-          .map((k) => new MethodElementImpl.forKernel(this, k))
-          .toList(growable: false);
-    }
     if (_unlinkedClass != null) {
       _methods ??= _unlinkedClass.executables
           .where((e) => e.kind == UnlinkedExecutableKind.functionOrMethod)
@@ -943,11 +859,6 @@
   @override
   List<InterfaceType> get mixins {
     if (_mixins == null) {
-      if (_kernel != null) {
-        _initializeKernelMixins();
-        var context = enclosingUnit._kernelContext;
-        _mixins = context.getInterfaceTypes(this, _kernelMixins);
-      }
       if (_unlinkedClass != null) {
         ResynthesizerContext context = enclosingUnit.resynthesizerContext;
         _mixins = _unlinkedClass.mixins
@@ -962,20 +873,16 @@
 
   void set mixins(List<InterfaceType> mixins) {
     _assertNotResynthesized(_unlinkedClass);
-    // Note: if we are using kernel or the analysis driver, the set of
-    // mixins has already been computed, and it's more accurate (since mixin
-    // arguments have been inferred).  So we only store mixins if we are using
-    // the old task model.
-    if (_unlinkedClass == null && _kernel == null) {
+    // Note: if we are using the analysis driver, the set of mixins has already
+    // been computed, and it's more accurate (since mixin arguments have been
+    // inferred).  So we only store mixins if we are using the old task model.
+    if (_unlinkedClass == null) {
       _mixins = mixins;
     }
   }
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name;
-    }
     if (_unlinkedClass != null) {
       return _unlinkedClass.name;
     }
@@ -994,16 +901,6 @@
   @override
   InterfaceType get supertype {
     if (_supertype == null) {
-      if (_kernel != null) {
-        _initializeKernelMixins();
-        if (_kernelSupertype != null) {
-          _supertype = enclosingUnit._kernelContext
-              .getInterfaceType(this, _kernelSupertype);
-          _supertype ??= context.typeProvider.objectType;
-        } else {
-          return null;
-        }
-      }
       if (_unlinkedClass != null) {
         if (_unlinkedClass.supertype != null) {
           DartType type = enclosingUnit.resynthesizerContext
@@ -1071,9 +968,6 @@
   bool get _hasConstConstructor {
     if (_hasConstConstructorCached == null) {
       _hasConstConstructorCached = false;
-      if (_kernel != null) {
-        _hasConstConstructorCached = _kernel.constructors.any((c) => c.isConst);
-      }
       if (_unlinkedClass != null) {
         _hasConstConstructorCached = _unlinkedClass.executables.any(
             (c) => c.kind == UnlinkedExecutableKind.constructor && c.isConst);
@@ -1278,32 +1172,10 @@
   }
 
   /**
-   * Extract actual supertypes and mixed-in types from [_kernel].
+   * Return `true` if the given [type] is a class [InterfaceType].
    */
-  void _initializeKernelMixins() {
-    if (_kernelSupertype == null) {
-      _kernelMixins = <kernel.Supertype>[];
-      kernel.Supertype supertype = _kernel.supertype;
-      if (supertype != null) {
-        if (_kernel.mixedInType != null) {
-          _kernelMixins.add(_kernel.mixedInType);
-        }
-        while (supertype.classNode.isAnonymousMixin) {
-          var superNode = supertype.classNode;
-          var substitute = kernel.Substitution.fromSupertype(supertype);
-
-          var superMixin = superNode.mixedInType;
-          if (superMixin != null) {
-            var thisMixin = substitute.substituteSupertype(superMixin);
-            _kernelMixins.add(thisMixin);
-          }
-
-          supertype = substitute.substituteSupertype(superNode.supertype);
-        }
-        _kernelMixins = _kernelMixins.reversed.toList();
-      }
-      _kernelSupertype = supertype;
-    }
+  bool _isClassInterfaceType(DartType type) {
+    return type is InterfaceType && !type.element.isEnum;
   }
 
   /**
@@ -1317,93 +1189,46 @@
     var implicitAccessors = <PropertyAccessorElement>[];
     var explicitAccessors = <PropertyAccessorElement>[];
     var implicitFields = <String, FieldElementImpl>{};
-    if (_kernel != null) {
-      // Build explicit fields and implicit property accessors.
-      for (var k in _kernel.fields) {
-        if (k.name.name.startsWith('_redirecting#')) {
-          continue;
-        }
-        var field = new FieldElementImpl.forKernelFactory(this, k);
-        explicitFields.add(field);
+
+    // Build explicit fields and implicit property accessors.
+    for (UnlinkedVariable v in _unlinkedClass.fields) {
+      FieldElementImpl field =
+          new FieldElementImpl.forSerializedFactory(v, this);
+      explicitFields.add(field);
+      implicitAccessors.add(
+          new PropertyAccessorElementImpl_ImplicitGetter(field)
+            ..enclosingElement = this);
+      if (!field.isConst && !field.isFinal) {
         implicitAccessors.add(
-            new PropertyAccessorElementImpl_ImplicitGetter(field)
+            new PropertyAccessorElementImpl_ImplicitSetter(field)
               ..enclosingElement = this);
-        if (!field.isConst && !field.isFinal) {
-          implicitAccessors.add(
-              new PropertyAccessorElementImpl_ImplicitSetter(field)
-                ..enclosingElement = this);
-        }
       }
-      // Build explicit property accessors and implicit fields.
-      for (var k in _kernel.procedures) {
-        if (k.isForwardingStub) continue;
-        bool isGetter = k.kind == kernel.ProcedureKind.Getter;
-        bool isSetter = k.kind == kernel.ProcedureKind.Setter;
-        if (isGetter || isSetter) {
-          var accessor = new PropertyAccessorElementImpl.forKernel(this, k);
-          explicitAccessors.add(accessor);
-          // Create or update the implicit field.
-          String fieldName = accessor.displayName;
-          FieldElementImpl field = implicitFields[fieldName];
-          if (field == null) {
-            field = new FieldElementImpl(fieldName, -1);
-            implicitFields[fieldName] = field;
-            field.enclosingElement = this;
-            field.isSynthetic = true;
-            field.isFinal = isGetter;
-            field.isStatic = k.isStatic;
-          } else {
-            field.isFinal = false;
-          }
-          accessor.variable = field;
-          if (isGetter) {
-            field.getter = accessor;
-          } else {
-            field.setter = accessor;
-          }
+    }
+    // Build explicit property accessors and implicit fields.
+    for (UnlinkedExecutable e in _unlinkedClass.executables) {
+      if (e.kind == UnlinkedExecutableKind.getter ||
+          e.kind == UnlinkedExecutableKind.setter) {
+        PropertyAccessorElementImpl accessor =
+            new PropertyAccessorElementImpl.forSerialized(e, this);
+        explicitAccessors.add(accessor);
+        // Create or update the implicit field.
+        String fieldName = accessor.displayName;
+        FieldElementImpl field = implicitFields[fieldName];
+        if (field == null) {
+          field = new FieldElementImpl(fieldName, -1);
+          implicitFields[fieldName] = field;
+          field.enclosingElement = this;
+          field.isSynthetic = true;
+          field.isFinal = e.kind == UnlinkedExecutableKind.getter;
+          field.isStatic = e.isStatic;
+        } else {
+          field.isFinal = false;
         }
-      }
-    } else {
-      // Build explicit fields and implicit property accessors.
-      for (UnlinkedVariable v in _unlinkedClass.fields) {
-        FieldElementImpl field =
-            new FieldElementImpl.forSerializedFactory(v, this);
-        explicitFields.add(field);
-        implicitAccessors.add(
-            new PropertyAccessorElementImpl_ImplicitGetter(field)
-              ..enclosingElement = this);
-        if (!field.isConst && !field.isFinal) {
-          implicitAccessors.add(
-              new PropertyAccessorElementImpl_ImplicitSetter(field)
-                ..enclosingElement = this);
-        }
-      }
-      // Build explicit property accessors and implicit fields.
-      for (UnlinkedExecutable e in _unlinkedClass.executables) {
-        if (e.kind == UnlinkedExecutableKind.getter ||
-            e.kind == UnlinkedExecutableKind.setter) {
-          PropertyAccessorElementImpl accessor =
-              new PropertyAccessorElementImpl.forSerialized(e, this);
-          explicitAccessors.add(accessor);
-          // Create or update the implicit field.
-          String fieldName = accessor.displayName;
-          FieldElementImpl field = implicitFields[fieldName];
-          if (field == null) {
-            field = new FieldElementImpl(fieldName, -1);
-            implicitFields[fieldName] = field;
-            field.enclosingElement = this;
-            field.isSynthetic = true;
-            field.isFinal = e.kind == UnlinkedExecutableKind.getter;
-            field.isStatic = e.isStatic;
-          } else {
-            field.isFinal = false;
-          }
-          accessor.variable = field;
-          if (e.kind == UnlinkedExecutableKind.getter) {
-            field.getter = accessor;
-          } else {
-            field.setter = accessor;
-          }
+        accessor.variable = field;
+        if (e.kind == UnlinkedExecutableKind.getter) {
+          field.getter = accessor;
+        } else {
+          field.setter = accessor;
         }
       }
     }
@@ -1480,13 +1305,6 @@
     }
     return null;
   }
-
-  /**
-   * Return `true` if the given [type] is a class [InterfaceType].
-   */
-  static bool _isClassInterfaceType(DartType type) {
-    return type is InterfaceType && !type.element.isEnum;
-  }
 }
 
 /**
@@ -1511,11 +1329,6 @@
   final UnlinkedPart _unlinkedPart;
 
   /**
-   * The kernel context in which the unit is resynthesized.
-   */
-  final KernelUnitResynthesizerContext _kernelContext;
-
-  /**
    * The source that corresponds to this compilation unit.
    */
   @override
@@ -1558,13 +1371,18 @@
   List<FunctionElement> _functions;
 
   /**
+   * A list containing all of the mixins contained in this compilation unit.
+   */
+  List<ClassElement> _mixins;
+
+  /**
    * A list containing all of the function type aliases contained in this
    * compilation unit.
    */
   List<FunctionTypeAliasElement> _typeAliases;
 
   /**
-   * A list containing all of the types contained in this compilation unit.
+   * A list containing all of the classes contained in this compilation unit.
    */
   List<ClassElement> _types;
 
@@ -1599,24 +1417,9 @@
       : resynthesizerContext = null,
         _unlinkedUnit = null,
         _unlinkedPart = null,
-        _kernelContext = null,
         super(name, -1);
 
   /**
-   * Initialize using the given kernel information.
-   */
-  CompilationUnitElementImpl.forKernel(
-      LibraryElementImpl enclosingLibrary, this._kernelContext, String name)
-      : resynthesizerContext = null,
-        _unlinkedUnit = null,
-        _unlinkedPart = null,
-        super.forKernel(null) {
-    _enclosingElement = enclosingLibrary;
-    _name = name;
-    _nameOffset = -1;
-  }
-
-  /**
    * Initialize using the given serialized information.
    */
   CompilationUnitElementImpl.forSerialized(
@@ -1625,8 +1428,7 @@
       this._unlinkedUnit,
       this._unlinkedPart,
       String name)
-      : _kernelContext = null,
-        super.forSerialized(null) {
+      : super.forSerialized(null) {
     _enclosingElement = enclosingLibrary;
     _name = name;
     _nameOffset = -1;
@@ -1635,10 +1437,6 @@
   @override
   List<PropertyAccessorElement> get accessors {
     if (_accessors == null) {
-      if (_kernelContext != null) {
-        _explicitTopLevelAccessors ??= _kernelContext.buildTopLevelAccessors();
-        _explicitTopLevelVariables ??= _kernelContext.buildTopLevelVariables();
-      }
       if (_unlinkedUnit != null) {
         _explicitTopLevelAccessors ??=
             resynthesizerContext.buildTopLevelAccessors();
@@ -1692,12 +1490,6 @@
 
   @override
   List<ClassElement> get enums {
-    if (_kernelContext != null) {
-      _enums ??= _kernelContext.kernelUnit.classes
-          .where((k) => k.isEnum)
-          .map((k) => new EnumElementImpl.forKernel(this, k))
-          .toList(growable: false);
-    }
     if (_unlinkedUnit != null) {
       _enums ??= _unlinkedUnit.enums
           .map((e) => new EnumElementImpl.forSerialized(e, this))
@@ -1719,13 +1511,6 @@
 
   @override
   List<FunctionElement> get functions {
-    if (_kernelContext != null) {
-      _functions ??= _kernelContext.kernelUnit.procedures
-          .where((k) => k.kind == kernel.ProcedureKind.Method)
-          .where((k) => !k.name.name.startsWith('__loadLibrary_'))
-          .map((k) => new FunctionElementImpl.forKernel(this, k))
-          .toList(growable: false);
-    }
     if (_unlinkedUnit != null) {
       _functions ??= _unlinkedUnit.executables
           .where((e) => e.kind == UnlinkedExecutableKind.functionOrMethod)
@@ -1748,11 +1533,6 @@
 
   @override
   List<FunctionTypeAliasElement> get functionTypeAliases {
-    if (_kernelContext != null) {
-      _typeAliases ??= _kernelContext.kernelUnit.typedefs
-          .map((k) => new GenericTypeAliasElementImpl.forKernel(this, k))
-          .toList(growable: false);
-    }
     if (_unlinkedUnit != null) {
       _typeAliases ??= _unlinkedUnit.typedefs.map((t) {
         return new GenericTypeAliasElementImpl.forSerialized(t, this);
@@ -1784,10 +1564,6 @@
   @override
   List<ElementAnnotation> get metadata {
     if (_metadata == null) {
-      if (_kernelContext != null) {
-        return _metadata = _kernelContext
-            .buildAnnotations(_kernelContext.kernelUnit.annotations);
-      }
       if (_unlinkedPart != null) {
         return _metadata = _buildAnnotations(
             library.definingCompilationUnit as CompilationUnitElementImpl,
@@ -1798,12 +1574,29 @@
   }
 
   @override
+  List<ClassElement> get mixins {
+    if (_unlinkedUnit != null) {
+      _mixins ??= _unlinkedUnit.mixins
+          .map((c) => new MixinElementImpl.forSerialized(c, this))
+          .toList(growable: false);
+    }
+    return _mixins ?? const <ClassElement>[];
+  }
+
+  /**
+   * Set the mixins contained in this compilation unit to the given [mixins].
+   */
+  void set mixins(List<ClassElement> mixins) {
+    _assertNotResynthesized(_unlinkedUnit);
+    for (MixinElementImpl type in mixins) {
+      type.enclosingElement = this;
+    }
+    this._mixins = mixins;
+  }
+
+  @override
   List<TopLevelVariableElement> get topLevelVariables {
     if (_variables == null) {
-      if (_kernelContext != null) {
-        _explicitTopLevelAccessors ??= _kernelContext.buildTopLevelAccessors();
-        _explicitTopLevelVariables ??= _kernelContext.buildTopLevelVariables();
-      }
       if (_unlinkedUnit != null) {
         _explicitTopLevelAccessors ??=
             resynthesizerContext.buildTopLevelAccessors();
@@ -1861,12 +1654,6 @@
 
   @override
   List<ClassElement> get types {
-    if (_kernelContext != null) {
-      _types ??= _kernelContext.kernelUnit.classes
-          .where((k) => !k.isEnum && !k.isAnonymousMixin)
-          .map((k) => new ClassElementImpl.forKernel(this, k))
-          .toList(growable: false);
-    }
     if (_unlinkedUnit != null) {
       _types ??= _unlinkedUnit.classes
           .map((c) => new ClassElementImpl.forSerialized(c, this))
@@ -1989,7 +1776,7 @@
    */
   void replaceTopLevelVariable(
       TopLevelVariableElement from, TopLevelVariableElement to) {
-    if (_kernelContext != null || _unlinkedUnit != null) {
+    if (_unlinkedUnit != null) {
       // Getters and setter in different units should be patched to use the
       // same variables before these variables were asked and returned.
       assert(_variables == null);
@@ -2018,6 +1805,7 @@
     safelyVisitChildren(enums, visitor);
     safelyVisitChildren(functions, visitor);
     safelyVisitChildren(functionTypeAliases, visitor);
+    safelyVisitChildren(mixins, visitor);
     safelyVisitChildren(types, visitor);
     safelyVisitChildren(topLevelVariables, visitor);
   }
@@ -2051,13 +1839,6 @@
   ConstFieldElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ConstFieldElementImpl.forKernel(
-      ElementImpl enclosingElement, kernel.Field kernel)
-      : super.forKernel(enclosingElement, kernel);
-
-  /**
    * Initialize a newly created field element to have the given [name].
    */
   ConstFieldElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -2075,19 +1856,14 @@
  */
 class ConstFieldElementImpl_EnumValue extends ConstFieldElementImpl_ofEnum {
   final UnlinkedEnumValue _unlinkedEnumValue;
-  final kernel.Field _kernelEnumValue;
   final int _index;
 
-  ConstFieldElementImpl_EnumValue(EnumElementImpl enumElement,
-      this._unlinkedEnumValue, this._kernelEnumValue, this._index)
+  ConstFieldElementImpl_EnumValue(
+      EnumElementImpl enumElement, this._unlinkedEnumValue, this._index)
       : super(enumElement);
 
   @override
   String get documentationComment {
-    if (_kernelEnumValue != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernelEnumValue);
-      return metadata?.documentationComment;
-    }
     if (_unlinkedEnumValue != null) {
       return _unlinkedEnumValue.documentationComment?.text;
     }
@@ -2110,10 +1886,6 @@
 
   @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (_unlinkedEnumValue != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, _unlinkedEnumValue.annotations);
@@ -2123,9 +1895,6 @@
 
   @override
   String get name {
-    if (_kernelEnumValue != null) {
-      return _kernelEnumValue.name.name;
-    }
     if (_unlinkedEnumValue != null) {
       return _unlinkedEnumValue.name;
     }
@@ -2258,16 +2027,6 @@
   List<ConstructorInitializer> _constantInitializers;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.Constructor _kernelConstructor;
-
-  /**
-   * The kernel of the element.
-   */
-  final kernel.Procedure _kernelFactory;
-
-  /**
    * The offset of the `.` before this constructor name or `null` if not named.
    */
   int _periodOffset;
@@ -2289,36 +2048,19 @@
    * Initialize a newly created constructor element to have the given [name] and
    * [offset].
    */
-  ConstructorElementImpl(String name, int offset)
-      : _kernelConstructor = null,
-        _kernelFactory = null,
-        super(name, offset);
-
-  /**
-   * Initialize using the given serialized information.
-   */
-  ConstructorElementImpl.forKernel(ClassElementImpl enclosingClass,
-      this._kernelConstructor, this._kernelFactory)
-      : super.forKernel(enclosingClass, _kernelConstructor ?? _kernelFactory) {
-    isSynthetic = _kernelConstructor?.isSynthetic ?? false;
-  }
+  ConstructorElementImpl(String name, int offset) : super(name, offset);
 
   /**
    * Initialize a newly created constructor element to have the given [name].
    */
-  ConstructorElementImpl.forNode(Identifier name)
-      : _kernelConstructor = null,
-        _kernelFactory = null,
-        super.forNode(name);
+  ConstructorElementImpl.forNode(Identifier name) : super.forNode(name);
 
   /**
    * Initialize using the given serialized information.
    */
   ConstructorElementImpl.forSerialized(
       UnlinkedExecutable serializedExecutable, ClassElementImpl enclosingClass)
-      : _kernelConstructor = null,
-        _kernelFactory = null,
-        super.forSerialized(serializedExecutable, enclosingClass);
+      : super.forSerialized(serializedExecutable, enclosingClass);
 
   /**
    * Return the constant initializers for this element, which will be empty if
@@ -2326,17 +2068,6 @@
    */
   List<ConstructorInitializer> get constantInitializers {
     if (_constantInitializers == null) {
-      if (_kernelConstructor != null) {
-        if (_kernelConstructor.isConst) {
-          var context = enclosingUnit._kernelContext;
-          _constantInitializers = _kernelConstructor.initializers
-              .map((k) => context.getConstructorInitializer(this, k))
-              .where((i) => i != null)
-              .toList();
-        } else {
-          _constantInitializers = const <ConstructorInitializer>[];
-        }
-      }
       if (serializedExecutable != null) {
         _constantInitializers = serializedExecutable.constantInitializers
             .map((i) => _buildConstructorInitializer(i))
@@ -2370,12 +2101,6 @@
 
   @override
   bool get isConst {
-    if (_kernelConstructor != null) {
-      return _kernelConstructor.isConst;
-    }
-    if (_kernelFactory != null) {
-      return _kernelFactory.isConst;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isConst;
     }
@@ -2424,8 +2149,6 @@
 
   @override
   bool get isFactory {
-    if (_kernelConstructor != null) return false;
-    if (_kernelFactory != null) return true;
     if (serializedExecutable != null) {
       return serializedExecutable.isFactory;
     }
@@ -2436,9 +2159,6 @@
   bool get isStatic => false;
 
   @override
-  List<kernel.TypeParameter> get kernelTypeParams => const [];
-
-  @override
   ElementKind get kind => ElementKind.CONSTRUCTOR;
 
   @override
@@ -2459,18 +2179,6 @@
   }
 
   @override
-  int get nameOffset {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      if (metadata != null && metadata.constructorNameOffset != -1) {
-        return metadata.constructorNameOffset;
-      }
-      return _kernel.fileOffset;
-    }
-    return super.nameOffset;
-  }
-
-  @override
   int get periodOffset {
     if (serializedExecutable != null) {
       if (serializedExecutable.name.isNotEmpty) {
@@ -2488,10 +2196,6 @@
   @override
   ConstructorElement get redirectedConstructor {
     if (_redirectedConstructor == null) {
-      if (_kernelConstructor != null || _kernelFactory != null) {
-        _redirectedConstructor = enclosingUnit._kernelContext
-            .getRedirectedConstructor(this, _kernelConstructor, _kernelFactory);
-      }
       if (serializedExecutable != null) {
         if (serializedExecutable.isRedirectedConstructor) {
           if (serializedExecutable.isFactory) {
@@ -2638,13 +2342,6 @@
       : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ConstTopLevelVariableElementImpl.forKernel(
-      ElementImpl enclosingElement, kernel.Field kernel)
-      : super.forKernel(enclosingElement, kernel);
-
-  /**
    * Initialize a newly created top-level variable element to have the given
    * [name].
    */
@@ -2687,10 +2384,6 @@
 
   Expression get constantInitializer {
     if (_constantInitializer == null) {
-      if (_kernelInitializer != null) {
-        _constantInitializer = enclosingUnit._kernelContext
-            .getExpression(this, _kernelInitializer);
-      }
       if (_unlinkedConst != null) {
         _constantInitializer = enclosingUnit.resynthesizerContext
             .buildExpression(this, _unlinkedConst);
@@ -2711,12 +2404,6 @@
   }
 
   /**
-   * If this element is resynthesized from Kernel, return the Kernel
-   * initializer, otherwise return `null`.
-   */
-  kernel.Expression get _kernelInitializer;
-
-  /**
    * If this element is resynthesized from the summary, return the unlinked
    * initializer, otherwise return `null`.
    */
@@ -2749,13 +2436,6 @@
       : super(name, nameOffset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  DefaultFieldFormalParameterElementImpl.forKernel(ElementImpl enclosingElement,
-      kernel.VariableDeclaration kernel, ParameterKind parameterKind)
-      : super.forKernel(enclosingElement, kernel, parameterKind);
-
-  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   DefaultFieldFormalParameterElementImpl.forNode(Identifier name)
@@ -2782,13 +2462,6 @@
       : super(name, nameOffset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  DefaultParameterElementImpl.forKernel(ElementImpl enclosingElement,
-      kernel.VariableDeclaration kernel, ParameterKind parameterKind)
-      : super.forKernel(enclosingElement, kernel, parameterKind);
-
-  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   DefaultParameterElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -3207,11 +2880,6 @@
   }
 
   /**
-   * Initialize for resynthesizing from kernel.
-   */
-  ElementImpl.forKernel(this._enclosingElement);
-
-  /**
    * Initialize a newly created element to have the given [name].
    */
   ElementImpl.forNode(Identifier name)
@@ -3886,11 +3554,6 @@
   final UnlinkedEnum _unlinkedEnum;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.Class _kernel;
-
-  /**
    * The type defined by the enum.
    */
   InterfaceType _type;
@@ -3901,23 +3564,13 @@
    */
   EnumElementImpl(String name, int offset)
       : _unlinkedEnum = null,
-        _kernel = null,
         super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  EnumElementImpl.forKernel(
-      CompilationUnitElementImpl enclosingUnit, this._kernel)
-      : _unlinkedEnum = null,
-        super.forKernel(enclosingUnit);
-
-  /**
    * Initialize a newly created class element to have the given [name].
    */
   EnumElementImpl.forNode(Identifier name)
       : _unlinkedEnum = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -3925,8 +3578,7 @@
    */
   EnumElementImpl.forSerialized(
       this._unlinkedEnum, CompilationUnitElementImpl enclosingUnit)
-      : _kernel = null,
-        super.forSerialized(enclosingUnit);
+      : super.forSerialized(enclosingUnit);
 
   /**
    * Set whether this class is abstract.
@@ -3938,7 +3590,7 @@
   @override
   List<PropertyAccessorElement> get accessors {
     if (_accessors == null) {
-      if (_kernel != null || _unlinkedEnum != null) {
+      if (_unlinkedEnum != null) {
         _resynthesizeMembers();
       }
     }
@@ -3981,10 +3633,6 @@
 
   @override
   String get documentationComment {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.documentationComment;
-    }
     if (_unlinkedEnum != null) {
       return _unlinkedEnum.documentationComment?.text;
     }
@@ -3994,7 +3642,7 @@
   @override
   List<FieldElement> get fields {
     if (_fields == null) {
-      if (_kernel != null || _unlinkedEnum != null) {
+      if (_unlinkedEnum != null) {
         _resynthesizeMembers();
       }
     }
@@ -4039,10 +3687,6 @@
 
   @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (_unlinkedEnum != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, _unlinkedEnum.annotations);
@@ -4053,7 +3697,7 @@
   @override
   List<MethodElement> get methods {
     if (_methods == null) {
-      if (_kernel != null || _unlinkedEnum != null) {
+      if (_unlinkedEnum != null) {
         _resynthesizeMembers();
       }
     }
@@ -4065,9 +3709,6 @@
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name;
-    }
     if (_unlinkedEnum != null) {
       return _unlinkedEnum.name;
     }
@@ -4119,7 +3760,7 @@
    */
   void createToStringMethodElement() {
     var method = new MethodElementImpl('toString', -1);
-    if (_kernel != null || _unlinkedEnum != null) {
+    if (_unlinkedEnum != null) {
       method.returnType = context.typeProvider.stringType;
       method.type = new FunctionTypeImpl(method);
     }
@@ -4144,24 +3785,11 @@
     // Build the 'values' field.
     fields.add(new ConstFieldElementImpl_EnumValues(this));
     // Build fields for all enum constants.
-    if (_kernel != null) {
-      for (int i = 0; i < _kernel.fields.length; i++) {
-        kernel.Field kernelField = _kernel.fields[i];
-        if (kernelField.name.name == 'index' ||
-            kernelField.name.name == '_name' ||
-            kernelField.name.name == 'values') {
-          continue;
-        }
-        ConstFieldElementImpl_EnumValue field =
-            new ConstFieldElementImpl_EnumValue(this, null, kernelField, i);
-        fields.add(field);
-      }
-    }
     if (_unlinkedEnum != null) {
       for (int i = 0; i < _unlinkedEnum.values.length; i++) {
         UnlinkedEnumValue unlinkedValue = _unlinkedEnum.values[i];
         ConstFieldElementImpl_EnumValue field =
-            new ConstFieldElementImpl_EnumValue(this, unlinkedValue, null, i);
+            new ConstFieldElementImpl_EnumValue(this, unlinkedValue, i);
         fields.add(field);
       }
     }
@@ -4188,11 +3816,6 @@
   final UnlinkedExecutable serializedExecutable;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.Member _kernel;
-
-  /**
    * A list containing all of the parameters defined by this executable element.
    */
   List<ParameterElement> _parameters;
@@ -4218,22 +3841,13 @@
    */
   ExecutableElementImpl(String name, int offset)
       : serializedExecutable = null,
-        _kernel = null,
         super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ExecutableElementImpl.forKernel(ElementImpl enclosingElement, this._kernel)
-      : serializedExecutable = null,
-        super.forKernel(enclosingElement);
-
-  /**
    * Initialize a newly created executable element to have the given [name].
    */
   ExecutableElementImpl.forNode(Identifier name)
       : serializedExecutable = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -4241,8 +3855,7 @@
    */
   ExecutableElementImpl.forSerialized(
       this.serializedExecutable, ElementImpl enclosingElement)
-      : _kernel = null,
-        super.forSerialized(enclosingElement);
+      : super.forSerialized(enclosingElement);
 
   /**
    * Set whether this executable element's body is asynchronous.
@@ -4254,10 +3867,6 @@
 
   @override
   int get codeLength {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeLength;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.codeRange?.length;
     }
@@ -4266,10 +3875,6 @@
 
   @override
   int get codeOffset {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeOffset;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.codeRange?.offset;
     }
@@ -4283,9 +3888,6 @@
 
   @override
   String get displayName {
-    if (_kernel != null) {
-      return _kernel.name.name;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.name;
     }
@@ -4294,10 +3896,6 @@
 
   @override
   String get documentationComment {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.documentationComment;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.documentationComment?.text;
     }
@@ -4339,9 +3937,6 @@
 
   @override
   bool get isAbstract {
-    if (_kernel != null) {
-      return _kernel.isAbstract;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isAbstract;
     }
@@ -4350,11 +3945,6 @@
 
   @override
   bool get isAsynchronous {
-    if (_kernel != null) {
-      kernel.AsyncMarker marker = _kernel.function.asyncMarker;
-      return marker == kernel.AsyncMarker.Async ||
-          marker == kernel.AsyncMarker.AsyncStar;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isAsynchronous;
     }
@@ -4363,9 +3953,6 @@
 
   @override
   bool get isExternal {
-    if (_kernel != null) {
-      return _kernel.isExternal;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isExternal;
     }
@@ -4374,11 +3961,6 @@
 
   @override
   bool get isGenerator {
-    if (_kernel != null) {
-      kernel.AsyncMarker marker = _kernel.function.asyncMarker;
-      return marker == kernel.AsyncMarker.AsyncStar ||
-          marker == kernel.AsyncMarker.SyncStar;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isGenerator;
     }
@@ -4392,16 +3974,7 @@
   bool get isSynchronous => !isAsynchronous;
 
   @override
-  List<kernel.TypeParameter> get kernelTypeParams {
-    return _kernel?.function?.typeParameters;
-  }
-
-  @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (serializedExecutable != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, serializedExecutable.annotations);
@@ -4411,9 +3984,6 @@
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name.name;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.name;
     }
@@ -4423,9 +3993,6 @@
   @override
   int get nameOffset {
     int offset = super.nameOffset;
-    if (_kernel != null) {
-      return _kernel.fileOffset;
-    }
     if (offset == 0 && serializedExecutable != null) {
       return serializedExecutable.nameOffset;
     }
@@ -4435,10 +4002,6 @@
   @override
   List<ParameterElement> get parameters {
     if (_parameters == null) {
-      if (_kernel != null) {
-        _parameters =
-            ParameterElementImpl.forKernelFunction(this, _kernel.function);
-      }
       if (serializedExecutable != null) {
         _parameters = ParameterElementImpl.resynthesizeList(
             serializedExecutable.parameters, this);
@@ -4461,10 +4024,6 @@
 
   @override
   DartType get returnType {
-    if (_kernel != null) {
-      return _returnType ??= enclosingUnit._kernelContext
-          .getType(this, _kernel.function.returnType);
-    }
     if (serializedExecutable != null &&
         _declaredReturnType == null &&
         _returnType == null) {
@@ -4486,7 +4045,7 @@
 
   @override
   FunctionType get type {
-    if (_kernel != null || serializedExecutable != null) {
+    if (serializedExecutable != null) {
       _type ??= new FunctionTypeImpl(this);
     }
     return _type;
@@ -4602,11 +4161,6 @@
   final UnlinkedExportNonPublic _unlinkedExportNonPublic;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.LibraryDependency _kernel;
-
-  /**
    * The library that is exported from this library by this export directive.
    */
   LibraryElement _exportedLibrary;
@@ -4628,32 +4182,18 @@
   ExportElementImpl(int offset)
       : _unlinkedExportPublic = null,
         _unlinkedExportNonPublic = null,
-        _kernel = null,
         super(null, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ExportElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
-      : _unlinkedExportPublic = null,
-        _unlinkedExportNonPublic = null,
-        super.forKernel(enclosingLibrary);
-
-  /**
    * Initialize using the given serialized information.
    */
   ExportElementImpl.forSerialized(this._unlinkedExportPublic,
       this._unlinkedExportNonPublic, LibraryElementImpl enclosingLibrary)
-      : _kernel = null,
-        super.forSerialized(enclosingLibrary);
+      : super.forSerialized(enclosingLibrary);
 
   @override
   List<NamespaceCombinator> get combinators {
     if (_combinators == null) {
-      if (_kernel != null) {
-        _combinators =
-            ImportElementImpl._buildCombinatorsForKernel(_kernel.combinators);
-      }
       if (_unlinkedExportPublic != null) {
         _combinators = ImportElementImpl._buildCombinators(
             _unlinkedExportPublic.combinators);
@@ -4670,12 +4210,6 @@
   @override
   LibraryElement get exportedLibrary {
     if (_exportedLibrary == null) {
-      if (_kernel != null) {
-        Uri exportedUri = _kernel.targetLibrary.importUri;
-        String exportedUriStr = exportedUri.toString();
-        LibraryElementImpl library = enclosingElement as LibraryElementImpl;
-        _exportedLibrary = library._kernelContext.getLibrary(exportedUriStr);
-      }
       if (_unlinkedExportNonPublic != null) {
         LibraryElementImpl library = enclosingElement as LibraryElementImpl;
         _exportedLibrary =
@@ -4699,14 +4233,9 @@
   @override
   List<ElementAnnotation> get metadata {
     if (_metadata == null) {
-      CompilationUnitElementImpl definingUnit = library.definingCompilationUnit;
-      if (_kernel != null) {
-        return _metadata =
-            definingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-      }
       if (_unlinkedExportNonPublic != null) {
-        return _metadata = _buildAnnotations(
-            definingUnit, _unlinkedExportNonPublic.annotations);
+        return _metadata = _buildAnnotations(library.definingCompilationUnit,
+            _unlinkedExportNonPublic.annotations);
       }
     }
     return super.metadata;
@@ -4719,9 +4248,6 @@
 
   @override
   int get nameOffset {
-    if (_kernel != null) {
-      return _kernel.fileOffset;
-    }
     int offset = super.nameOffset;
     if (offset == 0 && _unlinkedExportNonPublic != null) {
       return _unlinkedExportNonPublic.offset;
@@ -4794,27 +4320,6 @@
   FieldElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  FieldElementImpl.forKernel(ElementImpl enclosingElement, kernel.Field kernel)
-      : super.forKernel(enclosingElement, kernel);
-
-  /**
-   * Initialize using the given kernel.
-   */
-  factory FieldElementImpl.forKernelFactory(
-      ClassElementImpl enclosingClass, kernel.Field kernel) {
-    if (kernel.isConst ||
-        kernel.isFinal &&
-            !kernel.isStatic &&
-            enclosingClass._hasConstConstructor) {
-      return new ConstFieldElementImpl.forKernel(enclosingClass, kernel);
-    } else {
-      return new FieldElementImpl.forKernel(enclosingClass, kernel);
-    }
-  }
-
-  /**
    * Initialize a newly created field element to have the given [name].
    */
   FieldElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -4851,9 +4356,6 @@
    * Return `true` if this field was explicitly marked as being covariant.
    */
   bool get isCovariant {
-    if (_kernel != null) {
-      return _kernel.isCovariant;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.isCovariant;
     }
@@ -4874,9 +4376,6 @@
 
   @override
   bool get isStatic {
-    if (_kernel != null) {
-      return _kernel.isStatic;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.isStatic;
     }
@@ -4929,13 +4428,6 @@
       : super(name, nameOffset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  FieldFormalParameterElementImpl.forKernel(ElementImpl enclosingElement,
-      kernel.VariableDeclaration kernel, ParameterKind parameterKind)
-      : super.forKernel(enclosingElement, kernel, parameterKind);
-
-  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   FieldFormalParameterElementImpl.forNode(Identifier name)
@@ -4952,9 +4444,6 @@
   FieldElement get field {
     if (_field == null) {
       String fieldName;
-      if (_kernel != null) {
-        fieldName = _kernel.name;
-      }
       if (unlinkedParam != null) {
         fieldName = unlinkedParam.name;
       }
@@ -5024,13 +4513,6 @@
   FunctionElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  FunctionElementImpl.forKernel(
-      ElementImpl enclosingElement, kernel.Procedure kernel)
-      : super.forKernel(enclosingElement, kernel);
-
-  /**
    * Initialize a newly created function element to have the given [name].
    */
   FunctionElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -5262,11 +4744,6 @@
     with TypeParameterizedElementMixin
     implements GenericFunctionTypeElement, FunctionTypedElementImpl {
   /**
-   * The kernel type.
-   */
-  final kernel.FunctionType _kernel;
-
-  /**
    * The unlinked representation of the generic function type in the summary.
    */
   EntityRef _entityRef;
@@ -5287,27 +4764,18 @@
   FunctionType _type;
 
   /**
-   * Initialize using the given kernel.
-   */
-  GenericFunctionTypeElementImpl.forKernel(
-      ElementImpl enclosingElement, this._kernel)
-      : super.forKernel(enclosingElement);
-
-  /**
    * Initialize a newly created function element to have no name and the given
    * [nameOffset]. This is used for function expressions, that have no name.
    */
   GenericFunctionTypeElementImpl.forOffset(int nameOffset)
-      : _kernel = null,
-        super("", nameOffset);
+      : super("", nameOffset);
 
   /**
    * Initialize from serialized information.
    */
   GenericFunctionTypeElementImpl.forSerialized(
       ElementImpl enclosingElement, this._entityRef)
-      : _kernel = null,
-        super.forSerialized(enclosingElement);
+      : super.forSerialized(enclosingElement);
 
   @override
   TypeParameterizedElementMixin get enclosingTypeParameterContext {
@@ -5318,25 +4786,11 @@
   String get identifier => '-';
 
   @override
-  List<kernel.TypeParameter> get kernelTypeParams => _kernel?.typeParameters;
-
-  @override
   ElementKind get kind => ElementKind.GENERIC_FUNCTION_TYPE;
 
   @override
   List<ParameterElement> get parameters {
     if (_parameters == null) {
-      if (_kernel != null) {
-        var parameters =
-            enclosingUnit._kernelContext.getFunctionTypeParameters(_kernel);
-        var positionalParameters = parameters[0];
-        var namedParameters = parameters[1];
-        _parameters = ParameterElementImpl.forKernelParameters(
-            this,
-            _kernel.requiredParameterCount,
-            positionalParameters,
-            namedParameters);
-      }
       if (_entityRef != null) {
         _parameters = ParameterElementImpl.resynthesizeList(
             _entityRef.syntheticParams, this);
@@ -5360,10 +4814,6 @@
   @override
   DartType get returnType {
     if (_returnType == null) {
-      if (_kernel != null) {
-        _returnType =
-            enclosingUnit._kernelContext.getType(this, _kernel.returnType);
-      }
       if (_entityRef != null) {
         _returnType = enclosingUnit.resynthesizerContext.resolveTypeRef(
             this, _entityRef.syntheticReturnType,
@@ -5473,11 +4923,6 @@
   final UnlinkedTypedef _unlinkedTypedef;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.Typedef _kernel;
-
-  /**
    * The element representing the generic function type.
    */
   GenericFunctionTypeElementImpl _function;
@@ -5492,23 +4937,13 @@
    */
   GenericTypeAliasElementImpl(String name, int offset)
       : _unlinkedTypedef = null,
-        _kernel = null,
         super(name, offset);
 
   /**
-   * Initialize using the given serialized information.
-   */
-  GenericTypeAliasElementImpl.forKernel(
-      CompilationUnitElementImpl enclosingUnit, this._kernel)
-      : _unlinkedTypedef = null,
-        super.forSerialized(enclosingUnit);
-
-  /**
    * Initialize a newly created type alias element to have the given [name].
    */
   GenericTypeAliasElementImpl.forNode(Identifier name)
       : _unlinkedTypedef = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -5516,8 +4951,7 @@
    */
   GenericTypeAliasElementImpl.forSerialized(
       this._unlinkedTypedef, CompilationUnitElementImpl enclosingUnit)
-      : _kernel = null,
-        super.forSerialized(enclosingUnit);
+      : super.forSerialized(enclosingUnit);
 
   @override
   int get codeLength {
@@ -5540,10 +4974,6 @@
 
   @override
   String get documentationComment {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.documentationComment;
-    }
     if (_unlinkedTypedef != null) {
       return _unlinkedTypedef.documentationComment?.text;
     }
@@ -5564,19 +4994,6 @@
   @override
   GenericFunctionTypeElementImpl get function {
     if (_function == null) {
-      if (_kernel != null) {
-        var kernelType = _kernel.type;
-        if (kernelType is kernel.FunctionType) {
-          _function =
-              new GenericFunctionTypeElementImpl.forKernel(this, kernelType);
-        } else {
-          // Error recovery.
-          _function = new GenericFunctionTypeElementImpl.forOffset(-1);
-          _function.enclosingElement = this;
-          _function.returnType = DynamicTypeImpl.instance;
-          _function.parameters = <ParameterElement>[];
-        }
-      }
       if (_unlinkedTypedef != null) {
         if (_unlinkedTypedef.style == TypedefStyle.genericFunctionType) {
           DartType type = enclosingUnit.resynthesizerContext.resolveTypeRef(
@@ -5617,17 +5034,10 @@
   }
 
   @override
-  List<kernel.TypeParameter> get kernelTypeParams => _kernel?.typeParameters;
-
-  @override
   ElementKind get kind => ElementKind.FUNCTION_TYPE_ALIAS;
 
   @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (_unlinkedTypedef != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, _unlinkedTypedef.annotations);
@@ -5637,9 +5047,6 @@
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name;
-    }
     if (_unlinkedTypedef != null) {
       return _unlinkedTypedef.name;
     }
@@ -5782,37 +5189,20 @@
   final UnlinkedCombinator _unlinkedCombinator;
 
   /**
-   * The kernel for the element.
-   */
-  final kernel.Combinator _kernel;
-
-  /**
    * The names that are not to be made visible in the importing library even if
    * they are defined in the imported library.
    */
   List<String> _hiddenNames;
 
-  HideElementCombinatorImpl()
-      : _unlinkedCombinator = null,
-        _kernel = null;
-
-  /**
-   * Initialize using the given kernel.
-   */
-  HideElementCombinatorImpl.forKernel(this._kernel)
-      : _unlinkedCombinator = null;
+  HideElementCombinatorImpl() : _unlinkedCombinator = null;
 
   /**
    * Initialize using the given serialized information.
    */
-  HideElementCombinatorImpl.forSerialized(this._unlinkedCombinator)
-      : _kernel = null;
+  HideElementCombinatorImpl.forSerialized(this._unlinkedCombinator);
 
   @override
   List<String> get hiddenNames {
-    if (_kernel != null) {
-      _hiddenNames ??= _kernel.names;
-    }
     if (_unlinkedCombinator != null) {
       _hiddenNames ??= _unlinkedCombinator.hides.toList(growable: false);
     }
@@ -5855,16 +5245,6 @@
   final int _linkedDependency;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.LibraryDependency _kernel;
-
-  /**
-   * Whether this import is synthetic.
-   */
-  final bool _kernelSynthetic;
-
-  /**
    * The offset of the prefix of this import in the file that contains the this
    * import directive, or `-1` if this import is synthetic.
    */
@@ -5904,35 +5284,18 @@
   ImportElementImpl(int offset)
       : _unlinkedImport = null,
         _linkedDependency = null,
-        _kernel = null,
-        _kernelSynthetic = false,
         super(null, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ImportElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel,
-      {bool isSynthetic: false})
-      : _unlinkedImport = null,
-        _linkedDependency = null,
-        _kernelSynthetic = isSynthetic,
-        super.forKernel(enclosingLibrary);
-
-  /**
    * Initialize using the given serialized information.
    */
   ImportElementImpl.forSerialized(this._unlinkedImport, this._linkedDependency,
       LibraryElementImpl enclosingLibrary)
-      : _kernel = null,
-        _kernelSynthetic = false,
-        super.forSerialized(enclosingLibrary);
+      : super.forSerialized(enclosingLibrary);
 
   @override
   List<NamespaceCombinator> get combinators {
     if (_combinators == null) {
-      if (_kernel != null) {
-        _combinators = _buildCombinatorsForKernel(_kernel.combinators);
-      }
       if (_unlinkedImport != null) {
         _combinators = _buildCombinators(_unlinkedImport.combinators);
       }
@@ -5958,14 +5321,6 @@
 
   @override
   LibraryElement get importedLibrary {
-    if (_kernel != null) {
-      if (_importedLibrary == null) {
-        Uri importedUri = _kernel.targetLibrary.importUri;
-        String importedUriStr = importedUri.toString();
-        LibraryElementImpl library = enclosingElement as LibraryElementImpl;
-        _importedLibrary = library._kernelContext.getLibrary(importedUriStr);
-      }
-    }
     if (_linkedDependency != null) {
       if (_importedLibrary == null) {
         LibraryElementImpl library = enclosingElement as LibraryElementImpl;
@@ -5987,9 +5342,6 @@
 
   @override
   bool get isDeferred {
-    if (_kernel != null) {
-      return _kernel.isDeferred;
-    }
     if (_unlinkedImport != null) {
       return _unlinkedImport.isDeferred;
     }
@@ -5998,9 +5350,6 @@
 
   @override
   bool get isSynthetic {
-    if (_kernel != null) {
-      return _kernelSynthetic;
-    }
     if (_unlinkedImport != null) {
       return _unlinkedImport.isImplicit;
     }
@@ -6013,14 +5362,9 @@
   @override
   List<ElementAnnotation> get metadata {
     if (_metadata == null) {
-      CompilationUnitElementImpl definingUnit = library.definingCompilationUnit;
-      if (_kernel != null) {
-        return _metadata =
-            definingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-      }
       if (_unlinkedImport != null) {
-        return _metadata =
-            _buildAnnotations(definingUnit, _unlinkedImport.annotations);
+        return _metadata = _buildAnnotations(
+            library.definingCompilationUnit, _unlinkedImport.annotations);
       }
     }
     return super.metadata;
@@ -6033,9 +5377,6 @@
 
   @override
   int get nameOffset {
-    if (_kernel != null) {
-      return _kernel.fileOffset;
-    }
     int offset = super.nameOffset;
     if (offset == 0 && _unlinkedImport != null) {
       if (_unlinkedImport.isImplicit) {
@@ -6054,10 +5395,6 @@
 
   PrefixElement get prefix {
     if (_prefix == null) {
-      if (_kernel != null && _kernel.name != null) {
-        LibraryElementImpl library = enclosingElement as LibraryElementImpl;
-        _prefix = new PrefixElementImpl.forKernel(library, _kernel);
-      }
       if (_unlinkedImport != null && _unlinkedImport.prefixReference != 0) {
         LibraryElementImpl library = enclosingElement as LibraryElementImpl;
         _prefix = new PrefixElementImpl.forSerialized(_unlinkedImport, library);
@@ -6168,145 +5505,6 @@
       return const <NamespaceCombinator>[];
     }
   }
-
-  static List<NamespaceCombinator> _buildCombinatorsForKernel(
-      List<kernel.Combinator> unlinkedCombinators) {
-    int length = unlinkedCombinators.length;
-    if (length != 0) {
-      List<NamespaceCombinator> combinators =
-          new List<NamespaceCombinator>(length);
-      for (int i = 0; i < length; i++) {
-        kernel.Combinator unlinkedCombinator = unlinkedCombinators[i];
-        combinators[i] = unlinkedCombinator.isShow
-            ? new ShowElementCombinatorImpl.forKernel(unlinkedCombinator)
-            : new HideElementCombinatorImpl.forKernel(unlinkedCombinator);
-      }
-      return combinators;
-    } else {
-      return const <NamespaceCombinator>[];
-    }
-  }
-}
-
-/**
- * The kernel context in which a library is resynthesized.
- */
-abstract class KernelLibraryResynthesizerContext {
-  /**
-   * The Kernel library for `dart:core`.
-   */
-  kernel.Library get coreLibrary;
-
-  /**
-   * Return `true` if the library has an import directive whose URI uses the
-   * "dart-ext" scheme.
-   */
-  bool get hasExtUri;
-
-  /**
-   * The Kernel library being resynthesized.
-   */
-  kernel.Library get library;
-
-  /**
-   * Return the export namespace of the library.
-   */
-  Namespace buildExportNamespace();
-
-  /**
-   * Return the public namespace of the library.
-   */
-  Namespace buildPublicNamespace();
-
-  /**
-   * Return the [LibraryElement] for the given absolute [uriStr].
-   */
-  LibraryElement getLibrary(String uriStr);
-}
-
-/**
- * Top-level declarations of a Kernel library filtered by the unit.
- */
-abstract class KernelUnit {
-  List<kernel.Expression> get annotations;
-
-  List<kernel.Class> get classes;
-
-  List<kernel.Field> get fields;
-
-  List<kernel.Procedure> get procedures;
-
-  List<kernel.Typedef> get typedefs;
-}
-
-/**
- * The kernel context in which a unit is resynthesized.
- */
-abstract class KernelUnitResynthesizerContext {
-  /**
-   * Subset of top-level declarations in the unit.
-   */
-  KernelUnit get kernelUnit;
-
-  /**
-   * Build [ElementAnnotation]s for the given Kernel [annotations].
-   */
-  List<ElementAnnotation> buildAnnotations(List<kernel.Expression> annotations);
-
-  /**
-   * Build explicit top-level property accessors.
-   */
-  UnitExplicitTopLevelAccessors buildTopLevelAccessors();
-
-  /**
-   * Build explicit top-level variables.
-   */
-  UnitExplicitTopLevelVariables buildTopLevelVariables();
-
-  /**
-   * Return the resynthesized [ConstructorInitializer] for the given Kernel
-   * [initializer], or `null` if synthetic.
-   */
-  ConstructorInitializer getConstructorInitializer(
-      ConstructorElementImpl constructor, kernel.Initializer initializer);
-
-  /**
-   * Return the [Expression] for the given kernel.
-   */
-  Expression getExpression(ElementImpl context, kernel.Expression expression);
-
-  /**
-   * Return the list with exactly two elements - positional and named parameter
-   * lists.
-   */
-  List<List<kernel.VariableDeclaration>> getFunctionTypeParameters(
-      kernel.FunctionType functionType);
-
-  /**
-   * Return the [InterfaceType] for the given Kernel [type], or `null` if the
-   * [type] does not correspond to an [InterfaceType].
-   */
-  InterfaceType getInterfaceType(ElementImpl context, kernel.Supertype type);
-
-  /**
-   * Return the [InterfaceType]s for the given Kernel [types], skipping
-   * the elements that don't correspond to an [InterfaceType].
-   */
-  List<InterfaceType> getInterfaceTypes(
-      ElementImpl context, List<kernel.Supertype> types);
-
-  /**
-   * Return the [ConstructorElementImpl] to which the given [kernelConstructor]
-   * or [kernelFactory] redirects.
-   */
-  ConstructorElement getRedirectedConstructor(ElementImpl context,
-      kernel.Constructor kernelConstructor, kernel.Procedure kernelFactory);
-
-  /**
-   * Return the [DartType] for the given Kernel [type], or `null` if the [type]
-   * does not correspond to a [DartType].
-   */
-  DartType getType(ElementImpl context, kernel.DartType type);
 }
 
 /**
@@ -6376,8 +5574,6 @@
  * A concrete implementation of a [LibraryElement].
  */
 class LibraryElementImpl extends ElementImpl implements LibraryElement {
-  static final Uri _dartCore = Uri.parse('dart:core');
-
   /**
    * The analysis context in which this library is defined.
    */
@@ -6385,11 +5581,6 @@
 
   final LibraryResynthesizerContext resynthesizerContext;
 
-  /**
-   * The kernel context in which the library is resynthesized.
-   */
-  final KernelLibraryResynthesizerContext _kernelContext;
-
   final UnlinkedUnit unlinkedDefiningUnit;
 
   /**
@@ -6467,34 +5658,16 @@
    */
   LibraryElementImpl(this.context, String name, int offset, this.nameLength)
       : resynthesizerContext = null,
-        _kernelContext = null,
         unlinkedDefiningUnit = null,
         super(name, offset);
 
   /**
-   * Initialize using the given kernel information.
-   */
-  LibraryElementImpl.forKernel(this.context, this._kernelContext)
-      : resynthesizerContext = null,
-        unlinkedDefiningUnit = null,
-        nameLength = _kernelContext.library.name?.length ?? 0,
-        super.forKernel(null) {
-    _name = _kernelContext.library.name ?? '';
-    _nameOffset = _kernelContext.library.fileOffset;
-    setResolutionCapability(
-        LibraryResolutionCapability.resolvedTypeNames, true);
-    setResolutionCapability(
-        LibraryResolutionCapability.constantExpressions, true);
-  }
-
-  /**
    * Initialize a newly created library element in the given [context] to have
    * the given [name].
    */
   LibraryElementImpl.forNode(this.context, LibraryIdentifier name)
       : nameLength = name != null ? name.length : 0,
         resynthesizerContext = null,
-        _kernelContext = null,
         unlinkedDefiningUnit = null,
         super.forNode(name);
 
@@ -6503,8 +5676,7 @@
    */
   LibraryElementImpl.forSerialized(this.context, String name, int offset,
       this.nameLength, this.resynthesizerContext, this.unlinkedDefiningUnit)
-      : _kernelContext = null,
-        super.forSerialized(null) {
+      : super.forSerialized(null) {
     _name = name;
     _nameOffset = offset;
     setResolutionCapability(
@@ -6547,10 +5719,6 @@
 
   @override
   String get documentationComment {
-    if (_kernelContext != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernelContext.library);
-      return metadata?.documentationComment;
-    }
     if (unlinkedDefiningUnit != null) {
       return unlinkedDefiningUnit.libraryDocumentationComment?.text;
     }
@@ -6582,9 +5750,6 @@
 
   @override
   Namespace get exportNamespace {
-    if (_kernelContext != null) {
-      _exportNamespace ??= _kernelContext.buildExportNamespace();
-    }
     if (resynthesizerContext != null) {
       _exportNamespace ??= resynthesizerContext.buildExportNamespace();
     }
@@ -6598,12 +5763,6 @@
   @override
   List<ExportElement> get exports {
     if (_exports == null) {
-      if (_kernelContext != null) {
-        _exports = _kernelContext.library.dependencies
-            .where((k) => k.isExport)
-            .map((k) => new ExportElementImpl.forKernel(this, k))
-            .toList(growable: false);
-      }
       if (unlinkedDefiningUnit != null) {
         List<UnlinkedExportNonPublic> unlinkedNonPublicExports =
             unlinkedDefiningUnit.exports;
@@ -6647,9 +5806,6 @@
 
   @override
   bool get hasExtUri {
-    if (_kernelContext != null) {
-      return _kernelContext.hasExtUri;
-    }
     if (unlinkedDefiningUnit != null) {
       List<UnlinkedImport> unlinkedImports = unlinkedDefiningUnit.imports;
       for (UnlinkedImport import in unlinkedImports) {
@@ -6700,42 +5856,6 @@
   @override
   List<ImportElement> get imports {
     if (_imports == null) {
-      if (_kernelContext != null) {
-        var dependencies = _kernelContext.library.dependencies;
-        int numOfDependencies = dependencies.length;
-        // Compute the number of import dependencies.
-        bool hasCore = false;
-        int numOfImports = 0;
-        for (int i = 0; i < numOfDependencies; i++) {
-          kernel.LibraryDependency dependency = dependencies[i];
-          if (dependency.isImport) {
-            numOfImports++;
-            if (dependency.targetLibrary.importUri == _dartCore) {
-              hasCore = true;
-            }
-          }
-        }
-
-        // Create import elements.
-        var imports = new List<ImportElement>(numOfImports + (hasCore ? 0 : 1));
-        int importIndex = 0;
-        for (int i = 0; i < numOfDependencies; i++) {
-          kernel.LibraryDependency dependency = dependencies[i];
-          if (dependency.isImport) {
-            imports[importIndex++] =
-                new ImportElementImpl.forKernel(this, dependency);
-          }
-        }
-
-        // If dart:core is not imported explicitly, import it implicitly.
-        if (!hasCore) {
-          imports[numOfImports] = new ImportElementImpl.forKernel(this,
-              new kernel.LibraryDependency.import(_kernelContext.coreLibrary),
-              isSynthetic: true);
-        }
-        // Set imports into the field.
-        _imports = imports;
-      }
       if (unlinkedDefiningUnit != null) {
         _imports = buildImportsFromSummary(this, unlinkedDefiningUnit.imports,
             resynthesizerContext.linkedLibrary.importDependencies);
@@ -6908,11 +6028,6 @@
   @override
   List<ElementAnnotation> get metadata {
     if (_metadata == null) {
-      if (_kernelContext != null) {
-        CompilationUnitElementImpl definingUnit = _definingCompilationUnit;
-        _metadata = definingUnit._kernelContext
-            .buildAnnotations(_kernelContext.library.annotations);
-      }
       if (unlinkedDefiningUnit != null) {
         _metadata = _buildAnnotations(
             _definingCompilationUnit as CompilationUnitElementImpl,
@@ -6945,9 +6060,6 @@
 
   @override
   Namespace get publicNamespace {
-    if (_kernelContext != null) {
-      _publicNamespace ??= _kernelContext.buildPublicNamespace();
-    }
     if (resynthesizerContext != null) {
       _publicNamespace ??= resynthesizerContext.buildPublicNamespace();
     }
@@ -7327,24 +6439,12 @@
  */
 class MethodElementImpl extends ExecutableElementImpl implements MethodElement {
   /**
-   * The kernel of the element.
-   */
-  kernel.Procedure _kernelProcedure;
-
-  /**
    * Initialize a newly created method element to have the given [name] at the
    * given [offset].
    */
   MethodElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  MethodElementImpl.forKernel(
-      ClassElementImpl enclosingClass, this._kernelProcedure)
-      : super.forKernel(enclosingClass, _kernelProcedure);
-
-  /**
    * Initialize a newly created method element to have the given [name].
    */
   MethodElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -7403,9 +6503,6 @@
 
   @override
   bool get isStatic {
-    if (_kernel != null) {
-      return _kernelProcedure.isStatic;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isStatic;
     }
@@ -7499,13 +6596,6 @@
   MixinElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  MixinElementImpl.forKernel(
-      CompilationUnitElementImpl enclosingUnit, kernel.Class kernel)
-      : super.forKernel(enclosingUnit, kernel);
-
-  /**
    * Initialize a newly created class element to have the given [name].
    */
   MixinElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -7523,11 +6613,20 @@
   @override
   List<InterfaceType> get superclassConstraints {
     if (_superclassConstraints == null) {
-      if (_kernel != null) {
-        throw new UnimplementedError();
-      }
       if (_unlinkedClass != null) {
-        throw new UnimplementedError();
+        List<InterfaceType> constraints;
+        if (_unlinkedClass.superclassConstraints.isNotEmpty) {
+          ResynthesizerContext context = enclosingUnit.resynthesizerContext;
+          constraints = _unlinkedClass.superclassConstraints
+              .map((EntityRef t) => context.resolveTypeRef(this, t))
+              .where(_isClassInterfaceType)
+              .cast<InterfaceType>()
+              .toList(growable: false);
+        }
+        if (constraints == null || constraints.isEmpty) {
+          constraints = [context.typeProvider.objectType];
+        }
+        _superclassConstraints = constraints;
       }
     }
     return _superclassConstraints ?? const <InterfaceType>[];
@@ -7535,11 +6634,10 @@
 
   void set superclassConstraints(List<InterfaceType> superclassConstraints) {
     _assertNotResynthesized(_unlinkedClass);
-    // Note: if we are using kernel or the analysis driver, the set of
-    // superclass constraints has already been computed, and it's more accurate.
-    // So we only store superclass constraints if we are using the old task
-    // model.
-    if (_unlinkedClass == null && _kernel == null) {
+    // Note: if we are using  the analysis driver, the set of superclass
+    // constraints has already been computed, and it's more accurate. So we
+    // only store superclass constraints if we are using the old task model.
+    if (_unlinkedClass == null) {
       _superclassConstraints = superclassConstraints;
     }
   }
@@ -7708,53 +6806,26 @@
   /**
    * The analysis context in which the multiply defined elements are defined.
    */
+  @override
   final AnalysisContext context;
 
   /**
    * The name of the conflicting elements.
    */
-  String _name;
-
-  /**
-   * A list containing all of the elements defined in SDK libraries that
-   * conflict.
-   */
-  final List<Element> sdkElements;
-
-  /**
-   * A list containing all of the elements defined in non-SDK libraries that
-   * conflict.
-   */
-  final List<Element> nonSdkElements;
-
-  /**
-   * Initialize a newly created element in the given [context] to represent a
-   * list of conflicting [sdkElements] and [nonSdkElements]. At least one of the
-   * lists must contain more than one element.
-   */
-  MultiplyDefinedElementImpl(
-      this.context, this.sdkElements, this.nonSdkElements) {
-    if (nonSdkElements.length > 0) {
-      _name = nonSdkElements[0].name;
-    } else {
-      _name = sdkElements[0].name;
-    }
-  }
+  @override
+  final String name;
 
   @override
-  List<Element> get conflictingElements {
-    if (sdkElements.isEmpty) {
-      return nonSdkElements;
-    } else if (nonSdkElements.isEmpty) {
-      return sdkElements;
-    }
-    List<Element> elements = nonSdkElements.toList();
-    elements.addAll(sdkElements);
-    return elements;
-  }
+  final List<Element> conflictingElements;
+
+  /**
+   * Initialize a newly created element in the given [context] to represent
+   * the given non-empty [conflictingElements].
+   */
+  MultiplyDefinedElementImpl(this.context, this.name, this.conflictingElements);
 
   @override
-  String get displayName => _name;
+  String get displayName => name;
 
   @override
   String get documentationComment => null;
@@ -7855,9 +6926,6 @@
   List<ElementAnnotation> get metadata => const <ElementAnnotation>[];
 
   @override
-  String get name => _name;
-
-  @override
   int get nameLength => displayName != null ? displayName.length : 0;
 
   @override
@@ -7923,8 +6991,7 @@
     }
 
     buffer.write("[");
-    writeList(nonSdkElements);
-    writeList(sdkElements);
+    writeList(conflictingElements);
     buffer.write("]");
     return buffer.toString();
   }
@@ -7933,47 +7000,6 @@
   void visitChildren(ElementVisitor visitor) {
     // There are no children to visit
   }
-
-  /**
-   * Return an element in the given [context] that represents the fact that the
-   * [firstElement] and [secondElement] conflict. (If the elements are the same,
-   * then one of the two will be returned directly.)
-   */
-  static Element fromElements(
-      AnalysisContext context, Element firstElement, Element secondElement) {
-    Set<Element> sdkElements = new HashSet<Element>.identity();
-    Set<Element> nonSdkElements = new HashSet<Element>.identity();
-    void add(Element element) {
-      if (element != null) {
-        if (element is MultiplyDefinedElementImpl) {
-          sdkElements.addAll(element.sdkElements);
-          nonSdkElements.addAll(element.nonSdkElements);
-        } else if (element.library.isInSdk) {
-          sdkElements.add(element);
-        } else {
-          nonSdkElements.add(element);
-        }
-      }
-    }
-
-    add(firstElement);
-    add(secondElement);
-    int nonSdkCount = nonSdkElements.length;
-    if (nonSdkCount == 0) {
-      int sdkCount = sdkElements.length;
-      if (sdkCount == 0) {
-        return null;
-      } else if (sdkCount == 1) {
-        return sdkElements.first;
-      }
-    } else if (nonSdkCount == 1) {
-      return nonSdkElements.first;
-    }
-    return new MultiplyDefinedElementImpl(
-        context,
-        sdkElements.toList(growable: false),
-        nonSdkElements.toList(growable: false));
-  }
 }
 
 /**
@@ -8039,33 +7065,18 @@
   final UnlinkedVariable _unlinkedVariable;
 
   /**
-   * The kernel of the element;
-   */
-  final kernel.Field _kernel;
-
-  /**
    * Initialize a newly created variable element to have the given [name] and
    * [offset].
    */
   NonParameterVariableElementImpl(String name, int offset)
       : _unlinkedVariable = null,
-        _kernel = null,
         super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  NonParameterVariableElementImpl.forKernel(
-      ElementImpl enclosingElement, this._kernel)
-      : _unlinkedVariable = null,
-        super.forKernel(enclosingElement);
-
-  /**
    * Initialize a newly created variable element to have the given [name].
    */
   NonParameterVariableElementImpl.forNode(Identifier name)
       : _unlinkedVariable = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -8073,15 +7084,10 @@
    */
   NonParameterVariableElementImpl.forSerialized(
       this._unlinkedVariable, ElementImpl enclosingElement)
-      : _kernel = null,
-        super.forSerialized(enclosingElement);
+      : super.forSerialized(enclosingElement);
 
   @override
   int get codeLength {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeLength;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.codeRange?.length;
     }
@@ -8090,10 +7096,6 @@
 
   @override
   int get codeOffset {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeOffset;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.codeRange?.offset;
     }
@@ -8102,10 +7104,6 @@
 
   @override
   String get documentationComment {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.documentationComment;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.documentationComment?.text;
     }
@@ -8129,11 +7127,6 @@
   @override
   FunctionElement get initializer {
     if (_initializer == null) {
-      if (_kernel != null && _kernel.initializer != null) {
-        _initializer = new FunctionElementImpl.forOffset(-1)
-          ..enclosingElement = this
-          ..isSynthetic = true;
-      }
       if (_unlinkedVariable != null) {
         UnlinkedExecutable unlinkedInitializer = _unlinkedVariable.initializer;
         if (unlinkedInitializer != null) {
@@ -8159,9 +7152,6 @@
 
   @override
   bool get isConst {
-    if (_kernel != null) {
-      return _kernel.isConst;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.isConst;
     }
@@ -8176,9 +7166,6 @@
 
   @override
   bool get isFinal {
-    if (_kernel != null) {
-      return _kernel.isFinal;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.isFinal;
     }
@@ -8193,10 +7180,6 @@
 
   @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (_unlinkedVariable != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, _unlinkedVariable.annotations);
@@ -8206,9 +7189,6 @@
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name.name;
-    }
     if (_unlinkedVariable != null) {
       return _unlinkedVariable.name;
     }
@@ -8219,9 +7199,6 @@
   int get nameOffset {
     int offset = super.nameOffset;
     if (offset == 0) {
-      if (_kernel != null) {
-        return _kernel.fileOffset;
-      }
       if (_unlinkedVariable != null) {
         return _unlinkedVariable.nameOffset;
       }
@@ -8231,9 +7208,6 @@
 
   @override
   DartType get type {
-    if (_kernel != null) {
-      return _type ??= enclosingUnit._kernelContext.getType(this, _kernel.type);
-    }
     if (_unlinkedVariable != null && _declaredType == null && _type == null) {
       _type = enclosingUnit.resynthesizerContext
           .resolveLinkedType(this, _unlinkedVariable.inferredTypeSlot);
@@ -8260,11 +7234,6 @@
   }
 
   /**
-   * Subclasses need this getter, see [ConstVariableElement._kernelInitializer].
-   */
-  kernel.Expression get _kernelInitializer => _kernel?.initializer;
-
-  /**
    * Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
    */
   UnlinkedExpr get _unlinkedConst => _unlinkedVariable?.initializer?.bodyExpr;
@@ -8282,11 +7251,6 @@
   final UnlinkedParam unlinkedParam;
 
   /**
-   * The kernel of the element;
-   */
-  final kernel.VariableDeclaration _kernel;
-
-  /**
    * The kind of this parameter.
    */
   ParameterKind _parameterKind;
@@ -8315,23 +7279,13 @@
    */
   ParameterElementImpl(String name, int nameOffset)
       : unlinkedParam = null,
-        _kernel = null,
         super(name, nameOffset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  ParameterElementImpl.forKernel(
-      ElementImpl enclosingElement, this._kernel, this._parameterKind)
-      : unlinkedParam = null,
-        super.forKernel(enclosingElement);
-
-  /**
    * Initialize a newly created parameter element to have the given [name].
    */
   ParameterElementImpl.forNode(Identifier name)
       : unlinkedParam = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -8339,8 +7293,7 @@
    */
   ParameterElementImpl.forSerialized(
       this.unlinkedParam, ElementImpl enclosingElement)
-      : _kernel = null,
-        super.forSerialized(enclosingElement);
+      : super.forSerialized(enclosingElement);
 
   /**
    * Initialize using the given serialized information.
@@ -8384,10 +7337,6 @@
 
   @override
   int get codeLength {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeLength;
-    }
     if (unlinkedParam != null) {
       return unlinkedParam.codeRange?.length;
     }
@@ -8396,10 +7345,6 @@
 
   @override
   int get codeOffset {
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata?.codeOffset;
-    }
     if (unlinkedParam != null) {
       return unlinkedParam.codeRange?.offset;
     }
@@ -8464,11 +7409,6 @@
   @override
   FunctionElement get initializer {
     if (_initializer == null) {
-      if (_kernel != null) {
-        _initializer = new FunctionElementImpl.forOffset(-1)
-          ..enclosingElement = this
-          ..isSynthetic = true;
-      }
       if (unlinkedParam != null) {
         UnlinkedExecutable unlinkedInitializer = unlinkedParam.initializer;
         if (unlinkedInitializer != null) {
@@ -8494,9 +7434,6 @@
 
   @override
   bool get isConst {
-    if (_kernel != null) {
-      return false;
-    }
     if (unlinkedParam != null) {
       return false;
     }
@@ -8526,9 +7463,6 @@
    * Return true if this parameter is explicitly marked as being covariant.
    */
   bool get isExplicitlyCovariant {
-    if (_kernel != null) {
-      return _kernel.isCovariant;
-    }
     if (unlinkedParam != null) {
       return unlinkedParam.isExplicitlyCovariant;
     }
@@ -8545,9 +7479,6 @@
 
   @override
   bool get isFinal {
-    if (_kernel != null) {
-      return _kernel.isFinal;
-    }
     if (unlinkedParam != null) {
       return unlinkedParam.isFinal;
     }
@@ -8574,10 +7505,6 @@
 
   @override
   List<ElementAnnotation> get metadata {
-    if (_kernel != null) {
-      _metadata ??=
-          enclosingUnit._kernelContext.buildAnnotations(_kernel.annotations);
-    }
     if (unlinkedParam != null) {
       return _metadata ??=
           _buildAnnotations(enclosingUnit, unlinkedParam.annotations);
@@ -8587,9 +7514,6 @@
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name;
-    }
     if (unlinkedParam != null) {
       return unlinkedParam.name;
     }
@@ -8600,9 +7524,6 @@
   int get nameOffset {
     int offset = super.nameOffset;
     if (offset == 0) {
-      if (_kernel != null) {
-        return _kernel.fileOffset;
-      }
       if (unlinkedParam != null) {
         if (isSynthetic ||
             (unlinkedParam.name.isEmpty &&
@@ -8681,11 +7602,6 @@
   }
 
   /**
-   * Subclasses need this getter, see [ConstVariableElement._kernelInitializer].
-   */
-  kernel.Expression get _kernelInitializer => _kernel?.initializer;
-
-  /**
    * Subclasses need this getter, see [ConstVariableElement._unlinkedConst].
    */
   UnlinkedExpr get _unlinkedConst => unlinkedParam?.initializer?.bodyExpr;
@@ -8737,10 +7653,6 @@
    * been build yet, build them and remember in the corresponding fields.
    */
   void _resynthesizeTypeAndParameters() {
-    if (_kernel != null && _type == null) {
-      kernel.DartType type = _kernel.type;
-      _type = enclosingUnit._kernelContext.getType(this, type);
-    }
     if (unlinkedParam != null && _declaredType == null && _type == null) {
       if (unlinkedParam.isFunctionTyped) {
         CompilationUnitElementImpl enclosingUnit = this.enclosingUnit;
@@ -8769,68 +7681,6 @@
   }
 
   /**
-   * Create and return [ParameterElement]s for the given [function].
-   */
-  static List<ParameterElement> forKernelFunction(
-      ElementImpl enclosingElement, kernel.FunctionNode function) {
-    return forKernelParameters(
-        enclosingElement,
-        function.requiredParameterCount,
-        function.positionalParameters,
-        function.namedParameters);
-  }
-
-  /**
-   * Create and return [ParameterElement]s for the given Kernel parameters.
-   */
-  static List<ParameterElement> forKernelParameters(
-      ElementImpl enclosingElement,
-      int requiredParameterCount,
-      List<kernel.VariableDeclaration> positionalParameters,
-      List<kernel.VariableDeclaration> namedParameters) {
-    if (positionalParameters.isNotEmpty || namedParameters.isNotEmpty) {
-      var parameters = <ParameterElement>[];
-
-      // Add positional required and optional parameters.
-      for (int i = 0; i < positionalParameters.length; i++) {
-        kernel.VariableDeclaration parameter = positionalParameters[i];
-        if (i < requiredParameterCount) {
-          if (parameter.isFieldFormal) {
-            parameters.add(new FieldFormalParameterElementImpl.forKernel(
-                enclosingElement, parameter, ParameterKind.REQUIRED));
-          } else {
-            parameters.add(new ParameterElementImpl.forKernel(
-                enclosingElement, parameter, ParameterKind.REQUIRED));
-          }
-        } else {
-          if (parameter.isFieldFormal) {
-            parameters.add(new DefaultFieldFormalParameterElementImpl.forKernel(
-                enclosingElement, parameter, ParameterKind.POSITIONAL));
-          } else {
-            parameters.add(new DefaultParameterElementImpl.forKernel(
-                enclosingElement, parameter, ParameterKind.POSITIONAL));
-          }
-        }
-      }
-
-      // Add named parameters.
-      for (var k in namedParameters) {
-        if (k.isFieldFormal) {
-          parameters.add(new DefaultFieldFormalParameterElementImpl.forKernel(
-              enclosingElement, k, ParameterKind.NAMED));
-        } else {
-          parameters.add(new DefaultParameterElementImpl.forKernel(
-              enclosingElement, k, ParameterKind.NAMED));
-        }
-      }
-
-      return parameters;
-    } else {
-      return const <ParameterElement>[];
-    }
-  }
-
-  /**
    * Create and return [ParameterElement]s for the given [unlinkedParameters].
    */
   static List<ParameterElement> resynthesizeList(
@@ -8962,32 +7812,18 @@
   final UnlinkedImport _unlinkedImport;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.LibraryDependency _kernel;
-
-  /**
    * Initialize a newly created method element to have the given [name] and
    * [nameOffset].
    */
   PrefixElementImpl(String name, int nameOffset)
       : _unlinkedImport = null,
-        _kernel = null,
         super(name, nameOffset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  PrefixElementImpl.forKernel(LibraryElementImpl enclosingLibrary, this._kernel)
-      : _unlinkedImport = null,
-        super.forKernel(enclosingLibrary);
-
-  /**
    * Initialize a newly created prefix element to have the given [name].
    */
   PrefixElementImpl.forNode(Identifier name)
       : _unlinkedImport = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -8995,8 +7831,7 @@
    */
   PrefixElementImpl.forSerialized(
       this._unlinkedImport, LibraryElementImpl enclosingLibrary)
-      : _kernel = null,
-        super.forSerialized(enclosingLibrary);
+      : super.forSerialized(enclosingLibrary);
 
   @override
   String get displayName => name;
@@ -9017,9 +7852,6 @@
   @override
   String get name {
     if (_name == null) {
-      if (_kernel != null) {
-        return _name = _kernel.name;
-      }
       if (_unlinkedImport != null) {
         LibraryElementImpl library = enclosingElement as LibraryElementImpl;
         int prefixId = _unlinkedImport.prefixReference;
@@ -9032,10 +7864,6 @@
   @override
   int get nameOffset {
     int offset = super.nameOffset;
-    if (_kernel != null) {
-      var metadata = AnalyzerMetadata.forNode(_kernel);
-      return metadata.importPrefixOffset;
-    }
     if (offset == 0 && _unlinkedImport != null) {
       return _unlinkedImport.prefixOffset;
     }
@@ -9058,11 +7886,6 @@
 class PropertyAccessorElementImpl extends ExecutableElementImpl
     implements PropertyAccessorElement {
   /**
-   * The kernel of the element.
-   */
-  final kernel.Procedure _kernelProcedure;
-
-  /**
    * The variable associated with this accessor.
    */
   PropertyInducingElement variable;
@@ -9071,40 +7894,27 @@
    * Initialize a newly created property accessor element to have the given
    * [name] and [offset].
    */
-  PropertyAccessorElementImpl(String name, int offset)
-      : _kernelProcedure = null,
-        super(name, offset);
-
-  /**
-   * Initialize using the given kernel.
-   */
-  PropertyAccessorElementImpl.forKernel(
-      ElementImpl enclosingElement, this._kernelProcedure)
-      : super.forKernel(enclosingElement, _kernelProcedure);
+  PropertyAccessorElementImpl(String name, int offset) : super(name, offset);
 
   /**
    * Initialize a newly created property accessor element to have the given
    * [name].
    */
-  PropertyAccessorElementImpl.forNode(Identifier name)
-      : _kernelProcedure = null,
-        super.forNode(name);
+  PropertyAccessorElementImpl.forNode(Identifier name) : super.forNode(name);
 
   /**
    * Initialize using the given serialized information.
    */
   PropertyAccessorElementImpl.forSerialized(
       UnlinkedExecutable serializedExecutable, ElementImpl enclosingElement)
-      : _kernelProcedure = null,
-        super.forSerialized(serializedExecutable, enclosingElement);
+      : super.forSerialized(serializedExecutable, enclosingElement);
 
   /**
    * Initialize a newly created synthetic property accessor element to be
    * associated with the given [variable].
    */
   PropertyAccessorElementImpl.forVariable(PropertyInducingElementImpl variable)
-      : _kernelProcedure = null,
-        super(variable.name, variable.nameOffset) {
+      : super(variable.name, variable.nameOffset) {
     this.variable = variable;
     isStatic = variable.isStatic;
     isSynthetic = true;
@@ -9174,9 +7984,6 @@
 
   @override
   bool get isGetter {
-    if (_kernel != null) {
-      return _kernelProcedure.kind == kernel.ProcedureKind.Getter;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.kind == UnlinkedExecutableKind.getter;
     }
@@ -9185,9 +7992,6 @@
 
   @override
   bool get isSetter {
-    if (_kernel != null) {
-      return _kernelProcedure.kind == kernel.ProcedureKind.Setter;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.kind == UnlinkedExecutableKind.setter;
     }
@@ -9196,9 +8000,6 @@
 
   @override
   bool get isStatic {
-    if (_kernel != null) {
-      return _kernelProcedure.isStatic;
-    }
     if (serializedExecutable != null) {
       return serializedExecutable.isStatic ||
           variable is TopLevelVariableElement;
@@ -9374,18 +8175,6 @@
   PropertyInducingElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  PropertyInducingElementImpl.forKernel(
-      ElementImpl enclosingElement, kernel.Field kernel)
-      : super.forKernel(enclosingElement, kernel) {
-    getter = new PropertyAccessorElementImpl_ImplicitGetter(this);
-    if (!isFinal && !isConst) {
-      setter = new PropertyAccessorElementImpl_ImplicitSetter(this);
-    }
-  }
-
-  /**
    * Initialize a newly created element to have the given [name].
    */
   PropertyInducingElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -9501,11 +8290,6 @@
   final UnlinkedCombinator _unlinkedCombinator;
 
   /**
-   * The kernel for the element.
-   */
-  final kernel.Combinator _kernel;
-
-  /**
    * The names that are to be made visible in the importing library if they are
    * defined in the imported library.
    */
@@ -9522,21 +8306,12 @@
    */
   int _offset = 0;
 
-  ShowElementCombinatorImpl()
-      : _unlinkedCombinator = null,
-        _kernel = null;
-
-  /**
-   * Initialize using the given kernel.
-   */
-  ShowElementCombinatorImpl.forKernel(this._kernel)
-      : _unlinkedCombinator = null;
+  ShowElementCombinatorImpl() : _unlinkedCombinator = null;
 
   /**
    * Initialize using the given serialized information.
    */
-  ShowElementCombinatorImpl.forSerialized(this._unlinkedCombinator)
-      : _kernel = null;
+  ShowElementCombinatorImpl.forSerialized(this._unlinkedCombinator);
 
   @override
   int get end {
@@ -9566,9 +8341,6 @@
 
   @override
   List<String> get shownNames {
-    if (_kernel != null) {
-      _shownNames ??= _kernel.names;
-    }
     if (_unlinkedCombinator != null) {
       _shownNames ??= _unlinkedCombinator.shows.toList(growable: false);
     }
@@ -9607,13 +8379,6 @@
   TopLevelVariableElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  TopLevelVariableElementImpl.forKernel(
-      ElementImpl enclosingElement, kernel.Field kernel)
-      : super.forKernel(enclosingElement, kernel);
-
-  /**
    * Initialize a newly created top-level variable element to have the given
    * [name].
    */
@@ -9664,11 +8429,6 @@
   final int nestingLevel;
 
   /**
-   * The kernel of the element.
-   */
-  final kernel.TypeParameter _kernel;
-
-  /**
    * The type defined by this type parameter.
    */
   TypeParameterType _type;
@@ -9686,25 +8446,14 @@
   TypeParameterElementImpl(String name, int offset)
       : _unlinkedTypeParam = null,
         nestingLevel = null,
-        _kernel = null,
         super(name, offset);
 
   /**
-   * Initialize using the given kernel.
-   */
-  TypeParameterElementImpl.forKernel(
-      TypeParameterizedElementMixin enclosingElement, this._kernel)
-      : _unlinkedTypeParam = null,
-        nestingLevel = null,
-        super.forKernel(enclosingElement);
-
-  /**
    * Initialize a newly created type parameter element to have the given [name].
    */
   TypeParameterElementImpl.forNode(Identifier name)
       : _unlinkedTypeParam = null,
         nestingLevel = null,
-        _kernel = null,
         super.forNode(name);
 
   /**
@@ -9712,8 +8461,7 @@
    */
   TypeParameterElementImpl.forSerialized(this._unlinkedTypeParam,
       TypeParameterizedElementMixin enclosingElement, this.nestingLevel)
-      : _kernel = null,
-        super.forSerialized(enclosingElement);
+      : super.forSerialized(enclosingElement);
 
   /**
    * Initialize a newly created synthetic type parameter element to have the
@@ -9721,18 +8469,12 @@
    */
   TypeParameterElementImpl.synthetic(String name, {this.nestingLevel})
       : _unlinkedTypeParam = null,
-        _kernel = null,
         super(name, -1) {
     isSynthetic = true;
   }
 
   DartType get bound {
     if (_bound == null) {
-      if (_kernel != null) {
-        _bound = enclosingUnit._kernelContext.getType(this, _kernel.bound);
-        // TODO(scheglov) Add a flag for explicit bound.
-        if (_bound != null && _bound.isObject) _bound = null;
-      }
       if (_unlinkedTypeParam != null) {
         if (_unlinkedTypeParam.bound == null) {
           return null;
@@ -9783,9 +8525,6 @@
 
   @override
   String get name {
-    if (_kernel != null) {
-      return _kernel.name;
-    }
     if (_unlinkedTypeParam != null) {
       return _unlinkedTypeParam.name;
     }
@@ -9802,9 +8541,6 @@
   }
 
   TypeParameterType get type {
-    if (_kernel != null) {
-      _type ??= new TypeParameterTypeImpl(this);
-    }
     if (_unlinkedTypeParam != null) {
       _type ??= new TypeParameterTypeImpl(this);
     }
@@ -9894,12 +8630,6 @@
    */
   CompilationUnitElementImpl get enclosingUnit;
 
-  /**
-   * Get the [kernel.TypeParameter]s declared by this element, or `null` if
-   * this elements isn't from a kernel.
-   */
-  List<kernel.TypeParameter> get kernelTypeParams => const [];
-
   @override
   TypeParameterizedElementMixin get typeParameterContext => this;
 
@@ -9913,17 +8643,6 @@
   @override
   List<TypeParameterElement> get typeParameters {
     if (_typeParameterElements == null) {
-      List<kernel.TypeParameter> kernelParams = kernelTypeParams;
-      if (kernelParams != null) {
-        int numTypeParameters = kernelParams.length;
-        _typeParameterElements =
-            new List<TypeParameterElement>(numTypeParameters);
-        for (int i = 0; i < numTypeParameters; i++) {
-          _typeParameterElements[i] =
-              new TypeParameterElementImpl.forKernel(this, kernelParams[i]);
-        }
-      }
-
       List<UnlinkedTypeParam> unlinkedParams = unlinkedTypeParams;
       if (unlinkedParams != null) {
         int enclosingNestingLevel =
@@ -10045,12 +8764,6 @@
   UriReferencedElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize for resynthesizing from kernel.
-   */
-  UriReferencedElementImpl.forKernel(ElementImpl enclosingElement)
-      : super.forKernel(enclosingElement);
-
-  /**
    * Initialize using the given serialized information.
    */
   UriReferencedElementImpl.forSerialized(ElementImpl enclosingElement)
@@ -10134,12 +8847,6 @@
   VariableElementImpl(String name, int offset) : super(name, offset);
 
   /**
-   * Initialize for resynthesizing form kernel.
-   */
-  VariableElementImpl.forKernel(ElementImpl enclosingElement)
-      : super.forKernel(enclosingElement);
-
-  /**
    * Initialize a newly created variable element to have the given [name].
    */
   VariableElementImpl.forNode(Identifier name) : super.forNode(name);
diff --git a/pkg/analyzer/lib/src/dart/element/handle.dart b/pkg/analyzer/lib/src/dart/element/handle.dart
index 331832d..f2929a7 100644
--- a/pkg/analyzer/lib/src/dart/element/handle.dart
+++ b/pkg/analyzer/lib/src/dart/element/handle.dart
@@ -228,6 +228,9 @@
   LineInfo get lineInfo => actualElement.lineInfo;
 
   @override
+  List<ClassElement> get mixins => actualElement.mixins;
+
+  @override
   Source get source => actualElement.source;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/wrapped.dart b/pkg/analyzer/lib/src/dart/element/wrapped.dart
index cd3d985..aaad9cd 100644
--- a/pkg/analyzer/lib/src/dart/element/wrapped.dart
+++ b/pkg/analyzer/lib/src/dart/element/wrapped.dart
@@ -139,6 +139,9 @@
   List<ElementAnnotation> get metadata => wrappedUnit.metadata;
 
   @override
+  List<ClassElement> get mixins => wrappedUnit.mixins;
+
+  @override
   String get name => wrappedUnit.name;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index 9ca8202..c1361b0 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -413,6 +413,11 @@
           correction:
               "Try moving the extends clause before the implements clause.");
 
+  static const ParserErrorCode IMPLEMENTS_BEFORE_ON = const ParserErrorCode(
+      'IMPLEMENTS_BEFORE_ON',
+      "The on clause must be before the implements clause.",
+      correction: "Try moving the on clause before the implements clause.");
+
   static const ParserErrorCode IMPLEMENTS_BEFORE_WITH = const ParserErrorCode(
       'IMPLEMENTS_BEFORE_WITH',
       "The with clause must be before the implements clause.",
@@ -525,6 +530,7 @@
       correction: "Try adding either a catch or finally clause, or "
           "remove the try statement.");
 
+  /// TODO(danrubel): Consider splitting this into two separate error messages.
   static const ParserErrorCode MISSING_CLASS_BODY = const ParserErrorCode(
       'MISSING_CLASS_BODY',
       "A class or mixin definition must have a body, even if it is empty.",
@@ -655,7 +661,7 @@
 
   static const ParserErrorCode MULTIPLE_IMPLEMENTS_CLAUSES = const ParserErrorCode(
       'MULTIPLE_IMPLEMENTS_CLAUSES',
-      "Each class definition can have at most one implements clause.",
+      "Each class or mixin definition can have at most one implements clause.",
       correction:
           "Try combining all of the implements clauses into a single clause.");
 
@@ -669,6 +675,11 @@
           "Can't have multiple groups of named parameters in a single parameter list.",
           correction: "Try combining all of the groups into a single group.");
 
+  static const ParserErrorCode MULTIPLE_ON_CLAUSES = const ParserErrorCode(
+      'MULTIPLE_ON_CLAUSES',
+      "Each mixin definition can have at most one on clause.",
+      correction: "Try combining all of the on clauses into a single clause.");
+
   static const ParserErrorCode MULTIPLE_PART_OF_DIRECTIVES =
       const ParserErrorCode('MULTIPLE_PART_OF_DIRECTIVES',
           "Only one part-of directive may be declared in a file.",
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 5c8706a..2e688d6 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -373,13 +373,6 @@
  */
 class LibraryImportScope extends Scope {
   /**
-   * The name of the property containing a list of the elements from the SDK
-   * that conflict with the single name imported from non-SDK libraries. The
-   * value of the property is always of type `List<Element>`.
-   */
-  static const String conflictingSdkElements = 'conflictingSdkElements';
-
-  /**
    * The element representing the library in which this scope is enclosed.
    */
   final LibraryElement _definingLibrary;
@@ -539,38 +532,48 @@
 
   Element _lookupInImportedNamespaces(
       Identifier identifier, Element lookup(Namespace namespace)) {
-    Set<Element> sdkElements = new HashSet<Element>();
-    Set<Element> nonSdkElements = new HashSet<Element>();
+    Element result;
+
+    bool hasPotentialConflict = false;
     for (int i = 0; i < _importedNamespaces.length; i++) {
       Element element = lookup(_importedNamespaces[i]);
       if (element != null) {
-        if (element.library.isInSdk) {
-          sdkElements.add(element);
+        if (result == null || result == element) {
+          result = element;
         } else {
-          nonSdkElements.add(element);
+          hasPotentialConflict = true;
         }
       }
     }
-    int nonSdkCount = nonSdkElements.length;
-    int sdkCount = sdkElements.length;
-    if (nonSdkCount == 0) {
-      if (sdkCount == 0) {
-        return null;
-      } else if (sdkCount == 1) {
-        return sdkElements.first;
+
+    if (hasPotentialConflict) {
+      var sdkElements = new Set<Element>();
+      var nonSdkElements = new Set<Element>();
+      for (int i = 0; i < _importedNamespaces.length; i++) {
+        Element element = lookup(_importedNamespaces[i]);
+        if (element != null) {
+          if (element.library.isInSdk) {
+            sdkElements.add(element);
+          } else {
+            nonSdkElements.add(element);
+          }
+        }
+      }
+      if (sdkElements.length > 1 || nonSdkElements.length > 1) {
+        var conflictingElements = <Element>[]
+          ..addAll(sdkElements)
+          ..addAll(nonSdkElements);
+        return new MultiplyDefinedElementImpl(_definingLibrary.context,
+            conflictingElements.first.name, conflictingElements);
+      }
+      if (nonSdkElements.isNotEmpty) {
+        result = nonSdkElements.first;
+      } else if (sdkElements.isNotEmpty) {
+        result = sdkElements.first;
       }
     }
-    if (nonSdkCount == 1) {
-      if (sdkCount > 0) {
-        identifier.setProperty(
-            conflictingSdkElements, sdkElements.toList(growable: false));
-      }
-      return nonSdkElements.first;
-    }
-    return new MultiplyDefinedElementImpl(
-        _definingLibrary.context,
-        sdkElements.toList(growable: false),
-        nonSdkElements.toList(growable: false));
+
+    return result;
   }
 }
 
@@ -635,6 +638,9 @@
         in compilationUnit.functionTypeAliases) {
       define(element);
     }
+    for (ClassElement element in compilationUnit.mixins) {
+      define(element);
+    }
     for (ClassElement element in compilationUnit.types) {
       define(element);
     }
diff --git a/pkg/analyzer/lib/src/dart/scanner/scanner.dart b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
index 192befa..66066c9 100644
--- a/pkg/analyzer/lib/src/dart/scanner/scanner.dart
+++ b/pkg/analyzer/lib/src/dart/scanner/scanner.dart
@@ -53,8 +53,6 @@
 
   Token firstToken;
 
-  bool scanGenericMethodComments = false;
-
   bool scanLazyAssignmentOperators = false;
 
   /**
@@ -104,7 +102,6 @@
   Token tokenize() {
     fasta.ScannerResult result = fasta.scanString(_contents,
         includeComments: _preserveComments,
-        scanGenericMethodComments: scanGenericMethodComments,
         scanLazyAssignmentOperators: scanLazyAssignmentOperators);
 
     // fasta pretends there is an additional line at EOF
diff --git a/pkg/analyzer/lib/src/dart/sdk/patch.dart b/pkg/analyzer/lib/src/dart/sdk/patch.dart
index 7066cdb..532ae5e 100644
--- a/pkg/analyzer/lib/src/dart/sdk/patch.dart
+++ b/pkg/analyzer/lib/src/dart/sdk/patch.dart
@@ -29,12 +29,10 @@
    */
   void patch(
       ResourceProvider resourceProvider,
-      bool strongMode,
       Map<String, List<String>> allPatchPaths,
       AnalysisErrorListener errorListener,
       Source source,
       CompilationUnit unit) {
-    // TODO(brianwilkerson) Remove the 'strongMode' parameter.
     // Process URI.
     String libraryUriStr;
     bool isLibraryDefiningUnit;
@@ -60,7 +58,7 @@
             'The patch file ${patchFile.path} for $source does not exist.');
       }
       Source patchSource = patchFile.createSource();
-      CompilationUnit patchUnit = parse(patchSource, strongMode, errorListener);
+      CompilationUnit patchUnit = parse(patchSource, errorListener);
 
       // Prepare for reporting errors.
       _baseDesc = source.toString();
@@ -408,17 +406,15 @@
    */
   @visibleForTesting
   static CompilationUnit parse(
-      Source source, bool strong, AnalysisErrorListener errorListener) {
+      Source source, AnalysisErrorListener errorListener) {
     String code = source.contents.data;
 
     CharSequenceReader reader = new CharSequenceReader(code);
     Scanner scanner = new Scanner(source, reader, errorListener);
-    scanner.scanGenericMethodComments = strong;
     Token token = scanner.tokenize();
     LineInfo lineInfo = new LineInfo(scanner.lineStarts);
 
     Parser parser = new Parser(source, errorListener);
-    parser.parseGenericMethodComments = strong;
     CompilationUnit unit = parser.parseCompilationUnit(token);
     unit.lineInfo = lineInfo;
     return unit;
diff --git a/pkg/analyzer/lib/src/dart/sdk/sdk.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart
index 194a08a..f645f41 100644
--- a/pkg/analyzer/lib/src/dart/sdk/sdk.dart
+++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart
@@ -163,9 +163,7 @@
   @override
   PackageBundle getLinkedBundle() {
     if (_useSummary) {
-      // TODO(brianwilkerson) 'strongMode' should probably always be 'true'.
-      bool strongMode = _analysisOptions != null;
-      _sdkBundle ??= getSummarySdkBundle(strongMode);
+      _sdkBundle ??= getSummarySdkBundle();
       return _sdkBundle;
     }
     return null;
@@ -181,7 +179,7 @@
    * This method should not be used outside of `analyzer` and `analyzer_cli`
    * packages.
    */
-  PackageBundle getSummarySdkBundle(bool strongMode);
+  PackageBundle getSummarySdkBundle();
 
   Source internalMapDartUri(String dartUri) {
     // TODO(brianwilkerson) Figure out how to unify the implementations in the
@@ -300,8 +298,8 @@
   String getRelativePathFromFile(File file) => file.path;
 
   @override
-  PackageBundle getSummarySdkBundle(bool strongMode) {
-    String name = strongMode ? 'strong.sum' : 'spec.sum';
+  PackageBundle getSummarySdkBundle() {
+    String name = 'strong.sum';
     File file = _embedderYamlLibFolder.parent.getChildAssumingFile(name);
     try {
       if (file.exists) {
@@ -584,7 +582,7 @@
    * This method should not be used outside of `analyzer` and `analyzer_cli`
    * packages.
    */
-  PackageBundle getSummarySdkBundle(bool _) {
+  PackageBundle getSummarySdkBundle() {
     String rootPath = directory.path;
     String name = 'strong.sum';
     String path =
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index a38ea7e..5adc23c7 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -944,15 +944,6 @@
           correction: "Try exporting the library that the part is a part of.");
 
   /**
-   * Enum proposal: It is a compile-time error to subclass, mix-in or implement
-   * an enum.
-   */
-  static const CompileTimeErrorCode EXTENDS_ENUM = const CompileTimeErrorCode(
-      'EXTENDS_ENUM', "Classes can't extend an enum.",
-      correction:
-          "Try specifying a different superclass, or removing the extends clause.");
-
-  /**
    * 7.9 Superclasses: It is a compile-time error if the extends clause of a
    * class <i>C</i> includes a type expression that does not denote a class
    * available in the lexical scope of <i>C</i>.
@@ -1009,8 +1000,8 @@
    * See [IMPLEMENTS_DEFERRED_CLASS], and [MIXIN_DEFERRED_CLASS].
    */
   static const CompileTimeErrorCode EXTENDS_DEFERRED_CLASS =
-      const CompileTimeErrorCode('EXTENDS_DEFERRED_CLASS',
-          "This class can't extend the deferred class '{0}'.",
+      const CompileTimeErrorCode(
+          'EXTENDS_DEFERRED_CLASS', "Classes can't extend deferred classes.",
           correction: "Try specifying a different superclass, or "
               "removing the extends clause.");
 
@@ -1169,14 +1160,11 @@
    * of a class <i>C</i> specifies a malformed type or deferred type as a
    * superinterface.
    *
-   * Parameters:
-   * 0: the name of the type that is deferred
-   *
    * See [EXTENDS_DEFERRED_CLASS], and [MIXIN_DEFERRED_CLASS].
    */
   static const CompileTimeErrorCode IMPLEMENTS_DEFERRED_CLASS =
       const CompileTimeErrorCode('IMPLEMENTS_DEFERRED_CLASS',
-          "This class can't implement the deferred class '{0}'.",
+          "Classes and mixins can't implement deferred classes.",
           correction: "Try specifying a different interface, "
               "removing the class from the list, or "
               "changing the import to not be deferred.");
@@ -1207,33 +1195,13 @@
    * See [EXTENDS_DISALLOWED_CLASS].
    */
   static const CompileTimeErrorCode IMPLEMENTS_DISALLOWED_CLASS =
-      const CompileTimeErrorCode(
-          'IMPLEMENTS_DISALLOWED_CLASS', "Classes can't implement '{0}'.",
+      const CompileTimeErrorCode('IMPLEMENTS_DISALLOWED_CLASS',
+          "Classes and mixins can't implement '{0}'.",
           correction: "Try specifying a different interface, or "
               "remove the class from the list.");
 
   /**
    * 7.10 Superinterfaces: It is a compile-time error if the implements clause
-   * of a class includes type dynamic.
-   */
-  static const CompileTimeErrorCode IMPLEMENTS_DYNAMIC =
-      const CompileTimeErrorCode(
-          'IMPLEMENTS_DYNAMIC', "Classes can't implement 'dynamic'.",
-          correction:
-              "Try specifying an interface, or remove 'dynamic' from the list.");
-
-  /**
-   * Enum proposal: It is a compile-time error to subclass, mix-in or implement
-   * an enum.
-   */
-  static const CompileTimeErrorCode IMPLEMENTS_ENUM =
-      const CompileTimeErrorCode(
-          'IMPLEMENTS_ENUM', "Classes can't implement an enum.",
-          correction:
-              "Try specifying an interface, or remove the enum from the list.");
-
-  /**
-   * 7.10 Superinterfaces: It is a compile-time error if the implements clause
    * of a class <i>C</i> includes a type expression that does not denote a class
    * available in the lexical scope of <i>C</i>.
    *
@@ -1241,8 +1209,8 @@
    * 0: the name of the interface that was not found
    */
   static const CompileTimeErrorCode IMPLEMENTS_NON_CLASS =
-      const CompileTimeErrorCode(
-          'IMPLEMENTS_NON_CLASS', "Classes can only implement other classes.",
+      const CompileTimeErrorCode('IMPLEMENTS_NON_CLASS',
+          "Classes and mixins can only implement classes.",
           correction:
               "Try specifying a class, or remove the name from the list.");
 
@@ -1702,13 +1670,21 @@
    * Parameters:
    * 0: the name of the mixin that is invalid
    */
-  static const CompileTimeErrorCode MIXIN_DECLARES_CONSTRUCTOR =
+  static const CompileTimeErrorCode MIXIN_CLASS_DECLARES_CONSTRUCTOR =
       const CompileTimeErrorCode(
-          'MIXIN_DECLARES_CONSTRUCTOR',
+          'MIXIN_CLASS_DECLARES_CONSTRUCTOR',
           "The class '{0}' can't be used as a mixin because it declares a "
           "constructor.");
 
   /**
+   * The <i>mixinMember</i> production allows the same instance or static
+   * members that a class would allow, but no constructors (for now).
+   */
+  static const CompileTimeErrorCode MIXIN_DECLARES_CONSTRUCTOR =
+      const CompileTimeErrorCode(
+          'MIXIN_DECLARES_CONSTRUCTOR', "Mixins can't declare constructors.");
+
+  /**
    * 9.1 Mixin Application: It is a compile-time error if the with clause of a
    * mixin application <i>C</i> includes a deferred type expression.
    *
@@ -1718,8 +1694,8 @@
    * See [EXTENDS_DEFERRED_CLASS], and [IMPLEMENTS_DEFERRED_CLASS].
    */
   static const CompileTimeErrorCode MIXIN_DEFERRED_CLASS =
-      const CompileTimeErrorCode('MIXIN_DEFERRED_CLASS',
-          "This class can't mixin the deferred class '{0}'.",
+      const CompileTimeErrorCode(
+          'MIXIN_DEFERRED_CLASS', "Classes can't mixin deferred classes.",
           correction: "Try changing the import to not be deferred.");
 
   /**
@@ -1799,13 +1775,6 @@
           'MIXIN_OF_DISALLOWED_CLASS', "Classes can't mixin '{0}'.");
 
   /**
-   * Enum proposal: It is a compile-time error to subclass, mix-in or implement
-   * an enum.
-   */
-  static const CompileTimeErrorCode MIXIN_OF_ENUM = const CompileTimeErrorCode(
-      'MIXIN_OF_ENUM', "Classes can't mixin an enum.");
-
-  /**
    * 9.1 Mixin Application: It is a compile-time error if <i>M</i> does not
    * denote a class or mixin available in the immediately enclosing scope.
    */
@@ -1823,6 +1792,22 @@
           "The class '{0}' can't be used as a mixin because it references "
           "'super'.");
 
+  static const CompileTimeErrorCode
+      MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS = const CompileTimeErrorCode(
+          'MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS',
+          "Deferred classes can't be used as super-class constraints.",
+          correction: "Try changing the import to not be deferred.");
+
+  static const CompileTimeErrorCode
+      MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS =
+      const CompileTimeErrorCode(
+          'MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS',
+          "'{0}' can't be used as a super-class constraint.");
+
+  static const CompileTimeErrorCode MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS =
+      const CompileTimeErrorCode('MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS',
+          "Only classes can be used as super-class constraints.");
+
   /**
    * 9.1 Mixin Application: It is a compile-time error if <i>S</i> does not
    * denote a class available in the immediately enclosing scope.
@@ -3578,40 +3563,6 @@
           correction: "Try making '{1}' abstract, or adding a body to '{0}'.");
 
   /**
-   * 14.1 Imports: If a name <i>N</i> is referenced by a library <i>L</i> and
-   * <i>N</i> would be introduced into the top level scope of <i>L</i> by an
-   * import from a library whose URI begins with <i>dart:</i> and an import from
-   * a library whose URI does not begin with <i>dart:</i>:
-   * * The import from <i>dart:</i> is implicitly extended by a hide N clause.
-   * * A static warning is issued.
-   *
-   * Parameters:
-   * 0: the ambiguous name
-   * 1: the name of the dart: library in which the element is found
-   * 2: the name of the non-dart: library in which the element is found
-   */
-  static const StaticWarningCode CONFLICTING_DART_IMPORT =
-      const StaticWarningCode('CONFLICTING_DART_IMPORT',
-          "Element '{0}' from SDK library '{1}' is implicitly hidden by '{2}'.",
-          correction: "Try adding an explicit hide combinator.",
-          isStrongModeError: false);
-
-  /**
-   * 7.2 Getters: It is a static warning if a class <i>C</i> declares an
-   * instance getter named <i>v</i> and an accessible static member named
-   * <i>v</i> or <i>v=</i> is declared in a superclass of <i>C</i>.
-   *
-   * Parameters:
-   * 0: the name of the super class declaring a static member
-   */
-  static const StaticWarningCode
-      CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER =
-      const StaticWarningCode(
-          'CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER',
-          "Superclass '{0}' declares static member with the same name.",
-          correction: "Try renaming either the getter or the static member.");
-
-  /**
    * 7.1 Instance Methods: It is a static warning if a class <i>C</i> declares
    * an instance method named <i>n</i> and has a setter named <i>n=</i>.
    */
@@ -3634,22 +3585,6 @@
           correction: "Try renaming either the method or the setter.");
 
   /**
-   * 7.3 Setters: It is a static warning if a class <i>C</i> declares an
-   * instance setter named <i>v=</i> and an accessible static member named
-   * <i>v=</i> or <i>v</i> is declared in a superclass of <i>C</i>.
-   *
-   * Parameters:
-   * 0: the name of the super class declaring a static member
-   */
-  static const StaticWarningCode
-      CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER =
-      const StaticWarningCode(
-          'CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER',
-          "Superclass '{0}' declares a static member with the same name.",
-          correction:
-              "Try renaming either the setter or the inherited member.");
-
-  /**
    * 7.2 Getters: It is a static warning if a class declares a static getter
    * named <i>v</i> and also has a non-static setter named <i>v=</i>.
    */
@@ -3811,8 +3746,7 @@
           // TODO(brianwilkerson) Split this error code so that we can suggest
           // initializing fields in constructors (FINAL_FIELD_NOT_INITIALIZED
           // and FINAL_VARIABLE_NOT_INITIALIZED).
-          correction: "Try initializing the variable.",
-          isStrongModeError: false);
+          correction: "Try initializing the variable.");
 
   /**
    * 7.6.1 Generative Constructors: Each final instance variable <i>f</i>
@@ -3829,8 +3763,7 @@
   static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 =
       const StaticWarningCode('FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
           "The final variable '{0}' must be initialized.",
-          correction: "Try adding an initializer for the field.",
-          isStrongModeError: false);
+          correction: "Try adding an initializer for the field.");
 
   /**
    * 7.6.1 Generative Constructors: Each final instance variable <i>f</i>
@@ -3848,8 +3781,7 @@
   static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 =
       const StaticWarningCode('FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
           "The final variables '{0}' and '{1}' must be initialized.",
-          correction: "Try adding initializers for the fields.",
-          isStrongModeError: false);
+          correction: "Try adding initializers for the fields.");
 
   /**
    * 7.6.1 Generative Constructors: Each final instance variable <i>f</i>
@@ -3868,8 +3800,7 @@
   static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS =
       const StaticWarningCode('FINAL_NOT_INITIALIZED_CONSTRUCTOR_3',
           "The final variables '{0}', '{1}' and '{2}' more must be initialized.",
-          correction: "Try adding initializers for the fields.",
-          isStrongModeError: false);
+          correction: "Try adding initializers for the fields.");
 
   /**
    * 15.5 Function Types: It is a static warning if a concrete class implements
@@ -3893,8 +3824,7 @@
   static const StaticWarningCode IMPORT_DUPLICATED_LIBRARY_NAMED =
       const StaticWarningCode('IMPORT_DUPLICATED_LIBRARY_NAMED',
           "The imported libraries '{0}' and '{1}' can't have the same name '{2}'.",
-          correction: "Try adding a hide clause to one of the imports.",
-          isStrongModeError: false);
+          correction: "Try adding a hide clause to one of the imports.");
 
   /**
    * 14.1 Imports: It is a static warning if the specified URI of a deferred
@@ -4233,8 +4163,7 @@
           'MISMATCHED_GETTER_AND_SETTER_TYPES',
           "The parameter type for setter '{0}' is '{1}' which isn't assignable "
           "to its getter (of type '{2}').",
-          correction: "Try changing the types so that they are compatible.",
-          isStrongModeError: false);
+          correction: "Try changing the types so that they are compatible.");
 
   /**
    * 7.3 Setters: It is a static warning if a class has a setter named <i>v=</i>
@@ -4247,8 +4176,7 @@
           'MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE',
           "The parameter type for setter '{0}' is '{1}' which isn't assignable "
           "to its getter (of type '{2}'), from superclass '{3}'.",
-          correction: "Try changing the types so that they are compatible.",
-          isStrongModeError: false);
+          correction: "Try changing the types so that they are compatible.");
 
   /**
    * 17.9 Switch: It is a static warning if all of the following conditions
@@ -4267,8 +4195,7 @@
       const StaticWarningCode(
           'MISSING_ENUM_CONSTANT_IN_SWITCH', "Missing case clause for '{0}'.",
           correction: "Try adding a case clause for the missing constant, or "
-              "adding a default clause.",
-          isStrongModeError: false);
+              "adding a default clause.");
 
   /**
    * 13.12 Return: It is a static warning if a function contains both one or
@@ -4281,8 +4208,7 @@
       // TODO(brianwilkerson) Split this error code depending on whether the
       // function declares a return type.
       correction: "Try making all the return statements consistent "
-          "(either include a value or not).",
-      isStrongModeError: false);
+          "(either include a value or not).");
 
   /**
    * 12.11.1 New: It is a static warning if <i>q</i> is a constructor of an
@@ -4515,8 +4441,7 @@
   static const StaticWarningCode NON_VOID_RETURN_FOR_OPERATOR =
       const StaticWarningCode('NON_VOID_RETURN_FOR_OPERATOR',
           "The return type of the operator []= must be 'void'.",
-          correction: "Try changing the return type to 'void'.",
-          isStrongModeError: false);
+          correction: "Try changing the return type to 'void'.");
 
   /**
    * 7.3 Setters: It is a static warning if a setter declares a return type
@@ -4526,8 +4451,7 @@
       const StaticWarningCode('NON_VOID_RETURN_FOR_SETTER',
           "The return type of the setter must be 'void' or absent.",
           correction: "Try removing the return type, or "
-              "define a method rather than a setter.",
-          isStrongModeError: false);
+              "define a method rather than a setter.");
 
   /**
    * 15.1 Static Types: A type <i>T</i> is malformed iff:
@@ -4639,7 +4563,7 @@
    */
   static const StaticWarningCode RETURN_WITHOUT_VALUE = const StaticWarningCode(
       'RETURN_WITHOUT_VALUE', "Missing return value after 'return'.",
-      correction: null, isStrongModeError: false);
+      correction: null);
 
   /**
    * 12.16.3 Static Invocation: It is a static warning if <i>C</i> does not
@@ -4875,21 +4799,13 @@
           ' and variables which, in rare cases, may be void as well.');
 
   /**
-   * A flag indicating whether this warning is an error when running with strong
-   * mode enabled.
-   */
-  final bool isStrongModeError;
-
-  /**
    * Initialize a newly created error code to have the given [name]. The message
    * associated with the error will be created from the given [message]
    * template. The correction associated with the error will be created from the
    * given [correction] template.
    */
   const StaticWarningCode(String name, String message,
-      {String correction,
-      this.isStrongModeError = true,
-      bool isUnresolvedIdentifier: false})
+      {String correction, bool isUnresolvedIdentifier: false})
       : super.temporary(name, message,
             correction: correction,
             isUnresolvedIdentifier: isUnresolvedIdentifier);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 72568c0..68906df 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -30,6 +30,7 @@
 import 'package:front_end/src/fasta/problems.dart' show unhandled;
 import 'package:front_end/src/fasta/messages.dart'
     show
+        LocatedMessage,
         Message,
         messageConstConstructorWithBody,
         messageConstMethod,
@@ -71,8 +72,6 @@
   /// `native` support.
   Parser parser;
 
-  bool parseGenericMethodComments = false;
-
   /// The class currently being parsed, or `null` if no class is being parsed.
   ClassDeclarationImpl classDeclaration;
 
@@ -597,12 +596,15 @@
               initializerObject.operator,
               initializerObject.methodName,
               initializerObject.argumentList));
-        } else {
+        } else if (target is ThisExpression) {
           initializers.add(ast.redirectingConstructorInvocation(
-              (target as ThisExpression).thisKeyword,
+              target.thisKeyword,
               initializerObject.operator,
               initializerObject.methodName,
               initializerObject.argumentList));
+        } else {
+          // Invalid initializer
+          // TODO(danrubel): Capture this in the AST.
         }
       } else if (initializerObject is AssignmentExpression) {
         Token thisKeyword;
@@ -1153,13 +1155,8 @@
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     assert(optionalOrNull('this', thisKeyword));
     assert(thisKeyword == null
         ? periodAfterThis == null
@@ -1927,6 +1924,29 @@
   }
 
   @override
+  void handleRecoverMixinHeader() {
+    ImplementsClause implementsClause = pop(NullValue.IdentifierList);
+    OnClause onClause = pop(NullValue.IdentifierList);
+
+    if (onClause != null) {
+      if (mixinDeclaration.onClause == null) {
+        mixinDeclaration.onClause = onClause;
+      } else {
+        mixinDeclaration.onClause.superclassConstraints
+            .addAll(onClause.superclassConstraints);
+      }
+    }
+    if (implementsClause != null) {
+      if (mixinDeclaration.implementsClause == null) {
+        mixinDeclaration.implementsClause = implementsClause;
+      } else {
+        mixinDeclaration.implementsClause.interfaces
+            .addAll(implementsClause.interfaces);
+      }
+    }
+  }
+
+  @override
   void endMixinDeclaration(Token token) {
     debugEvent("MixinDeclaration");
     mixinDeclaration = null;
@@ -2022,7 +2042,7 @@
     } else {
       int offset = startToken.offset;
       int length = endToken.end - offset;
-      addCompileTimeError(message, offset, length);
+      addProblem(message, offset, length);
     }
   }
 
@@ -2294,7 +2314,7 @@
 
   @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token name) {
+      Token varFinalOrConst, Token getOrSet, Token name) {
     _Modifiers modifiers = new _Modifiers();
     if (externalToken != null) {
       assert(externalToken.isModifier);
@@ -2302,7 +2322,10 @@
     }
     if (staticToken != null) {
       assert(staticToken.isModifier);
-      if (name?.lexeme == classDeclaration.name.name) {
+      String className = classDeclaration != null
+          ? classDeclaration.name.name
+          : mixinDeclaration.name.name;
+      if (name?.lexeme == className && getOrSet == null) {
         // This error is also reported in OutlineBuilder.beginMethod
         handleRecoverableError(
             messageStaticConstructor, staticToken, staticToken);
@@ -2744,12 +2767,13 @@
   }
 
   @override
-  void addCompileTimeError(Message message, int offset, int length) {
+  void addProblem(Message message, int charOffset, int length,
+      {bool wasHandled: false, List<LocatedMessage> context}) {
     if (directives.isEmpty &&
         message.code.analyzerCode == 'NON_PART_OF_DIRECTIVE_IN_PART') {
       message = messageDirectiveAfterDeclaration;
     }
-    errorReporter.reportMessage(message, offset, length);
+    errorReporter.reportMessage(message, charOffset, length);
   }
 
   /// Return `true` if [token] is either `null` or is the symbol or keyword
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 614fadb..aebe4d2 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -336,6 +336,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, offset, length);
         return;
+      case "IMPLEMENTS_BEFORE_ON":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.IMPLEMENTS_BEFORE_ON, offset, length);
+        return;
       case "IMPLEMENTS_BEFORE_WITH":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.IMPLEMENTS_BEFORE_WITH, offset, length);
@@ -346,6 +350,10 @@
             offset,
             length);
         return;
+      case "IMPORT_OF_NON_LIBRARY":
+        errorReporter?.reportErrorForOffset(
+            CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, offset, length);
+        return;
       case "INVALID_CAST_FUNCTION":
         errorReporter?.reportErrorForOffset(
             StrongModeCode.INVALID_CAST_FUNCTION, offset, length);
@@ -502,6 +510,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, offset, length);
         return;
+      case "MULTIPLE_ON_CLAUSES":
+        errorReporter?.reportErrorForOffset(
+            ParserErrorCode.MULTIPLE_ON_CLAUSES, offset, length);
+        return;
       case "MULTIPLE_WITH_CLAUSES":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.MULTIPLE_WITH_CLAUSES, offset, length);
@@ -618,6 +630,10 @@
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.TYPEDEF_IN_CLASS, offset, length);
         return;
+      case "UNDEFINED_CLASS":
+        errorReporter?.reportErrorForOffset(
+            CompileTimeErrorCode.UNDEFINED_CLASS, offset, length);
+        return;
       case "UNDEFINED_GETTER":
         errorReporter?.reportErrorForOffset(
             StaticTypeWarningCode.UNDEFINED_GETTER, offset, length);
diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
deleted file mode 100644
index 3c913ce..0000000
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ /dev/null
@@ -1,1012 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_ast_factory.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/dart/ast/ast.dart';
-import 'package:analyzer/src/dart/ast/utilities.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/member.dart';
-import 'package:analyzer/src/fasta/resolution_storer.dart';
-import 'package:front_end/src/base/syntactic_entity.dart';
-import 'package:front_end/src/scanner/token.dart';
-import 'package:kernel/kernel.dart' as kernel;
-
-/// Visitor that applies resolution data from the front end (obtained via
-/// [ResolutionStorer]) to an analyzer AST.
-class ResolutionApplier extends GeneralizingAstVisitor {
-  final LibraryElement _enclosingLibraryElement;
-  final TypeContext _typeContext;
-
-  final Map<int, ResolutionData> _data;
-
-  /// The current label scope. Each [Block] adds a new one.
-  _LabelScope _labelScope = new _LabelScope(null);
-
-  ResolutionApplier(
-      this._enclosingLibraryElement, this._typeContext, this._data);
-
-  /// Apply resolution to annotations of the given [node].
-  void applyToAnnotations(AnnotatedNode node) {
-    node.metadata.accept(this);
-  }
-
-  @override
-  void visitAdjacentStrings(AdjacentStrings node) {
-    node.strings.accept(this);
-    node.staticType = _typeContext.stringType;
-  }
-
-  @override
-  void visitAnnotation(Annotation node) {
-    Identifier name = node.name;
-    ArgumentList argumentList = node.arguments;
-
-    SimpleIdentifier fieldName;
-    SimpleIdentifier constructorName;
-
-    var data = _get(name);
-    if (name is SimpleIdentifier) {
-      var translatedReference = _translateReference(data);
-      name.staticElement = translatedReference;
-      name.staticType = _translateType(data.inferredType);
-      node.element = translatedReference;
-    } else if (name is PrefixedIdentifier) {
-      if (data.prefixInfo != null) {
-        name.prefix.staticElement = _translatePrefixInfo(data.prefixInfo);
-
-        data = _get(name.identifier);
-        name.identifier.staticElement = _translateReference(data);
-        name.identifier.staticType = _translateType(data.inferredType);
-
-        if (argumentList == null) {
-          fieldName = node.constructorName;
-        } else {
-          constructorName = node.constructorName;
-        }
-      } else {
-        name.prefix.staticElement = _translateReference(data);
-        name.prefix.staticType = _translateType(data.inferredType);
-
-        if (argumentList == null) {
-          fieldName = name.identifier;
-        } else {
-          constructorName = name.identifier;
-        }
-      }
-    }
-
-    if (fieldName != null) {
-      data = _get(fieldName);
-      var translatedReference = _translateReference(data);
-      node.element = translatedReference;
-      fieldName.staticElement = translatedReference;
-      fieldName.staticType = _translateType(data.inferredType);
-    }
-
-    if (argumentList != null) {
-      var data = _get(argumentList);
-      ConstructorElement element = _translateReference(data);
-      node.element = element;
-
-      if (constructorName != null) {
-        constructorName.staticElement = element;
-        constructorName.staticType = element.type;
-      }
-
-      argumentList.accept(this);
-      _resolveArgumentsToParameters(argumentList, element.parameters);
-    }
-  }
-
-  @override
-  void visitArgumentList(ArgumentList node) {
-    for (var argument in node.arguments) {
-      if (argument is NamedExpression) {
-        argument.expression.accept(this);
-        argument.staticType = argument.expression.staticType;
-      } else {
-        argument.accept(this);
-      }
-    }
-  }
-
-  @override
-  void visitAsExpression(AsExpression node) {
-    node.expression.accept(this);
-    node.type.accept(this);
-    var data = _get(node.asOperator);
-    node.staticType = _translateType(data.inferredType);
-  }
-
-  @override
-  void visitAssignmentExpression(AssignmentExpression node) {
-    node.leftHandSide.accept(this);
-    node.rightHandSide.accept(this);
-
-    SyntacticEntity entity =
-        _getAssignmentEntity(node.leftHandSide) ?? node.operator;
-    var data = _get(entity,
-        isSynthetic: entity is SimpleIdentifier && entity.isSynthetic);
-    node.staticElement = _translateAuxiliaryReference(data.combiner);
-    node.staticType = _translateType(data.inferredType);
-  }
-
-  @override
-  void visitBinaryExpression(BinaryExpression node) {
-    node.leftOperand.accept(this);
-
-    var data = _get(node.operator);
-    TokenType operatorType = node.operator.type;
-    if (operatorType != TokenType.QUESTION_QUESTION &&
-        operatorType != TokenType.AMPERSAND_AMPERSAND &&
-        operatorType != TokenType.BAR_BAR) {
-      node.staticElement = _translateReference(data);
-    }
-
-    // Record the return type of the expression.
-    node.staticType = _translateType(data.inferredType);
-
-    node.rightOperand.accept(this);
-  }
-
-  @override
-  void visitBlock(Block node) {
-    _labelScope = new _LabelScope(_labelScope);
-    super.visitBlock(node);
-    _labelScope = _labelScope.parent;
-  }
-
-  @override
-  void visitBreakStatement(BreakStatement node) {
-    SimpleIdentifier label = node.label;
-    if (label != null) {
-      LabelElement labelElement = _labelScope[label.name];
-      label.staticElement = labelElement;
-    }
-  }
-
-  @override
-  void visitCascadeExpression(CascadeExpression node) {
-    visitNode(node);
-    node.staticType = node.target.staticType;
-  }
-
-  @override
-  void visitCatchClause(CatchClause node) {
-    node.exceptionType?.accept(this);
-    SimpleIdentifier exception = node.exceptionParameter;
-    if (exception != null) {
-      LocalVariableElementImpl element = exception.staticElement;
-      DartType type = _translateType(
-          _get(exception, isSynthetic: exception.isSynthetic).inferredType);
-      element.type = type;
-      exception.staticType = type;
-    }
-
-    SimpleIdentifier stackTrace = node.stackTraceParameter;
-    if (stackTrace != null) {
-      LocalVariableElementImpl element = stackTrace.staticElement;
-      DartType type = _translateType(_get(stackTrace).inferredType);
-      element.type = type;
-      stackTrace.staticType = type;
-    }
-
-    node.body.accept(this);
-  }
-
-  @override
-  void visitConditionalExpression(ConditionalExpression node) {
-    node.condition.accept(this);
-    node.thenExpression.accept(this);
-    node.elseExpression.accept(this);
-    node.staticType = _translateType(_get(node.question).inferredType);
-  }
-
-  @override
-  void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
-    var element = _translateReference(_get(node.equals));
-    if (element is PropertyAccessorElement) {
-      node.fieldName.staticElement = element.variable;
-    } else {
-      node.fieldName.staticElement = element;
-    }
-
-    node.expression.accept(this);
-  }
-
-  @override
-  void visitContinueStatement(ContinueStatement node) {
-    SimpleIdentifier label = node.label;
-    if (label != null) {
-      LabelElement labelElement = _labelScope[label.name];
-      label.staticElement = labelElement;
-    }
-  }
-
-  @override
-  void visitExpression(Expression node) {
-    visitNode(node);
-    node.staticType = _translateType(_get(node).inferredType);
-  }
-
-  @override
-  void visitForEachStatement(ForEachStatement node) {
-    DeclaredIdentifier loopVariable = node.loopVariable;
-    if (loopVariable != null) {
-      loopVariable.type?.accept(this);
-      SimpleIdentifier identifier = loopVariable.identifier;
-
-      DartType type = _translateType(_get(identifier).inferredType);
-      identifier.staticType = type;
-
-      VariableElementImpl element = identifier.staticElement;
-      if (element != null) {
-        _typeContext.encloseVariable(element);
-        identifier.staticElement = element;
-        element.type = type;
-      }
-    } else {
-      node.identifier.accept(this);
-    }
-    node.iterable.accept(this);
-    node.body.accept(this);
-  }
-
-  @override
-  void visitFormalParameterList(FormalParameterList parameterList) {
-    for (var parameter in parameterList.parameters) {
-      parameter.metadata?.accept(this);
-      NormalFormalParameter normalParameter;
-      if (parameter is DefaultFormalParameter) {
-        parameter.defaultValue?.accept(this);
-        normalParameter = parameter.parameter;
-      } else if (parameter is NormalFormalParameter) {
-        normalParameter = parameter;
-      } else {
-        // All parameters should either be DefaultFormalParameter or
-        // NormalFormalParameter.
-        throw new UnimplementedError('${parameter.runtimeType}');
-      }
-      if (normalParameter is SimpleFormalParameter) {
-        normalParameter.type?.accept(this);
-      } else if (normalParameter is FieldFormalParameter) {
-        normalParameter.type?.accept(this);
-      } else if (normalParameter is FunctionTypedFormalParameter) {
-        normalParameter.returnType?.accept(this);
-        normalParameter.typeParameters?.accept(this);
-        normalParameter.parameters?.accept(this);
-        var data = _get(normalParameter.identifier);
-        normalParameter.identifier.staticType =
-            _translateType(data.inferredType);
-      } else {
-        // Now that DefaultFormalParameter has been handled, all parameters
-        // should be SimpleFormalParameter, FieldFormalParameter, or
-        // FunctionTypedFormalParameter.
-        throw new UnimplementedError('${normalParameter.runtimeType}');
-      }
-    }
-  }
-
-  @override
-  void visitFunctionDeclaration(FunctionDeclaration node) {
-    FunctionElementImpl element = node.declaredElement;
-    _typeContext.enterLocalFunction(element);
-
-    node.returnType?.accept(this);
-    FunctionExpression functionExpression = node.functionExpression;
-    FormalParameterList parameterList = functionExpression.parameters;
-
-    // Apply resolution to default values.
-    parameterList.accept(this);
-
-    functionExpression.body?.accept(this);
-    _storeFunctionType(_translateType(_get(node.name).inferredType), element);
-
-    // Associate the elements with the nodes.
-    if (element != null) {
-      functionExpression.element = element;
-
-      node.name.staticElement = element;
-      node.name.staticType = element.type;
-
-      TypeParameterList typeParameterList = functionExpression.typeParameters;
-      if (typeParameterList != null) {
-        List<TypeParameter> typeParameters = typeParameterList.typeParameters;
-        for (var i = 0; i < typeParameters.length; i++) {
-          TypeParameter typeParameter = typeParameters[i];
-          typeParameter.name.staticElement = element.typeParameters[i];
-          typeParameter.name.staticType = _typeContext.typeType;
-        }
-      }
-    }
-
-    _typeContext.exitLocalFunction(element);
-  }
-
-  @override
-  void visitFunctionExpression(FunctionExpression node) {
-    FormalParameterList parameterList = node.parameters;
-
-    FunctionElementImpl element = node.declaredElement;
-    _typeContext.enterLocalFunction(element);
-
-    // Apply resolution to default values.
-    parameterList.accept(this);
-
-    node.body.accept(this);
-    _storeFunctionType(
-        _translateType(_get(node.parameters).inferredType), element);
-
-    // Associate the elements with the nodes.
-    if (element != null) {
-      node.element = element;
-      node.staticType = element.type;
-    }
-
-    _typeContext.exitLocalFunction(element);
-  }
-
-  @override
-  void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
-    node.function.accept(this);
-    node.typeArguments?.accept(this);
-
-    var data = _get(node.argumentList);
-    DartType invokeType = _translateType(data.invokeType);
-    node.staticInvokeType = invokeType;
-
-    DartType resultType = _translateType(data.inferredType);
-    node.staticType = resultType;
-
-    node.argumentList.accept(this);
-  }
-
-  @override
-  void visitGenericFunctionType(covariant GenericFunctionTypeImpl node) {
-    var data = _get(node.functionKeyword);
-    FunctionType type = _translateType(data.inferredType);
-    node.type = type;
-    _typeContext.enterLocalFunction(type.element);
-    super.visitGenericFunctionType(node);
-    _typeContext.exitLocalFunction(type.element);
-  }
-
-  @override
-  void visitIndexExpression(IndexExpression node) {
-    node.target?.accept(this);
-
-    var data = _get(node.leftBracket);
-    node.staticElement = _translateReference(data);
-    node.staticType = _translateType(data.inferredType);
-
-    node.index.accept(this);
-  }
-
-  @override
-  void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    ConstructorName constructorName = node.constructorName;
-    Identifier typeIdentifier = constructorName.type.name;
-    SimpleIdentifier classIdentifier;
-    SimpleIdentifier constructorIdentifier;
-
-    constructorName.type.typeArguments?.accept(this);
-    var data = _get(typeIdentifier);
-    TypeName newTypeName;
-    if (typeIdentifier is SimpleIdentifier) {
-      classIdentifier = typeIdentifier;
-      constructorIdentifier = constructorName.name;
-    } else if (typeIdentifier is PrefixedIdentifier) {
-      if (data.isPrefixReference) {
-        typeIdentifier.prefix.staticElement =
-            _translatePrefixInfo(data.prefixInfo);
-
-        classIdentifier = typeIdentifier.identifier;
-        constructorIdentifier = node.constructorName.name;
-
-        data = _get(classIdentifier);
-      } else {
-        classIdentifier = typeIdentifier.prefix;
-        constructorIdentifier = typeIdentifier.identifier;
-
-        TypeArgumentList typeArguments = constructorName.type.typeArguments;
-        newTypeName = astFactory.typeName(classIdentifier, typeArguments);
-        constructorName.type = newTypeName;
-        constructorName.period = typeIdentifier.period;
-        constructorName.name = constructorIdentifier;
-      }
-    }
-    classIdentifier.staticElement = _translateReference(data);
-
-    data = _get(node.argumentList);
-
-    ConstructorElement constructor = _translateReference(data);
-    DartType type = _translateType(data.inferredType);
-
-    node.staticElement = constructor;
-    node.staticType = type;
-
-    node.constructorName.staticElement = constructor;
-    node.constructorName.type.type = type;
-
-    typeIdentifier.staticType = type;
-    classIdentifier.staticType = type;
-    constructorIdentifier?.staticElement = constructor;
-
-    ArgumentList argumentList = node.argumentList;
-    argumentList.accept(this);
-    _resolveArgumentsToParameters(argumentList, constructor?.parameters);
-  }
-
-  @override
-  void visitIsExpression(IsExpression node) {
-    node.expression.accept(this);
-    node.type.accept(this);
-    var data = _get(node.isOperator);
-    node.staticType = _translateType(data.inferredType);
-  }
-
-  @override
-  void visitLabel(Label node) {
-    SimpleIdentifier label = node.label;
-    String name = label.name;
-    var element = new LabelElementImpl(name, label.offset, false, false);
-    _labelScope.add(name, element);
-    label.staticElement = element;
-  }
-
-  @override
-  void visitListLiteral(ListLiteral node) {
-    node.typeArguments?.accept(this);
-    node.elements.accept(this);
-    DartType type = _translateType(
-        _get(node.constKeyword ?? node.leftBracket).inferredType);
-    node.staticType = type;
-  }
-
-  @override
-  void visitMapLiteral(MapLiteral node) {
-    node.typeArguments?.accept(this);
-    node.entries.accept(this);
-    DartType type = _translateType(
-        _get(node.constKeyword ?? node.leftBracket).inferredType);
-    node.staticType = type;
-  }
-
-  @override
-  void visitMethodInvocation(MethodInvocation node) {
-    node.target?.accept(this);
-    node.typeArguments?.accept(this);
-
-    ArgumentList argumentList = node.argumentList;
-
-    var data = _get(argumentList);
-    Element invokeElement;
-    if (data.loadLibrary != null) {
-      LibraryElement libraryElement =
-          _translateAuxiliaryReference(data.loadLibrary);
-      invokeElement = libraryElement.loadLibraryFunction;
-    } else if (data.isImplicitCall) {
-      if (node.methodName != null) {
-        node.methodName.accept(this);
-        invokeElement = node.methodName.staticElement;
-      }
-    } else {
-      invokeElement = _translateReference(data);
-    }
-    DartType invokeType = _translateType(data.invokeType);
-    DartType resultType = _translateType(data.inferredType);
-
-    if (invokeElement is PropertyInducingElement) {
-      PropertyInducingElement property = invokeElement;
-      invokeElement = property.getter;
-    }
-
-    node.staticInvokeType = invokeType;
-    node.staticType = resultType;
-
-    if (node.methodName.name == 'call' && invokeElement == null) {
-      // Don't resolve explicit call() invocation of function types.
-    } else if (_get(node.methodName.token,
-            isSynthetic: node.methodName.isSynthetic, failIfAbsent: false) !=
-        null) {
-      node.methodName.accept(this);
-    } else {
-      node.methodName.staticElement = invokeElement;
-      node.methodName.staticType = invokeType;
-    }
-
-    argumentList.accept(this);
-
-    {
-      var elementForParameters = invokeElement;
-      if (elementForParameters is PropertyAccessorElement) {
-        PropertyAccessorElement accessor = elementForParameters;
-        elementForParameters = accessor.returnType.element;
-      }
-      List<ParameterElement> parameters;
-      if (elementForParameters is FunctionTypedElement) {
-        parameters = elementForParameters.parameters;
-      } else if (elementForParameters is ParameterElement) {
-        var type = elementForParameters.type;
-        if (type is FunctionType) {
-          parameters = type.parameters;
-        }
-      }
-      _resolveArgumentsToParameters(argumentList, parameters);
-    }
-
-    if (invokeElement is ConstructorElement) {
-      _rewriteIntoInstanceCreation(node, invokeElement, invokeType, resultType);
-    }
-  }
-
-  @override
-  void visitNativeFunctionBody(NativeFunctionBody node) {
-    // nothing to resolve
-  }
-
-  @override
-  void visitParenthesizedExpression(ParenthesizedExpression node) {
-    node.visitChildren(this);
-    node.staticType = node.expression.staticType;
-  }
-
-  @override
-  void visitPostfixExpression(PostfixExpression node) {
-    node.operand.accept(this);
-    SyntacticEntity entity =
-        _getAssignmentEntity(node.operand) ?? node.operator;
-    var data = _get(entity);
-    node.staticElement = _translateAuxiliaryReference(data.combiner);
-    node.staticType = _translateType(data.inferredType);
-  }
-
-  @override
-  void visitPrefixedIdentifier(PrefixedIdentifier node) {
-    node.prefix.accept(this);
-    node.identifier.accept(this);
-    node.staticType = node.identifier.staticType;
-  }
-
-  @override
-  void visitPrefixExpression(PrefixExpression node) {
-    node.operand.accept(this);
-    TokenType tokenType = node.operator.type;
-    if (tokenType.isIncrementOperator) {
-      // ++v;
-      // This is an assignment, it is associated with the operand.
-      SyntacticEntity entity =
-          _getAssignmentEntity(node.operand) ?? node.operator;
-      var data = _get(entity);
-      node.staticElement = _translateAuxiliaryReference(data.combiner);
-      node.staticType = _translateType(data.inferredType);
-    } else if (tokenType == TokenType.BANG) {
-      // !boolExpression;
-      node.staticType = _translateType(_get(node).inferredType);
-    } else {
-      // ~v;
-      // This is a method invocation, it is associated with the operator.
-      SyntacticEntity entity = node.operator;
-      var data = _get(entity);
-      node.staticElement = _translateReference(data);
-      node.staticType = _translateType(data.inferredType);
-    }
-  }
-
-  @override
-  void visitPropertyAccess(PropertyAccess node) {
-    node.target?.accept(this);
-    node.propertyName.accept(this);
-    node.staticType = node.propertyName.staticType;
-  }
-
-  @override
-  void visitRedirectingConstructorInvocation(
-      RedirectingConstructorInvocation node) {
-    SimpleIdentifier constructorName = node.constructorName;
-
-    ConstructorElement element =
-        _translateReference(_get(constructorName ?? node));
-    node.staticElement = element;
-    constructorName?.staticElement = element;
-
-    ArgumentList argumentList = node.argumentList;
-    argumentList.accept(this);
-    _resolveArgumentsToParameters(argumentList, element?.parameters);
-  }
-
-  @override
-  void visitSimpleIdentifier(SimpleIdentifier node) {
-    var data = _get(node, isSynthetic: node.token.isSynthetic);
-    if (data.prefixInfo != null) {
-      node.staticElement = _translatePrefixInfo(data.prefixInfo);
-    } else if (data.declaration != null) {
-      node.staticElement = _translateDeclaration(data.declaration);
-    } else if (data.loadLibrary != null) {
-      LibraryElement library = _translateAuxiliaryReference(data.loadLibrary);
-      node.staticElement = library.loadLibraryFunction;
-    } else {
-      node.staticElement = _translateReference(data);
-    }
-    node.staticType = _translateType(
-        data.isWriteReference ? data.writeContext : data.inferredType);
-  }
-
-  @override
-  void visitStringInterpolation(StringInterpolation node) {
-    for (var element in node.elements) {
-      if (element is InterpolationExpression) {
-        element.expression.accept(this);
-      }
-    }
-    node.staticType = _typeContext.stringType;
-  }
-
-  @override
-  void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
-    SimpleIdentifier constructorName = node.constructorName;
-    var superElement = _typeContext.enclosingClassElement.supertype.element;
-    ConstructorElement element;
-    if (constructorName == null) {
-      element = superElement.unnamedConstructor;
-    } else {
-      String name = constructorName.name;
-      element = superElement.getNamedConstructor(name);
-      constructorName.staticElement = element;
-    }
-    node.staticElement = element;
-
-    ArgumentList argumentList = node.argumentList;
-    argumentList.accept(this);
-    _resolveArgumentsToParameters(argumentList, element?.parameters);
-  }
-
-  @override
-  void visitSuperExpression(SuperExpression node) {
-    node.staticType = _typeContext.enclosingClassElement?.type;
-  }
-
-  @override
-  void visitThisExpression(ThisExpression node) {
-    node.staticType = _typeContext.enclosingClassElement?.type;
-  }
-
-  @override
-  void visitTypeName(TypeName node) {
-    super.visitTypeName(node);
-    node.type = node.name.staticType;
-  }
-
-  @override
-  visitTypeParameter(TypeParameter node) {
-    node.bound?.accept(this);
-  }
-
-  @override
-  void visitVariableDeclaration(VariableDeclaration node) {
-    AstNode parent = node.parent;
-    if (parent is VariableDeclarationList &&
-        (parent.parent is TopLevelVariableDeclaration ||
-            parent.parent is FieldDeclaration)) {
-      // Don't visit the name; resolution for it will come from the outline.
-    } else {
-      DartType type = _translateType(
-          _get(node.name, isSynthetic: node.name.isSynthetic).inferredType);
-      node.name.staticType = type;
-
-      VariableElementImpl element = node.name.staticElement;
-      if (element != null) {
-        _typeContext.encloseVariable(element);
-        node.name.staticElement = element;
-        element.type = type;
-      }
-
-      node.initializer?.accept(this);
-
-      if (element is ConstVariableElement) {
-        (element as ConstVariableElement).constantInitializer =
-            node.initializer;
-      }
-    }
-  }
-
-  @override
-  void visitVariableDeclarationList(VariableDeclarationList node) {
-    if (node.parent is TopLevelVariableDeclaration) {
-      node.variables.accept(this);
-    } else {
-      node.type?.accept(this);
-      node.metadata.accept(this);
-      node.variables.accept(this);
-    }
-  }
-
-  ResolutionData _get(SyntacticEntity entity,
-      {bool failIfAbsent = true, bool isSynthetic = false}) {
-    int entityOffset = entity.offset;
-    var encodedLocation = 2 * entityOffset + (isSynthetic ? 1 : 0);
-    var data = _data[encodedLocation];
-    if (failIfAbsent && data == null) {
-      String fileName = _enclosingLibraryElement.source.fullName;
-      throw new StateError('No data for $entity at (offset=$entityOffset, '
-          'isSynthetic=$isSynthetic) in $fileName');
-    }
-    return data;
-  }
-
-  /// Return the [SyntacticEntity] with which the front-end associates
-  /// assignment to the given [leftHandSide].
-  SyntacticEntity _getAssignmentEntity(Expression leftHandSide) {
-    if (leftHandSide is SimpleIdentifier) {
-      return leftHandSide;
-    } else if (leftHandSide is PrefixedIdentifier) {
-      return leftHandSide.identifier;
-    } else if (leftHandSide is PropertyAccess) {
-      return leftHandSide.propertyName;
-    } else if (leftHandSide is IndexExpressionImpl) {
-      return leftHandSide.leftBracket;
-    } else if (leftHandSide is ParenthesizedExpression) {
-      return leftHandSide.rightParenthesis;
-    } else {
-      return null;
-    }
-  }
-
-  /// Resolve arguments of the [argumentList] to corresponding [parameters].
-  void _resolveArgumentsToParameters(
-      ArgumentList argumentList, List<ParameterElement> parameters) {
-    if (parameters != null) {
-      var numberOfPositionalParameters = 0;
-      for (var parameter in parameters) {
-        if (parameter.isPositional) {
-          numberOfPositionalParameters++;
-        }
-      }
-
-      var numberOfArguments = argumentList.arguments.length;
-      if (numberOfArguments == numberOfPositionalParameters &&
-          numberOfPositionalParameters == parameters.length) {
-        argumentList.correspondingStaticParameters = parameters;
-        return;
-      }
-
-      var resolvedParameters = new List<ParameterElement>(numberOfArguments);
-      for (var i = 0; i < numberOfArguments; i++) {
-        var argument = argumentList.arguments[i];
-        ParameterElement argumentParameter;
-        if (argument is NamedExpression) {
-          SimpleIdentifier identifier = argument.name.label;
-          for (var parameter in parameters) {
-            if (parameter.name == identifier.name) {
-              argumentParameter = parameter;
-              identifier.staticElement = parameter;
-              break;
-            }
-          }
-        } else if (i < parameters.length && parameters[i].isPositional) {
-          argumentParameter = parameters[i];
-        }
-        resolvedParameters[i] = argumentParameter;
-      }
-
-      argumentList.correspondingStaticParameters = resolvedParameters;
-    }
-  }
-
-  /// Rewrite AST if the [node] represents an instance creation.
-  void _rewriteIntoInstanceCreation(
-      MethodInvocation node,
-      ConstructorElement invokeElement,
-      DartType invokeType,
-      DartType resultType) {
-    if (node.isCascaded) {
-      return;
-    }
-
-    Identifier typeIdentifier;
-    Token constructorIdentifierPeriod;
-    SimpleIdentifier constructorIdentifier;
-    var target = node.target;
-    if (target == null) {
-      SimpleIdentifier simpleTypeIdentifier = node.methodName;
-      simpleTypeIdentifier.staticElement = resultType.element;
-      simpleTypeIdentifier.staticType = resultType;
-
-      typeIdentifier = simpleTypeIdentifier;
-    } else if (target is SimpleIdentifier) {
-      if (target.staticElement is PrefixElement) {
-        SimpleIdentifier simpleTypeIdentifier = node.methodName;
-        simpleTypeIdentifier.staticElement = resultType.element;
-        simpleTypeIdentifier.staticType = resultType;
-
-        typeIdentifier = astFactory.prefixedIdentifier(
-            target, node.operator, simpleTypeIdentifier);
-      } else {
-        typeIdentifier = target;
-
-        constructorIdentifierPeriod = node.operator;
-        constructorIdentifier = node.methodName;
-      }
-    } else {
-      PrefixedIdentifier prefixed = target;
-      typeIdentifier = prefixed;
-
-      constructorIdentifierPeriod = prefixed.period;
-      constructorIdentifier = node.methodName;
-    }
-
-    var typeName = astFactory.typeName(typeIdentifier, node.typeArguments);
-    typeName.type = resultType;
-
-    var creation = astFactory.instanceCreationExpression(
-      null,
-      astFactory.constructorName(
-        typeName,
-        constructorIdentifierPeriod,
-        constructorIdentifier,
-      ),
-      node.argumentList,
-    );
-    creation.staticElement = invokeElement;
-    creation.staticType = resultType;
-    NodeReplacer.replace(node, creation);
-  }
-
-  void _storeFunctionType(DartType type, FunctionTypedElementImpl element) {
-    if (type is FunctionType && element != null) {
-      DartType Function(DartType) substituteConstituentType;
-      if (type.typeFormals.length == element.typeParameters.length &&
-          type.typeFormals.length != 0) {
-        var argumentTypes = element.typeParameters.map((e) => e.type).toList();
-        var parameterTypes = type.typeFormals.map((e) {
-          var type = e.type;
-          var element = type.element;
-          if (element is TypeParameterMember) {
-            return element.baseElement.type;
-          } else {
-            return type;
-          }
-        }).toList();
-        substituteConstituentType =
-            (DartType t) => t.substitute2(argumentTypes, parameterTypes);
-        for (int i = 0; i < type.typeFormals.length; i++) {
-          (element.typeParameters[i] as TypeParameterElementImpl).bound =
-              type.typeFormals[i].bound == null
-                  ? null
-                  : substituteConstituentType(type.typeFormals[i].bound);
-        }
-      } else {
-        substituteConstituentType = (DartType t) => t;
-      }
-      element.returnType = substituteConstituentType(type.returnType);
-      int normalParameterIndex = 0;
-      int optionalParameterIndex = 0;
-      for (ParameterElementImpl parameter in element.parameters) {
-        if (parameter.isNamed) {
-          parameter.type = substituteConstituentType(
-              type.namedParameterTypes[parameter.name]);
-        } else if (normalParameterIndex < type.normalParameterTypes.length) {
-          parameter.type = substituteConstituentType(
-              type.normalParameterTypes[normalParameterIndex++]);
-        } else if (optionalParameterIndex <
-            type.optionalParameterTypes.length) {
-          parameter.type = substituteConstituentType(
-              type.optionalParameterTypes[optionalParameterIndex++]);
-        }
-      }
-    }
-  }
-
-  Element _translateAuxiliaryReference(kernel.Node reference) {
-    return _typeContext.translateReference(reference);
-  }
-
-  Element _translateDeclaration(int declaration) {
-    return _typeContext.translateDeclaration(declaration);
-  }
-
-  Element _translatePrefixInfo(int prefixInfo) {
-    return _typeContext.translatePrefixInfo(prefixInfo);
-  }
-
-  Element _translateReference(ResolutionData data) {
-    if (data.isPrefixReference) {
-      return _translatePrefixInfo(data.prefixInfo);
-    }
-    return _typeContext.translateReference(data.reference,
-        isNamespaceCombinatorReference: data.isNamespaceCombinatorReference,
-        isTypeReference: data.isTypeReference,
-        isWriteReference: data.isWriteReference,
-        inferredType: data.inferredType,
-        receiverType: data.receiverType);
-  }
-
-  DartType _translateType(kernel.DartType type) {
-    return _typeContext.translateType(type);
-  }
-}
-
-/// A container with [typeArguments].
-class TypeArgumentsDartType implements ParameterizedType {
-  @override
-  final List<DartType> typeArguments;
-
-  TypeArgumentsDartType(this.typeArguments);
-
-  @override
-  bool get isUndefined => false;
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '<${typeArguments.join(', ')}>';
-  }
-}
-
-/// Context for translating types.
-abstract class TypeContext {
-  /// The enclosing [ClassElement], or `null` if not in a class.
-  ClassElement get enclosingClassElement;
-
-  DartType get stringType;
-
-  DartType get typeType;
-
-  /// Attach the variable [element] to the current executable.
-  void encloseVariable(ElementImpl element);
-
-  /// Finalize the given function [element] - set all types for it.
-  /// Then make it the current executable.
-  void enterLocalFunction(FunctionTypedElementImpl element);
-
-  /// Restore the current executable that was before the [element].
-  void exitLocalFunction(FunctionTypedElementImpl element);
-
-  /// Return the Analyzer [Element] for the local declaration having the given
-  /// offset.
-  Element translateDeclaration(int declarationOffset);
-
-  /// Return the analyzer [Element] for the import prefix corresponding to the
-  /// import having the given offset.
-  PrefixElement translatePrefixInfo(int importIndex);
-
-  /// Return the analyzer [Element] for the given kernel node.
-  Element translateReference(kernel.Node referencedNode,
-      {bool isNamespaceCombinatorReference = false,
-      bool isTypeReference = false,
-      bool isWriteReference = false,
-      kernel.DartType inferredType,
-      kernel.DartType receiverType});
-
-  /// Return the Analyzer [DartType] for the given [kernelType].
-  DartType translateType(kernel.DartType kernelType);
-}
-
-/// The hierarchical scope for labels.
-class _LabelScope {
-  final _LabelScope parent;
-  final Map<String, LabelElement> elements = {};
-
-  _LabelScope(this.parent);
-
-  LabelElement operator [](String name) {
-    var element = elements[name];
-    if (element != null) {
-      return element;
-    }
-    if (parent != null) {
-      return parent[name];
-    }
-    return null;
-  }
-
-  void add(String name, LabelElement element) {
-    elements[name] = element;
-  }
-}
diff --git a/pkg/analyzer/lib/src/fasta/resolution_storer.dart b/pkg/analyzer/lib/src/fasta/resolution_storer.dart
deleted file mode 100644
index 04e1c84..0000000
--- a/pkg/analyzer/lib/src/fasta/resolution_storer.dart
+++ /dev/null
@@ -1,955 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/src/fasta/resolution_applier.dart';
-import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart';
-import 'package:front_end/src/fasta/kernel/kernel_type_variable_builder.dart';
-import 'package:front_end/src/fasta/type_inference/type_inference_listener.dart';
-import 'package:front_end/src/scanner/token.dart';
-import 'package:kernel/ast.dart';
-import 'package:kernel/type_algebra.dart';
-
-class ResolutionData {
-  final List<DartType> argumentTypes;
-  final Node combiner;
-  final int declaration;
-  final DartType inferredType;
-  final DartType invokeType;
-  final bool isExplicitCall;
-  final bool isImplicitCall;
-  final bool isNamespaceCombinatorReference;
-  final bool isOutline;
-  final bool isPrefixReference;
-  final bool isTypeReference;
-  final bool isWriteReference;
-  final Node loadLibrary;
-  final int prefixInfo;
-  final DartType receiverType;
-  final Node reference;
-  final DartType writeContext;
-
-  ResolutionData(
-      {this.argumentTypes,
-      this.combiner,
-      this.declaration,
-      this.inferredType,
-      this.invokeType,
-      this.isExplicitCall = false,
-      this.isImplicitCall = false,
-      this.isNamespaceCombinatorReference = false,
-      this.isOutline = false,
-      this.isPrefixReference = false,
-      this.isTypeReference = false,
-      this.isWriteReference = false,
-      this.loadLibrary,
-      this.prefixInfo,
-      this.receiverType,
-      this.reference,
-      this.writeContext});
-}
-
-/// Type inference listener that records inferred types for later use by
-/// [ResolutionApplier].
-class ResolutionStorer
-    implements TypeInferenceListener<int, Node, int>, TypeInferenceTokensSaver {
-  final Map<int, ResolutionData> _data;
-
-  final Map<TypeParameter, int> _typeVariableDeclarations;
-
-  ResolutionStorer(Map<int, ResolutionData> data,
-      Map<TypeParameter, int> typeVariableDeclarations)
-      : _data = data,
-        _typeVariableDeclarations = typeVariableDeclarations;
-
-  @override
-  TypeInferenceTokensSaver get typeInferenceTokensSaver => this;
-
-  @override
-  AsExpressionTokens asExpressionTokens(Token asOperator) {
-    return new AsExpressionTokens(asOperator);
-  }
-
-  void asExpression(ExpressionJudgment judgment, int location, void expression,
-      AsExpressionTokens tokens, void literalType, DartType inferredType) {
-    _store(location, inferredType: inferredType);
-  }
-
-  @override
-  AssertInitializerTokens assertInitializerTokens(Token assertKeyword,
-      Token leftParenthesis, Token comma, Token rightParenthesis) {
-    return new AssertInitializerTokens(
-        assertKeyword, leftParenthesis, comma, rightParenthesis);
-  }
-
-  void assertInitializer(InitializerJudgment judgment, int location,
-      AssertInitializerTokens tokens, void condition, void message) {}
-
-  @override
-  AssertStatementTokens assertStatementTokens(
-      Token assertKeyword,
-      Token leftParenthesis,
-      Token comma,
-      Token rightParenthesis,
-      Token semicolon) {
-    return new AssertStatementTokens(
-        assertKeyword, leftParenthesis, comma, rightParenthesis, semicolon);
-  }
-
-  void assertStatement(StatementJudgment judgment, int location,
-      AssertStatementTokens Tokens, void condition, void message) {}
-
-  AwaitExpressionTokens awaitExpressionTokens(Token awaitKeyword) {
-    return new AwaitExpressionTokens(awaitKeyword);
-  }
-
-  void awaitExpression(
-          ExpressionJudgment judgment,
-          int location,
-          AwaitExpressionTokens tokens,
-          void expression,
-          DartType inferredType) =>
-      genericExpression("awaitExpression", location, inferredType);
-
-  Object binderForFunctionDeclaration(
-      StatementJudgment judgment, int fileOffset, String name) {
-    return new VariableDeclarationBinder(fileOffset, false);
-  }
-
-  void binderForStatementLabel(
-      StatementJudgment judgment, int fileOffset, String name) {}
-
-  void binderForSwitchLabel(
-      SwitchCaseJudgment judgment, int fileOffset, String name) {}
-
-  TypeVariableBinder binderForTypeVariable(
-      KernelTypeVariableBuilder builder, int fileOffset, String name) {
-    return new TypeVariableBinder(fileOffset);
-  }
-
-  Object binderForVariableDeclaration(StatementJudgment judgment,
-      int fileOffset, String name, bool forSyntheticToken) {
-    return new VariableDeclarationBinder(fileOffset, forSyntheticToken);
-  }
-
-  BlockTokens blockTokens(Token leftBracket, Token rightBracket) {
-    return new BlockTokens(leftBracket, rightBracket);
-  }
-
-  void block(StatementJudgment judgment, int location, BlockTokens tokens,
-      List<void> statements) {}
-
-  BoolLiteralTokens boolLiteralTokens(Token literal) {
-    return new BoolLiteralTokens(literal);
-  }
-
-  void boolLiteral(ExpressionJudgment judgment, int location,
-          BoolLiteralTokens tokens, bool value, DartType inferredType) =>
-      genericExpression("boolLiteral", location, inferredType);
-
-  BreakStatementTokens breakStatementTokens(
-      Token breakKeyword, Token semicolon) {
-    return new BreakStatementTokens(breakKeyword, semicolon);
-  }
-
-  void breakStatement(StatementJudgment judgment, int location,
-      BreakStatementTokens tokens, void label, covariant Object labelBinder) {}
-
-  void cascadeExpression(
-      ExpressionJudgment judgment, int location, DartType inferredType) {
-    // Overridden so that the type of the expression will not be recorded. We
-    // don't need to record the type because the type is always the same as the
-    // type of the target, and we don't have the appropriate offset so we can't
-    // correctly apply the type even if we recorded it.
-  }
-
-  CatchStatementTokens catchStatementTokens(Token onKeyword, Token catchKeyword,
-      Token leftParenthesis, Token comma, Token rightParenthesis) {
-    return new CatchStatementTokens(
-        onKeyword, catchKeyword, leftParenthesis, comma, rightParenthesis);
-  }
-
-  void catchStatement(
-      Catch judgment,
-      int location,
-      CatchStatementTokens tokens,
-      void type,
-      void body,
-      covariant VariableDeclarationBinder exceptionBinder,
-      DartType exceptionType,
-      covariant VariableDeclarationBinder stackTraceBinder,
-      DartType stackTraceType) {
-    if (exceptionBinder != null) {
-      _store(exceptionBinder.fileOffset,
-          inferredType: exceptionType,
-          isSynthetic: exceptionBinder.isSynthetic);
-    }
-
-    if (stackTraceBinder != null) {
-      _store(stackTraceBinder.fileOffset, inferredType: stackTraceType);
-    }
-  }
-
-  ConditionalExpressionTokens conditionalExpressionTokens(
-      Token question, Token colon) {
-    return new ConditionalExpressionTokens(question, colon);
-  }
-
-  void conditionalExpression(
-          ExpressionJudgment judgment,
-          int location,
-          void condition,
-          ConditionalExpressionTokens tokens,
-          void thenExpression,
-          void elseExpression,
-          DartType inferredType) =>
-      genericExpression("conditionalExpression", location, inferredType);
-
-  void constructorInvocation(ExpressionJudgment judgment, int location,
-      Node expressionTarget, DartType inferredType) {
-    // A class reference may have already been stored at this location by
-    // storeClassReference.  We want to replace it with a constructor
-    // reference.
-    _unstore(location);
-    _store(location, inferredType: inferredType, reference: expressionTarget);
-  }
-
-  ContinueStatementTokens continueStatementTokens(
-      Token continueKeyword, Token semicolon) {
-    return new ContinueStatementTokens(continueKeyword, semicolon);
-  }
-
-  void continueStatement(
-      StatementJudgment judgment,
-      int location,
-      ContinueStatementTokens tokens,
-      void label,
-      covariant Object labelBinder) {}
-
-  ContinueSwitchStatementTokens continueSwitchStatementTokens(
-      Token continueKeyword, Token semicolon) {
-    return new ContinueSwitchStatementTokens(continueKeyword, semicolon);
-  }
-
-  void continueSwitchStatement(
-      StatementJudgment judgment,
-      int location,
-      ContinueSwitchStatementTokens tokens,
-      void label,
-      covariant Object labelBinder) {}
-
-  void deferredCheck(
-      ExpressionJudgment judgment, int location, DartType inferredType) {
-    // This judgment has no semantic value for Analyzer.
-  }
-
-  DoStatementTokens doStatementTokens(Token doKeyword, Token whileKeyword,
-      Token leftParenthesis, Token rightParenthesis, Token semicolon) {
-    return new DoStatementTokens(
-        doKeyword, whileKeyword, leftParenthesis, rightParenthesis, semicolon);
-  }
-
-  void doStatement(StatementJudgment judgment, int location,
-      DoStatementTokens tokens, void body, void condition) {}
-
-  DoubleLiteralTokens doubleLiteralTokens(Token literal) {
-    return new DoubleLiteralTokens(literal);
-  }
-
-  void doubleLiteral(ExpressionJudgment judgment, int location,
-          DoubleLiteralTokens tokens, double value, DartType inferredType) =>
-      genericExpression("doubleLiteral", location, inferredType);
-
-  EmptyStatementTokens emptyStatementTokens(Token semicolon) {
-    return new EmptyStatementTokens(semicolon);
-  }
-
-  void emptyStatement(EmptyStatementTokens tokens) {}
-
-  ExpressionStatementTokens expressionStatementTokens(Token semicolon) {
-    return new ExpressionStatementTokens(semicolon);
-  }
-
-  void expressionStatement(StatementJudgment judgment, int location,
-      void expression, ExpressionStatementTokens tokens) {}
-
-  void fieldInitializer(
-      InitializerJudgment judgment,
-      int location,
-      Token thisKeyword,
-      Token period,
-      Token fieldName,
-      Token equals,
-      void expression,
-      Node initializerField) {
-    _store(location, reference: initializerField);
-  }
-
-  ForInStatementTokens forInStatementTokens(
-      Token awaitKeyword,
-      Token forKeyword,
-      Token leftParenthesis,
-      Token inKeyword,
-      Token rightParenthesis) {
-    return new ForInStatementTokens(
-        awaitKeyword, forKeyword, leftParenthesis, inKeyword, rightParenthesis);
-  }
-
-  void forInStatement(
-      StatementJudgment judgment,
-      int location,
-      ForInStatementTokens tokens,
-      Object loopVariable,
-      void iterator,
-      void body,
-      covariant VariableDeclarationBinder loopVariableBinder,
-      DartType loopVariableType,
-      int writeLocation,
-      DartType writeType,
-      covariant VariableDeclarationBinder writeVariableBinder,
-      Node writeTarget) {
-    if (loopVariableBinder != null) {
-      _store(loopVariableBinder.fileOffset, inferredType: loopVariableType);
-    } else {
-      if (writeVariableBinder != null) {
-        _store(writeLocation,
-            declaration: writeVariableBinder.fileOffset,
-            inferredType: writeType);
-      } else {
-        _store(writeLocation,
-            reference: writeTarget,
-            isWriteReference: true,
-            writeContext: writeType);
-      }
-    }
-  }
-
-  ForStatementTokens forStatementTokens(
-    Token forKeyword,
-    Token leftParenthesis,
-    Token leftSeparator,
-    Token rightSeparator,
-    Token rightParenthesis,
-  ) {
-    return new ForStatementTokens(forKeyword, leftParenthesis, leftSeparator,
-        rightSeparator, rightParenthesis);
-  }
-
-  void forStatement(
-      StatementJudgment judgment,
-      int location,
-      ForStatementTokens tokens,
-      void variableDeclarationList,
-      void initialization,
-      void condition,
-      void updaters,
-      void body) {}
-
-  void functionDeclaration(
-      covariant VariableDeclarationBinder binder, FunctionType inferredType) {
-    _store(binder.fileOffset, inferredType: inferredType);
-  }
-
-  void functionExpression(
-          ExpressionJudgment judgment, int location, DartType inferredType) =>
-      genericExpression("functionExpression", location, inferredType);
-
-  @override
-  void functionType(int location, DartType type) {
-    _store(location, inferredType: type);
-  }
-
-  @override
-  void functionTypedFormalParameter(int location, DartType type) {
-    _store(location, inferredType: type);
-  }
-
-  void genericExpression(
-      String expressionType, int location, DartType inferredType) {
-    _store(location, inferredType: inferredType);
-  }
-
-  IfNullTokens ifNullTokens(Token operator) {
-    return new IfNullTokens(operator);
-  }
-
-  void ifNull(ExpressionJudgment judgment, int location, void leftOperand,
-          IfNullTokens tokens, void rightOperand, DartType inferredType) =>
-      genericExpression('ifNull', location, inferredType);
-
-  IfStatementTokens ifStatementTokens(Token ifKeyword, Token leftParenthesis,
-      Token rightParenthesis, Token elseKeyword) {
-    return new IfStatementTokens(
-        ifKeyword, leftParenthesis, rightParenthesis, elseKeyword);
-  }
-
-  void ifStatement(
-      StatementJudgment judgment,
-      int location,
-      IfStatementTokens tokens,
-      void condition,
-      void thenStatement,
-      void elseStatement) {}
-
-  void indexAssign(
-      ExpressionJudgment judgment,
-      int location,
-      DartType receiverType,
-      Node writeMember,
-      Node combiner,
-      DartType inferredType) {
-    _store(location,
-        reference: writeMember,
-        inferredType: inferredType,
-        combiner: combiner,
-        receiverType: receiverType);
-  }
-
-  IntLiteralTokens intLiteralTokens(Token literal) {
-    return new IntLiteralTokens(literal);
-  }
-
-  void intLiteral(ExpressionJudgment judgment, int location,
-          IntLiteralTokens tokens, num value, DartType inferredType) =>
-      genericExpression("intLiteral", location, inferredType);
-
-  @override
-  void invalidAssignment(ExpressionJudgment judgment, int location) {
-    _store(location, inferredType: const DynamicType());
-  }
-
-  void invalidInitializer(InitializerJudgment judgment, int location) {}
-
-  IsExpressionTokens isExpressionTokens(Token isOperator) {
-    return new IsExpressionTokens(isOperator);
-  }
-
-  void isExpression(ExpressionJudgment judgment, int location, void expression,
-      IsExpressionTokens tokens, void literalType, DartType inferredType) {
-    _store(location, inferredType: inferredType);
-  }
-
-  IsNotExpressionTokens isNotExpressionTokens(
-      Token isOperator, Token notOperator) {
-    return new IsNotExpressionTokens(isOperator, notOperator);
-  }
-
-  void isNotExpression(
-      ExpressionJudgment judgment,
-      int location,
-      void expression,
-      IsNotExpressionTokens tokens,
-      void literalType,
-      DartType inferredType) {
-    _store(location, inferredType: inferredType);
-  }
-
-  void labeledStatement(List<Object> labels, void statement) {}
-
-  ListLiteralTokens listLiteralTokens(
-      Token constKeyword, Token leftBracket, Token rightBracket) {
-    return new ListLiteralTokens(constKeyword, leftBracket, rightBracket);
-  }
-
-  void listLiteral(
-          ExpressionJudgment judgment,
-          int location,
-          ListLiteralTokens tokens,
-          Object typeArguments,
-          void elements,
-          DartType inferredType) =>
-      genericExpression("listLiteral", location, inferredType);
-
-  @override
-  void loadLibrary(LoadLibraryJudgment judgment, int location, Node library,
-      FunctionType calleeType, DartType inferredType) {
-    _store(location,
-        loadLibrary: library,
-        invokeType: calleeType,
-        inferredType: inferredType);
-  }
-
-  @override
-  void loadLibraryTearOff(LoadLibraryTearOffJudgment judgment, int location,
-      Node library, DartType inferredType) {
-    _store(location, loadLibrary: library, inferredType: inferredType);
-  }
-
-  LogicalExpressionTokens logicalExpressionTokens(Token operatorToken) {
-    return new LogicalExpressionTokens(operatorToken);
-  }
-
-  void logicalExpression(
-          ExpressionJudgment judgment,
-          int location,
-          void leftOperand,
-          LogicalExpressionTokens tokens,
-          void rightOperand,
-          DartType inferredType) =>
-      genericExpression("logicalExpression", location, inferredType);
-
-  MapLiteralTokens mapLiteralTokens(
-      Token constKeyword, Token leftBracket, Token rightBracket) {
-    return new MapLiteralTokens(constKeyword, leftBracket, rightBracket);
-  }
-
-  void mapLiteral(
-          ExpressionJudgment judgment,
-          int location,
-          MapLiteralTokens tokens,
-          Object typeArguments,
-          List<Object> entries,
-          DartType inferredType) =>
-      genericExpression("mapLiteral", location, inferredType);
-
-  void mapLiteralEntry(
-      Object judgment, int fileOffset, void key, Token separator, void value) {
-    // TODO(brianwilkerson) Implement this.
-  }
-
-  void methodInvocation(
-      ExpressionJudgment judgment,
-      int resultOffset,
-      DartType receiverType,
-      List<DartType> argumentsTypes,
-      bool isImplicitCall,
-      Node interfaceMember,
-      FunctionType calleeType,
-      Substitution substitution,
-      DartType inferredType) {
-    FunctionType invokeType = substitution == null
-        ? calleeType
-        : substitution.substituteType(calleeType.withoutTypeParameters);
-
-    _store(resultOffset,
-        inferredType: inferredType,
-        argumentTypes: argumentsTypes,
-        invokeType: invokeType,
-        isImplicitCall: isImplicitCall,
-        receiverType: receiverType,
-        reference: interfaceMember);
-  }
-
-  void methodInvocationCall(
-      ExpressionJudgment judgment,
-      int resultOffset,
-      List<DartType> argumentsTypes,
-      bool isImplicitCall,
-      FunctionType calleeType,
-      Substitution substitution,
-      DartType inferredType) {
-    FunctionType invokeType = substitution == null
-        ? calleeType
-        : substitution.substituteType(calleeType.withoutTypeParameters);
-
-    _store(resultOffset,
-        inferredType: inferredType,
-        argumentTypes: argumentsTypes,
-        invokeType: invokeType,
-        isImplicitCall: isImplicitCall);
-  }
-
-  void namedFunctionExpression(ExpressionJudgment judgment,
-          covariant VariableDeclarationBinder binder, DartType inferredType) =>
-      genericExpression(
-          "namedFunctionExpression", binder.fileOffset, inferredType);
-
-  NotTokens notTokens(Token operator) {
-    return new NotTokens(operator);
-  }
-
-  void not(ExpressionJudgment judgment, int location, NotTokens tokens,
-          void operand, DartType inferredType) =>
-      genericExpression("not", location, inferredType);
-
-  NullLiteralTokens nullLiteralTokens(Token literal) {
-    return new NullLiteralTokens(literal);
-  }
-
-  void nullLiteral(ExpressionJudgment judgment, int location,
-      NullLiteralTokens tokens, bool isSynthetic, DartType inferredType) {
-    if (isSynthetic) return null;
-    genericExpression("nullLiteral", location, inferredType);
-  }
-
-  void propertyAssign(
-      ExpressionJudgment judgment,
-      int location,
-      bool isSyntheticLhs,
-      DartType receiverType,
-      Node writeMember,
-      DartType writeContext,
-      Node combiner,
-      DartType inferredType) {
-    _store(location,
-        isSynthetic: isSyntheticLhs,
-        isWriteReference: true,
-        reference: writeMember,
-        writeContext: writeContext,
-        combiner: combiner,
-        inferredType: inferredType,
-        receiverType: receiverType);
-  }
-
-  void propertyGet(
-      ExpressionJudgment judgment,
-      int location,
-      bool forSyntheticToken,
-      DartType receiverType,
-      Node member,
-      DartType inferredType) {
-    _store(location,
-        reference: member,
-        inferredType: inferredType,
-        isSynthetic: forSyntheticToken,
-        receiverType: receiverType);
-  }
-
-  void propertyGetCall(
-      ExpressionJudgment judgment, int location, DartType inferredType) {
-    _store(location, isExplicitCall: true);
-  }
-
-  void redirectingInitializer(
-      InitializerJudgment judgment,
-      int location,
-      Token thisKeyword,
-      Token period,
-      Token constructorName,
-      covariant Object argumentList,
-      Node initializerTarget) {
-    _store(location, reference: initializerTarget);
-  }
-
-  RethrowTokens rethrowTokens(Token rethrowKeyword) {
-    return new RethrowTokens(rethrowKeyword);
-  }
-
-  void rethrow_(ExpressionJudgment judgment, int location, RethrowTokens tokens,
-          DartType inferredType) =>
-      genericExpression('rethrow', location, inferredType);
-
-  ReturnStatementTokens returnStatementTokens(
-      Token returnKeyword, Token semicolon) {
-    return new ReturnStatementTokens(returnKeyword, semicolon);
-  }
-
-  void returnStatement(StatementJudgment judgment, int location,
-      ReturnStatementTokenstokens, void expression) {}
-
-  void statementLabel(covariant void binder, Token label, Token colon) {}
-
-  void staticAssign(ExpressionJudgment judgment, int location, Node writeMember,
-      DartType writeContext, Node combiner, DartType inferredType) {
-    _store(location,
-        reference: writeMember,
-        isWriteReference: true,
-        writeContext: writeContext,
-        combiner: combiner,
-        inferredType: inferredType);
-  }
-
-  void staticGet(ExpressionJudgment judgment, int location,
-      Node expressionTarget, DartType inferredType) {
-    _store(location, reference: expressionTarget, inferredType: inferredType);
-  }
-
-  void staticInvocation(
-      ExpressionJudgment judgment,
-      int location,
-      Node expressionTarget,
-      List<DartType> expressionArgumentsTypes,
-      FunctionType calleeType,
-      Substitution substitution,
-      DartType inferredType) {
-    FunctionType invokeType = substitution == null
-        ? calleeType
-        : substitution.substituteType(calleeType.withoutTypeParameters);
-    _store(location,
-        invokeType: invokeType ?? const DynamicType(),
-        argumentTypes: expressionArgumentsTypes,
-        reference: expressionTarget,
-        inferredType: inferredType);
-  }
-
-  void storeClassReference(int location, Node reference, DartType rawType) {
-    // TODO(paulberry): would it be better to use literalType?
-    _store(location, reference: reference, inferredType: rawType);
-  }
-
-  void storePrefixInfo(int location, int prefixInfo) {
-    _store(location, isPrefixReference: true, prefixInfo: prefixInfo);
-  }
-
-  @override
-  void storeUnresolved(int location) {
-    _unstore(location);
-    _store(location, inferredType: const DynamicType());
-  }
-
-  void stringConcatenation(
-      ExpressionJudgment judgment, int location, DartType inferredType) {
-    // We don't need the type - we already know that it is String.
-    // Moreover, the file offset for StringConcatenation is `-1`.
-  }
-
-  StringLiteralTokens stringLiteralTokens(Token literal) {
-    return new StringLiteralTokens(literal);
-  }
-
-  void stringLiteral(ExpressionJudgment judgment, int location,
-          StringLiteralTokens tokens, String value, DartType inferredType) =>
-      genericExpression("StringLiteral", location, inferredType);
-
-  SuperInitializerTokens superInitializerTokens(
-      Token superKeyword, Token period, Token constructorName) {
-    return new SuperInitializerTokens(superKeyword, period, constructorName);
-  }
-
-  void superInitializer(InitializerJudgment judgment, int location,
-      SuperInitializerTokens tokens, covariant Object argumentList) {}
-
-  SwitchCaseTokens switchCaseTokens(Token keyword, Token colon) {
-    return new SwitchCaseTokens(keyword, colon);
-  }
-
-  void switchCase(SwitchCaseJudgment judgment, List<Object> labels,
-      Token keyword, void expression, Token colon, List<void> statements) {}
-
-  void switchLabel(covariant void binder, Token label, Token colon) {}
-
-  SwitchStatementTokens switchStatementTokens(
-      Token switchKeyword,
-      Token leftParenthesis,
-      Token rightParenthesis,
-      Token leftBracket,
-      Token rightBracket) {
-    return new SwitchStatementTokens(switchKeyword, leftParenthesis,
-        rightParenthesis, leftBracket, rightBracket);
-  }
-
-  void switchStatement(StatementJudgment judgment, int location,
-      SwitchStatementTokens tokens, void expression, void members) {}
-
-  void symbolLiteral(ExpressionJudgment judgment, int location, Token poundSign,
-          List<Token> components, String value, DartType inferredType) =>
-      genericExpression("symbolLiteral", location, inferredType);
-
-  ThisExpressionTokens thisExpressionTokens(Token thisKeyword) {
-    return new ThisExpressionTokens(thisKeyword);
-  }
-
-  void thisExpression(ExpressionJudgment judgment, int location,
-      ThisExpressionTokens token, DartType inferredType) {}
-
-  ThrowTokens throwTokens(Token throwKeyword) {
-    return new ThrowTokens(throwKeyword);
-  }
-
-  void throw_(ExpressionJudgment judgment, int location, ThrowTokens tokens,
-          void expression, DartType inferredType) =>
-      genericExpression('throw', location, inferredType);
-
-  void tryCatch(StatementJudgment judgment, int location) {}
-
-  TryFinallyTokens tryFinallyTokens(Token tryKeyword, Token finallyKeyword) {
-    return new TryFinallyTokens(tryKeyword, finallyKeyword);
-  }
-
-  void tryFinally(
-      StatementJudgment judgment,
-      int location,
-      TryFinallyTokens tokens,
-      void body,
-      void catchClauses,
-      void finallyBlock) {}
-
-  void typeLiteral(ExpressionJudgment judgment, int location,
-      Node expressionType, DartType inferredType) {
-    _store(location, reference: expressionType, inferredType: inferredType);
-  }
-
-  void typeReference(
-      int location,
-      bool forSyntheticToken,
-      Token leftBracket,
-      List<void> typeArguments,
-      Token rightBracket,
-      Node reference,
-      covariant TypeVariableBinder binder,
-      DartType type) {
-    _store(location,
-        isSynthetic: forSyntheticToken,
-        reference: reference,
-        declaration: binder?.fileOffset,
-        inferredType: type,
-        isTypeReference: true);
-  }
-
-  void typeVariableDeclaration(int location,
-      covariant TypeVariableBinder binder, TypeParameter typeParameter) {
-    _storeTypeVariableDeclaration(binder.fileOffset, typeParameter);
-    _store(location, declaration: binder.fileOffset);
-  }
-
-  void variableAssign(
-      ExpressionJudgment judgment,
-      int location,
-      bool isSyntheticLhs,
-      DartType writeContext,
-      covariant VariableDeclarationBinder writeVariableBinder,
-      Node combiner,
-      DartType inferredType) {
-    _store(location,
-        isSynthetic: isSyntheticLhs,
-        declaration: writeVariableBinder?.fileOffset,
-        isWriteReference: true,
-        writeContext: writeContext,
-        combiner: combiner,
-        inferredType: inferredType);
-  }
-
-  void variableDeclaration(
-      covariant VariableDeclarationBinder binder, DartType inferredType) {
-    _store(binder.fileOffset,
-        inferredType: inferredType, isSynthetic: binder.isSynthetic);
-  }
-
-  void variableGet(
-      ExpressionJudgment judgment,
-      int location,
-      bool forSyntheticToken,
-      bool isInCascade,
-      covariant VariableDeclarationBinder variableBinder,
-      DartType inferredType) {
-    if (isInCascade) {
-      return;
-    }
-    _store(location,
-        isSynthetic: forSyntheticToken,
-        declaration: variableBinder?.fileOffset,
-        inferredType: inferredType);
-  }
-
-  void voidType(int location, Token token, DartType type) {
-    _store(location, inferredType: type);
-  }
-
-  WhileStatementTokens whileStatementTokens(
-      Token whileKeyword, Token leftParenthesis, Token rightParenthesis) {
-    return new WhileStatementTokens(
-        whileKeyword, leftParenthesis, rightParenthesis);
-  }
-
-  void whileStatement(StatementJudgment judgment, int location,
-      WhileStatementTokens tokens, void condition, void body) {}
-
-  YieldStatementTokens yieldStatementTokens(
-      Token yieldKeyword, Token star, Token semicolon) {
-    return new YieldStatementTokens(yieldKeyword, star, semicolon);
-  }
-
-  void yieldStatement(StatementJudgment judgment, int location,
-      YieldStatementTokens tokens, void expression) {}
-
-  void _store(int location,
-      {List<DartType> argumentTypes,
-      Node combiner,
-      int declaration,
-      DartType inferredType,
-      DartType invokeType,
-      bool isExplicitCall = false,
-      bool isImplicitCall = false,
-      bool isPrefixReference = false,
-      bool isSynthetic = false,
-      bool isTypeReference = false,
-      bool isWriteReference = false,
-      Node loadLibrary,
-      int prefixInfo,
-      DartType receiverType,
-      Node reference,
-      bool replace = false,
-      DartType writeContext}) {
-    _validateLocation(location);
-    var encodedLocation = 2 * location + (isSynthetic ? 1 : 0);
-    if (!replace) {
-      var existing = _data[encodedLocation];
-      if (existing != null) {
-        if (existing.isOutline) {
-          return;
-        }
-        throw new StateError('Data already stored for (offset=$location, '
-            'isSynthetic=$isSynthetic)');
-      }
-    }
-    _data[encodedLocation] = new ResolutionData(
-        argumentTypes: argumentTypes,
-        combiner: combiner,
-        declaration: declaration,
-        inferredType: inferredType,
-        invokeType: invokeType,
-        isExplicitCall: isExplicitCall,
-        isImplicitCall: isImplicitCall,
-        isPrefixReference: isPrefixReference,
-        isTypeReference: isTypeReference,
-        isWriteReference: isWriteReference,
-        loadLibrary: loadLibrary,
-        prefixInfo: prefixInfo,
-        receiverType: receiverType,
-        reference: reference,
-        writeContext: writeContext);
-  }
-
-  void _storeTypeVariableDeclaration(
-      int fileOffset, TypeParameter typeParameter) {
-    if (_typeVariableDeclarations.containsKey(fileOffset)) {
-      throw new StateError(
-          'Type declaration already stored for offset $fileOffset');
-    }
-    _typeVariableDeclarations[typeParameter] = fileOffset;
-  }
-
-  void _unstore(int location, {bool isSynthetic: false}) {
-    var encodedLocation = 2 * location + (isSynthetic ? 1 : 0);
-    _data.remove(encodedLocation) == null;
-  }
-
-  void _validateLocation(int location) {
-    if (location < 0) {
-      throw new StateError('Invalid location: $location');
-    }
-  }
-
-  NamedExpressionTokens namedExpressionTokens(Token nameToken, Token colon) {
-    return new NamedExpressionTokens(nameToken, colon);
-  }
-}
-
-/// A [DartType] wrapper around invocation type arguments.
-class TypeArgumentsDartType implements DartType {
-  final List<DartType> types;
-
-  TypeArgumentsDartType(this.types);
-
-  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
-
-  @override
-  String toString() {
-    return '<${types.join(', ')}>';
-  }
-}
-
-/// TODO(paulberry): eventually just use the element directly.
-class TypeVariableBinder {
-  final int fileOffset;
-
-  TypeVariableBinder(this.fileOffset);
-}
-
-/// TODO(paulberry): eventually just use the element directly.
-class VariableDeclarationBinder {
-  final int fileOffset;
-  final bool isSynthetic;
-
-  VariableDeclarationBinder(this.fileOffset, this.isSynthetic);
-}
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index 854a78a..4a24786 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -27,19 +27,12 @@
  * any more complete than a [COMPILATION_UNIT_ELEMENT].
  */
 class DeclarationResolver extends RecursiveAstVisitor<Object> {
-  final bool _useCFE;
-
   /**
    * The compilation unit containing the AST nodes being visited.
    */
   CompilationUnitElementImpl _enclosingUnit;
 
   /**
-   * The library element containing the compilation unit.
-   */
-  LibraryElement _enclosingLibrary;
-
-  /**
    * The type provider used to access the known types.
    */
   TypeProvider _typeProvider;
@@ -50,7 +43,7 @@
    */
   ElementWalker _walker;
 
-  DeclarationResolver({bool useCFE: false}) : _useCFE = useCFE;
+  DeclarationResolver();
 
   /**
    * Resolve the declarations within the given compilation [unit] to the
@@ -58,7 +51,6 @@
    * if the element model and compilation unit do not match each other.
    */
   void resolve(CompilationUnit unit, CompilationUnitElement element) {
-    _enclosingLibrary = element.enclosingElement;
     _enclosingUnit = element;
     _typeProvider = _enclosingUnit.context?.typeProvider;
     _walker = new ElementWalker.forCompilationUnit(element);
@@ -103,9 +95,6 @@
   @override
   Object visitClassDeclaration(ClassDeclaration node) {
     ClassElement element = _match(node.name, _walker.getClass());
-    if (_useCFE) {
-      node.name.staticType = _typeProvider.typeType;
-    }
     _walk(new ElementWalker.forClass(element), () {
       super.visitClassDeclaration(node);
     });
@@ -116,9 +105,6 @@
   @override
   Object visitClassTypeAlias(ClassTypeAlias node) {
     ClassElement element = _match(node.name, _walker.getClass());
-    if (_useCFE) {
-      node.name.staticType = _typeProvider.typeType;
-    }
     _walk(new ElementWalker.forClass(element), () {
       super.visitClassTypeAlias(node);
     });
@@ -135,10 +121,6 @@
       super.visitConstructorDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    if (_useCFE) {
-      _applyTypeToIdentifier(node.returnType, element.returnType);
-      node.name?.staticType = element.type;
-    }
     return null;
   }
 
@@ -254,17 +236,6 @@
   }
 
   @override
-  Object visitFormalParameterList(FormalParameterList node) {
-    if (_useCFE) {
-      applyParameters(_enclosingLibrary, _walker._parameters, node);
-      _walker.consumeParameters();
-      return null;
-    } else {
-      return super.visitFormalParameterList(node);
-    }
-  }
-
-  @override
   Object visitFunctionDeclaration(FunctionDeclaration node) {
     SimpleIdentifier functionName = node.name;
     Token property = node.propertyKeyword;
@@ -282,15 +253,6 @@
             elementName: functionName.name + '=');
       }
     }
-    if (_useCFE) {
-      if (node.isGetter) {
-        node.name.staticType = element.returnType;
-      } else if (node.isSetter) {
-        node.name.staticType = element.parameters[0].type;
-      } else {
-        node.name.staticType = element.type;
-      }
-    }
     _setGenericFunctionType(node.returnType, element.returnType);
     node.functionExpression.element = element;
     _walker._elementHolder?.addFunction(element);
@@ -427,15 +389,6 @@
             elementName: nameOfMethod + '=');
       }
     }
-    if (_useCFE) {
-      if (node.isGetter) {
-        node.name.staticType = element.returnType;
-      } else if (node.isSetter) {
-        node.name.staticType = element.parameters[0].type;
-      } else {
-        node.name.staticType = element.type;
-      }
-    }
     _setGenericFunctionType(node.returnType, element.returnType);
     _walk(new ElementWalker.forExecutable(element, _enclosingUnit), () {
       super.visitMethodDeclaration(node);
@@ -445,6 +398,16 @@
   }
 
   @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    ClassElement element = _match(node.name, _walker.getMixin());
+    _walk(new ElementWalker.forClass(element), () {
+      super.visitMixinDeclaration(node);
+    });
+    resolveMetadata(node, node.metadata, element);
+    return null;
+  }
+
+  @override
   Object visitPartDirective(PartDirective node) {
     super.visitPartDirective(node);
     List<ElementAnnotation> annotations =
@@ -506,7 +469,7 @@
 
   @override
   Object visitTypeParameter(TypeParameter node) {
-    if (node.parent.parent is FunctionTypedFormalParameter && !_useCFE) {
+    if (node.parent.parent is FunctionTypedFormalParameter) {
       // Work around dartbug.com/28515.
       // TODO(paulberry): remove this once dartbug.com/28515 is fixed.
       var element = new TypeParameterElementImpl.forNode(node.name);
@@ -525,9 +488,6 @@
   @override
   Object visitVariableDeclaration(VariableDeclaration node) {
     VariableElement element = _match(node.name, _walker.getVariable());
-    if (_useCFE) {
-      node.name.staticType = element.type;
-    }
     Expression initializer = node.initializer;
     if (initializer != null) {
       _walk(
@@ -558,21 +518,6 @@
     }
   }
 
-  /// TODO(scheglov) Replace with the implementation from ResolutionApplier.
-  void _applyTypeToIdentifier(Identifier identifier, DartType type) {
-    if (type is InterfaceType) {
-      if (identifier is SimpleIdentifier) {
-        identifier.staticType = _typeProvider.typeType;
-        identifier.staticElement = type.element;
-      } else {
-        throw new UnimplementedError(
-            'Cannot apply type to ${identifier.runtimeType}');
-      }
-    } else {
-      throw new UnimplementedError('Cannot apply ${type.runtimeType}');
-    }
-  }
-
   /**
    * Updates [identifier] to point to [element], after ensuring that the
    * element has the expected name.
@@ -904,6 +849,8 @@
   int _enumIndex = 0;
   List<ExecutableElement> _functions;
   int _functionIndex = 0;
+  List<ClassElement> _mixins;
+  int _mixinIndex = 0;
   List<ParameterElement> _parameters;
   int _parameterIndex = 0;
   List<FunctionTypeAliasElement> _typedefs;
@@ -937,6 +884,7 @@
         _classes = compilationUnit.types,
         _enums = compilationUnit.enums,
         _functions = compilationUnit.functions,
+        _mixins = compilationUnit.mixins,
         _typedefs = compilationUnit.functionTypeAliases,
         _variables =
             compilationUnit.topLevelVariables.where(_isNotSynthetic).toList();
@@ -1042,6 +990,12 @@
   ExecutableElement getFunction() => _functions[_functionIndex++];
 
   /**
+   * Returns the next non-synthetic child of [element] which is a mixin; throws
+   * an [IndexError] if there are no more.
+   */
+  ClassElement getMixin() => _mixins[_mixinIndex++];
+
+  /**
    * Returns the next non-synthetic child of [element] which is a parameter;
    * throws an [IndexError] if there are no more.
    */
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 9a823df..974721e 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -207,17 +207,6 @@
     if (identifier is SimpleIdentifier) {
       Element element = _resolveSimpleIdentifier(identifier);
       if (element == null) {
-        //
-        // This might be a reference to an imported name that is missing the
-        // prefix.
-        //
-        element = _findImportWithoutPrefix(identifier);
-        if (element is MultiplyDefinedElement) {
-          // TODO(brianwilkerson) Report this error?
-          element = null;
-        }
-      }
-      if (element == null) {
         // TODO(brianwilkerson) Report this error?
         //        resolver.reportError(
         //            StaticWarningCode.UNDEFINED_IDENTIFIER,
@@ -727,6 +716,12 @@
   }
 
   @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    resolveMetadata(node);
+    return null;
+  }
+
+  @override
   Object visitPartDirective(PartDirective node) {
     resolveMetadata(node);
     return null;
@@ -1258,39 +1253,6 @@
   }
 
   /**
-   * Look for any declarations of the given [identifier] that are imported using
-   * a prefix. Return the element that was found, or `null` if the name is not
-   * imported using a prefix.
-   */
-  Element _findImportWithoutPrefix(SimpleIdentifier identifier) {
-    Element element = null;
-    Scope nameScope = _resolver.nameScope;
-    List<ImportElement> imports = _definingLibrary.imports;
-    int length = imports.length;
-    for (int i = 0; i < length; i++) {
-      ImportElement importElement = imports[i];
-      PrefixElement prefixElement = importElement.prefix;
-      if (prefixElement != null) {
-        Identifier prefixedIdentifier = new PrefixedIdentifierImpl.temp(
-            new SimpleIdentifierImpl(new StringToken(TokenType.STRING,
-                prefixElement.name, prefixElement.nameOffset)),
-            identifier);
-        Element importedElement =
-            nameScope.lookup(prefixedIdentifier, _definingLibrary);
-        if (importedElement != null) {
-          if (element == null) {
-            element = importedElement;
-          } else {
-            element = MultiplyDefinedElementImpl.fromElements(
-                _definingLibrary.context, element, importedElement);
-          }
-        }
-      }
-    }
-    return element;
-  }
-
-  /**
    * Return the best type of the given [expression] that is to be used for
    * type analysis.
    */
@@ -2221,8 +2183,6 @@
       Identifier setterId =
           new SyntheticIdentifier('${identifier.name}=', identifier);
       element = _resolver.nameScope.lookup(setterId, _definingLibrary);
-      identifier.setProperty(LibraryImportScope.conflictingSdkElements,
-          setterId.getProperty(LibraryImportScope.conflictingSdkElements));
     }
     ClassElement enclosingClass = _resolver.enclosingClass;
     if (element == null && enclosingClass != null) {
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 8d1810d..20824a9 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -1461,12 +1461,7 @@
   bool trackCacheDependencies = true;
 
   @override
-  bool useFastaParser = false;
-
-  /// [useCFE] exists on [AnalysisOptionsImpl] but not [AnalysisOptions] so as
-  /// not to make it public API. It's used when calculating the driver signature
-  /// of cached results.
-  bool useCFE = false;
+  bool useFastaParser = true;
 
   @override
   bool disableCacheFlushing = false;
@@ -1499,6 +1494,12 @@
   bool implicitDynamic = true;
 
   /**
+   * Return `true` to enable mixin declarations.
+   * https://github.com/dart-lang/language/issues/12
+   */
+  bool isMixinSupportEnabled = false;
+
+  /**
    * Initialize a newly created set of analysis options to have their default
    * values.
    */
@@ -1530,7 +1531,7 @@
       implicitCasts = options.implicitCasts;
       nonnullableTypes = options.nonnullableTypes;
       implicitDynamic = options.implicitDynamic;
-      useCFE = options.useCFE;
+      isMixinSupportEnabled = options.isMixinSupportEnabled;
     }
     trackCacheDependencies = options.trackCacheDependencies;
     disableCacheFlushing = options.disableCacheFlushing;
@@ -1670,7 +1671,7 @@
       buffer.addBool(strongModeHints);
       buffer.addBool(useFastaParser);
       buffer.addBool(previewDart2);
-      buffer.addBool(useCFE);
+      buffer.addBool(isMixinSupportEnabled);
 
       // Append error processors.
       buffer.addInt(errorProcessors.length);
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index b88db95..030cb13 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -485,12 +485,14 @@
     try {
       _isInNativeClass = node.nativeClause != null;
       _enclosingClass = AbstractClassElementImpl.getImpl(node.declaredElement);
-      _checkDuplicateClassMembers(node);
+
+      List<ClassMember> members = node.members;
+      _checkDuplicateClassMembers(members);
       _checkForBuiltInIdentifierAsName(
           node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       _checkForMemberWithClassName();
       _checkForNoDefaultSuperConstructorImplicit(node);
-      _checkForConflictingTypeVariableErrorCodes(node);
+      _checkForConflictingTypeVariableErrorCodes();
       TypeName superclass = node.extendsClause?.superclass;
       ImplementsClause implementsClause = node.implementsClause;
       WithClause withClause = node.withClause;
@@ -501,8 +503,9 @@
           withClause != null) {
         _checkClassInheritance(node, superclass, withClause, implementsClause);
       }
-      visitClassDeclarationIncrementally(node);
-      _checkForFinalNotInitializedInClass(node);
+
+      _initializeInitialFieldElementsMap(_enclosingClass.fields);
+      _checkForFinalNotInitializedInClass(members);
       _checkForDuplicateDefinitionInheritance();
       _checkForConflictingInstanceMethodSetter(node);
       _checkForBadFunctionUse(node);
@@ -514,28 +517,6 @@
     }
   }
 
-  /**
-   * Implementation of this method should be synchronized with
-   * [visitClassDeclaration].
-   */
-  void visitClassDeclarationIncrementally(ClassDeclaration node) {
-    _isInNativeClass = node.nativeClause != null;
-    _enclosingClass = AbstractClassElementImpl.getImpl(node.declaredElement);
-    // initialize initialFieldElementsMap
-    if (_enclosingClass != null) {
-      List<FieldElement> fieldElements = _enclosingClass.fields;
-      _initialFieldElementsMap = new HashMap<FieldElement, INIT_STATE>();
-      for (FieldElement fieldElement in fieldElements) {
-        if (!fieldElement.isSynthetic) {
-          _initialFieldElementsMap[fieldElement] =
-              fieldElement.initializer == null
-                  ? INIT_STATE.NOT_INIT
-                  : INIT_STATE.INIT_IN_DECLARATION;
-        }
-      }
-    }
-  }
-
   @override
   Object visitClassTypeAlias(ClassTypeAlias node) {
     _checkForBuiltInIdentifierAsName(
@@ -592,6 +573,7 @@
       _checkForConflictingConstructorNameAndMember(node, constructorElement);
       _checkForAllFinalInitializedErrorCodes(node);
       _checkForRedirectingConstructorErrorCodes(node);
+      _checkForMixinDeclaresConstructor(node);
       _checkForMultipleSuperInitializers(node);
       _checkForRecursiveConstructorRedirect(node, constructorElement);
       if (!_checkForRecursiveFactoryRedirect(node, constructorElement)) {
@@ -927,7 +909,6 @@
           _checkForConstWithNonConst(node);
           _checkForConstWithUndefinedConstructor(
               node, constructorName, typeName);
-          _checkForConstWithTypeParameters(typeName);
           _checkForConstDeferredClass(node, constructorName, typeName);
         } else {
           _checkForNewWithUndefinedConstructor(node, constructorName, typeName);
@@ -1048,6 +1029,43 @@
   }
 
   @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    // TODO(scheglov) Verify for all mixin errors.
+//    ClassElementImpl outerClass = _enclosingClass;
+    try {
+//      _isInNativeClass = node.nativeClause != null;
+      _enclosingClass = AbstractClassElementImpl.getImpl(node.declaredElement);
+
+      List<ClassMember> members = node.members;
+      _checkDuplicateClassMembers(members);
+//      _checkForBuiltInIdentifierAsName(
+//          node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+      _checkForMemberWithClassName();
+//      _checkForNoDefaultSuperConstructorImplicit(node);
+      _checkForConflictingTypeVariableErrorCodes();
+
+      OnClause onClause = node.onClause;
+      ImplementsClause implementsClause = node.implementsClause;
+
+      // Only do error checks only if there is a non-null clause.
+      if (onClause != null || implementsClause != null) {
+        _checkMixinInheritance(node, onClause, implementsClause);
+      }
+
+      _initializeInitialFieldElementsMap(_enclosingClass.fields);
+      _checkForFinalNotInitializedInClass(members);
+//      _checkForDuplicateDefinitionInheritance();
+//      _checkForConflictingInstanceMethodSetter(node);
+//      _checkForBadFunctionUse(node);
+      return super.visitMixinDeclaration(node);
+    } finally {
+//      _isInNativeClass = false;
+      _initialFieldElementsMap = null;
+//      _enclosingClass = outerClass;
+    }
+  }
+
+  @override
   Object visitNativeClause(NativeClause node) {
     // TODO(brianwilkerson) Figure out the right rule for when 'native' is
     // allowed.
@@ -1344,7 +1362,6 @@
       _checkForInconsistentMethodInheritance();
       _checkForRecursiveInterfaceInheritance(_enclosingClass);
       _checkForConflictingGetterAndMethod();
-      _checkForConflictingInstanceGetterAndSuperclassMember();
       _checkImplementsSuperClass(implementsClause);
       _checkForMixinHasNoConstructors(node);
       _checkMixinInference(node, withClause);
@@ -1377,10 +1394,10 @@
   /**
    * Check that there are no members with the same name.
    */
-  void _checkDuplicateClassMembers(ClassDeclaration node) {
+  void _checkDuplicateClassMembers(List<ClassMember> members) {
     Map<String, Element> definedNames = new HashMap<String, Element>();
     Set<String> visitedFields = new HashSet<String>();
-    for (ClassMember member in node.members) {
+    for (ClassMember member in members) {
       // We ignore constructors because they are checked in the method
       // _checkForConflictingConstructorNameAndMember.
       if (member is FieldDeclaration) {
@@ -1782,7 +1799,7 @@
   /**
    * Verify that all classes of the given [withClause] are valid.
    *
-   * See [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR],
+   * See [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR],
    * [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT], and
    * [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER].
    */
@@ -1803,7 +1820,7 @@
               mixinName, CompileTimeErrorCode.MIXIN_DEFERRED_CLASS)) {
             problemReported = true;
           }
-          if (_checkForMixinDeclaresConstructor(mixinName, mixinElement)) {
+          if (_checkForMixinClassDeclaresConstructor(mixinName, mixinElement)) {
             problemReported = true;
           }
           if (!enableSuperMixins &&
@@ -1983,17 +2000,6 @@
       libraryNames.sort();
       _errorReporter.reportErrorForNode(StaticWarningCode.AMBIGUOUS_IMPORT,
           node, [name, StringUtilities.printListOfQuotedNames(libraryNames)]);
-    } else if (element != null) {
-      List<Element> sdkElements =
-          node.getProperty(LibraryImportScope.conflictingSdkElements);
-      if (sdkElements != null) {
-        _errorReporter.reportErrorForNode(
-            StaticWarningCode.CONFLICTING_DART_IMPORT, node, [
-          element.displayName,
-          _getLibraryName(sdkElements[0]),
-          _getLibraryName(element)
-        ]);
-      }
     }
   }
 
@@ -2481,71 +2487,6 @@
   }
 
   /**
-   * Verify that the superclass of the [_enclosingClass] does not declare
-   * accessible static members with the same name as the instance
-   * getters/setters declared in [_enclosingClass].
-   *
-   * See [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER], and
-   * [StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER].
-   */
-  void _checkForConflictingInstanceGetterAndSuperclassMember() {
-    if (_enclosingClass == null) {
-      return;
-    }
-    InterfaceType enclosingType = _enclosingClass.type;
-    // check every accessor
-    for (PropertyAccessorElement accessor in _enclosingClass.accessors) {
-      // we analyze instance accessors here
-      if (accessor.isStatic) {
-        continue;
-      }
-      // prepare accessor properties
-      String name = accessor.displayName;
-      bool getter = accessor.isGetter;
-      // if non-final variable, ignore setter - we already reported problem for
-      // getter
-      if (accessor.isSetter && accessor.isSynthetic) {
-        continue;
-      }
-      // try to find super element
-      ExecutableElement superElement;
-      superElement =
-          enclosingType.lookUpGetterInSuperclass(name, _currentLibrary);
-      if (superElement == null) {
-        superElement =
-            enclosingType.lookUpSetterInSuperclass(name, _currentLibrary);
-      }
-      if (superElement == null) {
-        superElement =
-            enclosingType.lookUpMethodInSuperclass(name, _currentLibrary);
-      }
-      if (superElement == null) {
-        continue;
-      }
-      // OK, not static
-      if (!superElement.isStatic) {
-        continue;
-      }
-      // prepare "super" type to report its name
-      ClassElement superElementClass =
-          superElement.enclosingElement as ClassElement;
-      InterfaceType superElementType = superElementClass.type;
-
-      if (getter) {
-        _errorReporter.reportErrorForElement(
-            StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER,
-            accessor,
-            [superElementType.displayName]);
-      } else {
-        _errorReporter.reportErrorForElement(
-            StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER,
-            accessor,
-            [superElementType.displayName]);
-      }
-    }
-  }
-
-  /**
    * Verify that the enclosing class does not have a setter with the same name
    * as the given instance method declaration.
    *
@@ -2730,8 +2671,7 @@
    * See [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS], and
    * [CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER].
    */
-  void _checkForConflictingTypeVariableErrorCodes(
-      ClassDeclaration declaration) {
+  void _checkForConflictingTypeVariableErrorCodes() {
     for (TypeParameterElement typeParameter in _enclosingClass.typeParameters) {
       String name = typeParameter.name;
       // name is same as the name of the enclosing class
@@ -2949,35 +2889,6 @@
   }
 
   /**
-   * Verify that the given [type] does not reference any type parameters.
-   *
-   * See [CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS].
-   */
-  void _checkForConstWithTypeParameters(TypeAnnotation type) {
-    // something wrong with AST
-    if (type is! TypeName) {
-      return;
-    }
-    TypeName typeName = type;
-    Identifier name = typeName.name;
-    if (name == null) {
-      return;
-    }
-    // should not be a type parameter
-    if (name.staticElement is TypeParameterElement) {
-      _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, name);
-    }
-    // check type arguments
-    TypeArgumentList typeArguments = typeName.typeArguments;
-    if (typeArguments != null) {
-      for (TypeAnnotation argument in typeArguments.arguments) {
-        _checkForConstWithTypeParameters(argument);
-      }
-    }
-  }
-
-  /**
    * Verify that if the given 'const' instance creation [expression] is being
    * invoked on the resolved constructor. The [constructorName] is the
    * constructor name, always non-`null`. The [typeName] is the name of the type
@@ -3291,8 +3202,7 @@
       return false;
     }
     if (typeName.isDeferred) {
-      _errorReporter
-          .reportErrorForNode(errorCode, typeName, [typeName.name.name]);
+      _errorReporter.reportErrorForNode(errorCode, typeName);
       return true;
     }
     return false;
@@ -3488,23 +3398,20 @@
   }
 
   /**
-   * Verify that final fields in the given class [declaration] that are
-   * declared, without any constructors in the enclosing class, are
-   * initialized. Cases in which there is at least one constructor are handled
-   * at the end of
-   * [_checkForAllFinalInitializedErrorCodes].
+   * If there are no constructors in the given [members], verify that all
+   * final fields are initialized.  Cases in which there is at least one
+   * constructor are handled in [_checkForAllFinalInitializedErrorCodes].
    *
    * See [CompileTimeErrorCode.CONST_NOT_INITIALIZED], and
    * [StaticWarningCode.FINAL_NOT_INITIALIZED].
    */
-  void _checkForFinalNotInitializedInClass(ClassDeclaration declaration) {
-    NodeList<ClassMember> classMembers = declaration.members;
-    for (ClassMember classMember in classMembers) {
+  void _checkForFinalNotInitializedInClass(List<ClassMember> members) {
+    for (ClassMember classMember in members) {
       if (classMember is ConstructorDeclaration) {
         return;
       }
     }
-    for (ClassMember classMember in classMembers) {
+    for (ClassMember classMember in members) {
       if (classMember is FieldDeclaration) {
         _checkForFinalNotInitialized(classMember.fields);
       }
@@ -4246,7 +4153,7 @@
 
     // check accessors
     for (PropertyAccessorElement accessor in _enclosingClass.accessors) {
-      if (className == accessor.name) {
+      if (className == accessor.displayName) {
         _errorReporter.reportErrorForElement(
             CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME, accessor);
       }
@@ -4437,14 +4344,14 @@
    * constructor. The [mixinName] is the node to report problem on. The
    * [mixinElement] is the mixing to evaluate.
    *
-   * See [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR].
+   * See [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR].
    */
-  bool _checkForMixinDeclaresConstructor(
+  bool _checkForMixinClassDeclaresConstructor(
       TypeName mixinName, ClassElement mixinElement) {
     for (ConstructorElement constructor in mixinElement.constructors) {
       if (!constructor.isSynthetic && !constructor.isFactory) {
         _errorReporter.reportErrorForNode(
-            CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
+            CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR,
             mixinName,
             [mixinElement.name]);
         return true;
@@ -4453,6 +4360,13 @@
     return false;
   }
 
+  void _checkForMixinDeclaresConstructor(ConstructorDeclaration node) {
+    if (_enclosingClass.isMixin) {
+      _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR, node.returnType);
+    }
+  }
+
   /**
    * Report the error [CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS] if
    * appropriate.
@@ -4930,6 +4844,39 @@
   }
 
   /**
+   * Verify that all classes of the given [onClause] are valid.
+   *
+   * See [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR],
+   * [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT], and
+   * [CompileTimeErrorCode.MIXIN_REFERENCES_SUPER].
+   */
+  bool _checkForOnClauseErrorCodes(OnClause onClause) {
+    if (onClause == null) {
+      return false;
+    }
+    bool problemReported = false;
+    for (TypeName typeName in onClause.superclassConstraints) {
+      DartType type = typeName.type;
+      if (type is InterfaceType) {
+        if (_checkForExtendsOrImplementsDisallowedClass(
+            typeName,
+            CompileTimeErrorCode
+                .MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS)) {
+          problemReported = true;
+        } else {
+          if (_checkForExtendsOrImplementsDeferredClass(
+              typeName,
+              CompileTimeErrorCode
+                  .MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS)) {
+            problemReported = true;
+          }
+        }
+      }
+    }
+    return problemReported;
+  }
+
+  /**
    * Verify the given operator-method [declaration], does not have an optional
    * parameter. This method assumes that the method declaration was tested to be
    * an operator declaration before being called.
@@ -5900,6 +5847,34 @@
   }
 
   /**
+   * Checks the class for problems with the superclass, mixins, or implemented
+   * interfaces.
+   */
+  void _checkMixinInheritance(MixinDeclaration node, OnClause onClause,
+      ImplementsClause implementsClause) {
+    // TODO(scheglov) Verify for all mixin errors.
+    // Only check for all of the inheritance logic around clauses if there
+    // isn't an error code such as "Cannot implement double" already.
+    if (!_checkForOnClauseErrorCodes(onClause) &&
+        !_checkForImplementsDisallowedClass(implementsClause)) {
+//      _checkForImplicitDynamicType(superclass);
+//      _checkForExtendsDeferredClass(superclass);
+      _checkForImplementsDeferredClass(implementsClause);
+//      _checkForNonAbstractClassInheritsAbstractMember(node.name);
+//      _checkForInconsistentMethodInheritance();
+//      _checkForRecursiveInterfaceInheritance(_enclosingClass);
+//      _checkForConflictingGetterAndMethod();
+//      _checkImplementsSuperClass(implementsClause);
+//      _checkForMixinHasNoConstructors(node);
+//      _checkMixinInference(node, onClause);
+//      _checkForMixinWithConflictingPrivateMember(onClause, superclass);
+//      if (!disableConflictingGenericsCheck) {
+//        _checkForConflictingGenerics(node);
+//      }
+    }
+  }
+
+  /**
    * Verify that the given [typeArguments] are all within their bounds, as
    * defined by the given [element].
    *
@@ -6239,6 +6214,18 @@
     return visitor.hasSelfReference;
   }
 
+  void _initializeInitialFieldElementsMap(List<FieldElement> fields) {
+    _initialFieldElementsMap = new HashMap<FieldElement, INIT_STATE>();
+    for (FieldElement fieldElement in fields) {
+      if (!fieldElement.isSynthetic) {
+        _initialFieldElementsMap[fieldElement] =
+            fieldElement.initializer == null
+                ? INIT_STATE.NOT_INIT
+                : INIT_STATE.INIT_IN_DECLARATION;
+      }
+    }
+  }
+
   bool _isFunctionType(DartType type) {
     if (type.isDynamic || type.isDartCoreNull) {
       return true;
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 4e0133d..fe33ae00 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -184,7 +184,8 @@
    * A flag indicating whether the analyzer [Parser] factory method
    * will return a fasta based parser or an analyzer based parser.
    */
-  static const bool useFasta = const bool.fromEnvironment("useFastaParser");
+  static const bool useFasta =
+      const bool.fromEnvironment("useFastaParser", defaultValue: true);
 
   /**
    * The source being parsed.
@@ -264,12 +265,6 @@
   @deprecated
   bool parseGenericMethods = false;
 
-  /**
-   * A flag indicating whether to parse generic method comments, of the form
-   * `/*=T*/` and `/*<T>*/`.
-   */
-  bool parseGenericMethodComments = false;
-
   bool allowNativeClause;
 
   /**
@@ -278,7 +273,7 @@
    */
   factory Parser(Source source, AnalysisErrorListener errorListener,
       {bool useFasta}) {
-    if ((useFasta ?? false) || Parser.useFasta) {
+    if (useFasta ?? Parser.useFasta) {
       return new _Parser2(source, errorListener, allowNativeClause: true);
     } else {
       return new Parser.withoutFasta(source, errorListener);
@@ -1515,9 +1510,9 @@
           parseSimpleIdentifier(allowKeyword: true, isDeclaration: true),
           parseFormalParameterList());
     } else if (_tokenMatches(next, TokenType.OPEN_PAREN)) {
-      TypeName returnType = _parseOptionalTypeNameComment();
+      TypeName returnType = null;
       SimpleIdentifier methodName = parseSimpleIdentifier(isDeclaration: true);
-      TypeParameterList typeParameters = _parseGenericCommentTypeParameters();
+      TypeParameterList typeParameters = null;
       FormalParameterList parameters = parseFormalParameterList();
       if (_matches(TokenType.COLON) ||
           modifiers.factoryKeyword != null ||
@@ -1632,7 +1627,7 @@
     } else if (_tokenMatches(next, TokenType.OPEN_PAREN)) {
       SimpleIdentifier methodName =
           _parseSimpleIdentifierUnchecked(isDeclaration: true);
-      TypeParameterList typeParameters = _parseGenericCommentTypeParameters();
+      TypeParameterList typeParameters = null;
       FormalParameterList parameters = parseFormalParameterList();
       if (methodName.name == className) {
         _reportErrorForNode(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type);
@@ -2238,7 +2233,7 @@
       return parseFunctionDeclaration(
           commentAndMetadata, modifiers.externalKeyword, null);
     } else if (_tokenMatches(next, TokenType.OPEN_PAREN)) {
-      TypeName returnType = _parseOptionalTypeNameComment();
+      TypeName returnType = null;
       _validateModifiersForTopLevelFunction(modifiers);
       return parseFunctionDeclaration(
           commentAndMetadata, modifiers.externalKeyword, returnType);
@@ -2386,7 +2381,7 @@
   Expression parseConstExpression() {
     Token keyword = getAndAdvance();
     TokenType type = _currentToken.type;
-    if (type == TokenType.LT || _injectGenericCommentTypeList()) {
+    if (type == TokenType.LT) {
       return parseListOrMapLiteral(keyword);
     } else if (type == TokenType.OPEN_SQUARE_BRACKET ||
         type == TokenType.INDEX) {
@@ -2922,18 +2917,9 @@
       keywordToken = getAndAdvance();
       if (_isTypedIdentifier(_currentToken)) {
         type = parseTypeAnnotation(false);
-      } else {
-        // Support `final/*=T*/ x;`
-        type = _parseOptionalTypeNameComment();
       }
     } else if (keyword == Keyword.VAR) {
       keywordToken = getAndAdvance();
-      // Support `var/*=T*/ x;`
-      type = _parseOptionalTypeNameComment();
-      if (type != null) {
-        // Clear the keyword to prevent an error.
-        keywordToken = null;
-      }
     } else if (_isTypedIdentifier(_currentToken)) {
       type = parseTypeAnnotation(false);
     } else if (inFunctionType && _matchesIdentifier()) {
@@ -2959,7 +2945,7 @@
     } else {
       // Support parameters such as `(/*=K*/ key, /*=V*/ value)`
       // This is not supported if the type is required.
-      type = _parseOptionalTypeNameComment();
+      type = null;
     }
     return new FinalConstVarOrType(keywordToken, type);
   }
@@ -4657,7 +4643,7 @@
       } finally {
         _inInitializer = wasInInitializer;
       }
-    } else if (type == TokenType.LT || _injectGenericCommentTypeList()) {
+    } else if (type == TokenType.LT) {
       if (isFunctionExpression(currentToken)) {
         return parseFunctionExpression();
       }
@@ -5286,13 +5272,7 @@
   // TODO(eernst): Rename this to `parseTypeNotVoidWithoutFunction`?
   // Apparently,  it was named `parseTypeName` before type arguments existed.
   TypeName parseTypeName(bool inExpression) {
-    TypeName realType = _parseTypeName(inExpression);
-    // If this is followed by a generic method type comment, allow the comment
-    // type to replace the real type name.
-    // TODO(jmesserly): this feels like a big hammer. Can we restrict it to
-    // only work inside generic methods?
-    TypeName typeFromComment = _parseOptionalTypeNameComment();
-    return typeFromComment ?? realType;
+    return _parseTypeName(inExpression);
   }
 
   /**
@@ -5767,8 +5747,7 @@
    */
   Token skipTypeArgumentList(Token startToken) {
     Token token = startToken;
-    if (!_tokenMatches(token, TokenType.LT) &&
-        !_injectGenericCommentTypeList()) {
+    if (!_tokenMatches(token, TokenType.LT)) {
       return null;
     }
     token = skipTypeAnnotation(token.next);
@@ -6209,49 +6188,6 @@
     return null;
   }
 
-  bool _injectGenericComment(TokenType type, int prefixLen) {
-    if (parseGenericMethodComments) {
-      CommentToken t = _currentToken.precedingComments;
-      for (; t != null; t = t.next) {
-        if (t.type == type) {
-          String comment = t.lexeme.substring(prefixLen, t.lexeme.length - 2);
-          Token list = _scanGenericMethodComment(comment, t.offset + prefixLen);
-          if (list != null) {
-            _reportErrorForToken(HintCode.GENERIC_METHOD_COMMENT, t);
-            // Remove the token from the comment stream.
-            t.remove();
-            // Insert the tokens into the stream.
-            _injectTokenList(list);
-            return true;
-          }
-        }
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Matches a generic comment type substitution and injects it into the token
-   * stream. Returns true if a match was injected, otherwise false.
-   *
-   * These comments are of the form `/*=T*/`, in other words, a [TypeName]
-   * inside a slash-star comment, preceded by equals sign.
-   */
-  bool _injectGenericCommentTypeAssign() {
-    return _injectGenericComment(TokenType.GENERIC_METHOD_TYPE_ASSIGN, 3);
-  }
-
-  /**
-   * Matches a generic comment type parameters and injects them into the token
-   * stream. Returns true if a match was injected, otherwise false.
-   *
-   * These comments are of the form `/*<K, V>*/`, in other words, a
-   * [TypeParameterList] or [TypeArgumentList] inside a slash-star comment.
-   */
-  bool _injectGenericCommentTypeList() {
-    return _injectGenericComment(TokenType.GENERIC_METHOD_TYPE_LIST, 2);
-  }
-
   /**
    * Inject the given [token] into the token stream immediately before the
    * current token.
@@ -6263,19 +6199,6 @@
     return token;
   }
 
-  void _injectTokenList(Token firstToken) {
-    // Scanner creates a cyclic EOF token.
-    Token lastToken = firstToken;
-    while (lastToken.next.type != TokenType.EOF) {
-      lastToken = lastToken.next;
-    }
-    // Inject these new tokens into the stream.
-    Token previous = _currentToken.previous;
-    lastToken.setNext(_currentToken);
-    previous.setNext(firstToken);
-    _currentToken = firstToken;
-  }
-
   /**
    * Return `true` if the current token could be the question mark in a
    * condition expression. The current token is assumed to be a question mark.
@@ -7114,30 +7037,13 @@
   }
 
   /**
-   * Parses generic type parameters from a comment.
-   *
-   * Normally this is handled by [_parseGenericMethodTypeParameters], but if the
-   * code already handles the normal generic type parameters, the comment
-   * matcher can be called directly. For example, we may have already tried
-   * matching `<` (less than sign) in a method declaration, and be currently
-   * on the `(` (open paren) because we didn't find it. In that case, this
-   * function will parse the preceding comment such as `/*<T, R>*/`.
-   */
-  TypeParameterList _parseGenericCommentTypeParameters() {
-    if (_injectGenericCommentTypeList()) {
-      return parseTypeParameterList();
-    }
-    return null;
-  }
-
-  /**
    * Parse the generic method or function's type parameters.
    *
    * For backwards compatibility this can optionally use comments.
    * See [parseGenericMethodComments].
    */
   TypeParameterList _parseGenericMethodTypeParameters() {
-    if (_matches(TokenType.LT) || _injectGenericCommentTypeList()) {
+    if (_matches(TokenType.LT)) {
       return parseTypeParameterList();
     }
     return null;
@@ -7341,10 +7247,6 @@
    * advancing. Return the return type that was parsed.
    */
   TypeAnnotation _parseOptionalReturnType() {
-    TypeName typeComment = _parseOptionalTypeNameComment();
-    if (typeComment != null) {
-      return typeComment;
-    }
     Keyword keyword = _currentToken.keyword;
     if (keyword == Keyword.VOID) {
       if (_atGenericFunctionTypeAfterReturnType(_peek())) {
@@ -7386,19 +7288,12 @@
    * This also supports the comment form, if enabled: `/*<T>*/`
    */
   TypeArgumentList _parseOptionalTypeArguments() {
-    if (_matches(TokenType.LT) || _injectGenericCommentTypeList()) {
+    if (_matches(TokenType.LT)) {
       return parseTypeArgumentList();
     }
     return null;
   }
 
-  TypeName _parseOptionalTypeNameComment() {
-    if (_injectGenericCommentTypeAssign()) {
-      return _parseTypeName(false);
-    }
-    return null;
-  }
-
   /**
    * Parse a part directive. The [commentAndMetadata] is the metadata to be
    * associated with the directive. Return the part or part-of directive that
@@ -7465,7 +7360,7 @@
    */
   Identifier _parsePrefixedIdentifierAfterIdentifier(
       SimpleIdentifier qualifier) {
-    if (!_matches(TokenType.PERIOD) || _injectGenericCommentTypeList()) {
+    if (!_matches(TokenType.PERIOD)) {
       return qualifier;
     }
     Token period = getAndAdvance();
@@ -7622,11 +7517,7 @@
    *         qualified typeArguments?
    */
   TypeAnnotation _parseTypeAnnotationAfterIdentifier() {
-    TypeAnnotation type = parseTypeAnnotation(false);
-    // If this is followed by a generic method type comment, allow the comment
-    // type to replace the real type name.
-    TypeName typeFromComment = _parseOptionalTypeNameComment();
-    return typeFromComment ?? type;
+    return parseTypeAnnotation(false);
   }
 
   TypeName _parseTypeName(bool inExpression) {
@@ -7813,22 +7704,6 @@
   }
 
   /**
-   * Scans the generic method comment, and returns the tokens, otherwise
-   * returns null.
-   */
-  Token _scanGenericMethodComment(String code, int offset) {
-    BooleanErrorListener listener = new BooleanErrorListener();
-    Scanner scanner =
-        new Scanner(null, new SubSequenceReader(code, offset), listener);
-    scanner.setSourceStart(1, 1);
-    Token firstToken = scanner.tokenize();
-    if (listener.errorReported) {
-      return null;
-    }
-    return firstToken;
-  }
-
-  /**
    * Execute the given [parseOperation] in a temporary parser whose current
    * token has been set to the given [startToken]. If the parse does not
    * generate any errors or exceptions, then return the token following the
diff --git a/pkg/analyzer/lib/src/generated/parser_fasta.dart b/pkg/analyzer/lib/src/generated/parser_fasta.dart
index 82e23f4..8cbdd21 100644
--- a/pkg/analyzer/lib/src/generated/parser_fasta.dart
+++ b/pkg/analyzer/lib/src/generated/parser_fasta.dart
@@ -24,13 +24,13 @@
   final AstBuilder astBuilder;
 
   ParserAdapter(this.currentToken, ErrorReporter errorReporter, Uri fileUri,
-      {bool allowNativeClause: false, bool enableGenericMethodComments: false})
+      {bool allowNativeClause: false})
       : fastaParser = new fasta.Parser(null),
         astBuilder = new AstBuilder(errorReporter, fileUri, true) {
+    fastaParser.isMixinSupportEnabled = true;
     fastaParser.listener = astBuilder;
     astBuilder.parser = fastaParser;
     astBuilder.allowNativeClause = allowNativeClause;
-    astBuilder.parseGenericMethodComments = enableGenericMethodComments;
   }
 
   @override
@@ -50,14 +50,6 @@
   }
 
   @override
-  bool get parseGenericMethodComments => astBuilder.parseGenericMethodComments;
-
-  @override
-  set parseGenericMethodComments(bool value) {
-    astBuilder.parseGenericMethodComments = value;
-  }
-
-  @override
   set parseGenericMethods(_) {}
 
   /// Append the given token to the end of the token stream,
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 124183c..911c655 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1604,6 +1604,9 @@
   @override
   Object visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (node.isConst) {
+      TypeName typeName = node.constructorName.type;
+      _checkForConstWithTypeParameters(typeName);
+
       // We need to evaluate the constant to see if any errors occur during its
       // evaluation.
       ConstructorElement constructor = node.staticElement;
@@ -1808,6 +1811,35 @@
   }
 
   /**
+   * Verify that the given [type] does not reference any type parameters.
+   *
+   * See [CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS].
+   */
+  void _checkForConstWithTypeParameters(TypeAnnotation type) {
+    // something wrong with AST
+    if (type is! TypeName) {
+      return;
+    }
+    TypeName typeName = type;
+    Identifier name = typeName.name;
+    if (name == null) {
+      return;
+    }
+    // should not be a type parameter
+    if (name.staticElement is TypeParameterElement) {
+      _errorReporter.reportErrorForNode(
+          CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, name);
+    }
+    // check type arguments
+    TypeArgumentList typeArguments = typeName.typeArguments;
+    if (typeArguments != null) {
+      for (TypeAnnotation argument in typeArguments.arguments) {
+        _checkForConstWithTypeParameters(argument);
+      }
+    }
+  }
+
+  /**
    * @return `true` if given [Type] implements operator <i>==</i>, and it is not
    *         <i>int</i> or <i>String</i>.
    */
@@ -2723,6 +2755,8 @@
 
   List<MethodElement> _methods;
 
+  List<ClassElement> _mixins;
+
   List<ParameterElement> _parameters;
 
   List<TopLevelVariableElement> _topLevelVariables;
@@ -2813,6 +2847,15 @@
     return result;
   }
 
+  List<ClassElement> get mixins {
+    if (_mixins == null) {
+      return const <ClassElement>[];
+    }
+    List<ClassElement> result = _mixins;
+    _mixins = null;
+    return result;
+  }
+
   List<ParameterElement> get parameters {
     if (_parameters == null) {
       return const <ParameterElement>[];
@@ -2914,6 +2957,13 @@
     _methods.add(element);
   }
 
+  void addMixin(ClassElement element) {
+    if (_mixins == null) {
+      _mixins = new List<ClassElement>();
+    }
+    _mixins.add(element);
+  }
+
   void addParameter(ParameterElement element) {
     if (_parameters == null) {
       _parameters = new List<ParameterElement>();
@@ -5007,6 +5057,12 @@
    */
   ExecutableElement _enclosingFunction = null;
 
+  /**
+   * The mixin declaration representing the class containing the current node,
+   * or `null` if the current node is not contained in a mixin.
+   */
+  MixinDeclaration _enclosingMixinDeclaration = null;
+
   InferenceContext inferenceContext = null;
 
   /**
@@ -5291,7 +5347,8 @@
   Object visitAnnotation(Annotation node) {
     AstNode parent = node.parent;
     if (identical(parent, _enclosingClassDeclaration) ||
-        identical(parent, _enclosingFunctionTypeAlias)) {
+        identical(parent, _enclosingFunctionTypeAlias) ||
+        identical(parent, _enclosingMixinDeclaration)) {
       return null;
     }
     node.name?.accept(this);
@@ -6193,6 +6250,31 @@
   }
 
   @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    //
+    // Resolve the metadata in the library scope.
+    //
+    node.metadata?.accept(this);
+    _enclosingMixinDeclaration = node;
+    //
+    // Continue the class resolution.
+    //
+    ClassElement outerType = enclosingClass;
+    try {
+      enclosingClass = node.declaredElement;
+      typeAnalyzer.thisType = enclosingClass?.type;
+      super.visitMixinDeclaration(node);
+      node.accept(elementResolver);
+      node.accept(typeAnalyzer);
+    } finally {
+      typeAnalyzer.thisType = outerType?.type;
+      enclosingClass = outerType;
+      _enclosingMixinDeclaration = null;
+    }
+    return null;
+  }
+
+  @override
   Object visitNamedExpression(NamedExpression node) {
     InferenceContext.setTypeFromNode(node.expression, node);
     return super.visitNamedExpression(node);
@@ -7627,6 +7709,40 @@
     super.visitMethodDeclaration(node);
   }
 
+  @override
+  Object visitMixinDeclaration(MixinDeclaration node) {
+    ClassElement element = node.declaredElement;
+
+    Scope outerScope = nameScope;
+    ClassElement outerClass = enclosingClass;
+    try {
+      enclosingClass = element;
+
+      nameScope = new TypeParameterScope(nameScope, element);
+      visitMixinDeclarationInScope(node);
+
+      nameScope = new ClassScope(nameScope, element);
+      visitMixinMembersInScope(node);
+    } finally {
+      nameScope = outerScope;
+      enclosingClass = outerClass;
+    }
+    return null;
+  }
+
+  void visitMixinDeclarationInScope(MixinDeclaration node) {
+    node.name?.accept(this);
+    node.typeParameters?.accept(this);
+    node.onClause?.accept(this);
+    node.implementsClause?.accept(this);
+  }
+
+  void visitMixinMembersInScope(MixinDeclaration node) {
+    node.documentationComment?.accept(this);
+    node.metadata.accept(this);
+    node.members.accept(this);
+  }
+
   /**
    * Visit the given statement after it's scope has been created. This is used by ResolverVisitor to
    * correctly visit the 'then' and 'else' statements of an 'if' statement.
@@ -9664,8 +9780,7 @@
       ErrorCode errorCode = (withClause == null
           ? CompileTimeErrorCode.EXTENDS_NON_CLASS
           : CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS);
-      superclassType = _resolveType(extendsClause.superclass, errorCode,
-          CompileTimeErrorCode.EXTENDS_ENUM, errorCode);
+      superclassType = _resolveType(extendsClause.superclass, errorCode);
     }
     if (classElement != null) {
       if (superclassType == null) {
@@ -9676,7 +9791,8 @@
       }
       classElement.supertype = superclassType;
     }
-    _resolve(classElement, withClause, implementsClause);
+    _resolveWithClause(classElement, withClause);
+    _resolveImplementsClause(classElement, implementsClause);
     return null;
   }
 
@@ -9709,8 +9825,7 @@
   Object visitClassTypeAlias(ClassTypeAlias node) {
     super.visitClassTypeAlias(node);
     ErrorCode errorCode = CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
-    InterfaceType superclassType = _resolveType(node.superclass, errorCode,
-        CompileTimeErrorCode.EXTENDS_ENUM, errorCode);
+    InterfaceType superclassType = _resolveType(node.superclass, errorCode);
     if (superclassType == null) {
       superclassType = typeProvider.objectType;
     }
@@ -9718,7 +9833,8 @@
     if (classElement != null) {
       classElement.supertype = superclassType;
     }
-    _resolve(classElement, node.withClause, node.implementsClause);
+    _resolveWithClause(classElement, node.withClause);
+    _resolveImplementsClause(classElement, node.implementsClause);
     return null;
   }
 
@@ -9897,6 +10013,15 @@
   }
 
   @override
+  void visitMixinDeclarationInScope(MixinDeclaration node) {
+    super.visitMixinDeclarationInScope(node);
+    MixinElementImpl element = node.declaredElement;
+    _resolveOnClause(element, node.onClause);
+    _resolveImplementsClause(element, node.implementsClause);
+    return null;
+  }
+
+  @override
   Object visitNode(AstNode node) {
     // In API mode we need to skip:
     //   - function bodies;
@@ -10162,29 +10287,12 @@
     return null;
   }
 
-  /**
-   * Resolve the types in the given [withClause] and [implementsClause] and
-   * associate those types with the given [classElement].
-   */
-  void _resolve(ClassElementImpl classElement, WithClause withClause,
-      ImplementsClause implementsClause) {
-    if (withClause != null) {
-      List<InterfaceType> mixinTypes = _resolveTypes(
-          withClause.mixinTypes,
-          CompileTimeErrorCode.MIXIN_OF_NON_CLASS,
-          CompileTimeErrorCode.MIXIN_OF_ENUM,
-          CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
-      if (classElement != null) {
-        classElement.mixins = mixinTypes;
-      }
-    }
-    if (implementsClause != null) {
-      NodeList<TypeName> interfaces = implementsClause.interfaces;
-      List<InterfaceType> interfaceTypes = _resolveTypes(
-          interfaces,
-          CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
-          CompileTimeErrorCode.IMPLEMENTS_ENUM,
-          CompileTimeErrorCode.IMPLEMENTS_DYNAMIC);
+  void _resolveImplementsClause(
+      ClassElementImpl classElement, ImplementsClause clause) {
+    if (clause != null) {
+      NodeList<TypeName> interfaces = clause.interfaces;
+      List<InterfaceType> interfaceTypes =
+          _resolveTypes(interfaces, CompileTimeErrorCode.IMPLEMENTS_NON_CLASS);
       if (classElement != null) {
         classElement.interfaces = interfaceTypes;
       }
@@ -10214,6 +10322,18 @@
     }
   }
 
+  void _resolveOnClause(MixinElementImpl classElement, OnClause clause) {
+    List<InterfaceType> types;
+    if (clause != null) {
+      types = _resolveTypes(clause.superclassConstraints,
+          CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS);
+    }
+    if (types == null || types.isEmpty) {
+      types = [typeProvider.objectType];
+    }
+    classElement.superclassConstraints = types;
+  }
+
   /**
    * Return the type specified by the given name.
    *
@@ -10224,13 +10344,12 @@
    * @param dynamicTypeError the error to produce if the type name is "dynamic"
    * @return the type specified by the type name
    */
-  InterfaceType _resolveType(TypeName typeName, ErrorCode nonTypeError,
-      ErrorCode enumTypeError, ErrorCode dynamicTypeError) {
+  InterfaceType _resolveType(TypeName typeName, ErrorCode errorCode) {
     DartType type = typeName.type;
     if (type is InterfaceType) {
       ClassElement element = type.element;
       if (element != null && element.isEnum) {
-        errorReporter.reportErrorForNode(enumTypeError, typeName);
+        errorReporter.reportErrorForNode(errorCode, typeName);
         return null;
       }
       return type;
@@ -10238,14 +10357,8 @@
     // If the type is not an InterfaceType, then visitTypeName() sets the type
     // to be a DynamicTypeImpl
     Identifier name = typeName.name;
-    // TODO(mfairhurst) differentiate between dynamic via clean path, and error
-    // types, and then check `type.isDynamic`. However, if we do that now, then
-    // [nonTypeError] will never be reported because non types are resolved to
-    // dynamic.
-    if (name.name == Keyword.DYNAMIC.lexeme) {
-      errorReporter.reportErrorForNode(dynamicTypeError, name, [name.name]);
-    } else if (!nameScope.shouldIgnoreUndefined(name)) {
-      errorReporter.reportErrorForNode(nonTypeError, name, [name.name]);
+    if (!nameScope.shouldIgnoreUndefined(name)) {
+      errorReporter.reportErrorForNode(errorCode, name, [name.name]);
     }
     return null;
   }
@@ -10261,14 +10374,10 @@
    * @return an array containing all of the types that were resolved.
    */
   List<InterfaceType> _resolveTypes(
-      NodeList<TypeName> typeNames,
-      ErrorCode nonTypeError,
-      ErrorCode enumTypeError,
-      ErrorCode dynamicTypeError) {
+      NodeList<TypeName> typeNames, ErrorCode errorCode) {
     List<InterfaceType> types = new List<InterfaceType>();
     for (TypeName typeName in typeNames) {
-      InterfaceType type =
-          _resolveType(typeName, nonTypeError, enumTypeError, dynamicTypeError);
+      InterfaceType type = _resolveType(typeName, errorCode);
       if (type != null) {
         types.add(type);
       }
@@ -10276,6 +10385,14 @@
     return types;
   }
 
+  void _resolveWithClause(ClassElementImpl classElement, WithClause clause) {
+    if (clause != null) {
+      List<InterfaceType> mixinTypes = _resolveTypes(
+          clause.mixinTypes, CompileTimeErrorCode.MIXIN_OF_NON_CLASS);
+      classElement.mixins = mixinTypes;
+    }
+  }
+
   /**
    * Given a function typed [parameter] with [FunctionType] based on a
    * [GenericFunctionTypeElementImpl], compute and set the return type for the
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 6112ac4..5e69a5b 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -994,7 +994,12 @@
       VariableElement variable = element;
       staticType = _promoteManager.getStaticType(variable);
     } else if (element is PrefixElement) {
-      return null;
+      var parent = node.parent;
+      if (parent is PrefixedIdentifier && parent.prefix == node ||
+          parent is MethodInvocation && parent.target == node) {
+        return null;
+      }
+      staticType = _typeProvider.dynamicType;
     } else if (element is DynamicElementImpl) {
       staticType = _typeProvider.typeType;
     } else {
diff --git a/pkg/analyzer/lib/src/kernel/resynthesize.dart b/pkg/analyzer/lib/src/kernel/resynthesize.dart
deleted file mode 100644
index d0d8426..0000000
--- a/pkg/analyzer/lib/src/kernel/resynthesize.dart
+++ /dev/null
@@ -1,1238 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/standard_ast_factory.dart';
-import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/source/line_info.dart';
-import 'package:analyzer/src/context/context.dart' show AnalysisContextImpl;
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/handle.dart';
-import 'package:analyzer/src/dart/element/member.dart';
-import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart';
-import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
-import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
-import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
-import 'package:analyzer/src/summary/summary_sdk.dart';
-import 'package:front_end/src/base/resolve_relative_uri.dart';
-import 'package:front_end/src/base/source.dart';
-import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart' as kernel;
-import 'package:front_end/src/fasta/kernel/redirecting_factory_body.dart';
-import 'package:kernel/kernel.dart' as kernel;
-import 'package:kernel/type_algebra.dart' as kernel;
-import 'package:kernel/type_environment.dart' as kernel;
-import 'package:path/path.dart' as pathos;
-
-/// Information about a single file - a library or part.
-class KernelFileInfo {
-  final bool exists;
-  final int contentLength;
-  final LineInfo lineInfo;
-  final kernel.Library library;
-
-  KernelFileInfo(this.exists, this.contentLength, this.lineInfo, this.library);
-}
-
-/**
- * Object that can resynthesize analyzer [LibraryElement] from Kernel.
- */
-class KernelResynthesizer implements ElementResynthesizer {
-  final AnalysisContextImpl _analysisContext;
-  final Map<String, KernelFileInfo> _fileInfoMap;
-  final Map<String, LibraryElementImpl> _libraryMap = {};
-
-  /**
-   * Cache of [Source] objects that have already been converted from URIs.
-   */
-  final Map<String, Source> _sources = <String, Source>{};
-
-  /// The type provider for this resynthesizer.
-  SummaryTypeProvider _typeProvider;
-
-  KernelResynthesizer(this._analysisContext, this._fileInfoMap) {
-    _buildTypeProvider();
-    _analysisContext.typeProvider = _typeProvider;
-  }
-
-  @override
-  AnalysisContext get context => _analysisContext;
-
-  /**
-   * TODO(brianwilkerson) Remove this getter.
-   */
-  bool get strongMode => true;
-
-  /**
-   * Return the `Type` type.
-   */
-  DartType get typeType => getLibrary('dart:core').getType('Type').type;
-
-  @override
-  Element getElement(ElementLocation location) {
-    List<String> components = location.components;
-
-    LibraryElementImpl library = getLibrary(components[0]);
-    if (components.length == 1) {
-      return library;
-    }
-
-    CompilationUnitElement unit;
-    for (var libraryUnit in library.units) {
-      if (libraryUnit.source.uri.toString() == components[1]) {
-        unit = libraryUnit;
-        break;
-      }
-    }
-    if (unit == null) {
-      throw new ArgumentError('Unable to find unit: $location');
-    }
-    if (components.length == 2) {
-      return unit;
-    }
-
-    ElementImpl element = unit as ElementImpl;
-    for (int i = 2; i < components.length; i++) {
-      if (element == null) {
-        throw new ArgumentError('Unable to find element: $location');
-      }
-      element = element.getChild(components[i]);
-    }
-    return element;
-  }
-
-  /**
-   * Return the [ElementImpl] that corresponds to the given [name], or `null`
-   * if the corresponding element cannot be found.
-   */
-  ElementImpl getElementFromCanonicalName(kernel.CanonicalName name) {
-    if (name == null) return null;
-
-    var components = new List<String>(5);
-    var componentPtr = 0;
-    for (var namePart = name;
-        namePart != null && !namePart.isRoot;
-        namePart = namePart.parent) {
-      components[componentPtr++] = namePart.name;
-    }
-
-    String libraryUri = components[--componentPtr];
-    LibraryElementImpl library = getLibrary(libraryUri);
-    if (library == null) return null;
-
-    if (componentPtr == 0) {
-      return library;
-    }
-
-    String topKindOrClassName = components[--componentPtr];
-
-    String takeElementName() {
-      String publicNameOrLibraryUri = components[--componentPtr];
-      if (publicNameOrLibraryUri == libraryUri) {
-        return components[--componentPtr];
-      } else {
-        return publicNameOrLibraryUri;
-      }
-    }
-
-    // Top-level element other than class.
-    if (topKindOrClassName == '@fields' ||
-        topKindOrClassName == '@methods' ||
-        topKindOrClassName == '@getters' ||
-        topKindOrClassName == '@setters' ||
-        topKindOrClassName == '@typedefs') {
-      String elementName = takeElementName();
-      for (CompilationUnitElement unit in library.units) {
-        CompilationUnitElementImpl unitImpl = unit;
-        ElementImpl child = unitImpl.getChild(elementName);
-        if (child != null) {
-          return child;
-        }
-      }
-      return null;
-    }
-
-    AbstractClassElementImpl classElement;
-    for (CompilationUnitElement unit in library.units) {
-      CompilationUnitElementImpl unitImpl = unit;
-      classElement = unitImpl.getChild(topKindOrClassName);
-      if (classElement != null) {
-        break;
-      }
-    }
-    if (classElement == null) return null;
-
-    // If no more component, the class is the element.
-    if (componentPtr == 0) return classElement;
-
-    String kind = components[--componentPtr];
-    String elementName = takeElementName();
-    if (kind == '@methods') {
-      return classElement.getMethod(elementName) as ElementImpl;
-    } else if (kind == '@getters') {
-      return classElement.getGetter(elementName) as ElementImpl;
-    } else if (kind == '@setters') {
-      return classElement.getSetter(elementName) as ElementImpl;
-    } else if (kind == '@fields') {
-      return classElement.getField(elementName) as ElementImpl;
-    } else if (kind == '@constructors' || kind == '@factories') {
-      if (elementName.isEmpty) {
-        return classElement.unnamedConstructor as ElementImpl;
-      }
-      return classElement.getNamedConstructor(elementName) as ElementImpl;
-    } else {
-      throw new UnimplementedError('Internal error: $kind unexpected.');
-    }
-  }
-
-  /**
-   * Return the [LibraryElementImpl] for the given [uriStr], or `null` if
-   * the library is not part of the Kernel libraries bundle.
-   */
-  LibraryElementImpl getLibrary(String uriStr) {
-    return _libraryMap.putIfAbsent(uriStr, () {
-      var kernel = _fileInfoMap[uriStr].library;
-      if (kernel == null) return null;
-
-      if (_fileInfoMap[uriStr]?.exists != true) {
-        return _newSyntheticLibrary(uriStr);
-      }
-
-      var libraryContext =
-          new _KernelLibraryResynthesizerContextImpl(this, kernel);
-
-      // Build the library.
-      LibraryElementImpl libraryElement = libraryContext._buildLibrary(uriStr);
-      if (libraryElement == null) return null;
-
-      // Build the defining unit.
-      var definingUnit = libraryContext._buildUnit(uriStr, kernel.fileUri).unit;
-      libraryElement.definingCompilationUnit = definingUnit;
-
-      // Build units for parts.
-      var parts = new List<CompilationUnitElementImpl>(kernel.parts.length);
-      for (int i = 0; i < kernel.parts.length; i++) {
-        var relativeUriStr = kernel.parts[i].partUri;
-        var importUriStr =
-            resolveRelativeUri(kernel.importUri, Uri.parse(relativeUriStr))
-                .toString();
-        var fileUri = kernel.fileUri.resolve(relativeUriStr);
-        var unitContext = libraryContext._buildUnit(importUriStr, fileUri);
-        var partUnit = unitContext.unit;
-        parts[i] = partUnit;
-      }
-      libraryElement.parts = parts;
-
-      // Create the required `loadLibrary` function.
-      if (uriStr != 'dart:core' && uriStr != 'dart:async') {
-        libraryElement.createLoadLibraryFunction(_typeProvider);
-      }
-
-      return libraryElement;
-    });
-  }
-
-  DartType getType(ElementImpl context, kernel.DartType kernelType) {
-    if (kernelType is kernel.DynamicType) return DynamicTypeImpl.instance;
-    if (kernelType is kernel.InvalidType) return UndefinedTypeImpl.instance;
-    if (kernelType is kernel.BottomType) return BottomTypeImpl.instance;
-    if (kernelType is kernel.VoidType) return VoidTypeImpl.instance;
-
-    if (kernelType is kernel.InterfaceType) {
-      var name = kernelType.className.canonicalName;
-      if (!strongMode &&
-          name.name == 'FutureOr' &&
-          name.parent.name == 'dart:async') {
-        return DynamicTypeImpl.instance;
-      }
-      return _getInterfaceType(context, name, kernelType.typeArguments);
-    }
-
-    if (kernelType is kernel.TypeParameterType) {
-      kernel.TypeParameter kTypeParameter = kernelType.parameter;
-      return getTypeParameter(context, kTypeParameter).type;
-    }
-
-    if (kernelType is kernel.FunctionType) {
-      return _getFunctionType(context, kernelType);
-    }
-
-    // TODO(scheglov) Support other kernel types.
-    throw new UnimplementedError('For ${kernelType.runtimeType}');
-  }
-
-  /// Return the [TypeParameterElement] for the given [kernelTypeParameter].
-  TypeParameterElement getTypeParameter(
-      ElementImpl context, kernel.TypeParameter kernelTypeParameter) {
-    String name = kernelTypeParameter.name;
-    for (var ctx = context; ctx != null; ctx = ctx.enclosingElement) {
-      if (ctx is TypeParameterizedElementMixin) {
-        for (var typeParameter in ctx.typeParameters) {
-          if (typeParameter.name == name) {
-            return typeParameter;
-          }
-        }
-      }
-    }
-    throw new StateError('Not found $kernelTypeParameter in $context');
-  }
-
-  void _buildTypeProvider() {
-    var coreLibrary = getLibrary('dart:core');
-    var asyncLibrary = getLibrary('dart:async');
-    _typeProvider = new SummaryTypeProvider();
-    _typeProvider.initializeCore(coreLibrary);
-    _typeProvider.initializeAsync(asyncLibrary);
-    // Now, when TypeProvider is ready, we can finalize core/async.
-    coreLibrary.createLoadLibraryFunction(_typeProvider);
-    asyncLibrary.createLoadLibraryFunction(_typeProvider);
-  }
-
-  /// Return the [FunctionType] that corresponds to the given [kernelType].
-  FunctionType _getFunctionType(
-      ElementImpl context, kernel.FunctionType kernelType) {
-    if (kernelType.typedef != null) {
-      var translatedType = _getTypedefType(context, kernelType);
-      if (translatedType != null) return translatedType;
-    }
-
-    var element = new FunctionElementImpl('', -1);
-    context.encloseElement(element);
-
-    // Set type parameters.
-    {
-      List<kernel.TypeParameter> typeParameters = kernelType.typeParameters;
-      int count = typeParameters.length;
-      var astTypeParameters = new List<TypeParameterElement>(count);
-      for (int i = 0; i < count; i++) {
-        astTypeParameters[i] =
-            new TypeParameterElementImpl.forKernel(element, typeParameters[i]);
-      }
-      element.typeParameters = astTypeParameters;
-    }
-
-    // Set formal parameters.
-    var parameters = _getFunctionTypeParameters(kernelType);
-    var positionalParameters = parameters[0];
-    var namedParameters = parameters[1];
-    var astParameters = ParameterElementImpl.forKernelParameters(
-        element,
-        kernelType.requiredParameterCount,
-        positionalParameters,
-        namedParameters);
-    element.parameters = astParameters;
-
-    element.returnType = getType(element, kernelType.returnType);
-
-    return new FunctionTypeImpl(element);
-  }
-
-  InterfaceType _getInterfaceType(ElementImpl context,
-      kernel.CanonicalName className, List<kernel.DartType> kernelArguments) {
-    var libraryName = className.parent;
-    var libraryElement = getLibrary(libraryName.name);
-    ClassElement classElement = libraryElement.getType(className.name);
-    classElement ??= libraryElement.getEnum(className.name);
-
-    if (kernelArguments.isEmpty) {
-      return classElement.type;
-    }
-
-    return new InterfaceTypeImpl.elementWithNameAndArgs(
-        classElement, classElement.name, () {
-      List<DartType> arguments = kernelArguments
-          .map((kernel.DartType k) => getType(context, k))
-          .toList(growable: false);
-      return arguments;
-    });
-  }
-
-  /**
-   * Get the [Source] object for the given [uri].
-   */
-  Source _getSource(String uri) {
-    return _sources.putIfAbsent(
-        uri, () => _analysisContext.sourceFactory.forUri(uri));
-  }
-
-  /// Return the [FunctionType] for the given typedef based [kernelType].
-  FunctionType _getTypedefType(
-      ElementImpl context, kernel.FunctionType kernelType) {
-    kernel.Typedef typedef = kernelType.typedef;
-
-    GenericTypeAliasElementImpl typedefElement =
-        getElementFromCanonicalName(typedef.canonicalName);
-
-    kernel.FunctionType typedefType = typedef.type;
-
-    if (kernelType.typeParameters.length != typedefType.typeParameters.length) {
-      // Type parameters don't match; just resynthesize as a synthetic function
-      // type.
-      return null;
-    }
-
-    // In the general case imagine the typedef is:
-    //     typedef F<T, U> = ... Function<V, W>(...);
-    // And kernelType is:
-    //     ... Function<X, Y>(...);
-    // So the outer type parameters of the typedef have been instantiated (or
-    // there were none); the inner type parameters have not been instantiated
-    // (or there were none).
-    //
-    // Now we have to figure out what substitution was used to instantiate
-    // the typedef, since the kernel doesn't track that information.
-    var substitution = kernel.unifyTypes(
-        typedefType, kernelType, typedef.typeParameters.toSet());
-
-    // Convert kernel type arguments into Analyzer types.
-    var typeArguments = typedef.typeParameters
-        .map((t) => substitution.containsKey(t)
-            ? getType(context, substitution[t])
-            : _typeProvider.nullType)
-        .toList();
-    return typedefElement.instantiate(typeArguments);
-  }
-
-  LibraryElementImpl _newSyntheticLibrary(String uriStr) {
-    Source librarySource = _getSource(uriStr);
-    if (librarySource == null) return null;
-
-    LibraryElementImpl libraryElement =
-        new LibraryElementImpl(context, '', -1, 0);
-    libraryElement.isSynthetic = true;
-    CompilationUnitElementImpl unitElement =
-        new CompilationUnitElementImpl(librarySource.shortName);
-    libraryElement.definingCompilationUnit = unitElement;
-    unitElement.source = librarySource;
-    unitElement.librarySource = librarySource;
-    libraryElement.createLoadLibraryFunction(_typeProvider);
-    libraryElement.publicNamespace = new Namespace({});
-    libraryElement.exportNamespace = new Namespace({});
-    return libraryElement;
-  }
-
-  /// Return the list with exactly two elements - positional and named
-  /// parameter lists.
-  static List<List<kernel.VariableDeclaration>> _getFunctionTypeParameters(
-      kernel.FunctionType type) {
-    int positionalCount = type.positionalParameters.length;
-    var positionalParameters =
-        new List<kernel.VariableDeclaration>(positionalCount);
-    var knownPositionalParameters = const <kernel.VariableDeclaration>[];
-    if (type.typedefReference != null) {
-      knownPositionalParameters =
-          type.typedefReference.asTypedef.positionalParameters;
-    }
-    for (int i = 0; i < positionalCount; i++) {
-      String name = i < knownPositionalParameters.length
-          ? (knownPositionalParameters[i].name ?? '')
-          : 'arg_$i';
-      positionalParameters[i] = new kernel.VariableDeclaration(name,
-          type: type.positionalParameters[i]);
-    }
-
-    var namedParameters = type.namedParameters
-        .map((k) => new kernel.VariableDeclaration(k.name, type: k.type))
-        .toList(growable: false);
-
-    return [positionalParameters, namedParameters];
-  }
-}
-
-/**
- * Builder of [Expression]s from [kernel.Expression]s.
- */
-class _ExprBuilder {
-  final _KernelUnitResynthesizerContextImpl _context;
-  final ElementImpl _contextElement;
-
-  _ExprBuilder(this._context, this._contextElement);
-
-  TypeProvider get typeProvider =>
-      _context.libraryContext.resynthesizer._typeProvider;
-
-  Expression build(kernel.Expression expr) {
-    if (_hasInvalidExpression(expr)) {
-      return AstTestFactory.identifier3('#invalidConst');
-    }
-    return _build(expr);
-  }
-
-  ConstructorInitializer buildInitializer(kernel.Initializer k) {
-    if (k is kernel.FieldInitializer) {
-      Expression value = build(k.value);
-      ConstructorFieldInitializer initializer =
-          AstTestFactory.constructorFieldInitializer(
-              false, k.field.name.name, value);
-      initializer.fieldName.staticElement = _getElement(k.fieldReference);
-      return initializer;
-    }
-
-    if (k is kernel.AssertInitializer) {
-      var body = k.statement;
-      var condition = build(body.condition);
-      var message = body.message != null ? build(body.message) : null;
-      return AstTestFactory.assertInitializer(condition, message);
-    }
-
-    if (k is kernel.RedirectingInitializer) {
-      ConstructorElementImpl redirect = _getElement(k.targetReference);
-      var arguments = _toArguments(k.arguments);
-
-      RedirectingConstructorInvocation invocation =
-          AstTestFactory.redirectingConstructorInvocation(arguments);
-      invocation.staticElement = redirect;
-
-      String name = k.target.name.name;
-      if (name.isNotEmpty) {
-        invocation.constructorName = AstTestFactory.identifier3(name)
-          ..staticElement = redirect;
-      }
-
-      return invocation;
-    }
-
-    if (k is kernel.SuperInitializer) {
-      ConstructorElementImpl redirect = _getElement(k.targetReference);
-      var arguments = _toArguments(k.arguments);
-
-      SuperConstructorInvocation invocation =
-          AstTestFactory.superConstructorInvocation(arguments);
-      invocation.staticElement = redirect;
-
-      String name = k.target.name.name;
-      if (name.isNotEmpty) {
-        invocation.constructorName = AstTestFactory.identifier3(name)
-          ..staticElement = redirect;
-      }
-
-      return invocation;
-    }
-
-    if (k is kernel.ShadowInvalidFieldInitializer ||
-        k is kernel.ShadowInvalidInitializer ||
-        k is kernel.InvalidSuperInitializerJudgment) {
-      return null;
-    }
-
-    throw new UnimplementedError('For ${k.runtimeType}');
-  }
-
-  Expression _build(kernel.Expression expr) {
-    if (expr is kernel.NullLiteral) {
-      return AstTestFactory.nullLiteral();
-    }
-    if (expr is kernel.BoolLiteral) {
-      return AstTestFactory.booleanLiteral(expr.value);
-    }
-    if (expr is kernel.IntLiteral) {
-      return AstTestFactory.integer(expr.value);
-    }
-    if (expr is kernel.DoubleLiteral) {
-      return AstTestFactory.doubleLiteral(expr.value);
-    }
-    if (expr is kernel.StringLiteral) {
-      return AstTestFactory.string2(expr.value);
-    }
-
-    if (expr is kernel.StringConcatenation) {
-      List<InterpolationElement> elements = expr.expressions
-          .map(_build)
-          .map(_newInterpolationElement)
-          .toList(growable: false);
-      return AstTestFactory.string(elements);
-    }
-
-    if (expr is kernel.SymbolLiteral) {
-      List<String> components = expr.value.split('.').toList();
-      return AstTestFactory.symbolLiteral(components);
-    }
-
-    if (expr is kernel.ListLiteral) {
-      Keyword keyword = expr.isConst ? Keyword.CONST : null;
-      var typeArguments = _getTypes([expr.typeArgument]);
-      var typeArgumentNodes = _buildTypeArgumentList(typeArguments);
-      var elements = expr.expressions.map(_build).toList();
-      return AstTestFactory.listLiteral2(keyword, typeArgumentNodes, elements)
-        ..staticType = typeProvider.listType.instantiate(typeArguments);
-    }
-
-    if (expr is kernel.MapLiteral) {
-      Keyword keyword = expr.isConst ? Keyword.CONST : null;
-      var typeArguments = _getTypes([expr.keyType, expr.valueType]);
-      var typeArgumentNodes = _buildTypeArgumentList(typeArguments);
-
-      int numberOfEntries = expr.entries.length;
-      var entries = new List<MapLiteralEntry>(numberOfEntries);
-      for (int i = 0; i < numberOfEntries; i++) {
-        var entry = expr.entries[i];
-        Expression key = _build(entry.key);
-        Expression value = _build(entry.value);
-        entries[i] = AstTestFactory.mapLiteralEntry2(key, value);
-      }
-
-      return AstTestFactory.mapLiteral(keyword, typeArgumentNodes, entries);
-    }
-
-    if (expr is kernel.StaticGet) {
-      return _buildIdentifier(expr.targetReference, isGet: true);
-    }
-
-    if (expr is kernel.ThisExpression) {
-      return AstTestFactory.thisExpression();
-    }
-
-    if (expr is kernel.PropertyGet) {
-      Expression target = _build(expr.receiver);
-      kernel.Reference reference = expr.interfaceTargetReference;
-      SimpleIdentifier identifier = _buildSimpleIdentifier(reference);
-      return AstTestFactory.propertyAccess(target, identifier);
-    }
-
-    if (expr is kernel.VariableGet) {
-      String name = expr.variable.name;
-      Element contextConstructor = _contextElement;
-      if (contextConstructor is ConstructorElement) {
-        SimpleIdentifier identifier = AstTestFactory.identifier3(name);
-        ParameterElement parameter = contextConstructor.parameters.firstWhere(
-            (parameter) => parameter.name == name,
-            orElse: () => null);
-        identifier.staticElement = parameter;
-        return identifier;
-      }
-    }
-
-    if (expr is kernel.ConditionalExpression) {
-      var condition = _build(expr.condition);
-      var then = _build(expr.then);
-      var otherwise = _build(expr.otherwise);
-      return AstTestFactory.conditionalExpression(condition, then, otherwise);
-    }
-
-    if (expr is kernel.Not) {
-      kernel.Expression kernelOperand = expr.operand;
-      var operand = _build(kernelOperand);
-      return AstTestFactory.prefixExpression(TokenType.BANG, operand);
-    }
-
-    if (expr is kernel.LogicalExpression) {
-      var operator = _toBinaryOperatorTokenType(expr.operator);
-      var left = _build(expr.left);
-      var right = _build(expr.right);
-      return AstTestFactory.binaryExpression(left, operator, right);
-    }
-
-    if (expr is kernel.AsExpression && expr.isTypeError) {
-      return _build(expr.operand);
-    }
-
-    if (expr is kernel.Let) {
-      var body = expr.body;
-      if (body is kernel.ConditionalExpression) {
-        var condition = body.condition;
-        var otherwiseExpr = body.otherwise;
-        if (condition is kernel.MethodInvocation) {
-          var equalsReceiver = condition.receiver;
-          if (equalsReceiver is kernel.VariableGet &&
-              condition.name.name == '==' &&
-              condition.arguments.positional.length == 1 &&
-              condition.arguments.positional[0] is kernel.NullLiteral &&
-              otherwiseExpr is kernel.VariableGet &&
-              otherwiseExpr.variable == equalsReceiver.variable) {
-            var left = _build(expr.variable.initializer);
-            var right = _build(body.then);
-            return AstTestFactory.binaryExpression(
-                left, TokenType.QUESTION_QUESTION, right);
-          }
-        }
-      }
-    }
-
-    if (expr is kernel.MethodInvocation) {
-      var left = _build(expr.receiver);
-      String operatorName = expr.name.name;
-      List<kernel.Expression> args = expr.arguments.positional;
-      if (args.isEmpty) {
-        if (operatorName == 'unary-') {
-          return AstTestFactory.prefixExpression(TokenType.MINUS, left);
-        }
-        if (operatorName == '~') {
-          return AstTestFactory.prefixExpression(TokenType.TILDE, left);
-        }
-      } else if (args.length == 1) {
-        var operator = _toBinaryOperatorTokenType(operatorName);
-        var right = _build(args.single);
-        return AstTestFactory.binaryExpression(left, operator, right);
-      }
-    }
-
-    if (expr is kernel.StaticInvocation) {
-      kernel.Procedure target = expr.target;
-      String name = target.name.name;
-      List<Expression> arguments = _toArguments(expr.arguments);
-      MethodInvocation invocation =
-          AstTestFactory.methodInvocation3(null, name, null, arguments);
-      invocation.methodName.staticElement = _getElement(target.reference);
-      return invocation;
-    }
-
-    if (expr is kernel.ConstructorInvocation) {
-      ConstructorElementImpl element = _getElement(expr.targetReference);
-
-      // It's safe to pass null for the TypeEnvironment because it isn't
-      // needed to compute the type of a constructor invocation.
-      var kernelType = expr.getStaticType(null);
-      var type = _getType(kernelType);
-      TypeName typeName = _buildType(type);
-
-      var constructorName = AstTestFactory.constructorName(
-          typeName, element.name.isNotEmpty ? element.name : null);
-      constructorName?.name?.staticElement = element;
-
-      var keyword = expr.isConst ? Keyword.CONST : Keyword.NEW;
-      var arguments = _toArguments(expr.arguments);
-      var creation = AstTestFactory.instanceCreationExpression(
-          keyword, constructorName, arguments);
-      creation.staticElement = ConstructorMember.from(element, type);
-      creation.staticType = type;
-      return creation;
-    }
-
-    if (expr is kernel.Instantiation) {
-      return _build(expr.expression);
-    }
-
-    if (expr is kernel.TypeLiteral) {
-      ElementImpl element;
-      var kernelType = expr.type;
-      if (kernelType is kernel.FunctionType) {
-        element = _getElement(kernelType.typedefReference);
-      } else {
-        var type = _getType(kernelType);
-        element = type.element;
-      }
-      var identifier = AstTestFactory.identifier3(element.name);
-      identifier.staticElement = element;
-      identifier.staticType = _context.libraryContext.resynthesizer.typeType;
-      return identifier;
-    }
-
-    // TODO(scheglov): complete getExpression
-    throw new UnimplementedError('kernel: (${expr.runtimeType}) $expr');
-  }
-
-  Identifier _buildIdentifier(kernel.Reference reference, {bool isGet: false}) {
-    Element element = _getElement(reference);
-    if (isGet && element is PropertyInducingElement) {
-      element = (element as PropertyInducingElement).getter;
-    }
-    SimpleIdentifier property = AstTestFactory.identifier3(element.displayName)
-      ..staticElement = element;
-    Element enclosingElement = element.enclosingElement;
-    if (enclosingElement is ClassElement) {
-      SimpleIdentifier classRef =
-          AstTestFactory.identifier3(enclosingElement.name)
-            ..staticElement = enclosingElement;
-      return AstTestFactory.identifier(classRef, property);
-    } else {
-      return property;
-    }
-  }
-
-  SimpleIdentifier _buildSimpleIdentifier(kernel.Reference reference) {
-    String name = reference.canonicalName.name;
-    SimpleIdentifier identifier = AstTestFactory.identifier3(name);
-    Element element = _getElement(reference);
-    identifier.staticElement = element;
-    return identifier;
-  }
-
-  TypeAnnotation _buildType(DartType type) {
-    List<TypeAnnotation> argumentNodes;
-    if (type is ParameterizedType) {
-      argumentNodes = _buildTypeArguments(type.typeArguments);
-    }
-    TypeName node = AstTestFactory.typeName4(type.name, argumentNodes);
-    node.type = type;
-    (node.name as SimpleIdentifier).staticElement = type.element;
-    return node;
-  }
-
-  TypeArgumentList _buildTypeArgumentList(List<DartType> types) {
-    int length = types.length;
-    var typeAnnotations = new List<TypeAnnotation>(length);
-    for (int i = 0; i < length; i++) {
-      DartType type = types[i];
-      TypeAnnotation typeAnnotation = _buildType(type);
-      typeAnnotations[i] = typeAnnotation;
-    }
-    return AstTestFactory.typeArgumentList(typeAnnotations);
-  }
-
-  List<TypeAnnotation> _buildTypeArguments(List<DartType> types) {
-    if (types.every((t) => t.isDynamic)) return null;
-    return types.map(_buildType).toList();
-  }
-
-  ElementImpl _getElement(kernel.Reference reference) {
-    return _context.libraryContext.resynthesizer
-        .getElementFromCanonicalName(reference?.canonicalName);
-  }
-
-  DartType _getType(kernel.DartType kernel) {
-    return _context.getType(_contextElement, kernel);
-  }
-
-  List<DartType> _getTypes(List<kernel.DartType> kernels) {
-    int length = kernels.length;
-    var types = new List<DartType>(length);
-    for (int i = 0; i < length; i++) {
-      DartType type = _getType(kernels[i]);
-      types[i] = type;
-    }
-    return types;
-  }
-
-  InterpolationElement _newInterpolationElement(Expression expr) {
-    if (expr is SimpleStringLiteral) {
-      return astFactory.interpolationString(expr.literal, expr.value);
-    } else {
-      return AstTestFactory.interpolationExpression(expr);
-    }
-  }
-
-  /// Return [Expression]s for the given [kernelArguments].
-  List<Expression> _toArguments(kernel.Arguments kernelArguments) {
-    int numPositional = kernelArguments.positional.length;
-    int numNamed = kernelArguments.named.length;
-    var arguments = new List<Expression>(numPositional + numNamed);
-
-    int i = 0;
-    for (kernel.Expression k in kernelArguments.positional) {
-      arguments[i++] = _build(k);
-    }
-
-    for (kernel.NamedExpression k in kernelArguments.named) {
-      var value = _build(k.value);
-      arguments[i++] = AstTestFactory.namedExpression2(k.name, value);
-    }
-
-    return arguments;
-  }
-
-  /// Return the [TokenType] for the given operator [name].
-  TokenType _toBinaryOperatorTokenType(String name) {
-    if (name == '==') return TokenType.EQ_EQ;
-    if (name == '&&') return TokenType.AMPERSAND_AMPERSAND;
-    if (name == '||') return TokenType.BAR_BAR;
-    if (name == '^') return TokenType.CARET;
-    if (name == '&') return TokenType.AMPERSAND;
-    if (name == '|') return TokenType.BAR;
-    if (name == '>>') return TokenType.GT_GT;
-    if (name == '<<') return TokenType.LT_LT;
-    if (name == '+') return TokenType.PLUS;
-    if (name == '-') return TokenType.MINUS;
-    if (name == '*') return TokenType.STAR;
-    if (name == '/') return TokenType.SLASH;
-    if (name == '~/') return TokenType.TILDE_SLASH;
-    if (name == '%') return TokenType.PERCENT;
-    if (name == '>') return TokenType.GT;
-    if (name == '<') return TokenType.LT;
-    if (name == '>=') return TokenType.GT_EQ;
-    if (name == '<=') return TokenType.LT_EQ;
-    if (name == 'unary-') return TokenType.MINUS;
-    throw new ArgumentError(name);
-  }
-
-  static bool _hasInvalidExpression(kernel.Expression expr) {
-    var visitor = new _HasInvalidExpressionVisitor();
-    expr.accept(visitor);
-    return visitor.result;
-  }
-}
-
-class _HasInvalidExpressionVisitor extends kernel.RecursiveVisitor<void> {
-  bool result = false;
-
-  @override
-  void visitInvalidExpression(kernel.InvalidExpression node) {
-    result = true;
-  }
-}
-
-/**
- * Implementation of [KernelLibraryResynthesizerContext].
- */
-class _KernelLibraryResynthesizerContextImpl
-    implements KernelLibraryResynthesizerContext {
-  final KernelResynthesizer resynthesizer;
-
-  @override
-  final kernel.Library library;
-
-  /**
-   * The relative URI of the directory with the [library] file.
-   * E.g. `sdk/lib/core` for `sdk/lib/core/core.dart`.
-   */
-  String libraryDirectoryUri;
-
-  Source librarySource;
-  LibraryElementImpl libraryElement;
-
-  _KernelLibraryResynthesizerContextImpl(this.resynthesizer, this.library) {
-    libraryDirectoryUri = pathos.url.dirname("${library.fileUri}");
-  }
-
-  @override
-  kernel.Library get coreLibrary {
-    return resynthesizer._fileInfoMap['dart:core'].library;
-  }
-
-  @override
-  bool get hasExtUri {
-    for (var dependency in library.dependencies) {
-      if (dependency.isImport &&
-          dependency.targetLibrary.importUri.isScheme('dart-ext')) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  @override
-  Namespace buildExportNamespace() {
-    Namespace publicNamespace = buildPublicNamespace();
-    if (library.additionalExports.isEmpty) {
-      return publicNamespace;
-    }
-
-    Map<String, Element> definedNames = publicNamespace.definedNames;
-    for (kernel.Reference additionalExport in library.additionalExports) {
-      var element = resynthesizer
-          .getElementFromCanonicalName(additionalExport.canonicalName);
-      if (element != null) {
-        definedNames[element.name] = element;
-      }
-    }
-
-    return new Namespace(definedNames);
-  }
-
-  @override
-  Namespace buildPublicNamespace() {
-    return new NamespaceBuilder()
-        .createPublicNamespaceForLibrary(libraryElement);
-  }
-
-  @override
-  LibraryElementImpl getLibrary(String uriStr) {
-    return resynthesizer.getLibrary(uriStr);
-  }
-
-  LibraryElementImpl _buildLibrary(String uriStr) {
-    librarySource = resynthesizer._getSource(uriStr);
-    if (librarySource == null) return null;
-    return libraryElement =
-        new LibraryElementImpl.forKernel(resynthesizer._analysisContext, this);
-  }
-
-  _KernelUnitResynthesizerContextImpl _buildUnit(String uriStr, Uri fileUri) {
-    var unitContext = new _KernelUnitResynthesizerContextImpl(this, fileUri);
-
-    var unitElement = new CompilationUnitElementImpl.forKernel(
-        libraryElement, unitContext, '<no name>');
-    unitContext.unit = unitElement;
-    unitElement.librarySource = librarySource;
-    if (!fileUri.isScheme('org-dartlang-malformed-uri')) {
-      var fileInfo = resynthesizer._fileInfoMap[uriStr];
-      unitElement.setCodeRange(0, fileInfo.contentLength);
-      unitElement.lineInfo = fileInfo.lineInfo;
-      unitElement.source = resynthesizer._getSource(uriStr);
-    }
-
-    unitContext.unit = unitElement;
-    return unitContext;
-  }
-}
-
-/**
- * Implementation of [KernelUnit].
- */
-class _KernelUnitImpl implements KernelUnit {
-  final _KernelUnitResynthesizerContextImpl context;
-
-  List<kernel.Expression> _annotations;
-  List<kernel.Class> _classes;
-  List<kernel.Field> _fields;
-  List<kernel.Procedure> _procedures;
-  List<kernel.Typedef> _typedefs;
-
-  _KernelUnitImpl(this.context);
-
-  @override
-  List<kernel.Expression> get annotations {
-    if (_annotations == null) {
-      var libraryFileUri = context.libraryContext.library.fileUri;
-      for (var part in context.libraryContext.library.parts) {
-        if (libraryFileUri.resolve(part.partUri) == context.fileUri) {
-          return _annotations = part.annotations;
-        }
-      }
-    }
-    return _annotations ?? const <kernel.Expression>[];
-  }
-
-  @override
-  List<kernel.Class> get classes =>
-      _classes ??= context.libraryContext.library.classes
-          .where((n) => n.fileUri == context.fileUri)
-          .toList(growable: false);
-
-  @override
-  List<kernel.Field> get fields =>
-      _fields ??= context.libraryContext.library.fields
-          .where((n) => n.fileUri == context.fileUri)
-          .toList(growable: false);
-
-  @override
-  List<kernel.Procedure> get procedures =>
-      _procedures ??= context.libraryContext.library.procedures
-          .where((n) => n.fileUri == context.fileUri)
-          .toList(growable: false);
-
-  @override
-  List<kernel.Typedef> get typedefs =>
-      _typedefs ??= context.libraryContext.library.typedefs
-          .where((n) => n.fileUri == context.fileUri)
-          .toList(growable: false);
-}
-
-/**
- * Implementation of [KernelUnitResynthesizerContext].
- */
-class _KernelUnitResynthesizerContextImpl
-    implements KernelUnitResynthesizerContext {
-  static final Uri dartInternalUri = Uri.parse('dart:_internal');
-
-  final _KernelLibraryResynthesizerContextImpl libraryContext;
-  final Uri fileUri;
-
-  CompilationUnitElementImpl unit;
-
-  _KernelUnitResynthesizerContextImpl(this.libraryContext, this.fileUri);
-
-  @override
-  KernelUnit get kernelUnit => new _KernelUnitImpl(this);
-
-  @override
-  List<ElementAnnotation> buildAnnotations(
-      List<kernel.Expression> expressions) {
-    int length = expressions.length;
-    if (length != 0) {
-      var annotations = <ElementAnnotation>[];
-      for (var expression in expressions) {
-        if (_isSyntheticExternalNameAnnotation(expression)) continue;
-        var annotation = _buildAnnotation(unit, expression);
-        annotations.add(annotation);
-      }
-      return annotations;
-    } else {
-      return const <ElementAnnotation>[];
-    }
-  }
-
-  @override
-  UnitExplicitTopLevelAccessors buildTopLevelAccessors() {
-    var accessorsData = new UnitExplicitTopLevelAccessors();
-    var implicitVariables = <String, TopLevelVariableElementImpl>{};
-    // Build explicit property accessors and implicit fields.
-    for (var procedure in kernelUnit.procedures) {
-      bool isGetter = procedure.kind == kernel.ProcedureKind.Getter;
-      bool isSetter = procedure.kind == kernel.ProcedureKind.Setter;
-      if (isGetter || isSetter) {
-        var accessor =
-            new PropertyAccessorElementImpl.forKernel(unit, procedure);
-        accessorsData.accessors.add(accessor);
-
-        // Create or update the implicit variable.
-        String name = accessor.displayName;
-        TopLevelVariableElementImpl variable = implicitVariables[name];
-        if (variable == null) {
-          variable = new TopLevelVariableElementImpl(name, -1);
-          implicitVariables[name] = variable;
-          variable.enclosingElement = unit;
-          variable.isSynthetic = true;
-          variable.isFinal = isGetter;
-        } else {
-          variable.isFinal = false;
-        }
-
-        // Attach the accessor to the variable.
-        accessor.variable = variable;
-        if (isGetter) {
-          variable.getter = accessor;
-        } else {
-          variable.setter = accessor;
-        }
-      }
-    }
-    accessorsData.implicitVariables.addAll(implicitVariables.values);
-    return accessorsData;
-  }
-
-  @override
-  UnitExplicitTopLevelVariables buildTopLevelVariables() {
-    List<kernel.Field> kernelFields = kernelUnit.fields;
-    int numberOfVariables = kernelFields.length;
-    var variablesData = new UnitExplicitTopLevelVariables(numberOfVariables);
-    for (int i = 0; i < numberOfVariables; i++) {
-      kernel.Field field = kernelFields[i];
-
-      // Add the explicit variables.
-      TopLevelVariableElementImpl variable;
-      if (field.isConst && field.initializer != null) {
-        variable = new ConstTopLevelVariableElementImpl.forKernel(unit, field);
-      } else {
-        variable = new TopLevelVariableElementImpl.forKernel(unit, field);
-      }
-      variablesData.variables[i] = variable;
-
-      // Add the implicit accessors.
-      variablesData.implicitAccessors
-          .add(new PropertyAccessorElementImpl_ImplicitGetter(variable));
-      if (!(variable.isConst || variable.isFinal)) {
-        variablesData.implicitAccessors
-            .add(new PropertyAccessorElementImpl_ImplicitSetter(variable));
-      }
-    }
-    return variablesData;
-  }
-
-  @override
-  ConstructorInitializer getConstructorInitializer(
-      ConstructorElementImpl constructor, kernel.Initializer k) {
-    if (k is kernel.FieldInitializer && k.isSynthetic ||
-        k is kernel.SuperInitializer && k.isSynthetic) {
-      return null;
-    }
-    return new _ExprBuilder(this, constructor).buildInitializer(k);
-  }
-
-  @override
-  Expression getExpression(ElementImpl context, kernel.Expression expression) {
-    return new _ExprBuilder(this, context).build(expression);
-  }
-
-  @override
-  List<List<kernel.VariableDeclaration>> getFunctionTypeParameters(
-      kernel.FunctionType type) {
-    return KernelResynthesizer._getFunctionTypeParameters(type);
-  }
-
-  @override
-  InterfaceType getInterfaceType(
-      ElementImpl context, kernel.Supertype kernelType) {
-    if (kernelType.classNode.isEnum) {
-      return null;
-    }
-    return libraryContext.resynthesizer._getInterfaceType(
-        context, kernelType.className.canonicalName, kernelType.typeArguments);
-  }
-
-  @override
-  List<InterfaceType> getInterfaceTypes(
-      ElementImpl context, List<kernel.Supertype> types) {
-    var interfaceTypes = <InterfaceType>[];
-    for (kernel.Supertype kernelType in types) {
-      InterfaceType interfaceType = getInterfaceType(context, kernelType);
-      if (interfaceType != null) {
-        interfaceTypes.add(interfaceType);
-      }
-    }
-    return interfaceTypes;
-  }
-
-  @override
-  ConstructorElement getRedirectedConstructor(ElementImpl context,
-      kernel.Constructor kernelConstructor, kernel.Procedure kernelFactory) {
-    if (kernelConstructor != null) {
-      for (var initializer in kernelConstructor.initializers) {
-        if (initializer is kernel.RedirectingInitializer) {
-          return libraryContext.resynthesizer.getElementFromCanonicalName(
-                  initializer.targetReference.canonicalName)
-              as ConstructorElementImpl;
-        }
-      }
-    }
-    if (kernelFactory != null) {
-      kernel.Statement body = kernelFactory.function.body;
-      if (body is RedirectingFactoryBody) {
-        kernel.Member target = body.target;
-        if (target != null) {
-          ConstructorElementImpl constructorElement = libraryContext
-              .resynthesizer
-              .getElementFromCanonicalName(target.reference.canonicalName);
-          var typeArguments = body.typeArguments;
-          if (typeArguments != null) {
-            var classElement = constructorElement.enclosingElement;
-
-            var instantiatedType = new InterfaceTypeImpl.elementWithNameAndArgs(
-                classElement, classElement.name, () {
-              List<DartType> arguments = typeArguments
-                  .map((kernel.DartType k) => getType(context, k))
-                  .toList(growable: false);
-              return arguments;
-            });
-
-            return ConstructorMember.from(constructorElement, instantiatedType);
-          } else {
-            return constructorElement;
-          }
-        }
-      }
-    }
-    return null;
-  }
-
-  @override
-  DartType getType(ElementImpl context, kernel.DartType type) {
-    return libraryContext.resynthesizer.getType(context, type);
-  }
-
-  ElementAnnotationImpl _buildAnnotation(
-      CompilationUnitElementImpl unit, kernel.Expression expression) {
-    ElementAnnotationImpl elementAnnotation = new ElementAnnotationImpl(unit);
-    Expression constExpr = getExpression(unit, expression);
-    if (constExpr is Identifier) {
-      elementAnnotation.element = constExpr.staticElement;
-      elementAnnotation.annotationAst = AstTestFactory.annotation(constExpr);
-    } else if (constExpr is InstanceCreationExpression) {
-      elementAnnotation.element = constExpr.staticElement;
-      Identifier typeName = constExpr.constructorName.type.name;
-      SimpleIdentifier constructorName = constExpr.constructorName.name;
-      elementAnnotation.annotationAst = AstTestFactory.annotation2(
-          typeName, constructorName, constExpr.argumentList)
-        ..element = constExpr.staticElement;
-    } else {
-      throw new StateError(
-          'Unexpected annotation type: ${constExpr.runtimeType}');
-    }
-    return elementAnnotation;
-  }
-
-  /// Fasta converts `native 'name'` clauses to `@ExternalName('name')`
-  /// annotations. But we don't actually have these annotations in code. So,
-  /// we need to skip them to avoid mismatch with AST.
-  static bool _isSyntheticExternalNameAnnotation(kernel.Expression expr) {
-    if (expr is kernel.ConstructorInvocation) {
-      kernel.Constructor target = expr.target;
-      return target != null &&
-          target.enclosingClass.name == 'ExternalName' &&
-          target.enclosingLibrary.importUri == dartInternalUri;
-    }
-    return false;
-  }
-}
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 8916caf..599f424 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -3099,7 +3099,7 @@
   }
 
   @override
-  bool get fallbackMode =>
+  Null get fallbackMode =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -3316,7 +3316,7 @@
   }
 
   @override
-  bool get fallbackMode =>
+  Null get fallbackMode =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -3432,7 +3432,7 @@
   }
 
   @override
-  int get localIndex =>
+  Null get localIndex =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -3580,7 +3580,7 @@
   }
 
   @override
-  int get localIndex =>
+  Null get localIndex =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -3915,38 +3915,20 @@
 class PackageBundleBuilder extends Object
     with _PackageBundleMixin
     implements idl.PackageBundle {
-  String _apiSignature;
-  List<PackageDependencyInfoBuilder> _dependencies;
   List<LinkedLibraryBuilder> _linkedLibraries;
   List<String> _linkedLibraryUris;
   int _majorVersion;
   int _minorVersion;
-  List<String> _unlinkedUnitHashes;
   List<UnlinkedUnitBuilder> _unlinkedUnits;
   List<String> _unlinkedUnitUris;
 
   @override
-  String get apiSignature => _apiSignature ??= '';
-
-  /**
-   * MD5 hash of the non-informative fields of the [PackageBundle] (not
-   * including this one).  This can be used to identify when the API of a
-   * package may have changed.
-   */
-  void set apiSignature(String value) {
-    this._apiSignature = value;
-  }
+  Null get apiSignature =>
+      throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  List<PackageDependencyInfoBuilder> get dependencies =>
-      _dependencies ??= <PackageDependencyInfoBuilder>[];
-
-  /**
-   * Information about the packages this package depends on, if known.
-   */
-  void set dependencies(List<PackageDependencyInfoBuilder> value) {
-    this._dependencies = value;
-  }
+  Null get dependencies =>
+      throw new UnimplementedError('attempt to access deprecated field');
 
   @override
   List<LinkedLibraryBuilder> get linkedLibraries =>
@@ -3995,15 +3977,8 @@
   }
 
   @override
-  List<String> get unlinkedUnitHashes => _unlinkedUnitHashes ??= <String>[];
-
-  /**
-   * List of MD5 hashes of the files listed in [unlinkedUnitUris].  Each hash
-   * is encoded as a hexadecimal string using lower case letters.
-   */
-  void set unlinkedUnitHashes(List<String> value) {
-    this._unlinkedUnitHashes = value;
-  }
+  Null get unlinkedUnitHashes =>
+      throw new UnimplementedError('attempt to access deprecated field');
 
   @override
   List<UnlinkedUnitBuilder> get unlinkedUnits =>
@@ -4027,22 +4002,16 @@
   }
 
   PackageBundleBuilder(
-      {String apiSignature,
-      List<PackageDependencyInfoBuilder> dependencies,
-      List<LinkedLibraryBuilder> linkedLibraries,
+      {List<LinkedLibraryBuilder> linkedLibraries,
       List<String> linkedLibraryUris,
       int majorVersion,
       int minorVersion,
-      List<String> unlinkedUnitHashes,
       List<UnlinkedUnitBuilder> unlinkedUnits,
       List<String> unlinkedUnitUris})
-      : _apiSignature = apiSignature,
-        _dependencies = dependencies,
-        _linkedLibraries = linkedLibraries,
+      : _linkedLibraries = linkedLibraries,
         _linkedLibraryUris = linkedLibraryUris,
         _majorVersion = majorVersion,
         _minorVersion = minorVersion,
-        _unlinkedUnitHashes = unlinkedUnitHashes,
         _unlinkedUnits = unlinkedUnits,
         _unlinkedUnitUris = unlinkedUnitUris;
 
@@ -4050,9 +4019,7 @@
    * Flush [informative] data recursively.
    */
   void flushInformative() {
-    _dependencies = null;
     _linkedLibraries?.forEach((b) => b.flushInformative());
-    _unlinkedUnitHashes = null;
     _unlinkedUnits?.forEach((b) => b.flushInformative());
   }
 
@@ -4094,7 +4061,6 @@
     }
     signature.addInt(this._majorVersion ?? 0);
     signature.addInt(this._minorVersion ?? 0);
-    signature.addString(this._apiSignature ?? '');
   }
 
   List<int> toBuffer() {
@@ -4103,20 +4069,10 @@
   }
 
   fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset offset_apiSignature;
-    fb.Offset offset_dependencies;
     fb.Offset offset_linkedLibraries;
     fb.Offset offset_linkedLibraryUris;
-    fb.Offset offset_unlinkedUnitHashes;
     fb.Offset offset_unlinkedUnits;
     fb.Offset offset_unlinkedUnitUris;
-    if (_apiSignature != null) {
-      offset_apiSignature = fbBuilder.writeString(_apiSignature);
-    }
-    if (!(_dependencies == null || _dependencies.isEmpty)) {
-      offset_dependencies = fbBuilder
-          .writeList(_dependencies.map((b) => b.finish(fbBuilder)).toList());
-    }
     if (!(_linkedLibraries == null || _linkedLibraries.isEmpty)) {
       offset_linkedLibraries = fbBuilder
           .writeList(_linkedLibraries.map((b) => b.finish(fbBuilder)).toList());
@@ -4125,10 +4081,6 @@
       offset_linkedLibraryUris = fbBuilder.writeList(
           _linkedLibraryUris.map((b) => fbBuilder.writeString(b)).toList());
     }
-    if (!(_unlinkedUnitHashes == null || _unlinkedUnitHashes.isEmpty)) {
-      offset_unlinkedUnitHashes = fbBuilder.writeList(
-          _unlinkedUnitHashes.map((b) => fbBuilder.writeString(b)).toList());
-    }
     if (!(_unlinkedUnits == null || _unlinkedUnits.isEmpty)) {
       offset_unlinkedUnits = fbBuilder
           .writeList(_unlinkedUnits.map((b) => b.finish(fbBuilder)).toList());
@@ -4138,12 +4090,6 @@
           _unlinkedUnitUris.map((b) => fbBuilder.writeString(b)).toList());
     }
     fbBuilder.startTable();
-    if (offset_apiSignature != null) {
-      fbBuilder.addOffset(7, offset_apiSignature);
-    }
-    if (offset_dependencies != null) {
-      fbBuilder.addOffset(8, offset_dependencies);
-    }
     if (offset_linkedLibraries != null) {
       fbBuilder.addOffset(0, offset_linkedLibraries);
     }
@@ -4156,9 +4102,6 @@
     if (_minorVersion != null && _minorVersion != 0) {
       fbBuilder.addUint32(6, _minorVersion);
     }
-    if (offset_unlinkedUnitHashes != null) {
-      fbBuilder.addOffset(4, offset_unlinkedUnitHashes);
-    }
     if (offset_unlinkedUnits != null) {
       fbBuilder.addOffset(2, offset_unlinkedUnits);
     }
@@ -4190,29 +4133,20 @@
 
   _PackageBundleImpl(this._bc, this._bcOffset);
 
-  String _apiSignature;
-  List<idl.PackageDependencyInfo> _dependencies;
   List<idl.LinkedLibrary> _linkedLibraries;
   List<String> _linkedLibraryUris;
   int _majorVersion;
   int _minorVersion;
-  List<String> _unlinkedUnitHashes;
   List<idl.UnlinkedUnit> _unlinkedUnits;
   List<String> _unlinkedUnitUris;
 
   @override
-  String get apiSignature {
-    _apiSignature ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 7, '');
-    return _apiSignature;
-  }
+  Null get apiSignature =>
+      throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  List<idl.PackageDependencyInfo> get dependencies {
-    _dependencies ??= const fb.ListReader<idl.PackageDependencyInfo>(
-            const _PackageDependencyInfoReader())
-        .vTableGet(_bc, _bcOffset, 8, const <idl.PackageDependencyInfo>[]);
-    return _dependencies;
-  }
+  Null get dependencies =>
+      throw new UnimplementedError('attempt to access deprecated field');
 
   @override
   List<idl.LinkedLibrary> get linkedLibraries {
@@ -4242,11 +4176,8 @@
   }
 
   @override
-  List<String> get unlinkedUnitHashes {
-    _unlinkedUnitHashes ??= const fb.ListReader<String>(const fb.StringReader())
-        .vTableGet(_bc, _bcOffset, 4, const <String>[]);
-    return _unlinkedUnitHashes;
-  }
+  Null get unlinkedUnitHashes =>
+      throw new UnimplementedError('attempt to access deprecated field');
 
   @override
   List<idl.UnlinkedUnit> get unlinkedUnits {
@@ -4268,10 +4199,6 @@
   @override
   Map<String, Object> toJson() {
     Map<String, Object> _result = <String, Object>{};
-    if (apiSignature != '') _result["apiSignature"] = apiSignature;
-    if (dependencies.isNotEmpty)
-      _result["dependencies"] =
-          dependencies.map((_value) => _value.toJson()).toList();
     if (linkedLibraries.isNotEmpty)
       _result["linkedLibraries"] =
           linkedLibraries.map((_value) => _value.toJson()).toList();
@@ -4279,8 +4206,6 @@
       _result["linkedLibraryUris"] = linkedLibraryUris;
     if (majorVersion != 0) _result["majorVersion"] = majorVersion;
     if (minorVersion != 0) _result["minorVersion"] = minorVersion;
-    if (unlinkedUnitHashes.isNotEmpty)
-      _result["unlinkedUnitHashes"] = unlinkedUnitHashes;
     if (unlinkedUnits.isNotEmpty)
       _result["unlinkedUnits"] =
           unlinkedUnits.map((_value) => _value.toJson()).toList();
@@ -4291,13 +4216,10 @@
 
   @override
   Map<String, Object> toMap() => {
-        "apiSignature": apiSignature,
-        "dependencies": dependencies,
         "linkedLibraries": linkedLibraries,
         "linkedLibraryUris": linkedLibraryUris,
         "majorVersion": majorVersion,
         "minorVersion": minorVersion,
-        "unlinkedUnitHashes": unlinkedUnitHashes,
         "unlinkedUnits": unlinkedUnits,
         "unlinkedUnitUris": unlinkedUnitUris,
       };
@@ -4306,231 +4228,6 @@
   String toString() => convert.json.encode(toJson());
 }
 
-class PackageDependencyInfoBuilder extends Object
-    with _PackageDependencyInfoMixin
-    implements idl.PackageDependencyInfo {
-  String _apiSignature;
-  List<String> _includedPackageNames;
-  bool _includesDartUris;
-  bool _includesFileUris;
-  String _summaryPath;
-
-  @override
-  String get apiSignature => _apiSignature ??= '';
-
-  /**
-   * API signature of this dependency.
-   */
-  void set apiSignature(String value) {
-    this._apiSignature = value;
-  }
-
-  @override
-  List<String> get includedPackageNames => _includedPackageNames ??= <String>[];
-
-  /**
-   * If this dependency summarizes any files whose URI takes the form
-   * "package:<package_name>/...", a list of all such package names, sorted
-   * lexicographically.  Otherwise empty.
-   */
-  void set includedPackageNames(List<String> value) {
-    this._includedPackageNames = value;
-  }
-
-  @override
-  bool get includesDartUris => _includesDartUris ??= false;
-
-  /**
-   * Indicates whether this dependency summarizes any files whose URI takes the
-   * form "dart:...".
-   */
-  void set includesDartUris(bool value) {
-    this._includesDartUris = value;
-  }
-
-  @override
-  bool get includesFileUris => _includesFileUris ??= false;
-
-  /**
-   * Indicates whether this dependency summarizes any files whose URI takes the
-   * form "file:...".
-   */
-  void set includesFileUris(bool value) {
-    this._includesFileUris = value;
-  }
-
-  @override
-  String get summaryPath => _summaryPath ??= '';
-
-  /**
-   * Relative path to the summary file for this dependency.  This is intended as
-   * a hint to help the analysis server locate summaries of dependencies.  We
-   * don't specify precisely what this path is relative to, but we expect it to
-   * be relative to a directory the analysis server can find (e.g. for projects
-   * built using Bazel, it would be relative to the "bazel-bin" directory).
-   *
-   * Absent if the path is not known.
-   */
-  void set summaryPath(String value) {
-    this._summaryPath = value;
-  }
-
-  PackageDependencyInfoBuilder(
-      {String apiSignature,
-      List<String> includedPackageNames,
-      bool includesDartUris,
-      bool includesFileUris,
-      String summaryPath})
-      : _apiSignature = apiSignature,
-        _includedPackageNames = includedPackageNames,
-        _includesDartUris = includesDartUris,
-        _includesFileUris = includesFileUris,
-        _summaryPath = summaryPath;
-
-  /**
-   * Flush [informative] data recursively.
-   */
-  void flushInformative() {}
-
-  /**
-   * Accumulate non-[informative] data into [signature].
-   */
-  void collectApiSignature(api_sig.ApiSignature signature) {
-    signature.addString(this._apiSignature ?? '');
-    signature.addString(this._summaryPath ?? '');
-    if (this._includedPackageNames == null) {
-      signature.addInt(0);
-    } else {
-      signature.addInt(this._includedPackageNames.length);
-      for (var x in this._includedPackageNames) {
-        signature.addString(x);
-      }
-    }
-    signature.addBool(this._includesFileUris == true);
-    signature.addBool(this._includesDartUris == true);
-  }
-
-  fb.Offset finish(fb.Builder fbBuilder) {
-    fb.Offset offset_apiSignature;
-    fb.Offset offset_includedPackageNames;
-    fb.Offset offset_summaryPath;
-    if (_apiSignature != null) {
-      offset_apiSignature = fbBuilder.writeString(_apiSignature);
-    }
-    if (!(_includedPackageNames == null || _includedPackageNames.isEmpty)) {
-      offset_includedPackageNames = fbBuilder.writeList(
-          _includedPackageNames.map((b) => fbBuilder.writeString(b)).toList());
-    }
-    if (_summaryPath != null) {
-      offset_summaryPath = fbBuilder.writeString(_summaryPath);
-    }
-    fbBuilder.startTable();
-    if (offset_apiSignature != null) {
-      fbBuilder.addOffset(0, offset_apiSignature);
-    }
-    if (offset_includedPackageNames != null) {
-      fbBuilder.addOffset(2, offset_includedPackageNames);
-    }
-    if (_includesDartUris == true) {
-      fbBuilder.addBool(4, true);
-    }
-    if (_includesFileUris == true) {
-      fbBuilder.addBool(3, true);
-    }
-    if (offset_summaryPath != null) {
-      fbBuilder.addOffset(1, offset_summaryPath);
-    }
-    return fbBuilder.endTable();
-  }
-}
-
-class _PackageDependencyInfoReader
-    extends fb.TableReader<_PackageDependencyInfoImpl> {
-  const _PackageDependencyInfoReader();
-
-  @override
-  _PackageDependencyInfoImpl createObject(fb.BufferContext bc, int offset) =>
-      new _PackageDependencyInfoImpl(bc, offset);
-}
-
-class _PackageDependencyInfoImpl extends Object
-    with _PackageDependencyInfoMixin
-    implements idl.PackageDependencyInfo {
-  final fb.BufferContext _bc;
-  final int _bcOffset;
-
-  _PackageDependencyInfoImpl(this._bc, this._bcOffset);
-
-  String _apiSignature;
-  List<String> _includedPackageNames;
-  bool _includesDartUris;
-  bool _includesFileUris;
-  String _summaryPath;
-
-  @override
-  String get apiSignature {
-    _apiSignature ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 0, '');
-    return _apiSignature;
-  }
-
-  @override
-  List<String> get includedPackageNames {
-    _includedPackageNames ??=
-        const fb.ListReader<String>(const fb.StringReader())
-            .vTableGet(_bc, _bcOffset, 2, const <String>[]);
-    return _includedPackageNames;
-  }
-
-  @override
-  bool get includesDartUris {
-    _includesDartUris ??=
-        const fb.BoolReader().vTableGet(_bc, _bcOffset, 4, false);
-    return _includesDartUris;
-  }
-
-  @override
-  bool get includesFileUris {
-    _includesFileUris ??=
-        const fb.BoolReader().vTableGet(_bc, _bcOffset, 3, false);
-    return _includesFileUris;
-  }
-
-  @override
-  String get summaryPath {
-    _summaryPath ??= const fb.StringReader().vTableGet(_bc, _bcOffset, 1, '');
-    return _summaryPath;
-  }
-}
-
-abstract class _PackageDependencyInfoMixin
-    implements idl.PackageDependencyInfo {
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> _result = <String, Object>{};
-    if (apiSignature != '') _result["apiSignature"] = apiSignature;
-    if (includedPackageNames.isNotEmpty)
-      _result["includedPackageNames"] = includedPackageNames;
-    if (includesDartUris != false)
-      _result["includesDartUris"] = includesDartUris;
-    if (includesFileUris != false)
-      _result["includesFileUris"] = includesFileUris;
-    if (summaryPath != '') _result["summaryPath"] = summaryPath;
-    return _result;
-  }
-
-  @override
-  Map<String, Object> toMap() => {
-        "apiSignature": apiSignature,
-        "includedPackageNames": includedPackageNames,
-        "includesDartUris": includesDartUris,
-        "includesFileUris": includesFileUris,
-        "summaryPath": summaryPath,
-      };
-
-  @override
-  String toString() => convert.json.encode(toJson());
-}
-
 class PackageIndexBuilder extends Object
     with _PackageIndexMixin
     implements idl.PackageIndex {
@@ -5748,6 +5445,7 @@
   List<EntityRefBuilder> _mixins;
   String _name;
   int _nameOffset;
+  List<EntityRefBuilder> _superclassConstraints;
   EntityRefBuilder _supertype;
   List<UnlinkedTypeParamBuilder> _typeParameters;
 
@@ -5879,6 +5577,19 @@
   }
 
   @override
+  List<EntityRefBuilder> get superclassConstraints =>
+      _superclassConstraints ??= <EntityRefBuilder>[];
+
+  /**
+   * Superclass constraints for this mixin declaration. The list will be empty
+   * if this class is not a mixin declaration, or if the declaration does not
+   * have an `on` clause (in which case the type `Object` is implied).
+   */
+  void set superclassConstraints(List<EntityRefBuilder> value) {
+    this._superclassConstraints = value;
+  }
+
+  @override
   EntityRefBuilder get supertype => _supertype;
 
   /**
@@ -5914,6 +5625,7 @@
       List<EntityRefBuilder> mixins,
       String name,
       int nameOffset,
+      List<EntityRefBuilder> superclassConstraints,
       EntityRefBuilder supertype,
       List<UnlinkedTypeParamBuilder> typeParameters})
       : _annotations = annotations,
@@ -5928,6 +5640,7 @@
         _mixins = mixins,
         _name = name,
         _nameOffset = nameOffset,
+        _superclassConstraints = superclassConstraints,
         _supertype = supertype,
         _typeParameters = typeParameters;
 
@@ -5943,6 +5656,7 @@
     _interfaces?.forEach((b) => b.flushInformative());
     _mixins?.forEach((b) => b.flushInformative());
     _nameOffset = null;
+    _superclassConstraints?.forEach((b) => b.flushInformative());
     _supertype?.flushInformative();
     _typeParameters?.forEach((b) => b.flushInformative());
   }
@@ -6005,6 +5719,14 @@
     }
     signature.addBool(this._isMixinApplication == true);
     signature.addBool(this._hasNoSupertype == true);
+    if (this._superclassConstraints == null) {
+      signature.addInt(0);
+    } else {
+      signature.addInt(this._superclassConstraints.length);
+      for (var x in this._superclassConstraints) {
+        x?.collectApiSignature(signature);
+      }
+    }
   }
 
   fb.Offset finish(fb.Builder fbBuilder) {
@@ -6016,6 +5738,7 @@
     fb.Offset offset_interfaces;
     fb.Offset offset_mixins;
     fb.Offset offset_name;
+    fb.Offset offset_superclassConstraints;
     fb.Offset offset_supertype;
     fb.Offset offset_typeParameters;
     if (!(_annotations == null || _annotations.isEmpty)) {
@@ -6047,6 +5770,10 @@
     if (_name != null) {
       offset_name = fbBuilder.writeString(_name);
     }
+    if (!(_superclassConstraints == null || _superclassConstraints.isEmpty)) {
+      offset_superclassConstraints = fbBuilder.writeList(
+          _superclassConstraints.map((b) => b.finish(fbBuilder)).toList());
+    }
     if (_supertype != null) {
       offset_supertype = _supertype.finish(fbBuilder);
     }
@@ -6091,6 +5818,9 @@
     if (_nameOffset != null && _nameOffset != 0) {
       fbBuilder.addUint32(1, _nameOffset);
     }
+    if (offset_superclassConstraints != null) {
+      fbBuilder.addOffset(14, offset_superclassConstraints);
+    }
     if (offset_supertype != null) {
       fbBuilder.addOffset(3, offset_supertype);
     }
@@ -6129,6 +5859,7 @@
   List<idl.EntityRef> _mixins;
   String _name;
   int _nameOffset;
+  List<idl.EntityRef> _superclassConstraints;
   idl.EntityRef _supertype;
   List<idl.UnlinkedTypeParam> _typeParameters;
 
@@ -6216,6 +5947,14 @@
   }
 
   @override
+  List<idl.EntityRef> get superclassConstraints {
+    _superclassConstraints ??=
+        const fb.ListReader<idl.EntityRef>(const _EntityRefReader())
+            .vTableGet(_bc, _bcOffset, 14, const <idl.EntityRef>[]);
+    return _superclassConstraints;
+  }
+
+  @override
   idl.EntityRef get supertype {
     _supertype ??= const _EntityRefReader().vTableGet(_bc, _bcOffset, 3, null);
     return _supertype;
@@ -6256,6 +5995,9 @@
       _result["mixins"] = mixins.map((_value) => _value.toJson()).toList();
     if (name != '') _result["name"] = name;
     if (nameOffset != 0) _result["nameOffset"] = nameOffset;
+    if (superclassConstraints.isNotEmpty)
+      _result["superclassConstraints"] =
+          superclassConstraints.map((_value) => _value.toJson()).toList();
     if (supertype != null) _result["supertype"] = supertype.toJson();
     if (typeParameters.isNotEmpty)
       _result["typeParameters"] =
@@ -6277,6 +6019,7 @@
         "mixins": mixins,
         "name": name,
         "nameOffset": nameOffset,
+        "superclassConstraints": superclassConstraints,
         "supertype": supertype,
         "typeParameters": typeParameters,
       };
@@ -6870,11 +6613,11 @@
   String _text;
 
   @override
-  int get length =>
+  Null get length =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  int get offset =>
+  Null get offset =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -6938,11 +6681,11 @@
   String _text;
 
   @override
-  int get length =>
+  Null get length =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  int get offset =>
+  Null get offset =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -7656,11 +7399,11 @@
   }
 
   @override
-  List<String> get localLabels =>
+  Null get localLabels =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  List<UnlinkedVariableBuilder> get localVariables =>
+  Null get localVariables =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -8249,11 +7992,11 @@
   }
 
   @override
-  List<String> get localLabels =>
+  Null get localLabels =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  List<idl.UnlinkedVariable> get localVariables =>
+  Null get localVariables =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -11411,6 +11154,7 @@
   int _libraryNameLength;
   int _libraryNameOffset;
   List<int> _lineStarts;
+  List<UnlinkedClassBuilder> _mixins;
   List<UnlinkedPartBuilder> _parts;
   UnlinkedPublicNamespaceBuilder _publicNamespace;
   List<UnlinkedReferenceBuilder> _references;
@@ -11485,7 +11229,7 @@
   }
 
   @override
-  String get fallbackModePath =>
+  Null get fallbackModePath =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -11580,6 +11324,16 @@
   }
 
   @override
+  List<UnlinkedClassBuilder> get mixins => _mixins ??= <UnlinkedClassBuilder>[];
+
+  /**
+   * Mixins declared in the compilation unit.
+   */
+  void set mixins(List<UnlinkedClassBuilder> value) {
+    this._mixins = value;
+  }
+
+  @override
   List<UnlinkedPartBuilder> get parts => _parts ??= <UnlinkedPartBuilder>[];
 
   /**
@@ -11651,6 +11405,7 @@
       int libraryNameLength,
       int libraryNameOffset,
       List<int> lineStarts,
+      List<UnlinkedClassBuilder> mixins,
       List<UnlinkedPartBuilder> parts,
       UnlinkedPublicNamespaceBuilder publicNamespace,
       List<UnlinkedReferenceBuilder> references,
@@ -11670,6 +11425,7 @@
         _libraryNameLength = libraryNameLength,
         _libraryNameOffset = libraryNameOffset,
         _lineStarts = lineStarts,
+        _mixins = mixins,
         _parts = parts,
         _publicNamespace = publicNamespace,
         _references = references,
@@ -11691,6 +11447,7 @@
     _libraryNameLength = null;
     _libraryNameOffset = null;
     _lineStarts = null;
+    _mixins?.forEach((b) => b.flushInformative());
     _parts?.forEach((b) => b.flushInformative());
     _publicNamespace?.flushInformative();
     _references?.forEach((b) => b.flushInformative());
@@ -11794,6 +11551,14 @@
         signature.addInt(x);
       }
     }
+    if (this._mixins == null) {
+      signature.addInt(0);
+    } else {
+      signature.addInt(this._mixins.length);
+      for (var x in this._mixins) {
+        x?.collectApiSignature(signature);
+      }
+    }
   }
 
   List<int> toBuffer() {
@@ -11813,6 +11578,7 @@
     fb.Offset offset_libraryDocumentationComment;
     fb.Offset offset_libraryName;
     fb.Offset offset_lineStarts;
+    fb.Offset offset_mixins;
     fb.Offset offset_parts;
     fb.Offset offset_publicNamespace;
     fb.Offset offset_references;
@@ -11858,6 +11624,10 @@
     if (!(_lineStarts == null || _lineStarts.isEmpty)) {
       offset_lineStarts = fbBuilder.writeListUint32(_lineStarts);
     }
+    if (!(_mixins == null || _mixins.isEmpty)) {
+      offset_mixins =
+          fbBuilder.writeList(_mixins.map((b) => b.finish(fbBuilder)).toList());
+    }
     if (!(_parts == null || _parts.isEmpty)) {
       offset_parts =
           fbBuilder.writeList(_parts.map((b) => b.finish(fbBuilder)).toList());
@@ -11920,6 +11690,9 @@
     if (offset_lineStarts != null) {
       fbBuilder.addOffset(17, offset_lineStarts);
     }
+    if (offset_mixins != null) {
+      fbBuilder.addOffset(20, offset_mixins);
+    }
     if (offset_parts != null) {
       fbBuilder.addOffset(11, offset_parts);
     }
@@ -11974,6 +11747,7 @@
   int _libraryNameLength;
   int _libraryNameOffset;
   List<int> _lineStarts;
+  List<idl.UnlinkedClass> _mixins;
   List<idl.UnlinkedPart> _parts;
   idl.UnlinkedPublicNamespace _publicNamespace;
   List<idl.UnlinkedReference> _references;
@@ -12026,7 +11800,7 @@
   }
 
   @override
-  String get fallbackModePath =>
+  Null get fallbackModePath =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
@@ -12086,6 +11860,14 @@
   }
 
   @override
+  List<idl.UnlinkedClass> get mixins {
+    _mixins ??=
+        const fb.ListReader<idl.UnlinkedClass>(const _UnlinkedClassReader())
+            .vTableGet(_bc, _bcOffset, 20, const <idl.UnlinkedClass>[]);
+    return _mixins;
+  }
+
+  @override
   List<idl.UnlinkedPart> get parts {
     _parts ??=
         const fb.ListReader<idl.UnlinkedPart>(const _UnlinkedPartReader())
@@ -12155,6 +11937,8 @@
     if (libraryNameOffset != 0)
       _result["libraryNameOffset"] = libraryNameOffset;
     if (lineStarts.isNotEmpty) _result["lineStarts"] = lineStarts;
+    if (mixins.isNotEmpty)
+      _result["mixins"] = mixins.map((_value) => _value.toJson()).toList();
     if (parts.isNotEmpty)
       _result["parts"] = parts.map((_value) => _value.toJson()).toList();
     if (publicNamespace != null)
@@ -12186,6 +11970,7 @@
         "libraryNameLength": libraryNameLength,
         "libraryNameOffset": libraryNameOffset,
         "lineStarts": lineStarts,
+        "mixins": mixins,
         "parts": parts,
         "publicNamespace": publicNamespace,
         "references": references,
@@ -12382,11 +12167,11 @@
   }
 
   @override
-  int get visibleLength =>
+  Null get visibleLength =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  int get visibleOffset =>
+  Null get visibleOffset =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   UnlinkedVariableBuilder(
@@ -12653,11 +12438,11 @@
   }
 
   @override
-  int get visibleLength =>
+  Null get visibleLength =>
       throw new UnimplementedError('attempt to access deprecated field');
 
   @override
-  int get visibleOffset =>
+  Null get visibleOffset =>
       throw new UnimplementedError('attempt to access deprecated field');
 }
 
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 54b21e9..542ec79 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1548,12 +1548,12 @@
    * including this one).  This can be used to identify when the API of a
    * package may have changed.
    */
-  apiSignature:string (id: 7);
+  apiSignature:string (id: 7, deprecated);
 
   /**
    * Information about the packages this package depends on, if known.
    */
-  dependencies:[PackageDependencyInfo] (id: 8);
+  dependencies:[PackageDependencyInfo] (id: 8, deprecated);
 
   /**
    * Linked libraries.
@@ -1582,7 +1582,7 @@
    * List of MD5 hashes of the files listed in [unlinkedUnitUris].  Each hash
    * is encoded as a hexadecimal string using lower case letters.
    */
-  unlinkedUnitHashes:[string] (id: 4);
+  unlinkedUnitHashes:[string] (id: 4, deprecated);
 
   /**
    * Unlinked information for the compilation units constituting the package.
@@ -1877,6 +1877,13 @@
   nameOffset:uint (id: 1);
 
   /**
+   * Superclass constraints for this mixin declaration. The list will be empty
+   * if this class is not a mixin declaration, or if the declaration does not
+   * have an `on` clause (in which case the type `Object` is implied).
+   */
+  superclassConstraints:[EntityRef] (id: 14);
+
+  /**
    * Supertype of the class, or `null` if either (a) the class doesn't
    * explicitly declare a supertype (and hence has supertype `Object`), or (b)
    * the class *is* `Object` (and hence has no supertype).
@@ -2822,6 +2829,11 @@
   lineStarts:[uint] (id: 17);
 
   /**
+   * Mixins declared in the compilation unit.
+   */
+  mixins:[UnlinkedClass] (id: 20);
+
+  /**
    * Part declarations in the compilation unit.
    */
   parts:[UnlinkedPart] (id: 11);
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 343740b..ee9df47 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -944,6 +944,7 @@
    * package may have changed.
    */
   @Id(7)
+  @deprecated
   String get apiSignature;
 
   /**
@@ -951,6 +952,7 @@
    */
   @Id(8)
   @informative
+  @deprecated
   List<PackageDependencyInfo> get dependencies;
 
   /**
@@ -985,6 +987,7 @@
    * is encoded as a hexadecimal string using lower case letters.
    */
   @Id(4)
+  @deprecated
   @informative
   List<String> get unlinkedUnitHashes;
 
@@ -1004,6 +1007,7 @@
 /**
  * Information about a single dependency of a summary package.
  */
+@deprecated
 abstract class PackageDependencyInfo extends base.SummaryClass {
   /**
    * API signature of this dependency.
@@ -1440,6 +1444,14 @@
   int get nameOffset;
 
   /**
+   * Superclass constraints for this mixin declaration. The list will be empty
+   * if this class is not a mixin declaration, or if the declaration does not
+   * have an `on` clause (in which case the type `Object` is implied).
+   */
+  @Id(14)
+  List<EntityRef> get superclassConstraints;
+
+  /**
    * Supertype of the class, or `null` if either (a) the class doesn't
    * explicitly declare a supertype (and hence has supertype `Object`), or (b)
    * the class *is* `Object` (and hence has no supertype).
@@ -3226,6 +3238,12 @@
   List<int> get lineStarts;
 
   /**
+   * Mixins declared in the compilation unit.
+   */
+  @Id(20)
+  List<UnlinkedClass> get mixins;
+
+  /**
    * Part declarations in the compilation unit.
    */
   @Id(11)
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index f1d8a76..8bce0e0 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -112,34 +112,14 @@
     Set<String> libraryUris,
     GetDependencyCallback getDependency,
     GetUnitCallback getUnit,
-    GetDeclaredVariable getDeclaredVariable,
-    bool strong) {
-  // TODO(brianwilkerson) Remove the parameter 'strong'.
+    GetDeclaredVariable getDeclaredVariable) {
   Map<String, LinkedLibraryBuilder> linkedLibraries =
       setupForLink(libraryUris, getUnit, getDeclaredVariable);
-  relink(linkedLibraries, getDependency, getUnit, strong);
+  _relink(linkedLibraries, getDependency, getUnit);
   return linkedLibraries;
 }
 
 /**
- * Given [libraries] (a map from URI to [LinkedLibraryBuilder]
- * containing correct prelinked information), rebuild linked
- * information, using [getDependency] to fetch the [LinkedLibrary]
- * objects from other build units, and [getUnit] to fetch the
- * [UnlinkedUnit] objects from both this build unit and other build
- * units.
- *
- * The [strong] flag controls whether type inference is performed in strong
- * mode or spec mode.  Note that in spec mode, the only types that are inferred
- * are the types of initializing formals, which are inferred from the types of
- * the corresponding fields.
- */
-void relink(Map<String, LinkedLibraryBuilder> libraries,
-    GetDependencyCallback getDependency, GetUnitCallback getUnit, bool strong) {
-  new Linker(libraries, getDependency, getUnit, strong).link();
-}
-
-/**
  * Prepare to link together the build unit consisting of [libraryUris], using
  * [getUnit] to fetch the [UnlinkedUnit] objects from both this build unit and
  * other build units.
@@ -278,6 +258,24 @@
 }
 
 /**
+ * Given [libraries] (a map from URI to [LinkedLibraryBuilder]
+ * containing correct prelinked information), rebuild linked
+ * information, using [getDependency] to fetch the [LinkedLibrary]
+ * objects from other build units, and [getUnit] to fetch the
+ * [UnlinkedUnit] objects from both this build unit and other build
+ * units.
+ *
+ * The [strong] flag controls whether type inference is performed in strong
+ * mode or spec mode.  Note that in spec mode, the only types that are inferred
+ * are the types of initializing formals, which are inferred from the types of
+ * the corresponding fields.
+ */
+void _relink(Map<String, LinkedLibraryBuilder> libraries,
+    GetDependencyCallback getDependency, GetUnitCallback getUnit) {
+  new Linker(libraries, getDependency, getUnit).link();
+}
+
+/**
  * Create an [UnlinkedParam] representing the given [parameter], which should be
  * a parameter of a synthetic function type (e.g. one produced during type
  * inference as a result of computing the least upper bound of two function
@@ -554,6 +552,9 @@
    */
   final UnlinkedClass _unlinkedClass;
 
+  @override
+  final bool isMixin;
+
   List<ConstructorElementForLink> _constructors;
   ConstructorElementForLink _unnamedConstructor;
   bool _unnamedConstructorComputed = false;
@@ -565,8 +566,8 @@
   List<InterfaceType> _interfaces;
   List<PropertyAccessorElementForLink> _accessors;
 
-  ClassElementForLink_Class(
-      CompilationUnitElementForLink enclosingElement, this._unlinkedClass)
+  ClassElementForLink_Class(CompilationUnitElementForLink enclosingElement,
+      this._unlinkedClass, this.isMixin)
       : super(enclosingElement);
 
   @override
@@ -1003,6 +1004,7 @@
    */
   final String _absoluteUri;
 
+  List<ClassElementForLink_Class> _mixins;
   List<ClassElementForLink_Class> _types;
   Map<String, ReferenceableElementForLink> _containedNames;
   List<TopLevelVariableElementForLink> _topLevelVariables;
@@ -1132,6 +1134,17 @@
   LibraryElementForLink get library => enclosingElement;
 
   @override
+  List<ClassElementForLink_Class> get mixins {
+    if (_mixins == null) {
+      _mixins = <ClassElementForLink_Class>[];
+      for (UnlinkedClass unlinkedClass in _unlinkedUnit.mixins) {
+        _mixins.add(new ClassElementForLink_Class(this, unlinkedClass, true));
+      }
+    }
+    return _mixins;
+  }
+
+  @override
   ResynthesizerContext get resynthesizerContext => this;
 
   @override
@@ -1151,7 +1164,7 @@
     if (_types == null) {
       _types = <ClassElementForLink_Class>[];
       for (UnlinkedClass unlinkedClass in _unlinkedUnit.classes) {
-        _types.add(new ClassElementForLink_Class(this, unlinkedClass));
+        _types.add(new ClassElementForLink_Class(this, unlinkedClass, false));
       }
     }
     return _types;
@@ -3659,7 +3672,7 @@
   ContextForLink _context;
   AnalysisOptionsForLink _analysisOptions;
   Linker(Map<String, LinkedLibraryBuilder> linkedLibraries, this.getDependency,
-      this.getUnit, bool _) {
+      this.getUnit) {
     // Create elements for the libraries to be linked.  The rest of
     // the element model will be created on demand.
     linkedLibraries
diff --git a/pkg/analyzer/lib/src/summary/one_phase.dart b/pkg/analyzer/lib/src/summary/one_phase.dart
new file mode 100644
index 0000000..0775161
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary/one_phase.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:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/summary/format.dart';
+import 'package:analyzer/src/summary/idl.dart';
+import 'package:analyzer/src/summary/link.dart';
+import 'package:analyzer/src/summary/package_bundle_reader.dart';
+import 'package:analyzer/src/summary/prelink.dart';
+import 'package:analyzer/src/summary/summarize_ast.dart';
+import 'package:analyzer/src/summary/summarize_elements.dart';
+
+/// Builds the summary for a build unit based on unresolved ASTs of its
+/// compilation units.
+///
+/// The compilation units in [uriToUnit] are summarized, and the results are
+/// stored in [assembler].  References to other compilation units are resolved
+/// using the summaries stored in [dependencies].
+///
+/// [getDeclaredVariable] is used to resolve configurable imports.  If
+/// [allowMissingFiles] is `false`, then failure to resolve an import will
+/// result in an exception being thrown; otherwise unresolved imports will be
+/// silently recovered from.
+void summarize(
+    Map<String, CompilationUnit> uriToUnit,
+    SummaryDataStore dependencies,
+    PackageBundleAssembler assembler,
+    GetDeclaredVariable getDeclaredVariable,
+    bool allowMissingFiles) {
+  var uriToUnlinked = <String, UnlinkedUnitBuilder>{};
+  uriToUnit.forEach((uri, compilationUnit) {
+    var unlinkedUnit = serializeAstUnlinked(compilationUnit);
+    uriToUnlinked[uri] = unlinkedUnit;
+    assembler.addUnlinkedUnitViaUri(uri, unlinkedUnit);
+  });
+
+  LinkedLibrary getDependency(String absoluteUri) {
+    var dependency = dependencies.linkedMap[absoluteUri];
+    if (dependency == null && !allowMissingFiles) {
+      throw new StateError('Missing dependency $absoluteUri');
+    }
+    return dependency;
+  }
+
+  UnlinkedUnit getUnit(String absoluteUri) {
+    if (absoluteUri == null) {
+      return null;
+    }
+    var unlinkedUnit =
+        uriToUnlinked[absoluteUri] ?? dependencies.unlinkedMap[absoluteUri];
+    if (unlinkedUnit == null && !allowMissingFiles) {
+      throw new StateError('Missing unit $absoluteUri');
+    }
+    return unlinkedUnit;
+  }
+
+  // TODO(paulberry): is this bad?  Are we passing parts to link that we
+  // shouldn't?
+  var linkedLibraries = link(
+      uriToUnlinked.keys.toSet(), getDependency, getUnit, getDeclaredVariable);
+
+  linkedLibraries.forEach(assembler.addLinkedLibrary);
+}
diff --git a/pkg/analyzer/lib/src/summary/prelink.dart b/pkg/analyzer/lib/src/summary/prelink.dart
index 15c4b7c..6bda8fd 100644
--- a/pkg/analyzer/lib/src/summary/prelink.dart
+++ b/pkg/analyzer/lib/src/summary/prelink.dart
@@ -268,6 +268,34 @@
     importCache[definingUnitUri] = definingUnit.publicNamespace;
   }
 
+  void addClassToPrivateNamespace(int unitNum, UnlinkedClass cls) {
+    _Namespace namespace = new _Namespace();
+    cls.fields.forEach((field) {
+      if (field.isStatic && field.isConst) {
+        namespace.add(field.name,
+            new _Meaning(unitNum, ReferenceKind.propertyAccessor, 0, 0));
+      }
+    });
+    cls.executables.forEach((executable) {
+      ReferenceKind kind = null;
+      if (executable.kind == UnlinkedExecutableKind.constructor) {
+        kind = ReferenceKind.constructor;
+      } else if (executable.kind == UnlinkedExecutableKind.functionOrMethod &&
+          executable.isStatic) {
+        kind = ReferenceKind.method;
+      } else if (executable.kind == UnlinkedExecutableKind.getter &&
+          executable.isStatic) {
+        kind = ReferenceKind.propertyAccessor;
+      }
+      if (kind != null && executable.name.isNotEmpty) {
+        namespace.add(executable.name,
+            new _Meaning(unitNum, kind, 0, executable.typeParameters.length));
+      }
+    });
+    privateNamespace.add(cls.name,
+        new _ClassMeaning(unitNum, 0, cls.typeParameters.length, namespace));
+  }
+
   /**
    * Compute the public namespace for the library whose URI is reachable from
    * [definingUnit] via [absoluteUri], by aggregating together public namespace
@@ -407,31 +435,7 @@
    */
   void extractPrivateNames(UnlinkedUnit unit, int unitNum) {
     for (UnlinkedClass cls in unit.classes) {
-      _Namespace namespace = new _Namespace();
-      cls.fields.forEach((field) {
-        if (field.isStatic && field.isConst) {
-          namespace.add(field.name,
-              new _Meaning(unitNum, ReferenceKind.propertyAccessor, 0, 0));
-        }
-      });
-      cls.executables.forEach((executable) {
-        ReferenceKind kind = null;
-        if (executable.kind == UnlinkedExecutableKind.constructor) {
-          kind = ReferenceKind.constructor;
-        } else if (executable.kind == UnlinkedExecutableKind.functionOrMethod &&
-            executable.isStatic) {
-          kind = ReferenceKind.method;
-        } else if (executable.kind == UnlinkedExecutableKind.getter &&
-            executable.isStatic) {
-          kind = ReferenceKind.propertyAccessor;
-        }
-        if (kind != null && executable.name.isNotEmpty) {
-          namespace.add(executable.name,
-              new _Meaning(unitNum, kind, 0, executable.typeParameters.length));
-        }
-      });
-      privateNamespace.add(cls.name,
-          new _ClassMeaning(unitNum, 0, cls.typeParameters.length, namespace));
+      addClassToPrivateNamespace(unitNum, cls);
     }
     for (UnlinkedEnum enm in unit.enums) {
       _Namespace namespace = new _Namespace();
@@ -455,6 +459,9 @@
               0,
               executable.typeParameters.length));
     }
+    for (UnlinkedClass mixin in unit.mixins) {
+      addClassToPrivateNamespace(unitNum, mixin);
+    }
     for (UnlinkedTypedef typedef in unit.typedefs) {
       ReferenceKind kind;
       switch (typedef.style) {
diff --git a/pkg/analyzer/lib/src/summary/public_namespace_computer.dart b/pkg/analyzer/lib/src/summary/public_namespace_computer.dart
index b11701b..76e34f8 100644
--- a/pkg/analyzer/lib/src/summary/public_namespace_computer.dart
+++ b/pkg/analyzer/lib/src/summary/public_namespace_computer.dart
@@ -78,43 +78,7 @@
         ReferenceKind.classOrEnum,
         node.typeParameters?.typeParameters?.length ?? 0);
     if (cls != null) {
-      for (ClassMember member in node.members) {
-        if (member is FieldDeclaration && member.isStatic) {
-          for (VariableDeclaration field in member.fields.variables) {
-            String name = field.name.name;
-            if (isPublic(name)) {
-              cls.members.add(new UnlinkedPublicNameBuilder(
-                  name: name,
-                  kind: ReferenceKind.propertyAccessor,
-                  numTypeParameters: 0));
-            }
-          }
-        }
-        if (member is MethodDeclaration &&
-            member.isStatic &&
-            !member.isSetter &&
-            !member.isOperator) {
-          String name = member.name.name;
-          if (isPublic(name)) {
-            cls.members.add(new UnlinkedPublicNameBuilder(
-                name: name,
-                kind: member.isGetter
-                    ? ReferenceKind.propertyAccessor
-                    : ReferenceKind.method,
-                numTypeParameters:
-                    member.typeParameters?.typeParameters?.length ?? 0));
-          }
-        }
-        if (member is ConstructorDeclaration && member.name != null) {
-          String name = member.name.name;
-          if (isPublic(name)) {
-            cls.members.add(new UnlinkedPublicNameBuilder(
-                name: name,
-                kind: ReferenceKind.constructor,
-                numTypeParameters: 0));
-          }
-        }
-      }
+      _addClassMembers(cls, node.members);
     }
   }
 
@@ -183,6 +147,17 @@
   }
 
   @override
+  visitMixinDeclaration(MixinDeclaration node) {
+    UnlinkedPublicNameBuilder mixin = addNameIfPublic(
+        node.name.name,
+        ReferenceKind.classOrEnum,
+        node.typeParameters?.typeParameters?.length ?? 0);
+    if (mixin != null) {
+      _addClassMembers(mixin, node.members);
+    }
+  }
+
+  @override
   visitPartDirective(PartDirective node) {
     parts.add(node.uri.stringValue ?? '');
   }
@@ -195,4 +170,45 @@
       addNameIfPublic('$name=', ReferenceKind.topLevelPropertyAccessor, 0);
     }
   }
+
+  void _addClassMembers(
+      UnlinkedPublicNameBuilder builder, List<ClassMember> members) {
+    for (ClassMember member in members) {
+      if (member is FieldDeclaration && member.isStatic) {
+        for (VariableDeclaration field in member.fields.variables) {
+          String name = field.name.name;
+          if (isPublic(name)) {
+            builder.members.add(new UnlinkedPublicNameBuilder(
+                name: name,
+                kind: ReferenceKind.propertyAccessor,
+                numTypeParameters: 0));
+          }
+        }
+      }
+      if (member is MethodDeclaration &&
+          member.isStatic &&
+          !member.isSetter &&
+          !member.isOperator) {
+        String name = member.name.name;
+        if (isPublic(name)) {
+          builder.members.add(new UnlinkedPublicNameBuilder(
+              name: name,
+              kind: member.isGetter
+                  ? ReferenceKind.propertyAccessor
+                  : ReferenceKind.method,
+              numTypeParameters:
+                  member.typeParameters?.typeParameters?.length ?? 0));
+        }
+      }
+      if (member is ConstructorDeclaration && member.name != null) {
+        String name = member.name.name;
+        if (isPublic(name)) {
+          builder.members.add(new UnlinkedPublicNameBuilder(
+              name: name,
+              kind: ReferenceKind.constructor,
+              numTypeParameters: 0));
+        }
+      }
+    }
+  }
 }
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index 7c20b56..355b249 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -272,6 +272,7 @@
           unitElement.enums.forEach(putElement);
           unitElement.functions.forEach(putElement);
           unitElement.functionTypeAliases.forEach(putElement);
+          unitElement.mixins.forEach(putElement);
           unitElement.topLevelVariables.forEach(putElement);
           unitElement.types.forEach(putElement);
           unitsInLibrary[unitUri] = elementsInUnit;
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
index 4551401..32809c8 100644
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
@@ -239,6 +239,11 @@
       <UnlinkedExportNonPublicBuilder>[];
 
   /**
+   * List of objects which should be written to [UnlinkedUnit.mixins].
+   */
+  final List<UnlinkedClassBuilder> mixins = <UnlinkedClassBuilder>[];
+
+  /**
    * List of objects which should be written to [UnlinkedUnit.parts].
    */
   final List<UnlinkedPartBuilder> parts = <UnlinkedPartBuilder>[];
@@ -534,6 +539,7 @@
     b.executables = executables;
     b.exports = exports;
     b.imports = unlinkedImports;
+    b.mixins = mixins;
     b.parts = parts;
     b.references = unlinkedReferences;
     b.typedefs = typedefs;
@@ -816,6 +822,58 @@
   }
 
   /**
+   * Serialize a [MixinDeclaration] into an [UnlinkedClass]
+   * and store the result in [mixins].
+   */
+  void serializeMixin(
+      AstNode node,
+      String name,
+      int nameOffset,
+      TypeParameterList typeParameters,
+      OnClause onClause,
+      ImplementsClause implementsClause,
+      NodeList<ClassMember> members,
+      Comment documentationComment,
+      NodeList<Annotation> annotations) {
+    int oldScopesLength = scopes.length;
+    List<UnlinkedExecutableBuilder> oldExecutables = executables;
+    executables = <UnlinkedExecutableBuilder>[];
+    List<UnlinkedVariableBuilder> oldVariables = variables;
+    variables = <UnlinkedVariableBuilder>[];
+    _TypeParameterScope typeParameterScope = new _TypeParameterScope();
+    scopes.add(typeParameterScope);
+    UnlinkedClassBuilder b = new UnlinkedClassBuilder();
+    b.name = name;
+    b.nameOffset = nameOffset;
+    b.typeParameters =
+        serializeTypeParameters(typeParameters, typeParameterScope);
+    if (onClause != null) {
+      b.superclassConstraints =
+          onClause.superclassConstraints.map(serializeType).toList();
+    }
+    if (implementsClause != null) {
+      b.interfaces = implementsClause.interfaces.map(serializeType).toList();
+    }
+    if (members != null) {
+      scopes.add(buildClassMemberScope(name, members));
+      for (ClassMember member in members) {
+        member.accept(this);
+      }
+      scopes.removeLast();
+    }
+    b.executables = executables;
+    b.fields = variables;
+    b.documentationComment = serializeDocumentation(documentationComment);
+    b.annotations = serializeAnnotations(annotations);
+    b.codeRange = serializeCodeRange(node);
+    mixins.add(b);
+    scopes.removeLast();
+    assert(scopes.length == oldScopesLength);
+    executables = oldExecutables;
+    variables = oldVariables;
+  }
+
+  /**
    * Serialize a [FieldFormalParameter], [FunctionTypedFormalParameter], or
    * [SimpleFormalParameter] into an [UnlinkedParam].
    */
@@ -1353,6 +1411,20 @@
   }
 
   @override
+  visitMixinDeclaration(MixinDeclaration node) {
+    serializeMixin(
+        node,
+        node.name.name,
+        node.name.offset,
+        node.typeParameters,
+        node.onClause,
+        node.implementsClause,
+        node.members,
+        node.documentationComment,
+        node.metadata);
+  }
+
+  @override
   void visitPartDirective(PartDirective node) {
     parts.add(new UnlinkedPartBuilder(
         uriOffset: node.uri.offset,
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
index 9f5e609..30964d4 100644
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
@@ -4,14 +4,9 @@
 
 library serialization.elements;
 
-import 'dart:convert';
-
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
-import 'package:convert/convert.dart';
-import 'package:crypto/crypto.dart';
-import 'package:front_end/src/base/api_signature.dart';
 
 /**
  * Object that gathers information uses it to assemble a new
@@ -41,16 +36,6 @@
   final List<UnlinkedUnitBuilder> _unlinkedUnits = <UnlinkedUnitBuilder>[];
   final Map<String, UnlinkedUnitBuilder> _unlinkedUnitMap =
       <String, UnlinkedUnitBuilder>{};
-  final List<String> _unlinkedUnitHashes;
-  final bool _excludeHashes;
-
-  /**
-   * Create a [PackageBundleAssembler].  If [excludeHashes] is `true`, hash
-   * computation will be skipped.
-   */
-  PackageBundleAssembler({bool excludeHashes: false})
-      : _excludeHashes = excludeHashes,
-        _unlinkedUnitHashes = excludeHashes ? null : <String>[];
 
   void addLinkedLibrary(String uri, LinkedLibraryBuilder library) {
     _linkedLibraries.add(library);
@@ -58,16 +43,13 @@
   }
 
   void addUnlinkedUnit(Source source, UnlinkedUnitBuilder unit) {
-    addUnlinkedUnitWithHash(source.uri.toString(), unit,
-        _excludeHashes ? null : _hash(source.contents.data));
+    addUnlinkedUnitViaUri(source.uri.toString(), unit);
   }
 
-  void addUnlinkedUnitWithHash(
-      String uri, UnlinkedUnitBuilder unit, String hash) {
+  void addUnlinkedUnitViaUri(String uri, UnlinkedUnitBuilder unit) {
     _unlinkedUnitUris.add(uri);
     _unlinkedUnits.add(unit);
     _unlinkedUnitMap[uri] = unit;
-    _unlinkedUnitHashes?.add(hash);
   }
 
   /**
@@ -79,28 +61,7 @@
         linkedLibraries: _linkedLibraries,
         unlinkedUnitUris: _unlinkedUnitUris,
         unlinkedUnits: _unlinkedUnits,
-        unlinkedUnitHashes: _unlinkedUnitHashes,
         majorVersion: currentMajorVersion,
-        minorVersion: currentMinorVersion,
-        apiSignature: _computeApiSignature());
-  }
-
-  /**
-   * Compute the API signature for this package bundle.
-   */
-  String _computeApiSignature() {
-    ApiSignature apiSignature = new ApiSignature();
-    for (String unitUri in _unlinkedUnitMap.keys.toList()..sort()) {
-      apiSignature.addString(unitUri);
-      _unlinkedUnitMap[unitUri].collectApiSignature(apiSignature);
-    }
-    return apiSignature.toHex();
-  }
-
-  /**
-   * Compute a hash of the given file contents.
-   */
-  String _hash(String contents) {
-    return hex.encode(md5.convert(utf8.encode(contents)).bytes);
+        minorVersion: currentMinorVersion);
   }
 }
diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
index 02d89f4..3ef4a6d 100644
--- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart
+++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart
@@ -27,27 +27,24 @@
 class SummaryBuilder {
   final Iterable<Source> librarySources;
   final AnalysisContext context;
-
-  /**
-   * TODO(brianwilkerson) Remove this field.
-   */
-  final bool strong;
-
   /**
    * Create a summary builder for these [librarySources] and [context].
+   *
+   * TODO(paulberry): remove optional "strong" parameter once all callers have
+   * stopped passing it in.
    */
-  SummaryBuilder(this.librarySources, this.context, this.strong);
+  SummaryBuilder(this.librarySources, this.context);
 
   /**
    * Create an SDK summary builder for the dart SDK at the given [sdkPath].
    */
-  factory SummaryBuilder.forSdk(String sdkPath, bool strong) {
+  factory SummaryBuilder.forSdk(String sdkPath) {
     //
     // Prepare SDK.
     //
     ResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
     FolderBasedDartSdk sdk = new FolderBasedDartSdk(
-        resourceProvider, resourceProvider.getFolder(sdkPath), strong);
+        resourceProvider, resourceProvider.getFolder(sdkPath), true);
     sdk.useSummary = false;
     sdk.analysisOptions = new AnalysisOptionsImpl();
 
@@ -63,30 +60,25 @@
       librarySources.add(sdk.mapDartUri(uri));
     }
 
-    return new SummaryBuilder(librarySources, sdk.context, strong);
+    return new SummaryBuilder(librarySources, sdk.context);
   }
 
   /**
    * Build the linked bundle and return its bytes.
    */
-  List<int> build() => new _Builder(context, librarySources, strong).build();
+  List<int> build() => new _Builder(context, librarySources).build();
 }
 
 class _Builder {
   final AnalysisContext context;
   final Iterable<Source> librarySources;
 
-  /**
-   * TODO(brianwilkerson) Remove this field.
-   */
-  final bool strong;
-
   final Set<String> libraryUris = new Set<String>();
   final Map<String, UnlinkedUnit> unlinkedMap = <String, UnlinkedUnit>{};
 
   final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
 
-  _Builder(this.context, this.librarySources, this.strong);
+  _Builder(this.context, this.librarySources);
 
   /**
    * Build the linked bundle and return its bytes.
@@ -104,7 +96,7 @@
       return unlinked;
     }, (String name) {
       throw new StateError('Unexpected call to GetDeclaredVariable($name).');
-    }, strong);
+    });
     map.forEach(bundleAssembler.addLinkedLibrary);
 
     return bundleAssembler.assemble().toBuffer();
@@ -143,13 +135,11 @@
     String code = source.contents.data;
     CharSequenceReader reader = new CharSequenceReader(code);
     Scanner scanner = new Scanner(source, reader, errorListener);
-    scanner.scanGenericMethodComments = strong;
     Token token = scanner.tokenize();
     LineInfo lineInfo = new LineInfo(scanner.lineStarts);
     Parser parser = new Parser(source, errorListener,
         useFasta: context.analysisOptions.useFastaParser);
     parser.enableOptionalNewAndConst = true;
-    parser.parseGenericMethodComments = strong;
     CompilationUnit unit = parser.parseCompilationUnit(token);
     unit.lineInfo = lineInfo;
     return unit;
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 7ab1b66..ee2ccc0 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -3760,7 +3760,6 @@
         new Parser(_source, errorListener, useFasta: options.useFastaParser);
     parser.parseFunctionBodies =
         options.analyzeFunctionBodiesPredicate(_source);
-    parser.parseGenericMethodComments = true;
     parser.enableOptionalNewAndConst = true;
     CompilationUnit unit = parser.parseCompilationUnit(tokenStream);
     unit.lineInfo = lineInfo;
@@ -3769,7 +3768,7 @@
       var resourceProvider =
           (context.sourceFactory.dartSdk as FolderBasedDartSdk)
               .resourceProvider;
-      new SdkPatcher().patch(resourceProvider, true,
+      new SdkPatcher().patch(resourceProvider,
           context.analysisOptions.patchPaths, errorListener, _source, unit);
     }
 
@@ -5314,7 +5313,6 @@
           errorListener);
       scanner.setSourceStart(fragment.line, fragment.column);
       scanner.preserveComments = context.analysisOptions.preserveComments;
-      scanner.scanGenericMethodComments = true;
       scanner.scanLazyAssignmentOperators =
           context.analysisOptions.enableLazyAssignmentOperators;
 
@@ -5331,7 +5329,6 @@
       Scanner scanner =
           new Scanner(source, new CharSequenceReader(content), errorListener);
       scanner.preserveComments = context.analysisOptions.preserveComments;
-      scanner.scanGenericMethodComments = true;
       scanner.scanLazyAssignmentOperators =
           context.analysisOptions.enableLazyAssignmentOperators;
 
diff --git a/pkg/analyzer/test/dart/element/builder_test.dart b/pkg/analyzer/test/dart/element/builder_test.dart
index 741f593..4d481a0 100644
--- a/pkg/analyzer/test/dart/element/builder_test.dart
+++ b/pkg/analyzer/test/dart/element/builder_test.dart
@@ -1212,6 +1212,8 @@
 abstract class _ApiElementBuilderTestMixin {
   CompilationUnit get compilationUnit;
 
+  void set isMixinSupportEnabled(bool value);
+
   void assertHasCodeRange(Element element, int offset, int length);
 
   /**
@@ -2465,6 +2467,48 @@
     expect(method.isSynthetic, isFalse);
   }
 
+  void test_visitMixinDeclaration() {
+    isMixinSupportEnabled = true;
+    var holder = buildElementsForText(r'''
+/// doc
+mixin M<T, U> on A, B implements C {
+  double f;
+  int get g => 0;
+  set s(int v) {}
+  int m(int v) => 0;
+}
+''');
+    var mixins = holder.mixins;
+    expect(mixins, hasLength(1));
+    var type = mixins[0];
+    expect(type.name, 'M');
+    expect(type.isMixin, isTrue);
+    expect(type.documentationComment, '/// doc');
+    assertHasCodeRange(type, 0, 115);
+
+    List<TypeParameterElement> typeParameters = type.typeParameters;
+    expect(typeParameters, hasLength(2));
+    expect(typeParameters[0].name, 'T');
+    expect(typeParameters[1].name, 'U');
+
+    var fields = type.fields;
+    expect(fields, hasLength(3));
+    expect(fields[0].name, 'f');
+    expect(fields[1].name, 'g');
+    expect(fields[2].name, 's');
+
+    var accessors = type.accessors;
+    expect(accessors, hasLength(4));
+    expect(accessors[0].name, 'f');
+    expect(accessors[1].name, 'f=');
+    expect(accessors[2].name, 'g');
+    expect(accessors[3].name, 's=');
+
+    var methods = type.methods;
+    expect(methods, hasLength(1));
+    expect(methods[0].name, 'm');
+  }
+
   void test_visitTypeAlias_minimal() {
     String aliasName = "F";
     TypeAlias typeAlias = AstTestFactory.typeAlias(null, aliasName, null, null);
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 9865748..87d7feb 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -694,9 +694,7 @@
     GatheringErrorListener listener = new GatheringErrorListener();
     ErrorReporter reporter = new ErrorReporter(listener, element.source);
     reporter.reportErrorForElement(
-        StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER,
-        element,
-        ['A']);
+        StaticWarningCode.CAST_TO_NON_TYPE, element, ['A']);
     AnalysisError error = listener.errors[0];
     expect(error.offset, element.nameOffset);
   }
@@ -710,9 +708,7 @@
         new NonExistingSource(
             '/test.dart', path.toUri('/test.dart'), UriKind.FILE_URI));
     reporter.reportErrorForElement(
-        StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER,
-        element,
-        ['A']);
+        StaticWarningCode.CAST_TO_NON_TYPE, element, ['A']);
     AnalysisError error = listener.errors[0];
     expect(error.offset, element.nameOffset);
   }
diff --git a/pkg/analyzer/test/generated/analysis_context_factory.dart b/pkg/analyzer/test/generated/analysis_context_factory.dart
index 2bb645b..4754a57 100644
--- a/pkg/analyzer/test/generated/analysis_context_factory.dart
+++ b/pkg/analyzer/test/generated/analysis_context_factory.dart
@@ -44,9 +44,9 @@
    * system.
    */
   static InternalAnalysisContext contextWithCore(
-      {ResourceProvider resourceProvider}) {
+      {UriResolver contributedResolver, ResourceProvider resourceProvider}) {
     AnalysisContextForTests context = new AnalysisContextForTests();
-    return initContextWithCore(context, null, resourceProvider);
+    return initContextWithCore(context, contributedResolver, resourceProvider);
   }
 
   /**
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
deleted file mode 100644
index 705b52a..0000000
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_kernel_test.dart
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'checked_mode_compile_time_error_code_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(CheckedModeCompileTimeErrorCodeTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class CheckedModeCompileTimeErrorCodeTest_Kernel
-    extends CheckedModeCompileTimeErrorCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @failingTest
-  @override
-  test_fieldFormalParameterAssignableToField_fieldType_unresolved_null() async {
-    // Expected 1 errors of type StaticWarningCode.UNDEFINED_CLASS, found 0
-    await super
-        .test_fieldFormalParameterAssignableToField_fieldType_unresolved_null();
-  }
-
-  @failingTest
-  @override
-  test_fieldFormalParameterNotAssignableToField_fieldType_unresolved() async {
-    // Expected 1 errors of type CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, found 0;
-    //          1 errors of type StaticWarningCode.UNDEFINED_CLASS, found 0
-    await super
-        .test_fieldFormalParameterNotAssignableToField_fieldType_unresolved();
-  }
-
-  @failingTest
-  @override
-  test_fieldInitializerNotAssignable() async {
-    // UnimplementedError: kernel: (Let) let final dynamic #t2 = "" in let ...
-    await super.test_fieldInitializerNotAssignable();
-  }
-
-  @failingTest
-  @override
-  test_fieldTypeMismatch_unresolved() async {
-    // UnimplementedError: kernel: (AsExpression) x as{TypeError} invalid-type
-    await super.test_fieldTypeMismatch_unresolved();
-  }
-
-  @failingTest
-  @override
-  test_fieldTypeOk_unresolved_null() async {
-    // UnimplementedError: kernel: (AsExpression) x as{TypeError} invalid-type
-    await super.test_fieldTypeOk_unresolved_null();
-  }
-
-  @failingTest
-  @override
-  test_listElementTypeNotAssignable() async {
-    // Expected 1 errors of type CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, found 0;
-    //          1 errors of type StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, found 0
-    await super.test_listElementTypeNotAssignable();
-  }
-
-  @failingTest
-  @override
-  test_mapKeyTypeNotAssignable() async {
-    // Expected 1 errors of type CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, found 0;
-    //          1 errors of type StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, found 0
-    await super.test_mapKeyTypeNotAssignable();
-  }
-
-  @failingTest
-  @override
-  test_mapValueTypeNotAssignable() async {
-    // Expected 1 errors of type CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, found 0;
-    //          1 errors of type StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, found 0
-    await super.test_mapValueTypeNotAssignable();
-  }
-
-  @failingTest
-  @override
-  test_parameterAssignable_undefined_null() async {
-    // Expected 1 errors of type StaticWarningCode.UNDEFINED_CLASS, found 0
-    await super.test_parameterAssignable_undefined_null();
-  }
-
-  @failingTest
-  @override
-  test_parameterNotAssignable_undefined() async {
-    // Expected 1 errors of type CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH, found 0;
-    //          1 errors of type StaticWarningCode.UNDEFINED_CLASS, found 0
-    await super.test_parameterNotAssignable_undefined();
-  }
-
-  @failingTest
-  @override
-  test_topLevelVarAssignable_undefined_null() async {
-    // Expected 1 errors of type StaticWarningCode.UNDEFINED_CLASS, found 0
-    await super.test_topLevelVarAssignable_undefined_null();
-  }
-
-  @failingTest
-  @override
-  test_topLevelVarNotAssignable_undefined() async {
-    // UnimplementedError: kernel: (Let) let final dynamic #t6 = "foo" in let ...
-    await super.test_topLevelVarNotAssignable_undefined();
-  }
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
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
deleted file mode 100644
index 0cd7e62..0000000
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ /dev/null
@@ -1,1358 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'compile_time_error_code_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(CompileTimeErrorCodeTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class CompileTimeErrorCodeTest_Kernel extends CompileTimeErrorCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_accessPrivateEnumField() async {
-    await super.test_accessPrivateEnumField();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/12916')
-  test_ambiguousExport() async {
-    await super.test_ambiguousExport();
-  }
-
-  @override
-  @failingTest
-  test_annotationWithNotClass() async {
-    await super.test_annotationWithNotClass();
-  }
-
-  @override
-  @failingTest
-  test_annotationWithNotClass_prefixed() async {
-    await super.test_annotationWithNotClass_prefixed();
-  }
-
-  @override
-  @failingTest
-  test_async_used_as_identifier_in_break_statement() async {
-    await super.test_async_used_as_identifier_in_break_statement();
-  }
-
-  @override // Test passes with CFE but fails with the original analyzer.
-  test_conflictingConstructorNameAndMember_field() async {
-    await super.test_conflictingConstructorNameAndMember_field();
-  }
-
-  @override // Test passes with CFE but fails with the original analyzer.
-  test_conflictingConstructorNameAndMember_getter() async {
-    await super.test_conflictingConstructorNameAndMember_getter();
-  }
-
-  @override // Test passes with CFE but fails with the original analyzer.
-  test_conflictingConstructorNameAndMember_method() async {
-    await super.test_conflictingConstructorNameAndMember_method();
-  }
-
-  @override
-  @failingTest
-  test_conflictingGenericInterfaces_hierarchyLoop() {
-    return super.test_conflictingGenericInterfaces_hierarchyLoop();
-  }
-
-  @override
-  @failingTest
-  test_constConstructorWithNonFinalField_super() async {
-    await super.test_constConstructorWithNonFinalField_super();
-  }
-
-  @override
-  @failingTest
-  test_constEvalThrowsException_binaryMinus_null() async {
-    await super.test_constEvalThrowsException_binaryMinus_null();
-  }
-
-  @override
-  @failingTest
-  test_constEvalThrowsException_binaryPlus_null() async {
-    await super.test_constEvalThrowsException_binaryPlus_null();
-  }
-
-  @override
-  @failingTest
-  test_constEvalThrowsException_finalAlreadySet_initializer() async {
-    await super.test_constEvalThrowsException_finalAlreadySet_initializer();
-  }
-
-  @override
-  @failingTest
-  test_constEvalThrowsException_finalAlreadySet_initializing_formal() async {
-    await super
-        .test_constEvalThrowsException_finalAlreadySet_initializing_formal();
-  }
-
-  @override
-  @failingTest
-  test_constEvalTypeBool_binary() async {
-    await super.test_constEvalTypeBool_binary();
-  }
-
-  @override
-  @failingTest
-  test_constFormalParameter_fieldFormalParameter() async {
-    await super.test_constFormalParameter_fieldFormalParameter();
-  }
-
-  @override
-  @failingTest
-  test_constFormalParameter_simpleFormalParameter() async {
-    await super.test_constFormalParameter_simpleFormalParameter();
-  }
-
-  @override
-  @failingTest
-  test_constInitializedWithNonConstValueFromDeferredClass() async {
-    await super.test_constInitializedWithNonConstValueFromDeferredClass();
-  }
-
-  @override
-  @failingTest
-  test_constInitializedWithNonConstValueFromDeferredClass_nested() async {
-    await super
-        .test_constInitializedWithNonConstValueFromDeferredClass_nested();
-  }
-
-  @override
-  @failingTest
-  test_constInstanceField() async {
-    await super.test_constInstanceField();
-  }
-
-  @override
-  @failingTest
-  test_constWithInvalidTypeParameters() async {
-    await super.test_constWithInvalidTypeParameters();
-  }
-
-  @override
-  @failingTest
-  test_constWithInvalidTypeParameters_tooFew() async {
-    await super.test_constWithInvalidTypeParameters_tooFew();
-  }
-
-  @override
-  @failingTest
-  test_constWithInvalidTypeParameters_tooMany() async {
-    await super.test_constWithInvalidTypeParameters_tooMany();
-  }
-
-  @override
-  @failingTest
-  test_constWithNonType() async {
-    await super.test_constWithNonType();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInFunctionTypeAlias_new_named() async {
-    await super.test_defaultValueInFunctionTypeAlias_new_named();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInFunctionTypeAlias_new_positional() async {
-    await super.test_defaultValueInFunctionTypeAlias_new_positional();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInFunctionTypeAlias_old_named() async {
-    await super.test_defaultValueInFunctionTypeAlias_old_named();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInFunctionTypeAlias_old_positional() async {
-    await super.test_defaultValueInFunctionTypeAlias_old_positional();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInFunctionTypedParameter_named() async {
-    await super.test_defaultValueInFunctionTypedParameter_named();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInFunctionTypedParameter_optional() async {
-    await super.test_defaultValueInFunctionTypedParameter_optional();
-  }
-
-  @override
-  @failingTest
-  test_defaultValueInRedirectingFactoryConstructor() async {
-    await super.test_defaultValueInRedirectingFactoryConstructor();
-  }
-
-  @override
-  @failingTest
-  test_deferredImportWithInvalidUri() async {
-    await super.test_deferredImportWithInvalidUri();
-  }
-
-  @override
-  @failingTest
-  test_duplicateConstructorName_named() async {
-    return super.test_duplicateConstructorName_named();
-  }
-
-  @override
-  @failingTest
-  test_duplicateConstructorName_unnamed() async {
-    return super.test_duplicateConstructorName_unnamed();
-  }
-
-  @override
-  @failingTest
-  test_duplicateDefinition_acrossLibraries() async {
-    return super.test_duplicateDefinition_acrossLibraries();
-  }
-
-  @override
-  @failingTest
-  test_duplicateDefinition_classMembers_fields() async {
-    return super.test_duplicateDefinition_classMembers_fields();
-  }
-
-  @override
-  @failingTest
-  test_duplicateDefinition_classMembers_fields_oneStatic() async {
-    return super.test_duplicateDefinition_classMembers_fields_oneStatic();
-  }
-
-  @override
-  @failingTest
-  test_duplicateDefinition_classMembers_methods() async {
-    return super.test_duplicateDefinition_classMembers_methods();
-  }
-
-  @override
-  @failingTest
-  test_duplicateDefinition_inPart() async {
-    return super.test_duplicateDefinition_inPart();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  test_exportOfNonLibrary() async {
-    return super.test_exportOfNonLibrary();
-  }
-
-  @override
-  @failingTest
-  test_extendsDeferredClass() async {
-    await super.test_extendsDeferredClass();
-  }
-
-  @override
-  @failingTest
-  test_extendsDeferredClass_classTypeAlias() async {
-    await super.test_extendsDeferredClass_classTypeAlias();
-  }
-
-  @override
-  test_extendsDisallowedClass_class_Null() async {
-    await super.test_extendsDisallowedClass_class_Null();
-  }
-
-  @override
-  @failingTest
-  test_extraPositionalArguments_const_super() async {
-    await super.test_extraPositionalArguments_const_super();
-  }
-
-  @override
-  @failingTest
-  test_extraPositionalArgumentsCouldBeNamed_const_super() async {
-    await super.test_extraPositionalArgumentsCouldBeNamed_const_super();
-  }
-
-  @override
-  @failingTest
-  test_fieldInitializerOutsideConstructor() async {
-    await super.test_fieldInitializerOutsideConstructor();
-  }
-
-  @override
-  @failingTest
-  test_forInWithConstVariable_forEach_identifier() async {
-    return super.test_forInWithConstVariable_forEach_identifier();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_class() async {
-    await super.test_genericFunctionTypeArgument_class();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_function() async {
-    await super.test_genericFunctionTypeArgument_function();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_functionType() async {
-    await super.test_genericFunctionTypeArgument_functionType();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_inference_function() async {
-    await super.test_genericFunctionTypeArgument_inference_function();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_inference_functionType() async {
-    await super.test_genericFunctionTypeArgument_inference_functionType();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_inference_method() async {
-    await super.test_genericFunctionTypeArgument_inference_method();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeArgument_method() async {
-    await super.test_genericFunctionTypeArgument_method();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeAsBound_class() async {
-    await super.test_genericFunctionTypeAsBound_class();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeAsBound_genericFunction() async {
-    await super.test_genericFunctionTypeAsBound_genericFunction();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeAsBound_genericFunctionTypedef() async {
-    await super.test_genericFunctionTypeAsBound_genericFunctionTypedef();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeAsBound_parameterOfFunction() async {
-    await super.test_genericFunctionTypeAsBound_parameterOfFunction();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypeAsBound_typedef() async {
-    await super.test_genericFunctionTypeAsBound_typedef();
-  }
-
-  @override
-  @failingTest
-  test_genericFunctionTypedParameter() async {
-    await super.test_genericFunctionTypedParameter();
-  }
-
-  @override
-  @failingTest
-  test_getterAndMethodWithSameName() async {
-    return super.test_getterAndMethodWithSameName();
-  }
-
-  @override
-  @failingTest
-  test_implementsDeferredClass() async {
-    await super.test_implementsDeferredClass();
-  }
-
-  @override
-  @failingTest
-  test_implementsDeferredClass_classTypeAlias() async {
-    await super.test_implementsDeferredClass_classTypeAlias();
-  }
-
-  @override
-  test_implementsDisallowedClass_class_Null() async {
-    await super.test_implementsDisallowedClass_class_Null();
-  }
-
-  @override
-  test_implementsDisallowedClass_classTypeAlias_Null() async {
-    await super.test_implementsDisallowedClass_classTypeAlias_Null();
-  }
-
-  @override
-  @failingTest
-  test_implementsDynamic() async {
-    await super.test_implementsDynamic();
-  }
-
-  @override
-  @failingTest
-  test_implementsEnum() async {
-    await super.test_implementsEnum();
-  }
-
-  @override
-  @failingTest
-  test_implementsNonClass_class() async {
-    await super.test_implementsNonClass_class();
-  }
-
-  @override
-  @failingTest
-  test_implementsNonClass_typeAlias() async {
-    await super.test_implementsNonClass_typeAlias();
-  }
-
-  @override
-  @failingTest
-  test_implementsRepeated_3times() async {
-    await super.test_implementsRepeated_3times();
-  }
-
-  @override
-  @failingTest
-  test_implicitThisReferenceInInitializer_field() async {
-    await super.test_implicitThisReferenceInInitializer_field();
-  }
-
-  @override
-  @failingTest
-  test_implicitThisReferenceInInitializer_invocation() async {
-    await super.test_implicitThisReferenceInInitializer_invocation();
-  }
-
-  @override
-  @failingTest
-  test_implicitThisReferenceInInitializer_invocationInStatic() async {
-    await super.test_implicitThisReferenceInInitializer_invocationInStatic();
-  }
-
-  @override
-  @failingTest
-  test_implicitThisReferenceInInitializer_redirectingConstructorInvocation() async {
-    await super
-        .test_implicitThisReferenceInInitializer_redirectingConstructorInvocation();
-  }
-
-  @override
-  @failingTest
-  test_implicitThisReferenceInInitializer_superConstructorInvocation() async {
-    await super
-        .test_implicitThisReferenceInInitializer_superConstructorInvocation();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  test_importOfNonLibrary() async {
-    return super.test_importOfNonLibrary();
-  }
-
-  @override
-  @failingTest
-  test_initializerForNonExistent_const() async {
-    await super.test_initializerForNonExistent_const();
-  }
-
-  @override
-  @failingTest
-  test_initializerForNonExistent_initializer() async {
-    await super.test_initializerForNonExistent_initializer();
-  }
-
-  @override
-  @failingTest
-  test_initializerForStaticField() async {
-    await super.test_initializerForStaticField();
-  }
-
-  @override
-  @failingTest
-  test_instantiateEnum_const() async {
-    await super.test_instantiateEnum_const();
-  }
-
-  @override
-  @failingTest
-  test_instantiateEnum_new() async {
-    await super.test_instantiateEnum_new();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {
-    return super
-        .test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotation_notVariableOrConstructorInvocation() {
-    return super.test_invalidAnnotation_notVariableOrConstructorInvocation();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotation_staticMethodReference() async {
-    await super.test_invalidAnnotation_staticMethodReference();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotationFromDeferredLibrary() async {
-    await super.test_invalidAnnotationFromDeferredLibrary();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotationFromDeferredLibrary_constructor() async {
-    await super.test_invalidAnnotationFromDeferredLibrary_constructor();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotationFromDeferredLibrary_namedConstructor() async {
-    await super.test_invalidAnnotationFromDeferredLibrary_namedConstructor();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotationGetter_getter() async {
-    await super.test_invalidAnnotationGetter_getter();
-  }
-
-  @override
-  @failingTest
-  test_invalidAnnotationGetter_importWithPrefix_getter() async {
-    await super.test_invalidAnnotationGetter_importWithPrefix_getter();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31001')
-  test_invalidConstructorName_notEnclosingClassName_defined() async {
-    return super.test_invalidConstructorName_notEnclosingClassName_defined();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31001')
-  test_invalidConstructorName_notEnclosingClassName_undefined() async {
-    return super.test_invalidConstructorName_notEnclosingClassName_undefined();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30999')
-  test_invalidFactoryNameNotAClass_notClassName() async {
-    return super.test_invalidFactoryNameNotAClass_notClassName();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30999')
-  test_invalidFactoryNameNotAClass_notEnclosingClassName() async {
-    return super.test_invalidFactoryNameNotAClass_notEnclosingClassName();
-  }
-
-  @override
-  @failingTest
-  test_invalidReferenceToThis_instanceVariableInitializer_inConstructor() async {
-    await super
-        .test_invalidReferenceToThis_instanceVariableInitializer_inConstructor();
-  }
-
-  @override
-  @failingTest
-  test_invalidReferenceToThis_instanceVariableInitializer_inDeclaration() async {
-    await super
-        .test_invalidReferenceToThis_instanceVariableInitializer_inDeclaration();
-  }
-
-  @override
-  @failingTest
-  test_invalidReferenceToThis_superInitializer() async {
-    await super.test_invalidReferenceToThis_superInitializer();
-  }
-
-  @override
-  @failingTest
-  test_invalidUri_export() async {
-    return super.test_invalidUri_export();
-  }
-
-  @override
-  @failingTest
-  test_invalidUri_import() async {
-    return super.test_invalidUri_import();
-  }
-
-  @override
-  @failingTest
-  test_invalidUri_part() async {
-    return super.test_invalidUri_part();
-  }
-
-  @override
-  @failingTest
-  test_isInConstInstanceCreation_restored() async {
-    await super.test_isInConstInstanceCreation_restored();
-  }
-
-  @override
-  @failingTest
-  test_labelInOuterScope() async {
-    await super.test_labelInOuterScope();
-  }
-
-  @override
-  @failingTest
-  test_labelUndefined_break() async {
-    await super.test_labelUndefined_break();
-  }
-
-  @override
-  @failingTest
-  test_memberWithClassName_field() async {
-    await super.test_memberWithClassName_field();
-  }
-
-  @override
-  @failingTest
-  test_memberWithClassName_field2() async {
-    await super.test_memberWithClassName_field2();
-  }
-
-  @override
-  @failingTest
-  test_memberWithClassName_getter() async {
-    return super.test_memberWithClassName_getter();
-  }
-
-  @override
-  @failingTest
-  test_methodAndGetterWithSameName() async {
-    return super.test_methodAndGetterWithSameName();
-  }
-
-  @override
-  @failingTest
-  test_mixinDeferredClass() async {
-    await super.test_mixinDeferredClass();
-  }
-
-  @override
-  @failingTest
-  test_mixinDeferredClass_classTypeAlias() async {
-    await super.test_mixinDeferredClass_classTypeAlias();
-  }
-
-  @override
-  @failingTest
-  test_mixinHasNoConstructors_mixinApp() async {
-    await super.test_mixinHasNoConstructors_mixinApp();
-  }
-
-  @override
-  @failingTest
-  test_mixinHasNoConstructors_mixinClass() async {
-    await super.test_mixinHasNoConstructors_mixinClass();
-  }
-
-  @override
-  @failingTest
-  test_mixinHasNoConstructors_mixinClass_explicitSuperCall() async {
-    await super.test_mixinHasNoConstructors_mixinClass_explicitSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_mixinHasNoConstructors_mixinClass_implicitSuperCall() async {
-    await super.test_mixinHasNoConstructors_mixinClass_implicitSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_mixinHasNoConstructors_mixinClass_namedSuperCall() async {
-    await super.test_mixinHasNoConstructors_mixinClass_namedSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_mixinInference_conflictingSubstitution() =>
-      super.test_mixinInference_conflictingSubstitution();
-
-  @override
-  @failingTest
-  test_mixinInference_impossibleSubstitution() =>
-      super.test_mixinInference_impossibleSubstitution();
-
-  @override
-  @failingTest
-  test_mixinInheritsFromNotObject_classDeclaration_extends() async {
-    await super.test_mixinInheritsFromNotObject_classDeclaration_extends();
-  }
-
-  @override
-  @failingTest
-  test_mixinInheritsFromNotObject_classDeclaration_with() async {
-    await super.test_mixinInheritsFromNotObject_classDeclaration_with();
-  }
-
-  @override
-  @failingTest
-  test_mixinInheritsFromNotObject_typeAlias_extends() async {
-    await super.test_mixinInheritsFromNotObject_typeAlias_extends();
-  }
-
-  @override
-  @failingTest
-  test_mixinInheritsFromNotObject_typeAlias_with() async {
-    await super.test_mixinInheritsFromNotObject_typeAlias_with();
-  }
-
-  @override
-  test_mixinOfDisallowedClass_class_Null() async {
-    await super.test_mixinOfDisallowedClass_class_Null();
-  }
-
-  @override
-  test_mixinOfDisallowedClass_classTypeAlias_Null() async {
-    await super.test_mixinOfDisallowedClass_classTypeAlias_Null();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfEnum() async {
-    await super.test_mixinOfEnum();
-  }
-
-  @override
-  @failingTest
-  test_mixinOfNonClass_class() async {
-    await super.test_mixinOfNonClass_class();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31005')
-  test_mixinOfNonClass_typeAlias() async {
-    return super.test_mixinOfNonClass_typeAlias();
-  }
-
-  @override
-  @failingTest
-  test_mixinReferencesSuper() async {
-    await super.test_mixinReferencesSuper();
-  }
-
-  @override
-  @failingTest
-  test_multipleRedirectingConstructorInvocations() async {
-    return super.test_multipleRedirectingConstructorInvocations();
-  }
-
-  @override
-  @failingTest
-  test_multipleSuperInitializers() async {
-    return super.test_multipleSuperInitializers();
-  }
-
-  @override
-  @failingTest
-  test_nativeClauseInNonSDKCode() async {
-    await super.test_nativeClauseInNonSDKCode();
-  }
-
-  @override
-  @failingTest
-  test_nativeFunctionBodyInNonSDKCode_function() async {
-    await super.test_nativeFunctionBodyInNonSDKCode_function();
-  }
-
-  @override
-  @failingTest
-  test_nativeFunctionBodyInNonSDKCode_method() async {
-    await super.test_nativeFunctionBodyInNonSDKCode_method();
-  }
-
-  @override
-  @failingTest
-  test_noAnnotationConstructorArguments() {
-    return super.test_noAnnotationConstructorArguments();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_MixinAppWithDirectSuperCall() async {
-    await super
-        .test_noDefaultSuperConstructorExplicit_MixinAppWithDirectSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_mixinAppWithNamedParam() async {
-    await super.test_noDefaultSuperConstructorExplicit_mixinAppWithNamedParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_MixinAppWithNamedSuperCall() async {
-    await super
-        .test_noDefaultSuperConstructorExplicit_MixinAppWithNamedSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_mixinAppWithOptionalParam() async {
-    await super
-        .test_noDefaultSuperConstructorExplicit_mixinAppWithOptionalParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_MixinWithDirectSuperCall() async {
-    await super
-        .test_noDefaultSuperConstructorExplicit_MixinWithDirectSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_mixinWithNamedParam() async {
-    await super.test_noDefaultSuperConstructorExplicit_mixinWithNamedParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_MixinWithNamedSuperCall() async {
-    await super
-        .test_noDefaultSuperConstructorExplicit_MixinWithNamedSuperCall();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorExplicit_mixinWithOptionalParam() async {
-    await super.test_noDefaultSuperConstructorExplicit_mixinWithOptionalParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorImplicit_mixinAppWithNamedParam() async {
-    await super.test_noDefaultSuperConstructorImplicit_mixinAppWithNamedParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorImplicit_mixinAppWithOptionalParam() async {
-    await super
-        .test_noDefaultSuperConstructorImplicit_mixinAppWithOptionalParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorImplicit_mixinWithNamedParam() async {
-    await super.test_noDefaultSuperConstructorImplicit_mixinWithNamedParam();
-  }
-
-  @override
-  @failingTest
-  test_noDefaultSuperConstructorImplicit_mixinWithOptionalParam() async {
-    await super.test_noDefaultSuperConstructorImplicit_mixinWithOptionalParam();
-  }
-
-  @override
-  @failingTest
-  test_nonConstantDefaultValueFromDeferredLibrary() async {
-    await super.test_nonConstantDefaultValueFromDeferredLibrary();
-  }
-
-  @override
-  @failingTest
-  test_nonConstantDefaultValueFromDeferredLibrary_nested() async {
-    await super.test_nonConstantDefaultValueFromDeferredLibrary_nested();
-  }
-
-  @override
-  @failingTest
-  test_nonConstValueInInitializerFromDeferredLibrary_field() async {
-    await super.test_nonConstValueInInitializerFromDeferredLibrary_field();
-  }
-
-  @override
-  @failingTest
-  test_nonConstValueInInitializerFromDeferredLibrary_field_nested() async {
-    await super
-        .test_nonConstValueInInitializerFromDeferredLibrary_field_nested();
-  }
-
-  @override
-  @failingTest
-  test_nonConstValueInInitializerFromDeferredLibrary_redirecting() async {
-    await super
-        .test_nonConstValueInInitializerFromDeferredLibrary_redirecting();
-  }
-
-  @override
-  @failingTest
-  test_nonConstValueInInitializerFromDeferredLibrary_super() async {
-    await super.test_nonConstValueInInitializerFromDeferredLibrary_super();
-  }
-
-  @override
-  @failingTest
-  test_optionalParameterInOperator_named() async {
-    await super.test_optionalParameterInOperator_named();
-  }
-
-  @override
-  @failingTest
-  test_optionalParameterInOperator_positional() async {
-    await super.test_optionalParameterInOperator_positional();
-  }
-
-  @override
-  @failingTest
-  test_prefix_conditionalPropertyAccess_set() async {
-    await super.test_prefix_conditionalPropertyAccess_set();
-  }
-
-  @override
-  @failingTest
-  test_prefix_conditionalPropertyAccess_set_loadLibrary() async {
-    await super.test_prefix_conditionalPropertyAccess_set_loadLibrary();
-  }
-
-  @override
-  @failingTest
-  test_prefixCollidesWithTopLevelMembers_functionTypeAlias() async {
-    return super.test_prefixCollidesWithTopLevelMembers_functionTypeAlias();
-  }
-
-  @override
-  @failingTest
-  test_prefixCollidesWithTopLevelMembers_topLevelFunction() async {
-    return super.test_prefixCollidesWithTopLevelMembers_topLevelFunction();
-  }
-
-  @override
-  @failingTest
-  test_prefixCollidesWithTopLevelMembers_topLevelVariable() async {
-    return super.test_prefixCollidesWithTopLevelMembers_topLevelVariable();
-  }
-
-  @override
-  @failingTest
-  test_prefixCollidesWithTopLevelMembers_type() async {
-    return super.test_prefixCollidesWithTopLevelMembers_type();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInClassTypeAlias_mixinAndMixin() async {
-    await super.test_privateCollisionInClassTypeAlias_mixinAndMixin();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInClassTypeAlias_mixinAndMixin_indirect() async {
-    await super.test_privateCollisionInClassTypeAlias_mixinAndMixin_indirect();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInClassTypeAlias_superclassAndMixin() async {
-    await super.test_privateCollisionInClassTypeAlias_superclassAndMixin();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInClassTypeAlias_superclassAndMixin_same() async {
-    await super.test_privateCollisionInClassTypeAlias_superclassAndMixin_same();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInMixinApplication_mixinAndMixin() async {
-    await super.test_privateCollisionInMixinApplication_mixinAndMixin();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInMixinApplication_mixinAndMixin_indirect() async {
-    await super
-        .test_privateCollisionInMixinApplication_mixinAndMixin_indirect();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInMixinApplication_superclassAndMixin() async {
-    await super.test_privateCollisionInMixinApplication_superclassAndMixin();
-  }
-
-  @override
-  @failingTest
-  test_privateCollisionInMixinApplication_superclassAndMixin_same() async {
-    await super
-        .test_privateCollisionInMixinApplication_superclassAndMixin_same();
-  }
-
-  @override
-  @failingTest
-  test_recursiveFactoryRedirect() async {
-    await super.test_recursiveFactoryRedirect();
-  }
-
-  @override
-  @failingTest
-  test_recursiveFactoryRedirect_directSelfReference() async {
-    await super.test_recursiveFactoryRedirect_directSelfReference();
-  }
-
-  @override
-  @failingTest
-  test_recursiveFactoryRedirect_generic() async {
-    await super.test_recursiveFactoryRedirect_generic();
-  }
-
-  @override
-  @failingTest
-  test_recursiveFactoryRedirect_named() async {
-    await super.test_recursiveFactoryRedirect_named();
-  }
-
-  @override
-  @failingTest
-  test_recursiveFactoryRedirect_outsideCycle() async {
-    await super.test_recursiveFactoryRedirect_outsideCycle();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_extends() async {
-    await super.test_recursiveInterfaceInheritance_extends();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_extends_implements() async {
-    await super.test_recursiveInterfaceInheritance_extends_implements();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_implements() async {
-    await super.test_recursiveInterfaceInheritance_implements();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31007')
-  test_recursiveInterfaceInheritance_mixin() async {
-    return super.test_recursiveInterfaceInheritance_mixin();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_mixin_superclass() async {
-    await super.test_recursiveInterfaceInheritance_mixin_superclass();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_tail() async {
-    await super.test_recursiveInterfaceInheritance_tail();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_tail2() async {
-    await super.test_recursiveInterfaceInheritance_tail2();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritance_tail3() async {
-    await super.test_recursiveInterfaceInheritance_tail3();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritanceBaseCaseExtends() async {
-    await super.test_recursiveInterfaceInheritanceBaseCaseExtends();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritanceBaseCaseExtends_abstract() async {
-    await super.test_recursiveInterfaceInheritanceBaseCaseExtends_abstract();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritanceBaseCaseImplements() async {
-    await super.test_recursiveInterfaceInheritanceBaseCaseImplements();
-  }
-
-  @override
-  @failingTest
-  test_recursiveInterfaceInheritanceBaseCaseImplements_typeAlias() async {
-    await super
-        .test_recursiveInterfaceInheritanceBaseCaseImplements_typeAlias();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31007')
-  test_recursiveInterfaceInheritanceBaseCaseWith() async {
-    return super.test_recursiveInterfaceInheritanceBaseCaseWith();
-  }
-
-  @override
-  @failingTest
-  test_redirectGenerativeToMissingConstructor() async {
-    await super.test_redirectGenerativeToMissingConstructor();
-  }
-
-  @override
-  @failingTest
-  test_redirectGenerativeToNonGenerativeConstructor() async {
-    await super.test_redirectGenerativeToNonGenerativeConstructor();
-  }
-
-  @override
-  @failingTest
-  test_redirectToNonClass_notAType() async {
-    await super.test_redirectToNonClass_notAType();
-  }
-
-  @override
-  @failingTest
-  test_redirectToNonClass_undefinedIdentifier() async {
-    await super.test_redirectToNonClass_undefinedIdentifier();
-  }
-
-  @override
-  @failingTest
-  test_redirectToNonConstConstructor() async {
-    await super.test_redirectToNonConstConstructor();
-  }
-
-  @override
-  @failingTest
-  test_referencedBeforeDeclaration_inInitializer_closure() async {
-    await super.test_referencedBeforeDeclaration_inInitializer_closure();
-  }
-
-  @override
-  @failingTest
-  test_referencedBeforeDeclaration_inInitializer_directly() async {
-    await super.test_referencedBeforeDeclaration_inInitializer_directly();
-  }
-
-  @override
-  @failingTest
-  test_returnInGenerativeConstructor() async {
-    await super.test_returnInGenerativeConstructor();
-  }
-
-  @override
-  @failingTest
-  test_returnInGenerativeConstructor_expressionFunctionBody() async {
-    await super.test_returnInGenerativeConstructor_expressionFunctionBody();
-  }
-
-  @override
-  @failingTest
-  test_superInInvalidContext_constructorFieldInitializer() async {
-    await super.test_superInInvalidContext_constructorFieldInitializer();
-  }
-
-  @override
-  @failingTest
-  test_superInInvalidContext_instanceVariableInitializer() async {
-    await super.test_superInInvalidContext_instanceVariableInitializer();
-  }
-
-  @override
-  @failingTest // Deliberately only reports one of the expected errors.
-  test_superInRedirectingConstructor_superRedirection() async {
-    await super.test_superInRedirectingConstructor_superRedirection();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_const() async {
-    await super.test_typeArgumentNotMatchingBounds_const();
-  }
-
-  @override
-  @failingTest
-  test_undefinedAnnotation_unresolved_identifier() {
-    return super.test_undefinedAnnotation_unresolved_identifier();
-  }
-
-  @override
-  @failingTest
-  test_undefinedAnnotation_unresolved_invocation() async {
-    await super.test_undefinedAnnotation_unresolved_invocation();
-  }
-
-  @override
-  @failingTest
-  test_undefinedAnnotation_unresolved_prefixedIdentifier() {
-    return super.test_undefinedAnnotation_unresolved_prefixedIdentifier();
-  }
-
-  @override
-  @failingTest
-  test_undefinedAnnotation_useLibraryScope() {
-    return super.test_undefinedAnnotation_useLibraryScope();
-  }
-
-  @override
-  @failingTest
-  test_uriDoesNotExist_export() async {
-    await super.test_uriDoesNotExist_export();
-  }
-
-  @override
-  @failingTest
-  test_uriDoesNotExist_import() async {
-    await super.test_uriDoesNotExist_import();
-  }
-
-  @override
-  @failingTest
-  test_uriDoesNotExist_import_appears_after_deleting_target() async {
-    await super.test_uriDoesNotExist_import_appears_after_deleting_target();
-  }
-
-  @override
-  @failingTest
-  test_uriDoesNotExist_import_disappears_when_fixed() async {
-    await super.test_uriDoesNotExist_import_disappears_when_fixed();
-  }
-
-  @override
-  @failingTest
-  test_uriDoesNotExist_part() async {
-    await super.test_uriDoesNotExist_part();
-  }
-
-  @override
-  @failingTest
-  test_uriWithInterpolation_constant() async {
-    return super.test_uriWithInterpolation_constant();
-  }
-
-  @override
-  @failingTest
-  test_uriWithInterpolation_nonConstant() async {
-    return super.test_uriWithInterpolation_nonConstant();
-  }
-
-  @override
-  @failingTest
-  test_wrongNumberOfParametersForOperator_tilde() async {
-    await super.test_wrongNumberOfParametersForOperator_tilde();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_function_named() async {
-    return super.test_wrongNumberOfParametersForSetter_function_named();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_function_optional() async {
-    return super.test_wrongNumberOfParametersForSetter_function_optional();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_function_tooFew() async {
-    return super.test_wrongNumberOfParametersForSetter_function_tooFew();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_function_tooMany() async {
-    return super.test_wrongNumberOfParametersForSetter_function_tooMany();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_method_named() async {
-    return super.test_wrongNumberOfParametersForSetter_method_named();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_method_optional() async {
-    return super.test_wrongNumberOfParametersForSetter_method_optional();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_method_tooFew() async {
-    return super.test_wrongNumberOfParametersForSetter_method_tooFew();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31096')
-  test_wrongNumberOfParametersForSetter_method_tooMany() async {
-    return super.test_wrongNumberOfParametersForSetter_method_tooMany();
-  }
-
-  @override
-  test_yieldInNonGenerator_async() async {
-    // Test passes, even though if fails in the superclass
-    await super.test_yieldInNonGenerator_async();
-  }
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
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 d2202d1..0463112 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -92,11 +92,6 @@
         CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
         CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
       ]);
-    } else if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-      ]);
     } else {
       assertErrors(source, [
         CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
@@ -554,7 +549,7 @@
   yield await x;
 }''');
     await computeAnalysisResult(source);
-    if (usingFastaParser || useCFE) {
+    if (usingFastaParser) {
       assertErrors(source, [CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT]);
     }
     verify([source]);
@@ -591,11 +586,8 @@
 class B {}
 class as = A with B;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
-          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME
-    ]);
+    assertErrors(
+        source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
     verify([source]);
   }
 
@@ -603,9 +595,7 @@
     Source source = addSource("import 'dart:async' as abstract;");
     await computeAnalysisResult(source);
     assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
-          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME,
+      CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME,
       HintCode.UNUSED_IMPORT
     ]);
     verify([source]);
@@ -618,12 +608,7 @@
 dynamic x;
 """);
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.UNDEFINED_CLASS, StaticWarningCode.NOT_A_TYPE]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
   }
 
   test_builtInIdentifierAsType_formalParameter_field() async {
@@ -662,52 +647,37 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        useCFE
+        usingFastaParser
             ? [
-                StaticTypeWarningCode.UNDEFINED_GETTER,
-                StaticTypeWarningCode.UNDEFINED_GETTER,
+                StaticWarningCode.UNDEFINED_IDENTIFIER,
+                StaticWarningCode.UNDEFINED_IDENTIFIER,
                 ParserErrorCode.EXPECTED_TOKEN
               ]
-            : usingFastaParser
-                ? [
-                    StaticWarningCode.UNDEFINED_IDENTIFIER,
-                    StaticWarningCode.UNDEFINED_IDENTIFIER,
-                    ParserErrorCode.EXPECTED_TOKEN
-                  ]
-                : [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
+            : [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE]);
     verify([source]);
   }
 
   test_builtInIdentifierAsTypedefName_functionTypeAlias() async {
     Source source = addSource("typedef bool as();");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
-          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME
-    ]);
+    assertErrors(
+        source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME]);
     verify([source]);
   }
 
   test_builtInIdentifierAsTypeName() async {
     Source source = addSource("class as {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
-          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME
-    ]);
+    assertErrors(
+        source, [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME]);
     verify([source]);
   }
 
   test_builtInIdentifierAsTypeParameterName() async {
     Source source = addSource("class A<as> {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.BUILT_IN_IDENTIFIER_IN_DECLARATION
-          : CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME
-    ]);
+    assertErrors(source,
+        [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME]);
     verify([source]);
   }
 
@@ -805,12 +775,7 @@
 class C extends A implements B {}
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.AMBIGUOUS_SUPERTYPES]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
   }
 
   @failingTest // Does not work with old task model
@@ -822,12 +787,7 @@
 class C extends A with B {}
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.AMBIGUOUS_SUPERTYPES]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES]);
   }
 
   test_conflictingGetterAndMethod_field_method() async {
@@ -839,11 +799,7 @@
   m() {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]
-            : [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
     verify([source]);
   }
 
@@ -856,11 +812,7 @@
   m() {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]
-            : [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
     verify([source]);
   }
 
@@ -873,11 +825,7 @@
   int m;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]
-            : [CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
     verify([source]);
   }
 
@@ -890,11 +838,7 @@
   get m => 0;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]
-            : [CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER]);
     verify([source]);
   }
 
@@ -1063,16 +1007,11 @@
   const B();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_IN_SUBCLASS_OF_MIXIN_APPLICATION
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD,
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
-      ]);
-    }
+
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD,
+      CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
+    ]);
     verify([source]);
   }
 
@@ -1085,14 +1024,8 @@
   const B();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_IN_SUBCLASS_OF_MIXIN_APPLICATION
-      ]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD]);
     verify([source]);
   }
 
@@ -1133,16 +1066,10 @@
   const B();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_IN_SUBCLASS_OF_MIXIN_APPLICATION
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD,
-        CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD,
+      CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
+    ]);
     verify([source]);
   }
 
@@ -1217,15 +1144,8 @@
 }
 const a = new A();''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
@@ -1265,15 +1185,8 @@
 final a = const A();
 const C = a.m;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
@@ -1291,14 +1204,12 @@
   }
 
   test_constEvalThrowsException_binaryMinus_null() async {
-    await _check_constEvalThrowsException_binary_null("null - 5", false,
-        cfeErrors: [StaticTypeWarningCode.UNDEFINED_METHOD]);
+    await _check_constEvalThrowsException_binary_null("null - 5", false);
     await _check_constEvalThrowsException_binary_null("5 - null", true);
   }
 
   test_constEvalThrowsException_binaryPlus_null() async {
-    await _check_constEvalThrowsException_binary_null("null + 5", false,
-        cfeErrors: [StaticTypeWarningCode.UNDEFINED_METHOD]);
+    await _check_constEvalThrowsException_binary_null("null + 5", false);
     await _check_constEvalThrowsException_binary_null("5 + null", true);
   }
 
@@ -1353,28 +1264,14 @@
   test_constEvalThrowsException_unaryBitNot_null() async {
     Source source = addSource("const C = ~null;");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
     // no verify(), '~null' is not resolved
   }
 
   test_constEvalThrowsException_unaryNegated_null() async {
     Source source = addSource("const C = -null;");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
     // no verify(), '-null' is not resolved
   }
 
@@ -1386,21 +1283,15 @@
   }
 
   test_constEvalTypeBool_binary() async {
-    await _check_constEvalTypeBool_withParameter_binary("p && ''",
-        cfeErrors: [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+    await _check_constEvalTypeBool_withParameter_binary("p && ''");
     await _check_constEvalTypeBool_withParameter_binary("p || ''");
   }
 
   test_constEvalTypeBool_binary_leftTrue() async {
     Source source = addSource("const C = (true || 0);");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [HintCode.DEAD_CODE, StaticTypeWarningCode.INVALID_ASSIGNMENT]);
-    } else {
-      assertErrors(
-          source, [StaticTypeWarningCode.NON_BOOL_OPERAND, HintCode.DEAD_CODE]);
-    }
+    assertErrors(
+        source, [StaticTypeWarningCode.NON_BOOL_OPERAND, HintCode.DEAD_CODE]);
     verify([source]);
   }
 
@@ -1506,15 +1397,8 @@
   const C = p;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE]);
     verify([source]);
   }
 
@@ -1708,14 +1592,7 @@
 }
 f() { return const T(0, 1, c: 2, d: 3); }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_WITH_NON_CONST,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.CONST_WITH_NON_CONST]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONST_WITH_NON_CONST]);
     verify([source]);
   }
 
@@ -1731,20 +1608,12 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.CONST_WITH_NON_CONST,
-        CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
-      ]);
-    } else {
-      // TODO(a14n): the error CONST_WITH_NON_CONSTANT_ARGUMENT is redundant and
-      // ought to be suppressed.
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_WITH_NON_CONST,
-        CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT
-      ]);
-    }
+    // TODO(a14n): the error CONST_WITH_NON_CONSTANT_ARGUMENT is redundant and
+    // ought to be suppressed.
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_WITH_NON_CONST,
+      CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT
+    ]);
     verify([source]);
   }
 
@@ -1761,20 +1630,12 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.CONST_WITH_NON_CONST,
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
-      ]);
-    } else {
-      // TODO(a14n): the error CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE is
-      // redundant and ought to be suppressed.
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_WITH_NON_CONST,
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
-      ]);
-    }
+    // TODO(a14n): the error CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE is
+    // redundant and ought to be suppressed.
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_WITH_NON_CONST,
+      CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+    ]);
     verify([source]);
   }
 
@@ -1788,15 +1649,8 @@
 main() {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT]);
     verify([source]);
   }
 
@@ -1807,20 +1661,12 @@
 }
 f(p) { return const A(p); }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
-        CompileTimeErrorCode.INVALID_CONSTANT
-      ]);
-    } else {
-      // TODO(paulberry): the error INVALID_CONSTANT is redundant and ought to be
-      // suppressed.
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
-        CompileTimeErrorCode.INVALID_CONSTANT
-      ]);
-    }
+    // TODO(paulberry): the error INVALID_CONSTANT is redundant and ought to be
+    // suppressed.
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT,
+      CompileTimeErrorCode.INVALID_CONSTANT
+    ]);
     verify([source]);
   }
 
@@ -1844,11 +1690,7 @@
 }''');
     await computeAnalysisResult(source1);
     await computeAnalysisResult(source2);
-    if (useCFE) {
-      assertErrors(source2, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source2, [CompileTimeErrorCode.CONST_WITH_NON_TYPE]);
-    }
+    assertErrors(source2, [CompileTimeErrorCode.CONST_WITH_NON_TYPE]);
     verify([source1]);
   }
 
@@ -1861,12 +1703,8 @@
   return const A.noSuchConstructor();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]);
     // no verify(), 'noSuchConstructor' is not resolved
   }
 
@@ -1879,12 +1717,8 @@
   return const A();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
     verify([source]);
   }
 
@@ -2222,13 +2056,8 @@
   static int get x => 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
@@ -2241,15 +2070,8 @@
   static int get x => 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
@@ -2262,13 +2084,8 @@
   static x() {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
@@ -2281,13 +2098,8 @@
   static x() {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
@@ -2300,13 +2112,8 @@
   static set x(value) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
@@ -2319,15 +2126,8 @@
   static set x(value) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE]);
     verify([source]);
   }
 
@@ -2369,12 +2169,7 @@
   test_exportInternalLibrary() async {
     Source source = addSource("export 'dart:_interceptors';");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      // CFE has a single error for both import and export.
-      assertErrors(source, [CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY]);
     verify([source]);
   }
 
@@ -2430,32 +2225,17 @@
   test_extendsDisallowedClass_class_double() async {
     Source source = addSource("class A extends double {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_extendsDisallowedClass_class_int() async {
     Source source = addSource("class A extends int {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-              ]);
+    assertErrors(source, [
+      CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+      CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+    ]);
     verify([source]);
   }
 
@@ -2472,32 +2252,17 @@
   test_extendsDisallowedClass_class_num() async {
     Source source = addSource("class A extends num {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_extendsDisallowedClass_class_String() async {
     Source source = addSource("class A extends String {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-              ]);
+    assertErrors(source, [
+      CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
+      CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
+    ]);
     verify([source]);
   }
 
@@ -2506,14 +2271,7 @@
 class M {}
 class C = bool with M;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2522,14 +2280,7 @@
 class M {}
 class C = double with M;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2538,15 +2289,7 @@
 class M {}
 class C = int with M;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2555,14 +2298,7 @@
 class M {}
 class C = Null with M;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-        CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2571,14 +2307,7 @@
 class M {}
 class C = num with M;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2587,44 +2316,7 @@
 class M {}
 class C = String with M;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
-    verify([source]);
-  }
-
-  test_extendsEnum() async {
-    Source source = addSource(r'''
-enum E { ONE }
-class A extends E {}''');
-    await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.EXTENDS_ENUM,
-        CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.EXTENDS_ENUM]);
-    }
-    verify([source]);
-  }
-
-  test_extendsNonClass_class() async {
-    Source source = addSource(r'''
-int A;
-class B extends A {}''');
-    await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CLASS]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.EXTENDS_NON_CLASS]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -2635,6 +2327,24 @@
     verify([source]);
   }
 
+  test_extendsNonClass_enum() async {
+    Source source = addSource(r'''
+enum E { ONE }
+class A extends E {}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_NON_CLASS]);
+    verify([source]);
+  }
+
+  test_extendsNonClass_variable() async {
+    Source source = addSource(r'''
+int A;
+class B extends A {}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.EXTENDS_NON_CLASS]);
+    verify([source]);
+  }
+
   test_extraPositionalArguments_const() async {
     Source source = addSource(r'''
 class A {
@@ -2696,14 +2406,8 @@
   A(this.x) : x = 3 {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER
-      ]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
     verify([source]);
   }
 
@@ -2714,13 +2418,8 @@
   A() : x = 0, x = 1 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]
-            : [
-                CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
-              ]);
+    assertErrors(source,
+        [CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
     verify([source]);
   }
 
@@ -2731,17 +2430,10 @@
   A() : x = 0, x = 1, x = 2 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES,
-                CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES
-              ]
-            : [
-                CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
-                CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
-              ]);
+    assertErrors(source, [
+      CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
+      CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
+    ]);
     verify([source]);
   }
 
@@ -2753,17 +2445,10 @@
   A() : x = 0, x = 1, y = 0, y = 1 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES,
-                CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES
-              ]
-            : [
-                CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
-                CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
-              ]);
+    assertErrors(source, [
+      CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
+      CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
+    ]);
     verify([source]);
   }
 
@@ -2774,14 +2459,8 @@
   A(this.x) : x = 1 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]
-            : [
-                CompileTimeErrorCode
-                    .FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER
-              ]);
+    assertErrors(source,
+        [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
     verify([source]);
   }
 
@@ -2792,13 +2471,8 @@
   factory A(this.x) => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -2887,13 +2561,8 @@
   A() : x = 0, x = 0 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]
-            : [
-                CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS
-              ]);
+    assertErrors(source,
+        [CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS]);
     verify([source]);
   }
 
@@ -2912,14 +2581,8 @@
   A(this.x) : x = 0 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]
-            : [
-                CompileTimeErrorCode
-                    .FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER
-              ]);
+    assertErrors(source,
+        [CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER]);
     verify([source]);
   }
 
@@ -3161,7 +2824,7 @@
     var expectedErrorCodes = <ErrorCode>[
       CompileTimeErrorCode.GENERIC_FUNCTION_TYPED_PARAM_UNSUPPORTED
     ];
-    if (enableNewAnalysisDriver && !enableKernelDriver) {
+    if (enableNewAnalysisDriver) {
       // Due to dartbug.com/28515, some additional errors appear when using the
       // new analysis driver.
       expectedErrorCodes.addAll([
@@ -3218,97 +2881,52 @@
   test_implementsDisallowedClass_class_bool() async {
     Source source = addSource("class A implements bool {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_double() async {
     Source source = addSource("class A implements double {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_int() async {
     Source source = addSource("class A implements int {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_Null() async {
     Source source = addSource("class A implements Null {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_num() async {
     Source source = addSource("class A implements num {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_String() async {
     Source source = addSource("class A implements String {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_implementsDisallowedClass_class_String_num() async {
     Source source = addSource("class A implements String, num {}");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.AMBIGUOUS_SUPERTYPES,
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
-        CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3318,11 +2936,7 @@
 class M {}
 class C = A with M implements bool;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -3332,14 +2946,7 @@
 class M {}
 class C = A with M implements double;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -3349,14 +2956,7 @@
 class M {}
 class C = A with M implements int;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -3366,11 +2966,7 @@
 class M {}
 class C = A with M implements Null;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -3380,14 +2976,7 @@
 class M {}
 class C = A with M implements num;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -3397,14 +2986,7 @@
 class M {}
 class C = A with M implements String;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -3414,35 +2996,10 @@
 class M {}
 class C = A with M implements String, num;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.AMBIGUOUS_SUPERTYPES,
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-        CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
-        CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
-      ]);
-    }
-    verify([source]);
-  }
-
-  test_implementsDynamic() async {
-    Source source = addSource("class A implements dynamic {}");
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_DYNAMIC]);
-    verify([source]);
-  }
-
-  test_implementsEnum() async {
-    Source source = addSource(r'''
-enum E { ONE }
-class A implements E {}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_ENUM]);
+    assertErrors(source, [
+      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS
+    ]);
     verify([source]);
   }
 
@@ -3455,6 +3012,22 @@
     verify([source]);
   }
 
+  test_implementsNonClass_dynamic() async {
+    Source source = addSource("class A implements dynamic {}");
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]);
+    verify([source]);
+  }
+
+  test_implementsNonClass_enum() async {
+    Source source = addSource(r'''
+enum E { ONE }
+class A implements E {}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]);
+    verify([source]);
+  }
+
   test_implementsNonClass_typeAlias() async {
     Source source = addSource(r'''
 class A {}
@@ -3544,17 +3117,10 @@
   final y = x;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.THIS_ACCESS_FROM_INITIALIZER]);
-    } else if (enableKernelDriver) {
-      assertErrors(source,
-          [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER,
-        StrongModeCode.TOP_LEVEL_INSTANCE_GETTER
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER,
+      StrongModeCode.TOP_LEVEL_INSTANCE_GETTER
+    ]);
     verify([source]);
   }
 
@@ -3741,12 +3307,8 @@
   A(this.x) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
@@ -3759,12 +3321,8 @@
   B(this.x) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
@@ -3774,12 +3332,8 @@
   A([this.x]) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
@@ -3790,12 +3344,8 @@
   A(this.x) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD]);
     verify([source]);
   }
 
@@ -3806,12 +3356,8 @@
   A([this.x]) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD]);
     verify([source]);
   }
 
@@ -3826,12 +3372,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
     verify([source]);
   }
 
@@ -3846,12 +3388,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY]);
     verify([source]);
   }
 
@@ -3864,12 +3402,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
     verify([source]);
   }
 
@@ -3882,12 +3416,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
     verify([source]);
   }
 
@@ -3900,12 +3430,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC]);
     verify([source]);
   }
 
@@ -3953,11 +3479,7 @@
 main() {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
@@ -3982,11 +3504,7 @@
 main() {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.INVALID_ANNOTATION]);
     verify([source]);
   }
 
@@ -4177,12 +3695,8 @@
   A() async {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.NON_SYNC_CONSTRUCTOR]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -4192,12 +3706,8 @@
   A() async* {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.NON_SYNC_CONSTRUCTOR]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -4207,12 +3717,8 @@
   A() sync* {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.NON_SYNC_CONSTRUCTOR]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.INVALID_MODIFIER_ON_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -4226,7 +3732,7 @@
     // using fasta parser.
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER
@@ -4243,7 +3749,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER
@@ -4260,7 +3766,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER
@@ -4274,7 +3780,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER
@@ -4288,7 +3794,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER
@@ -4302,7 +3808,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
                 CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER
@@ -4443,12 +3949,8 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.THIS_ACCESS_FROM_INITIALIZER]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER]);
     verify([source]);
   }
 
@@ -4499,19 +4001,11 @@
     // (due to an error) should not crash the analyzer (see dartbug.com/23383)
     Source source = addSource("const int i = (1 ? 'alpha' : 'beta').length;");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.INVALID_ASSIGNMENT
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.NON_BOOL_CONDITION
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
+      CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+      StaticTypeWarningCode.NON_BOOL_CONDITION
+    ]);
     verify([source]);
   }
 
@@ -4561,37 +4055,31 @@
     verify([source]);
   }
 
-  @failingTest
-  test_mixinDeclaresConstructor() async {
-    Source source = addSource(r'''
-class A {
-  A() {}
-}
-class B extends Object mixin A {}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
-    verify([source]);
-  }
-
-  test_mixinDeclaresConstructor_classDeclaration() async {
+  test_mixinClassDeclaresConstructor_classDeclaration() async {
     Source source = addSource(r'''
 class A {
   A() {}
 }
 class B extends Object with A {}''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+    assertErrors(
+      source,
+      [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR],
+    );
     verify([source]);
   }
 
-  test_mixinDeclaresConstructor_typeAlias() async {
+  test_mixinClassDeclaresConstructor_typeAlias() async {
     Source source = addSource(r'''
 class A {
   A() {}
 }
 class B = Object with A;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+    assertErrors(
+      source,
+      [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR],
+    );
     verify([source]);
   }
 
@@ -4801,13 +4289,8 @@
 class C extends Object with M {}
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
   }
 
   @failingTest // Does not work with old task model
@@ -4822,17 +4305,10 @@
 class C extends Object with M implements A<B> {}
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.AMBIGUOUS_SUPERTYPES,
-        CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS,
-        CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS,
+      CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES
+    ]);
   }
 
   test_mixinInference_noMatchingClass_namedMixinApplication() async {
@@ -4846,13 +4322,8 @@
 class C = Object with M;
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.MIXIN_INFERENCE_NO_MATCHING_CLASS]);
   }
 
   test_mixinInference_noMatchingClass_noSuperclassConstraint() async {
@@ -4965,78 +4436,42 @@
   test_mixinOfDisallowedClass_class_bool() async {
     Source source = addSource("class A extends Object with bool {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_double() async {
     Source source = addSource("class A extends Object with double {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_int() async {
     Source source = addSource("class A extends Object with int {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_Null() async {
     Source source = addSource("class A extends Object with Null {}");
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_num() async {
     Source source = addSource("class A extends Object with num {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
   test_mixinOfDisallowedClass_class_String() async {
     Source source = addSource("class A extends Object with String {}");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5045,11 +4480,7 @@
 class A {}
 class C = A with bool;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5058,14 +4489,7 @@
 class A {}
 class C = A with double;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5074,14 +4498,7 @@
 class A {}
 class C = A with int;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5090,11 +4507,7 @@
 class A {}
 class C = A with Null;''');
     await computeAnalysisResult(source);
-    assertErrors(source, [
-      useCFE
-          ? CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS
-          : CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS
-    ]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5103,14 +4516,7 @@
 class A {}
 class C = A with num;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5119,23 +4525,7 @@
 class A {}
 class C = A with String;''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.EXTENDS_DISALLOWED_CLASS,
-                StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-              ]
-            : [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
-    verify([source]);
-  }
-
-  test_mixinOfEnum() async {
-    Source source = addSource(r'''
-enum E { ONE }
-class A extends Object with E {}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_ENUM]);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS]);
     verify([source]);
   }
 
@@ -5159,6 +4549,15 @@
     verify([source]);
   }
 
+  test_mixinOfNonClass_enum() async {
+    Source source = addSource(r'''
+enum E { ONE }
+class A extends Object with E {}''');
+    await computeAnalysisResult(source);
+    assertErrors(source, [CompileTimeErrorCode.MIXIN_OF_NON_CLASS]);
+    verify([source]);
+  }
+
   test_mixinOfNonClass_typeAlias() async {
     Source source = addSource(r'''
 class A {}
@@ -5186,12 +4585,8 @@
 class B {}
 class C extends A with B {}''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CLASS]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
     verify([source]);
   }
 
@@ -5201,12 +4596,8 @@
 class B {}
 class C = A with B;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CLASS]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS]);
     verify([source]);
   }
 
@@ -5295,13 +4686,8 @@
   B() {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT]);
     verify([source]);
   }
 
@@ -5539,15 +4925,8 @@
 main() {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -5560,15 +4939,8 @@
 main() {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -5671,24 +5043,16 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION,
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION]);
     verify([source]);
   }
 
   test_nonConstCaseExpressionFromDeferredLibrary() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 main (int p) {
@@ -5697,26 +5061,17 @@
       break;
   }
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY,
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstCaseExpressionFromDeferredLibrary_nested() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 main (int p) {
@@ -5725,17 +5080,9 @@
       break;
   }
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY,
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstListElement() async {
@@ -5744,65 +5091,40 @@
   return const [a];
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT]);
     verify([source]);
   }
 
   test_nonConstListElementFromDeferredLibrary() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 f() {
   return const [a.c];
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS,
-                CompileTimeErrorCode
-                    .NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstListElementFromDeferredLibrary_nested() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 f() {
   return const [a.c + 1];
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS,
-                CompileTimeErrorCode
-                    .NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstMapAsExpressionStatement_begin() async {
@@ -5811,47 +5133,27 @@
   {'a' : 0, 'b' : 1}.length;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.UNEXPECTED_TOKEN,
-        ParserErrorCode.UNEXPECTED_TOKEN,
-        ParserErrorCode.UNEXPECTED_TOKEN,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-      ]);
-    } else {
-      assertErrors(
-          source,
-          usingFastaParser
-              ? [
-                  // TODO(danrubel): Consider improving recovery
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.UNEXPECTED_TOKEN,
-                  ParserErrorCode.UNEXPECTED_TOKEN,
-                  ParserErrorCode.UNEXPECTED_TOKEN,
-                ]
-              : [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
-    }
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [
+                // TODO(danrubel): Consider improving recovery
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+              ]
+            : [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
     verify([source]);
   }
 
@@ -5861,43 +5163,25 @@
   {'a' : 0, 'b' : 1};
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.EXPECTED_TOKEN,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.UNEXPECTED_TOKEN,
-        ParserErrorCode.UNEXPECTED_TOKEN,
-        ParserErrorCode.UNEXPECTED_TOKEN,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER
-      ]);
-    } else {
-      assertErrors(
-          source,
-          usingFastaParser
-              ? [
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.EXPECTED_TOKEN,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.MISSING_IDENTIFIER,
-                  ParserErrorCode.UNEXPECTED_TOKEN,
-                  ParserErrorCode.UNEXPECTED_TOKEN,
-                  ParserErrorCode.UNEXPECTED_TOKEN,
-                ]
-              : [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
-    }
+    assertErrors(
+        source,
+        usingFastaParser
+            ? [
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.EXPECTED_TOKEN,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+                ParserErrorCode.UNEXPECTED_TOKEN,
+              ]
+            : [CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT]);
     verify([source]);
   }
 
@@ -5907,61 +5191,40 @@
   return const {a : 0};
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_MAP_KEY
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_MAP_KEY]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_MAP_KEY]);
     verify([source]);
   }
 
   test_nonConstMapKeyFromDeferredLibrary() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 f() {
   return const {a.c : 0};
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS,
-                CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstMapKeyFromDeferredLibrary_nested() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 f() {
   return const {a.c + 1 : 0};
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS,
-                CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstMapValue() async {
@@ -5970,65 +5233,40 @@
   return const {'a' : a};
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE
-      ]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE]);
     verify([source]);
   }
 
   test_nonConstMapValueFromDeferredLibrary() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 f() {
   return const {'a' : a.c};
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS,
-                CompileTimeErrorCode
-                    .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstMapValueFromDeferredLibrary_nested() async {
-    await resolveWithErrors(
-        <String>[
-          r'''
+    await resolveWithErrors(<String>[
+      r'''
 library lib1;
 const int c = 1;''',
-          r'''
+      r'''
 library root;
 import 'lib1.dart' deferred as a;
 f() {
   return const {'a' : a.c + 1};
 }'''
-        ],
-        useCFE
-            ? <ErrorCode>[
-                CompileTimeErrorCode.CONST_DEFERRED_CLASS,
-                CompileTimeErrorCode
-                    .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
-              ]
-            : <ErrorCode>[
-                CompileTimeErrorCode
-                    .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
-              ]);
+    ], [
+      CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
+    ]);
   }
 
   test_nonConstValueInInitializer_assert_condition() async {
@@ -6037,15 +5275,8 @@
   const A(int i) : assert(i.isNegative);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
@@ -6055,15 +5286,8 @@
   const A(int i) : assert(i < 0, 'isNegative = ${i.isNegative}');
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
@@ -6074,17 +5298,10 @@
   const A(String p) : a = p && true;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.INVALID_ASSIGNMENT
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.NON_BOOL_OPERAND
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+      StaticTypeWarningCode.NON_BOOL_OPERAND
+    ]);
     verify([source]);
   }
 
@@ -6095,17 +5312,10 @@
   const A(String p) : a = true && p;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.INVALID_ASSIGNMENT
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.NON_BOOL_OPERAND
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+      StaticTypeWarningCode.NON_BOOL_OPERAND
+    ]);
     verify([source]);
   }
 
@@ -6145,15 +5355,8 @@
   const A() : a = C;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
@@ -6170,18 +5373,10 @@
     // TODO(scheglov): the error CONST_EVAL_THROWS_EXCEPTION is redundant and
     // ought to be suppressed. Or not?
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER,
-        CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER,
-        CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER,
+      CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION
+    ]);
     verify([source]);
   }
 
@@ -6198,18 +5393,10 @@
     await computeAnalysisResult(sourceA);
     assertNoErrors(sourceA);
     await computeAnalysisResult(sourceB);
-    if (useCFE) {
-      assertErrors(sourceB, [
-        CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE,
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER
-      ]);
-    } else {
-      assertErrors(sourceB, [
-        CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE,
-        StaticWarningCode.UNDEFINED_IDENTIFIER
-      ]);
-    }
+    assertErrors(sourceB, [
+      CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE,
+      StaticWarningCode.UNDEFINED_IDENTIFIER
+    ]);
   }
 
   test_nonConstValueInInitializer_redirecting() async {
@@ -6220,15 +5407,8 @@
   const A() : this.named(C);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
@@ -6242,15 +5422,8 @@
   const B() : super(C);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER]);
     verify([source]);
   }
 
@@ -6337,11 +5510,7 @@
   B() : super.named();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -6354,12 +5523,7 @@
   B();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -6371,12 +5535,7 @@
 class B extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -6845,14 +6004,7 @@
 const x = y + 1;
 const y = x + 1;''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertErrors(source, [
-        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
-        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
-        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
-        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT
-      ]);
-    } else if (!enableNewAnalysisDriver) {
+    if (!enableNewAnalysisDriver) {
       assertErrors(source, [
         CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
         CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
@@ -6887,12 +6039,7 @@
 const x = x;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertErrors(source, [
-        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
-        CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
-      ]);
-    } else if (!enableNewAnalysisDriver) {
+    if (!enableNewAnalysisDriver) {
       assertErrors(source, [
         CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT,
       ]);
@@ -6912,15 +6059,10 @@
   A.b() : this.a();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
-        CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT,
+      CompileTimeErrorCode.RECURSIVE_CONSTRUCTOR_REDIRECT
+    ]);
     verify([source]);
   }
 
@@ -7161,14 +6303,9 @@
   test_recursiveInterfaceInheritanceBaseCaseExtends() async {
     Source source = addSource("class A extends A {}");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS
+    ]);
     verify([source]);
   }
 
@@ -7180,18 +6317,11 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
-        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS,
+      StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
+      StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE
+    ]);
     verify([source]);
   }
 
@@ -7270,13 +6400,7 @@
 }''');
     await computeAnalysisResult(source);
     assertErrors(
-        source,
-        useCFE
-            ? [
-                CompileTimeErrorCode.CONSTRUCTOR_NOT_FOUND,
-                CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR
-              ]
-            : [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
+        source, [CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR]);
   }
 
   test_redirectToNonClass_notAType() async {
@@ -7441,7 +6565,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.RETURN_IN_GENERATOR,
                 CompileTimeErrorCode.RETURN_IN_GENERATOR
@@ -7458,7 +6582,7 @@
     await computeAnalysisResult(source);
     assertErrors(
         source,
-        usingFastaParser && !useCFE
+        usingFastaParser
             ? [
                 CompileTimeErrorCode.RETURN_IN_GENERATOR,
                 CompileTimeErrorCode.RETURN_IN_GENERATOR
@@ -7488,11 +6612,7 @@
   test_superInInvalidContext_binaryExpression() async {
     Source source = addSource("var v = super + 0;");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.SUPER_AS_EXPRESSION]
-            : [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
+    assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.v' is not resolved
   }
 
@@ -7522,11 +6642,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.SUPER_AS_EXPRESSION]
-            : [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
+    assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.m' is not resolved
   }
 
@@ -7552,11 +6668,7 @@
   static n() { return super.m(); }
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.SUPER_AS_EXPRESSION]
-            : [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
+    assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.m' is not resolved
   }
 
@@ -7569,11 +6681,7 @@
   static int b = super.a;
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.SUPER_AS_EXPRESSION]
-            : [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
+    assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.a' is not resolved
   }
 
@@ -7583,22 +6691,14 @@
   super.f();
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.SUPER_AS_EXPRESSION]
-            : [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
+    assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.f' is not resolved
   }
 
   test_superInInvalidContext_topLevelVariableInitializer() async {
     Source source = addSource("var v = super.y;");
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.SUPER_AS_EXPRESSION]
-            : [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
+    assertErrors(source, [CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT]);
     // no verify(), 'super.y' is not resolved
   }
 
@@ -7682,15 +6782,10 @@
   F foo(G g) => g;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
-        CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+      CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
+    ]);
     verify([source]);
   }
 
@@ -7727,15 +6822,10 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
-        CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+      CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
+    ]);
     verify([source]);
   }
 
@@ -7797,15 +6887,10 @@
 typedef B A();
 typedef A B();''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
-        CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+      CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
+    ]);
     verify([source]);
   }
 
@@ -7875,11 +6960,7 @@
   return const A();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CLASS]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CLASS]);
     verify([source]);
   }
 
@@ -7890,12 +6971,8 @@
   B() : super.named();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
-    }
+    assertErrors(
+        source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER]);
     // no verify(), "super.named()" is not resolved
   }
 
@@ -7908,12 +6985,8 @@
   B() : super();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
@@ -7926,13 +6999,8 @@
   B();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
@@ -8018,17 +7086,10 @@
   test_uriWithInterpolation_constant() async {
     Source source = addSource("import 'stuff_\$platform.dart';");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.URI_WITH_INTERPOLATION,
-        ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION
-      ]);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.URI_WITH_INTERPOLATION,
-        StaticWarningCode.UNDEFINED_IDENTIFIER
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.URI_WITH_INTERPOLATION,
+      StaticWarningCode.UNDEFINED_IDENTIFIER
+    ]);
     // We cannot verify resolution with an unresolvable
     // URI: 'stuff_$platform.dart'
   }
@@ -8238,36 +7299,27 @@
   }
 
   Future<Null> _check_constEvalThrowsException_binary_null(
-      String expr, bool resolved,
-      {List<ErrorCode> cfeErrors}) async {
+      String expr, bool resolved) async {
     Source source = addSource("const C = $expr;");
     await computeAnalysisResult(source);
-    if (useCFE && cfeErrors != null) {
-      assertErrors(source, cfeErrors);
-    } else {
-      assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION]);
     if (resolved) {
       verify([source]);
     }
   }
 
-  Future<Null> _check_constEvalTypeBool_withParameter_binary(String expr,
-      {List<ErrorCode> cfeErrors}) async {
+  Future<Null> _check_constEvalTypeBool_withParameter_binary(
+      String expr) async {
     Source source = addSource('''
 class A {
   final a;
   const A(bool p) : a = $expr;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE && cfeErrors != null) {
-      assertErrors(source, cfeErrors);
-    } else {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
-        StaticTypeWarningCode.NON_BOOL_OPERAND
-      ]);
-    }
+    assertErrors(source, [
+      CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL,
+      StaticTypeWarningCode.NON_BOOL_OPERAND
+    ]);
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart b/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
deleted file mode 100644
index a5ef305..0000000
--- a/pkg/analyzer/test/generated/error_suppression_kernel_test.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'error_suppression_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ErrorSuppressionTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class ErrorSuppressionTest_Kernel extends ErrorSuppressionTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-}
diff --git a/pkg/analyzer/test/generated/error_suppression_test.dart b/pkg/analyzer/test/generated/error_suppression_test.dart
index 0b7f92c..0e5d6106 100644
--- a/pkg/analyzer/test/generated/error_suppression_test.dart
+++ b/pkg/analyzer/test/generated/error_suppression_test.dart
@@ -18,29 +18,16 @@
 
 @reflectiveTest
 class ErrorSuppressionTest extends ResolverTestCase {
-  String get ignoredCode => useCFE
-      ? 'not_constant_expression, const_initialized_with_non_constant_value'
-      : 'const_initialized_with_non_constant_value';
+  String get ignoredCode => 'const_initialized_with_non_constant_value';
 
-  List<ErrorCode> get reportedCodes => useCFE
-      ? [
-          CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-          CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        ]
-      : [
-          CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        ];
+  List<ErrorCode> get reportedCodes => [
+        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
+      ];
 
-  List<ErrorCode> get reportedCodesWithAssignment => useCFE
-      ? [
-          StaticTypeWarningCode.INVALID_ASSIGNMENT,
-          CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-          CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        ]
-      : [
-          StaticTypeWarningCode.INVALID_ASSIGNMENT,
-          CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
-        ];
+  List<ErrorCode> get reportedCodesWithAssignment => [
+        StaticTypeWarningCode.INVALID_ASSIGNMENT,
+        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE,
+      ];
 
   test_error_code_mismatch() async {
     Source source = addSource('''
diff --git a/pkg/analyzer/test/generated/hint_code_kernel_test.dart b/pkg/analyzer/test/generated/hint_code_kernel_test.dart
deleted file mode 100644
index 073e8c5..0000000
--- a/pkg/analyzer/test/generated/hint_code_kernel_test.dart
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'hint_code_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(HintCodeTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class HintCodeTest_Kernel extends HintCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @failingTest
-  @override
-  test_abstractSuperMemberReference_getter() async {
-    return super.test_abstractSuperMemberReference_getter();
-  }
-
-  @failingTest
-  @override
-  test_abstractSuperMemberReference_method_invocation() async {
-    return super.test_abstractSuperMemberReference_method_invocation();
-  }
-
-  @failingTest
-  @override
-  test_abstractSuperMemberReference_method_reference() async {
-    return super.test_abstractSuperMemberReference_method_reference();
-  }
-
-  @failingTest
-  @override
-  test_abstractSuperMemberReference_superHasNoSuchMethod() async {
-    return super.test_abstractSuperMemberReference_superHasNoSuchMethod();
-  }
-
-  @failingTest
-  @override
-  test_deprecatedAnnotationUse_call() async {
-    return super.test_deprecatedAnnotationUse_call();
-  }
-
-  @failingTest
-  @override
-  test_deprecatedFunction_class() async {
-    return super.test_deprecatedFunction_class();
-  }
-
-  @failingTest
-  @override
-  test_deprecatedFunction_extends() async {
-    return super.test_deprecatedFunction_extends();
-  }
-
-  @failingTest
-  @override
-  test_deprecatedFunction_extends2() async {
-    return super.test_deprecatedFunction_extends2();
-  }
-
-  @failingTest
-  @override
-  test_deprecatedFunction_mixin() async {
-    return super.test_deprecatedFunction_mixin();
-  }
-
-  @failingTest
-  @override
-  test_deprecatedFunction_mixin2() async {
-    return super.test_deprecatedFunction_mixin2();
-  }
-
-  @override
-  @failingTest
-  test_invalidRequiredParam_on_named_parameter_with_default() async {
-    return super.test_invalidRequiredParam_on_named_parameter_with_default();
-  }
-
-  @failingTest
-  @override
-  test_missingJsLibAnnotation_class() async {
-    return super.test_missingJsLibAnnotation_class();
-  }
-
-  @failingTest
-  @override
-  test_missingJsLibAnnotation_externalField() async {
-    return super.test_missingJsLibAnnotation_externalField();
-  }
-
-  @failingTest
-  @override
-  test_missingJsLibAnnotation_function() async {
-    return super.test_missingJsLibAnnotation_function();
-  }
-
-  @failingTest
-  @override
-  test_missingJsLibAnnotation_method() async {
-    return super.test_missingJsLibAnnotation_method();
-  }
-
-  @failingTest
-  @override
-  test_missingJsLibAnnotation_variable() async {
-    return super.test_missingJsLibAnnotation_variable();
-  }
-
-  @failingTest
-  @override
-  test_mustCallSuper() async {
-    return super.test_mustCallSuper();
-  }
-
-  @failingTest
-  @override
-  test_mustCallSuper_indirect() async {
-    return super.test_mustCallSuper_indirect();
-  }
-
-  @override
-  @failingTest
-  test_required_function_param() async {
-    return super.test_required_function_param();
-  }
-
-  @override
-  @failingTest
-  test_required_method_param() async {
-    return super.test_required_method_param();
-  }
-
-  @override
-  @failingTest
-  test_required_method_param_in_other_lib() async {
-    return super.test_required_method_param_in_other_lib();
-  }
-
-  @override
-  @failingTest
-  test_required_typedef_function_param() async {
-    return super.test_required_typedef_function_param();
-  }
-
-  @failingTest
-  @override
-  // Failing due to https://github.com/dart-lang/sdk/issues/34249
-  test_invalidSealedAnnotation_onMixinApplication() async {
-    return super.test_invalidSealedAnnotation_onMixinApplication();
-  }
-
-  @failingTest
-  @override
-  test_strongMode_downCastCompositeHint() async {
-    return super.test_strongMode_downCastCompositeHint();
-  }
-
-  @failingTest
-  @override
-  test_strongMode_downCastCompositeWarn() async {
-    return super.test_strongMode_downCastCompositeWarn();
-  }
-
-  @failingTest
-  @override
-  test_unusedImport_inComment_libraryDirective() async {
-    return super.test_unusedImport_inComment_libraryDirective();
-  }
-}
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index 36f7faa..d0ab205 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -109,14 +109,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_SUPER_GETTER,
-        HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE
-      ]);
-    } else {
-      assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
-    }
+    assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
@@ -132,14 +125,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_SUPER_METHOD,
-        HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE
-      ]);
-    } else {
-      assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
-    }
+    assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
@@ -155,14 +141,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_SUPER_GETTER,
-        HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE
-      ]);
-    } else {
-      assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
-    }
+    assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
@@ -178,14 +157,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_SUPER_SETTER,
-        HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE
-      ]);
-    } else {
-      assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
-    }
+    assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
@@ -201,14 +173,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_SUPER_METHOD,
-        HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE
-      ]);
-    } else {
-      assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
-    }
+    assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]);
     verify([source]);
   }
 
@@ -1695,7 +1660,6 @@
     verify([source]);
   }
 
-  @failingTest
   test_invalidSealedAnnotation_onMixin() async {
     Source source = addNamedSource('/lib1.dart', r'''
 import 'package:meta/meta.dart';
@@ -3461,11 +3425,7 @@
 var b = new A().g;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3478,11 +3438,7 @@
 var b = a.g();
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3494,11 +3450,7 @@
 var b = new A().g;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3511,11 +3463,7 @@
 var b = a.g();
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3528,11 +3476,7 @@
 var b = a.g;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3548,11 +3492,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3615,11 +3555,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3665,11 +3601,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3719,11 +3651,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3798,11 +3726,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3880,11 +3804,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3897,11 +3817,7 @@
 var b = a.g;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3920,11 +3836,7 @@
     // 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]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
     verify([source]);
   }
 
@@ -3951,11 +3863,7 @@
 var x = new A().f();
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
     verify([source]);
   }
 
@@ -3979,11 +3887,7 @@
 var x = new A().f(0);
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
     verify([source]);
   }
 
@@ -4019,11 +3923,7 @@
 var x = new A().f;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
     verify([source]);
   }
 
@@ -4035,11 +3935,7 @@
 var x = new A().f;
 ''');
     await computeAnalysisResult(source);
-    if (enableKernelDriver) {
-      assertNoErrors(source);
-    } else {
-      assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
-    }
+    assertErrors(source, [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
     verify([source]);
   }
 
@@ -4182,9 +4078,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
@@ -4200,12 +4094,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_METHOD,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
@@ -4221,9 +4110,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
@@ -4239,9 +4126,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertErrors(source, [HintCode.UNDEFINED_OPERATOR]);
diff --git a/pkg/analyzer/test/generated/invalid_code_driver_test.dart b/pkg/analyzer/test/generated/invalid_code_driver_test.dart
index 6c3ffaa..cdccd25 100644
--- a/pkg/analyzer/test/generated/invalid_code_driver_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_driver_test.dart
@@ -16,19 +16,4 @@
 class InvalidCodeTest_Driver extends InvalidCodeTest {
   @override
   bool get enableNewAnalysisDriver => true;
-
-  /**
-   * This fails because we have a method with the empty name, and the default
-   * constructor, which also has the empty name. Then, when we link, we get
-   * a reference to this empty-named method, so we resynthesize a
-   * `MethodHandle` with the corresponding `ElementLocation`. But at the level
-   * of `ElementLocation` we cannot distinguish a reference to a method or
-   * a constructor. So, we return a `ConstructorElement`, and cast to
-   * `MethodElement` fails.
-   */
-  @failingTest
-  @override
-  test_constructorAndMethodNameCollision() async {
-    return super.test_constructorAndMethodNameCollision();
-  }
 }
diff --git a/pkg/analyzer/test/generated/invalid_code_kernel_test.dart b/pkg/analyzer/test/generated/invalid_code_kernel_test.dart
deleted file mode 100644
index eaeb057..0000000
--- a/pkg/analyzer/test/generated/invalid_code_kernel_test.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'invalid_code_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(InvalidCodeTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class InvalidCodeTest_Kernel extends InvalidCodeTest {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get enableNewAnalysisDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart b/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
deleted file mode 100644
index f4f1192..0000000
--- a/pkg/analyzer/test/generated/non_error_resolver_kernel_test.dart
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'non_error_resolver_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(NonErrorResolverTest_Kernel);
-  });
-}
-
-/// Tests marked with this annotation fail because they test features that
-/// were implemented in Analyzer, but are intentionally not included into
-/// the Dart 2.0 plan, or disabled for Dart 2.0 altogether.
-const notForDart2 = const Object();
-
-/// Tests marked with this annotation fail because of an Analyzer problem.
-class AnalyzerProblem {
-  const AnalyzerProblem(String issueUri);
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
-
-@reflectiveTest
-class NonErrorResolverTest_Kernel extends NonErrorResolverTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeConstructor() async {
-    return super.test_commentReference_beforeConstructor();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeEnum() async {
-    return super.test_commentReference_beforeEnum();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeFunction_blockBody() async {
-    return super.test_commentReference_beforeFunction_blockBody();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeFunction_expressionBody() async {
-    return super.test_commentReference_beforeFunction_expressionBody();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeFunctionTypeAlias() async {
-    return super.test_commentReference_beforeFunctionTypeAlias();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeGenericTypeAlias() async {
-    return super.test_commentReference_beforeGenericTypeAlias();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeGetter() async {
-    return super.test_commentReference_beforeGetter();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_beforeMethod() async {
-    return super.test_commentReference_beforeMethod();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_class() async {
-    return super.test_commentReference_class();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31604')
-  test_commentReference_setter() async {
-    return super.test_commentReference_setter();
-  }
-
-  @override
-  test_conflictingStaticSetterAndInstanceMember_thisClass_method() async {
-    return super
-        .test_conflictingStaticSetterAndInstanceMember_thisClass_method();
-  }
-
-  @override
-  test_constConstructorWithMixinWithField_withoutSuperMixins() async {
-    return super.test_constConstructorWithMixinWithField_withoutSuperMixins();
-  }
-
-  @override
-  @failingTest
-  test_constConstructorWithMixinWithField_withSuperMixins() async {
-    return super.test_constConstructorWithMixinWithField_withSuperMixins();
-  }
-
-  @override
-  @failingTest
-  test_finalNotInitialized_hasNativeClause_hasConstructor() async {
-    return super.test_finalNotInitialized_hasNativeClause_hasConstructor();
-  }
-
-  @override
-  @failingTest
-  test_finalNotInitialized_hasNativeClause_noConstructor() async {
-    return super.test_finalNotInitialized_hasNativeClause_noConstructor();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33799')
-  test_functionTypeAlias_scope_signature() async {
-    return super.test_functionTypeAlias_scope_signature();
-  }
-
-  @override // passes with kernel
-  test_infer_mixin() => super.test_infer_mixin();
-
-  @override // Passes with kernel
-  test_infer_mixin_multiplyConstrained() =>
-      super.test_infer_mixin_multiplyConstrained();
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30609')
-  test_metadata_enumConstantDeclaration() {
-    // Failed to resolve 2 nodes
-    return super.test_metadata_enumConstantDeclaration();
-  }
-
-  @override
-  @failingTest
-  test_nativeConstConstructor() {
-    return super.test_nativeConstConstructor();
-  }
-
-  @override
-  test_null_callMethod() async {
-    return super.test_null_callMethod();
-  }
-
-  @override
-  test_null_callOperator() async {
-    return super.test_null_callOperator();
-  }
-
-  @override
-  @failingTest
-  test_undefinedIdentifier_synthetic_whenMethodName() async {
-    return super.test_undefinedIdentifier_synthetic_whenMethodName();
-  }
-}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 58d3b70..a215f04 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -189,6 +189,23 @@
     verify([source]);
   }
 
+  test_ambiguousImport_dart_implicitHide() async {
+    Source source = addSource(r'''
+import 'dart:async';
+import 'lib.dart';
+main() {
+  print(Future.zero);
+}
+''');
+    addNamedSource('/lib.dart', r'''
+class Future {
+  static const zero = 0;
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+  }
+
   test_ambiguousImport_hideCombinator() async {
     Source source = addSource(r'''
 import 'lib1.dart';
@@ -1231,19 +1248,6 @@
     verify([source]);
   }
 
-  test_conflictingInstanceGetterAndSuperclassMember_instance() async {
-    Source source = addSource(r'''
-class A {
-  get v => 0;
-}
-class B extends A {
-  get v => 1;
-}''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_conflictingStaticGetterAndInstanceSetter_thisClass() async {
     Source source = addSource(r'''
 class A {
@@ -1263,15 +1267,7 @@
   static set x(int p) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONFLICTS_WITH_MEMBER,
-        CompileTimeErrorCode.CONFLICTS_WITH_MEMBER
-      ]);
-    } else {
-      assertErrors(
-          source, [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
-    }
+    assertErrors(source, [CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD]);
     verify([source]);
   }
 
@@ -1381,12 +1377,8 @@
   const B(): super();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]);
-    } else {
-      assertErrors(source,
-          [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
-    }
+    assertErrors(source,
+        [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
     verify([source]);
   }
 
@@ -3591,11 +3583,7 @@
   v();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
     verify([source]);
   }
 
@@ -3712,16 +3700,6 @@
     verify([source]);
   }
 
-  test_memberWithClassName_setter() async {
-    Source source = addSource(r'''
-class A {
-  set A(v) {}
-}''');
-    await computeAnalysisResult(source);
-    assertNoErrors(source);
-    verify([source]);
-  }
-
   test_metadata_enumConstantDeclaration() async {
     Source source = addSource(r'''
 const x = 1;
@@ -4032,7 +4010,7 @@
   const factory Foo.foo() native 'Foo_Foo_foo';
 }''');
     await computeAnalysisResult(source);
-    assertNoErrors(source);
+    assertErrors(source, [ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY]);
     // Cannot verify the AST because the import's URI cannot be resolved.
   }
 
@@ -5965,14 +5943,7 @@
   print(is String);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        ParserErrorCode.MISSING_IDENTIFIER,
-        StaticTypeWarningCode.UNDEFINED_GETTER
-      ]);
-    } else {
-      assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
-    }
+    assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
   }
 
   test_undefinedIdentifier_synthetic_whenMethodName() async {
@@ -5982,7 +5953,11 @@
   p.();
 }''');
     await computeAnalysisResult(source);
-    assertErrors(source, [ParserErrorCode.MISSING_IDENTIFIER]);
+    assertErrors(source, [
+      ParserErrorCode.MISSING_IDENTIFIER,
+      ParserErrorCode.MISSING_IDENTIFIER,
+      StaticTypeWarningCode.UNDEFINED_GETTER
+    ]);
   }
 
   test_undefinedMethod_functionExpression_callMethod() async {
diff --git a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart b/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
deleted file mode 100644
index 61ad9cc..0000000
--- a/pkg/analyzer/test/generated/non_hint_code_kernel_test.dart
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'non_hint_code_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(NonHintCodeTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class NonHintCodeTest_Kernel extends NonHintCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_deadCode_afterForEachWithBreakLabel() async {
-    await super.test_deadCode_afterForEachWithBreakLabel();
-  }
-
-  @override
-  @failingTest
-  test_deadCode_afterForWithBreakLabel() async {
-    await super.test_deadCode_afterForWithBreakLabel();
-  }
-
-  @override
-  @failingTest
-  test_unusedImport_annotationOnDirective() async {
-    await super.test_unusedImport_annotationOnDirective();
-  }
-}
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index 8ac787c..9def3f0 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -977,9 +977,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertNoErrors(source);
@@ -998,12 +996,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_METHOD,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertNoErrors(source);
@@ -1022,9 +1015,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertNoErrors(source);
@@ -1043,9 +1034,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
     } else {
       assertNoErrors(source);
@@ -1179,9 +1168,7 @@
   (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [HintCode.UNNECESSARY_CAST]);
-    } else if (previewDart2 && enableNewAnalysisDriver) {
+    if (previewDart2 && enableNewAnalysisDriver) {
       assertErrors(source, [HintCode.UNNECESSARY_CAST]);
     } else {
       assertNoErrors(source);
@@ -1494,11 +1481,7 @@
     // TODO(brianwilkerson) It isn't clear what the right semantics are in Dart
     // 2 (https://github.com/dart-lang/sdk/issues/33951). This test should be
     // updated when that issue is closed.
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SUPER_GETTER]);
-    } else {
-      assertNoErrors(source);
-    }
+    assertNoErrors(source);
     verify([source]);
   }
 }
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index d61baab..f6325f8 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -380,9 +380,9 @@
 
   @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token name) {
-    super.beginMethod(
-        externalToken, staticToken, covariantToken, varFinalOrConst, name);
+      Token varFinalOrConst, Token getOrSet, Token name) {
+    super.beginMethod(externalToken, staticToken, covariantToken,
+        varFinalOrConst, getOrSet, name);
     begin('Method');
   }
 
@@ -755,16 +755,11 @@
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     end('FormalParameter');
     super.endFormalParameter(
-        thisKeyword, periodAfterThis, nameToken, kind, memberKind, endToken);
+        thisKeyword, periodAfterThis, nameToken, kind, memberKind);
   }
 
   @override
@@ -1139,6 +1134,12 @@
   }
 
   @override
+  void handleRecoverMixinHeader() {
+    expectIn('MixinDeclaration');
+    listener.handleRecoverMixinHeader();
+  }
+
+  @override
   void handleInvalidMember(Token endToken) {
     expectIn('Member');
     super.handleInvalidMember(endToken);
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 118210a..5b1826d 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -7,13 +7,19 @@
 import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart' show ErrorReporter;
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/fasta/ast_builder.dart';
 import 'package:analyzer/src/generated/parser.dart' as analyzer;
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:analyzer/src/string_source.dart';
+import 'package:front_end/src/fasta/scanner.dart'
+    show ScannerResult, scanString;
+import 'package:front_end/src/fasta/parser/parser.dart' as fasta;
 import 'package:front_end/src/fasta/scanner/error_token.dart' show ErrorToken;
 import 'package:front_end/src/fasta/scanner/string_scanner.dart';
+import 'package:front_end/src/scanner/errors.dart' show translateErrorToken;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -42,54 +48,14 @@
 
 @reflectiveTest
 class ClassMemberParserTest_Fasta extends FastaParserTestCase
-    with ClassMemberParserTestMixin {
-  @override
-  void test_parseClassMember_method_generic_comment_noReturnType() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseClassMember_method_generic_comment_parameterType() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseClassMember_method_generic_comment_returnType() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseClassMember_method_generic_comment_returnType_bound() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseClassMember_method_generic_comment_returnType_complex() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseClassMember_method_generic_comment_void() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseClassMember_method_static_generic_comment_returnType() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-}
+    with ClassMemberParserTestMixin {}
 
 /**
  * Tests of the fasta parser based on [ComplexParserTestMixin].
  */
 @reflectiveTest
 class ComplexParserTest_Fasta extends FastaParserTestCase
-    with ComplexParserTestMixin {
-  @override
-  void test_assignableExpression_arguments_normal_chain_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-}
+    with ComplexParserTestMixin {}
 
 /**
  * Tests of the fasta parser based on [ErrorParserTest].
@@ -126,15 +92,11 @@
     }
   }
 
-  @override
-  void test_method_invalidTypeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_method_invalidTypeParameterExtendsComment() {
-    // Fasta no longer supports type comment based syntax
-    // super.test_method_invalidTypeParameterExtendsComment();
+  void test_invalidOperatorAfterSuper_constructorInitializer2() {
+    parseCompilationUnit('class C { C() : super?.namedConstructor(); }',
+        errors: [
+          expectedError(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, 21, 2)
+        ]);
   }
 }
 
@@ -145,113 +107,6 @@
 class ExpressionParserTest_Fasta extends FastaParserTestCase
     with ExpressionParserTestMixin {
   @override
-  void
-      test_parseAssignableExpression_expression_args_dot_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parseAssignableExpression_identifier_args_dot_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseCascadeSection_ia_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseCascadeSection_ii_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseCascadeSection_pa_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseCascadeSection_paa_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseCascadeSection_paapaa_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseConstExpression_listLiteral_typed_genericComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseConstExpression_mapLiteral_typed_genericComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseExpression_superMethodInvocation_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseFunctionExpression_typeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parseInstanceCreationExpression_qualifiedType_named_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parseInstanceCreationExpression_qualifiedType_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseInstanceCreationExpression_type_named_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseInstanceCreationExpression_type_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
   @failingTest
   void test_parseUnaryExpression_decrement_super() {
     // TODO(danrubel) Reports a different error and different token stream.
@@ -285,12 +140,6 @@
   @override
   bool allowNativeClause = false;
 
-  /**
-   * Whether generic method comments should be enabled for the test.
-   */
-  bool get enableGenericMethodComments => false;
-  void set enableGenericMethodComments(bool enable) {}
-
   @override
   set enableLazyAssignmentOperators(bool value) {
     // Lazy assignment operators are always enabled
@@ -352,11 +201,9 @@
   @override
   void createParser(String content, {int expectedEndOffset}) {
     var scanner = new StringScanner(content, includeComments: true);
-    scanner.scanGenericMethodComments = enableGenericMethodComments;
     _fastaTokens = scanner.tokenize();
     _parserProxy = new ParserProxy(_fastaTokens,
         allowNativeClause: allowNativeClause,
-        enableGenericMethodComments: enableGenericMethodComments,
         expectedEndOffset: expectedEndOffset);
   }
 
@@ -464,16 +311,39 @@
 
   CompilationUnit parseCompilationUnit2(
       String content, GatheringErrorListener listener) {
-    // Scan tokens
     var source = new StringSource(content, 'parser_test_StringSource.dart');
-    var scanner = new Scanner.fasta(source, listener);
-    scanner.scanGenericMethodComments = enableGenericMethodComments;
-    _fastaTokens = scanner.tokenize();
+
+    void reportError(
+        ScannerErrorCode errorCode, int offset, List<Object> arguments) {
+      listener
+          .onError(new AnalysisError(source, offset, 1, errorCode, arguments));
+    }
+
+    // Scan tokens
+    ScannerResult result = scanString(content, includeComments: true);
+    Token token = result.tokens;
+    if (result.hasErrors) {
+      // The default recovery strategy used by scanString
+      // places all error tokens at the head of the stream.
+      while (token.type == TokenType.BAD_INPUT) {
+        translateErrorToken(token, reportError);
+        token = token.next;
+      }
+    }
+    _fastaTokens = token;
 
     // Run parser
-    analyzer.Parser parser =
-        new analyzer.Parser(source, listener, useFasta: true);
-    CompilationUnit unit = parser.parseCompilationUnit(_fastaTokens);
+    ErrorReporter errorReporter = new ErrorReporter(listener, source);
+    fasta.Parser parser = new fasta.Parser(null);
+    AstBuilder astBuilder = new AstBuilder(errorReporter, source.uri, true);
+    parser.listener = astBuilder;
+    parser.isMixinSupportEnabled = true;
+    astBuilder.parser = parser;
+    astBuilder.allowNativeClause = allowNativeClause;
+    parser.parseUnit(_fastaTokens);
+    CompilationUnitImpl unit = astBuilder.pop();
+    unit.localDeclarations = astBuilder.localDeclarations;
+
     expect(unit, isNotNull);
     return unit;
   }
@@ -766,22 +636,7 @@
  */
 @reflectiveTest
 class FormalParameterParserTest_Fasta extends FastaParserTestCase
-    with FormalParameterParserTestMixin {
-  @override
-  void test_parseNormalFormalParameter_function_noType_typeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseNormalFormalParameter_function_type_typeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseNormalFormalParameter_function_void_typeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-}
+    with FormalParameterParserTestMixin {}
 
 /**
  * Proxy implementation of the analyzer parser, implemented in terms of the
@@ -805,26 +660,20 @@
    * Fasta token.
    */
   factory ParserProxy(analyzer.Token firstToken,
-      {bool allowNativeClause: false,
-      bool enableGenericMethodComments: false,
-      int expectedEndOffset}) {
+      {bool allowNativeClause: false, int expectedEndOffset}) {
     TestSource source = new TestSource();
     var errorListener = new GatheringErrorListener(checkRanges: true);
     var errorReporter = new ErrorReporter(errorListener, source);
     return new ParserProxy._(firstToken, errorReporter, null, errorListener,
         allowNativeClause: allowNativeClause,
-        enableGenericMethodComments: enableGenericMethodComments,
         expectedEndOffset: expectedEndOffset);
   }
 
   ParserProxy._(analyzer.Token firstToken, ErrorReporter errorReporter,
       Uri fileUri, this._errorListener,
-      {bool allowNativeClause: false,
-      bool enableGenericMethodComments: false,
-      this.expectedEndOffset})
+      {bool allowNativeClause: false, this.expectedEndOffset})
       : super(firstToken, errorReporter, fileUri,
-            allowNativeClause: allowNativeClause,
-            enableGenericMethodComments: enableGenericMethodComments) {
+            allowNativeClause: allowNativeClause) {
     _eventListener = new ForwardingTestListener(astBuilder);
     fastaParser.listener = _eventListener;
   }
@@ -1055,43 +904,7 @@
  */
 @reflectiveTest
 class StatementParserTest_Fasta extends FastaParserTestCase
-    with StatementParserTestMixin {
-  @override
-  void test_parseFunctionDeclarationStatement_typeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void
-      test_parseStatement_functionDeclaration_noReturnType_typeParameterComments() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseVariableDeclarationListAfterMetadata_const_typeComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseVariableDeclarationListAfterMetadata_dynamic_typeComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseVariableDeclarationListAfterMetadata_final_typeComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseVariableDeclarationListAfterMetadata_type_typeComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-
-  @override
-  void test_parseVariableDeclarationListAfterMetadata_var_typeComment() {
-    // Ignored: Fasta does not support the generic comment syntax.
-  }
-}
+    with StatementParserTestMixin {}
 
 /**
  * Tests of the fasta parser based on [TopLevelParserTestMixin].
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 1a32e5f..2bbf423 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -55,8 +54,6 @@
 
   void set allowNativeClause(bool value);
 
-  void set enableGenericMethodComments(bool value);
-
   void set enableLazyAssignmentOperators(bool value);
 
   void set enableNnbd(bool value);
@@ -736,177 +733,6 @@
     expect(method.returnType, isNotNull);
   }
 
-  void test_parseClassMember_method_generic_comment_noReturnType() {
-    enableGenericMethodComments = true;
-    createParser('m/*<T>*/() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    expect(method.externalKeyword, isNull);
-    expect(method.modifierKeyword, isNull);
-    expect(method.propertyKeyword, isNull);
-    expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
-    expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
-    expect(method.parameters, isNotNull);
-    expect(method.body, isNotNull);
-  }
-
-  void test_parseClassMember_method_generic_comment_parameterType() {
-    enableGenericMethodComments = true;
-    createParser('m/*<T>*/(dynamic /*=T*/ p) => null;');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    expect(method.externalKeyword, isNull);
-    expect(method.modifierKeyword, isNull);
-    expect(method.propertyKeyword, isNull);
-    expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
-    expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
-
-    FormalParameterList parameters = method.parameters;
-    expect(parameters, isNotNull);
-    expect(parameters.parameters, hasLength(1));
-    var parameter = parameters.parameters[0] as SimpleFormalParameter;
-    var parameterType = parameter.type as TypeName;
-    expect(parameterType.name.name, 'T');
-
-    expect(method.body, isNotNull);
-  }
-
-  void test_parseClassMember_method_generic_comment_returnType() {
-    enableGenericMethodComments = true;
-    createParser('/*=T*/ m/*<T>*/() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    expect(method.externalKeyword, isNull);
-    expect(method.modifierKeyword, isNull);
-    expect(method.propertyKeyword, isNull);
-    expect(method.returnType, isNotNull);
-    expect((method.returnType as TypeName).name.name, 'T');
-    expect(method.name, isNotNull);
-    expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
-    expect(method.parameters, isNotNull);
-    expect(method.body, isNotNull);
-  }
-
-  void test_parseClassMember_method_generic_comment_returnType_bound() {
-    enableGenericMethodComments = true;
-    createParser('num/*=T*/ m/*<T extends num>*/() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    expect(method.externalKeyword, isNull);
-    expect(method.modifierKeyword, isNull);
-    expect(method.propertyKeyword, isNull);
-    expect((method.returnType as TypeName).name.name, 'T');
-    expect(method.name, isNotNull);
-    expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
-    TypeParameter tp = method.typeParameters.typeParameters[0];
-    expect(tp.name.name, 'T');
-    expect(tp.extendsKeyword, isNotNull);
-    expect((tp.bound as TypeName).name.name, 'num');
-    expect(method.parameters, isNotNull);
-    expect(method.body, isNotNull);
-  }
-
-  void test_parseClassMember_method_generic_comment_returnType_complex() {
-    enableGenericMethodComments = true;
-    createParser('dynamic /*=Map<int, T>*/ m/*<T>*/() => null;');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    expect(method.externalKeyword, isNull);
-    expect(method.modifierKeyword, isNull);
-    expect(method.propertyKeyword, isNull);
-
-    {
-      var returnType = method.returnType as TypeName;
-      expect(returnType, isNotNull);
-      expect(returnType.name.name, 'Map');
-
-      List<TypeAnnotation> typeArguments = returnType.typeArguments.arguments;
-      expect(typeArguments, hasLength(2));
-      expect((typeArguments[0] as TypeName).name.name, 'int');
-      expect((typeArguments[1] as TypeName).name.name, 'T');
-    }
-
-    expect(method.name, isNotNull);
-    expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
-    expect(method.parameters, isNotNull);
-    expect(method.body, isNotNull);
-  }
-
-  void test_parseClassMember_method_generic_comment_void() {
-    enableGenericMethodComments = true;
-    createParser('void m/*<T>*/() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.documentationComment, isNull);
-    expect(method.externalKeyword, isNull);
-    expect(method.modifierKeyword, isNull);
-    expect(method.propertyKeyword, isNull);
-    expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
-    expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
-    expect(method.parameters, isNotNull);
-    expect(method.body, isNotNull);
-  }
-
   void test_parseClassMember_method_generic_noReturnType() {
     createParser('m<T>() {}');
     ClassMember member = parser.parseClassMember('C');
@@ -1120,6 +946,44 @@
     expect(method.body, isNotNull);
   }
 
+  void test_parseClassMember_method_get_static_namedAsClass() {
+    createParser('static int get C => 0;');
+    ClassMember member = parser.parseClassMember('C');
+    expect(member, isNotNull);
+    assertNoErrors();
+    expect(member, new TypeMatcher<MethodDeclaration>());
+    MethodDeclaration method = member;
+    expect(method.documentationComment, isNull);
+    expect(method.externalKeyword, isNull);
+    expect(method.modifierKeyword, isNotNull);
+    expect(method.propertyKeyword, isNotNull);
+    expect(method.returnType, isNotNull);
+    expect(method.name, isNotNull);
+    expect(method.operatorKeyword, isNull);
+    expect(method.typeParameters, isNull);
+    expect(method.parameters, isNull);
+    expect(method.body, isNotNull);
+  }
+
+  void test_parseClassMember_method_set_static_namedAsClass() {
+    createParser('static void set C(_) {}');
+    ClassMember member = parser.parseClassMember('C');
+    expect(member, isNotNull);
+    assertNoErrors();
+    expect(member, new TypeMatcher<MethodDeclaration>());
+    MethodDeclaration method = member;
+    expect(method.documentationComment, isNull);
+    expect(method.externalKeyword, isNull);
+    expect(method.modifierKeyword, isNotNull);
+    expect(method.propertyKeyword, isNotNull);
+    expect(method.returnType, isNotNull);
+    expect(method.name, isNotNull);
+    expect(method.operatorKeyword, isNull);
+    expect(method.typeParameters, isNull);
+    expect(method.parameters, isNotNull);
+    expect(method.body, isNotNull);
+  }
+
   void test_parseClassMember_method_gftReturnType_noReturnType() {
     createParser('''
 Function<A>(core.List<core.int> x) m() => null;
@@ -1369,28 +1233,36 @@
     expect(method.body, isNotNull);
   }
 
-  void test_parseClassMember_method_static_generic_comment_returnType() {
-    enableGenericMethodComments = true;
-    createParser('static /*=T*/ m/*<T>*/() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expect(member, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
+  void test_parseClassMember_method_static_class() {
+    var unit = parseCompilationUnit('class C { static void m() {} }');
+
+    ClassDeclaration c = unit.declarations[0];
+    MethodDeclaration method = c.members[0];
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNotNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect((method.returnType as TypeName).name.name, 'T');
     expect(method.name, isNotNull);
     expect(method.operatorKeyword, isNull);
-    expect(method.typeParameters, isNotNull);
+    expect(method.typeParameters, isNull);
+    expect(method.parameters, isNotNull);
+    expect(method.body, isNotNull);
+  }
+
+  void test_parseClassMember_method_static_mixin() {
+    var unit = parseCompilationUnit('mixin C { static void m() {} }');
+
+    MixinDeclaration c = unit.declarations[0];
+    MethodDeclaration method = c.members[0];
+    expect(method.documentationComment, isNull);
+    expect(method.externalKeyword, isNull);
+    expect(method.modifierKeyword, isNotNull);
+    expect(method.propertyKeyword, isNull);
+    expect(method.returnType, isNotNull);
+    expect(method.name, isNotNull);
+    expect(method.operatorKeyword, isNull);
+    expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
     expect(method.body, isNotNull);
   }
@@ -1994,19 +1866,6 @@
     expect(argumentList4.arguments, hasLength(1));
   }
 
-  void test_assignableExpression_arguments_normal_chain_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    _validate_assignableExpression_arguments_normal_chain_typeArguments(
-        "a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e).f",
-        usingFastaParser
-            ? []
-            : [
-                HintCode.GENERIC_METHOD_COMMENT,
-                HintCode.GENERIC_METHOD_COMMENT,
-                HintCode.GENERIC_METHOD_COMMENT
-              ]);
-  }
-
   void test_assignableExpression_arguments_normal_chain_typeArguments() {
     _validate_assignableExpression_arguments_normal_chain_typeArguments(
         "a<E>(b)<F>(c).d<G>(e).f");
@@ -4372,37 +4231,6 @@
               ]);
   }
 
-  void test_method_invalidTypeParameterComments() {
-    enableGenericMethodComments = true;
-    createParser('void m/*<E, hello!>*/() {}');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    // TODO(brianwilkerson) Seems like this ought to be expecting a single
-    // extraneous token error (for the bang).
-    if (usingFastaParser) {
-      listener.assertErrors([
-        expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0) /*>*/,
-        expectedError(ParserErrorCode.MISSING_IDENTIFIER, 0, 0),
-        expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0) /*(*/,
-        expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0) /*)*/,
-        expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 0, 0)
-      ]);
-    } else {
-      listener.assertErrorsWithCodes([
-        ParserErrorCode.EXPECTED_TOKEN /*>*/,
-        ParserErrorCode.MISSING_IDENTIFIER,
-        ParserErrorCode.EXPECTED_TOKEN /*(*/,
-        ParserErrorCode.EXPECTED_TOKEN /*)*/,
-        ParserErrorCode.MISSING_FUNCTION_BODY,
-        HintCode.GENERIC_METHOD_COMMENT
-      ]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.typeParameters.toString(), '<E, hello>',
-        reason: 'parser recovers what it can');
-  }
-
   void test_method_invalidTypeParameterExtends() {
     // Regression test for https://github.com/dart-lang/sdk/issues/25739.
 
@@ -4426,45 +4254,6 @@
         reason: 'parser recovers what it can');
   }
 
-  void test_method_invalidTypeParameterExtendsComment() {
-    // Regression test for https://github.com/dart-lang/sdk/issues/25739.
-
-    // TODO(jmesserly): ideally we'd be better at parser recovery here.
-    // Also, this behavior is slightly different from how we would parse a
-    // normal generic method, because we "discover" the comment at a different
-    // point in the parser. This has a slight effect on the AST that results
-    // from error recovery.
-    enableGenericMethodComments = true;
-    createParser('f/*<E>*/(dynamic/*=E extends num*/p);');
-    ClassMember member = parser.parseClassMember('C');
-    expectNotNullIfNoErrors(member);
-    if (usingFastaParser) {
-      listener.assertErrors([
-        expectedError(
-            ParserErrorCode.MISSING_IDENTIFIER, 0, 0), // `extends` is a keyword
-        expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0), // comma
-        expectedError(
-            ParserErrorCode.MISSING_IDENTIFIER, 0, 0), // `extends` is a keyword
-        expectedError(ParserErrorCode.EXPECTED_TOKEN, 0, 0), // close paren
-        expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 0, 0)
-      ]);
-    } else {
-      listener.assertErrorsWithCodes([
-        ParserErrorCode.MISSING_IDENTIFIER, // `extends` is a keyword
-        ParserErrorCode.EXPECTED_TOKEN, // comma
-        ParserErrorCode.MISSING_IDENTIFIER, // `extends` is a keyword
-        ParserErrorCode.EXPECTED_TOKEN, // close paren
-        ParserErrorCode.MISSING_FUNCTION_BODY,
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT
-      ]);
-    }
-    expect(member, new TypeMatcher<MethodDeclaration>());
-    MethodDeclaration method = member;
-    expect(method.parameters.toString(), '(E extends, extends)',
-        reason: 'parser recovers what it can');
-  }
-
   void test_method_invalidTypeParameters() {
     // TODO(jmesserly): ideally we'd be better at parser recovery here.
     // It doesn't try to advance past the invalid token `!` to find the
@@ -6043,28 +5832,6 @@
     expect(propertyAccess.propertyName, isNotNull);
   }
 
-  void
-      test_parseAssignableExpression_expression_args_dot_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseAssignableExpression('(x)/*<F>*/(y).z', false);
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var propertyAccess = expression as PropertyAccess;
-    FunctionExpressionInvocation invocation =
-        propertyAccess.target as FunctionExpressionInvocation;
-    expect(invocation.function, isNotNull);
-    expect(invocation.typeArguments, isNotNull);
-    ArgumentList argumentList = invocation.argumentList;
-    expect(argumentList, isNotNull);
-    expect(argumentList.arguments, hasLength(1));
-    expect(propertyAccess.operator, isNotNull);
-    expect(propertyAccess.propertyName, isNotNull);
-  }
-
   void test_parseAssignableExpression_expression_args_dot_typeArguments() {
     Expression expression = parseAssignableExpression('(x)<F>(y).z', false);
     expect(expression, isNotNull);
@@ -6135,27 +5902,6 @@
     expect(propertyAccess.propertyName, isNotNull);
   }
 
-  void
-      test_parseAssignableExpression_identifier_args_dot_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseAssignableExpression('x/*<E>*/(y).z', false);
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var propertyAccess = expression as PropertyAccess;
-    MethodInvocation invocation = propertyAccess.target as MethodInvocation;
-    expect(invocation.methodName.name, "x");
-    expect(invocation.typeArguments, isNotNull);
-    ArgumentList argumentList = invocation.argumentList;
-    expect(argumentList, isNotNull);
-    expect(argumentList.arguments, hasLength(1));
-    expect(propertyAccess.operator, isNotNull);
-    expect(propertyAccess.propertyName, isNotNull);
-  }
-
   void test_parseAssignableExpression_identifier_args_dot_typeArguments() {
     Expression expression = parseAssignableExpression('x<E>(y).z', false);
     expect(expression, isNotNull);
@@ -6356,21 +6102,6 @@
     expect(section.argumentList, isNotNull);
   }
 
-  void test_parseCascadeSection_ia_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseCascadeSection('..[i]/*<E>*/(b)');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var section = expression as FunctionExpressionInvocation;
-    expect(section.function, new TypeMatcher<IndexExpression>());
-    expect(section.typeArguments, isNotNull);
-    expect(section.argumentList, isNotNull);
-  }
-
   void test_parseCascadeSection_ia_typeArguments() {
     Expression expression = parseCascadeSection('..[i]<E>(b)');
     expect(expression, isNotNull);
@@ -6394,25 +6125,6 @@
     expect(section.argumentList.arguments, hasLength(1));
   }
 
-  void test_parseCascadeSection_ii_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseCascadeSection('..a/*<E>*/(b).c/*<F>*/(d)');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var section = expression as MethodInvocation;
-    expect(section.target, new TypeMatcher<MethodInvocation>());
-    expect(section.operator, isNotNull);
-    expect(section.methodName, isNotNull);
-    expect(section.typeArguments, isNotNull);
-    expect(section.argumentList, isNotNull);
-    expect(section.argumentList.arguments, hasLength(1));
-  }
-
   void test_parseCascadeSection_ii_typeArguments() {
     Expression expression = parseCascadeSection('..a<E>(b).c<F>(d)');
     expect(expression, isNotNull);
@@ -6459,19 +6171,6 @@
         (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
   }
 
-  void test_parseCascadeSection_p_assign_withCascade_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseCascadeSection('..a = 3..m/*<E>*/()');
-    expect(expression, isNotNull);
-    assertNoErrors();
-    var section = expression as AssignmentExpression;
-    expect(section.leftHandSide, isNotNull);
-    expect(section.operator, isNotNull);
-    Expression rhs = section.rightHandSide;
-    EngineTestCase.assertInstanceOf(
-        (obj) => obj is IntegerLiteral, IntegerLiteral, rhs);
-  }
-
   void test_parseCascadeSection_p_assign_withCascade_typeArguments() {
     Expression expression = parseCascadeSection('..a = 3..m<E>()');
     expect(expression, isNotNull);
@@ -6507,24 +6206,6 @@
     expect(section.argumentList.arguments, hasLength(1));
   }
 
-  void test_parseCascadeSection_pa_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseCascadeSection('..a/*<E>*/(b)');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var section = expression as MethodInvocation;
-    expect(section.target, isNull);
-    expect(section.operator, isNotNull);
-    expect(section.methodName, isNotNull);
-    expect(section.typeArguments, isNotNull);
-    expect(section.argumentList, isNotNull);
-    expect(section.argumentList.arguments, hasLength(1));
-  }
-
   void test_parseCascadeSection_pa_typeArguments() {
     Expression expression = parseCascadeSection('..a<E>(b)');
     expect(expression, isNotNull);
@@ -6549,23 +6230,6 @@
     expect(section.argumentList.arguments, hasLength(1));
   }
 
-  void test_parseCascadeSection_paa_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseCascadeSection('..a/*<E>*/(b)/*<F>*/(c)');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var section = expression as FunctionExpressionInvocation;
-    expect(section.function, new TypeMatcher<MethodInvocation>());
-    expect(section.typeArguments, isNotNull);
-    expect(section.argumentList, isNotNull);
-    expect(section.argumentList.arguments, hasLength(1));
-  }
-
   void test_parseCascadeSection_paa_typeArguments() {
     Expression expression = parseCascadeSection('..a<E>(b)<F>(c)');
     expect(expression, isNotNull);
@@ -6588,28 +6252,6 @@
     expect(section.argumentList.arguments, hasLength(1));
   }
 
-  void test_parseCascadeSection_paapaa_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression =
-        parseCascadeSection('..a/*<E>*/(b)/*<F>*/(c).d/*<G>*/(e)/*<H>*/(f)');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT
-      ]);
-    }
-    var section = expression as FunctionExpressionInvocation;
-    expect(section.function, new TypeMatcher<MethodInvocation>());
-    expect(section.typeArguments, isNotNull);
-    expect(section.argumentList, isNotNull);
-    expect(section.argumentList.arguments, hasLength(1));
-  }
-
   void test_parseCascadeSection_paapaa_typeArguments() {
     Expression expression =
         parseCascadeSection('..a<E>(b)<F>(c).d<G>(e)<H>(f)');
@@ -6632,21 +6274,6 @@
     expect(section.propertyName, isNotNull);
   }
 
-  void test_parseCascadeSection_pap_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseCascadeSection('..a/*<E>*/(b).c');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var section = expression as PropertyAccess;
-    expect(section.target, isNotNull);
-    expect(section.operator, isNotNull);
-    expect(section.propertyName, isNotNull);
-  }
-
   void test_parseCascadeSection_pap_typeArguments() {
     Expression expression = parseCascadeSection('..a<E>(b).c');
     expect(expression, isNotNull);
@@ -6695,23 +6322,6 @@
     expect(literal.rightBracket, isNotNull);
   }
 
-  void test_parseConstExpression_listLiteral_typed_genericComment() {
-    enableGenericMethodComments = true;
-    Expression expression = parseConstExpression('const /*<A>*/ []');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var literal = expression as ListLiteral;
-    expect(literal.constKeyword, isNotNull);
-    expect(literal.typeArguments, isNotNull);
-    expect(literal.leftBracket, isNotNull);
-    expect(literal.elements, hasLength(0));
-    expect(literal.rightBracket, isNotNull);
-  }
-
   void test_parseConstExpression_listLiteral_untyped() {
     Expression expression = parseConstExpression('const []');
     expect(expression, isNotNull);
@@ -6735,22 +6345,6 @@
     expect(literal.typeArguments, isNotNull);
   }
 
-  void test_parseConstExpression_mapLiteral_typed_genericComment() {
-    enableGenericMethodComments = true;
-    Expression expression = parseConstExpression('const /*<A, B>*/ {}');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var literal = expression as MapLiteral;
-    expect(literal.leftBracket, isNotNull);
-    expect(literal.entries, hasLength(0));
-    expect(literal.rightBracket, isNotNull);
-    expect(literal.typeArguments, isNotNull);
-  }
-
   void test_parseConstExpression_mapLiteral_typed_missingGt() {
     Expression expression = parseExpression('const <A, B {}',
         errors: [expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1)]);
@@ -6893,6 +6487,56 @@
     expect(invocation.argumentList, isNotNull);
   }
 
+  void test_parseExpression_sendWithTypeParam_afterIndex() {
+    final unit = parseCompilationUnit('main() { factories[C]<num, int>(); }');
+    expect(unit.declarations, hasLength(1));
+    FunctionDeclaration mainMethod = unit.declarations[0];
+    BlockFunctionBody body = mainMethod.functionExpression.body;
+    NodeList<Statement> statements = body.block.statements;
+    expect(statements, hasLength(1));
+    ExpressionStatement statement = statements[0];
+    FunctionExpressionInvocation expression = statement.expression;
+
+    IndexExpression function = expression.function;
+    SimpleIdentifier target = function.target;
+    expect(target.name, 'factories');
+    SimpleIdentifier index = function.index;
+    expect(index.name, 'C');
+
+    NodeList<TypeAnnotation> typeArguments = expression.typeArguments.arguments;
+    expect(typeArguments, hasLength(2));
+    expect((typeArguments[0] as NamedType).name.name, 'num');
+    expect((typeArguments[1] as NamedType).name.name, 'int');
+
+    expect(expression.argumentList.arguments, hasLength(0));
+  }
+
+  void test_parseExpression_sendWithTypeParam_afterSend() {
+    final unit = parseCompilationUnit('main() { factories(C)<num, int>(); }');
+    expect(unit.declarations, hasLength(1));
+    FunctionDeclaration mainMethod = unit.declarations[0];
+    BlockFunctionBody body = mainMethod.functionExpression.body;
+    NodeList<Statement> statements = body.block.statements;
+    expect(statements, hasLength(1));
+    ExpressionStatement statement = statements[0];
+    FunctionExpressionInvocation expression = statement.expression;
+
+    MethodInvocation invocation = expression.function;
+    expect(invocation.methodName.name, 'factories');
+    NodeList<Expression> invocationArguments =
+        invocation.argumentList.arguments;
+    expect(invocationArguments, hasLength(1));
+    SimpleIdentifier index = invocationArguments[0];
+    expect(index.name, 'C');
+
+    NodeList<TypeAnnotation> typeArguments = expression.typeArguments.arguments;
+    expect(typeArguments, hasLength(2));
+    expect((typeArguments[0] as NamedType).name.name, 'num');
+    expect((typeArguments[1] as NamedType).name.name, 'int');
+
+    expect(expression.argumentList.arguments, hasLength(0));
+  }
+
   void test_parseExpression_superMethodInvocation() {
     Expression expression = parseExpression('super.m()');
     var invocation = expression as MethodInvocation;
@@ -6902,18 +6546,6 @@
     expect(invocation.argumentList, isNotNull);
   }
 
-  void test_parseExpression_superMethodInvocation_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression;
-    expression = parseExpression('super.m/*<E>*/()',
-        codes: usingFastaParser ? [] : [HintCode.GENERIC_METHOD_COMMENT]);
-    var invocation = expression as MethodInvocation;
-    expect(invocation.target, isNotNull);
-    expect(invocation.methodName, isNotNull);
-    expect(invocation.typeArguments, isNotNull);
-    expect(invocation.argumentList, isNotNull);
-  }
-
   void test_parseExpression_superMethodInvocation_typeArguments() {
     Expression expression = parseExpression('super.m<E>()');
     var invocation = expression as MethodInvocation;
@@ -6983,23 +6615,6 @@
   }
 
   void
-      test_parseExpressionWithoutCascade_superMethodInvocation_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parseExpressionWithoutCascade('super.m/*<E>*/()');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var invocation = expression as MethodInvocation;
-    expect(invocation.target, isNotNull);
-    expect(invocation.methodName, isNotNull);
-    expect(invocation.typeArguments, isNotNull);
-    expect(invocation.argumentList, isNotNull);
-  }
-
-  void
       test_parseExpressionWithoutCascade_superMethodInvocation_typeArguments() {
     Expression expression = parseExpressionWithoutCascade('super.m<E>()');
     expect(expression, isNotNull);
@@ -7058,25 +6673,6 @@
     }
   }
 
-  void test_parseFunctionExpression_typeParameterComments() {
-    enableGenericMethodComments = true;
-    FunctionExpression expression =
-        parseFunctionExpression('/*<E>*/(/*=E*/ i) => i++');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes(
-          [HintCode.GENERIC_METHOD_COMMENT, HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(expression.body, isNotNull);
-    expect(expression.typeParameters, isNotNull);
-    expect(expression.parameters, isNotNull);
-    expect((expression.body as ExpressionFunctionBody).semicolon, isNull);
-    SimpleFormalParameter p = expression.parameters.parameters[0];
-    expect(p.type, isNotNull);
-  }
-
   void test_parseFunctionExpression_typeParameters() {
     FunctionExpression expression = parseFunctionExpression('<E>(E i) => i++');
     expect(expression, isNotNull);
@@ -7122,29 +6718,6 @@
   }
 
   void
-      test_parseInstanceCreationExpression_qualifiedType_named_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
-    InstanceCreationExpression expression =
-        parseInstanceCreationExpression('A.B/*<E>*/.c()', token);
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(expression.keyword.keyword, Keyword.NEW);
-    ConstructorName name = expression.constructorName;
-    expect(name, isNotNull);
-    TypeName type = name.type;
-    expect(type, isNotNull);
-    expect(type.typeArguments.arguments, hasLength(1));
-    expect(name.period, isNotNull);
-    expect(name.name, isNotNull);
-    expect(expression.argumentList, isNotNull);
-  }
-
-  void
       test_parseInstanceCreationExpression_qualifiedType_named_typeArguments() {
     Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
     InstanceCreationExpression expression =
@@ -7162,29 +6735,6 @@
     expect(expression.argumentList, isNotNull);
   }
 
-  void
-      test_parseInstanceCreationExpression_qualifiedType_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
-    InstanceCreationExpression expression =
-        parseInstanceCreationExpression('A.B/*<E>*/()', token);
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(expression.keyword.keyword, Keyword.NEW);
-    ConstructorName name = expression.constructorName;
-    expect(name, isNotNull);
-    TypeName type = name.type;
-    expect(type, isNotNull);
-    expect(type.typeArguments.arguments, hasLength(1));
-    expect(name.period, isNull);
-    expect(name.name, isNull);
-    expect(expression.argumentList, isNotNull);
-  }
-
   void test_parseInstanceCreationExpression_qualifiedType_typeArguments() {
     Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
     InstanceCreationExpression expression =
@@ -7236,28 +6786,6 @@
     expect(expression.argumentList, isNotNull);
   }
 
-  void test_parseInstanceCreationExpression_type_named_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
-    InstanceCreationExpression expression =
-        parseInstanceCreationExpression('A/*<B>*/.c()', token);
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(expression.keyword.keyword, Keyword.NEW);
-    ConstructorName name = expression.constructorName;
-    expect(name, isNotNull);
-    TypeName type = name.type;
-    expect(type, isNotNull);
-    expect(type.typeArguments.arguments, hasLength(1));
-    expect(name.period, isNotNull);
-    expect(name.name, isNotNull);
-    expect(expression.argumentList, isNotNull);
-  }
-
   void test_parseInstanceCreationExpression_type_named_typeArguments() {
     Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
     InstanceCreationExpression expression =
@@ -7275,29 +6803,6 @@
     expect(expression.argumentList, isNotNull);
   }
 
-  void test_parseInstanceCreationExpression_type_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
-    InstanceCreationExpression expression =
-        parseInstanceCreationExpression('A/*<B>*/()', token);
-    expect(expression, isNotNull);
-
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(expression.keyword.keyword, Keyword.NEW);
-    ConstructorName name = expression.constructorName;
-    expect(name, isNotNull);
-    TypeName type = name.type;
-    expect(type, isNotNull);
-    expect(type.typeArguments.arguments, hasLength(1));
-    expect(name.period, isNull);
-    expect(name.name, isNull);
-    expect(expression.argumentList, isNotNull);
-  }
-
   void test_parseInstanceCreationExpression_type_typeArguments() {
     Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
     InstanceCreationExpression expression =
@@ -7602,24 +7107,6 @@
   }
 
   void
-      test_parsePostfixExpression_none_methodInvocation_question_dot_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parsePostfixExpression('a?.m/*<E>*/()');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var methodInvocation = expression as MethodInvocation;
-    expect(methodInvocation.target, isNotNull);
-    expect(methodInvocation.operator.type, TokenType.QUESTION_PERIOD);
-    expect(methodInvocation.methodName, isNotNull);
-    expect(methodInvocation.typeArguments, isNotNull);
-    expect(methodInvocation.argumentList, isNotNull);
-  }
-
-  void
       test_parsePostfixExpression_none_methodInvocation_question_dot_typeArguments() {
     Expression expression = parsePostfixExpression('a?.m<E>()');
     expect(expression, isNotNull);
@@ -7632,24 +7119,6 @@
     expect(methodInvocation.argumentList, isNotNull);
   }
 
-  void
-      test_parsePostfixExpression_none_methodInvocation_typeArgumentComments() {
-    enableGenericMethodComments = true;
-    Expression expression = parsePostfixExpression('a.m/*<E>*/()');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var methodInvocation = expression as MethodInvocation;
-    expect(methodInvocation.target, isNotNull);
-    expect(methodInvocation.operator.type, TokenType.PERIOD);
-    expect(methodInvocation.methodName, isNotNull);
-    expect(methodInvocation.typeArguments, isNotNull);
-    expect(methodInvocation.argumentList, isNotNull);
-  }
-
   void test_parsePostfixExpression_none_methodInvocation_typeArguments() {
     Expression expression = parsePostfixExpression('a.m<E>()');
     expect(expression, isNotNull);
@@ -7798,20 +7267,6 @@
     expect(literal.typeArguments.arguments, hasLength(1));
   }
 
-  void test_parsePrimaryExpression_listLiteral_typed_genericComment() {
-    enableGenericMethodComments = true;
-    Expression expression = parsePrimaryExpression('/*<A>*/[ ]');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var literal = expression as ListLiteral;
-    expect(literal.typeArguments, isNotNull);
-    expect(literal.typeArguments.arguments, hasLength(1));
-  }
-
   void test_parsePrimaryExpression_mapLiteral() {
     Expression expression = parsePrimaryExpression('{}');
     expect(expression, isNotNull);
@@ -7830,20 +7285,6 @@
     expect(literal.typeArguments.arguments, hasLength(2));
   }
 
-  void test_parsePrimaryExpression_mapLiteral_typed_genericComment() {
-    enableGenericMethodComments = true;
-    Expression expression = parsePrimaryExpression('/*<A, B>*/{}');
-    expect(expression, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    var literal = expression as MapLiteral;
-    expect(literal.typeArguments, isNotNull);
-    expect(literal.typeArguments.arguments, hasLength(2));
-  }
-
   void test_parsePrimaryExpression_new() {
     Expression expression = parsePrimaryExpression('new A()');
     expect(expression, isNotNull);
@@ -9645,19 +9086,6 @@
     expect(functionParameter.parameters, isNotNull);
   }
 
-  void test_parseNormalFormalParameter_function_noType_typeParameterComments() {
-    enableGenericMethodComments = true;
-    NormalFormalParameter parameter = parseNormalFormalParameter('a/*<E>*/()',
-        errorCodes: usingFastaParser ? [] : [HintCode.GENERIC_METHOD_COMMENT]);
-    expect(parameter, isNotNull);
-    expect(parameter, new TypeMatcher<FunctionTypedFormalParameter>());
-    FunctionTypedFormalParameter functionParameter = parameter;
-    expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
-    expect(functionParameter.typeParameters, isNotNull);
-    expect(functionParameter.parameters, isNotNull);
-  }
-
   void test_parseNormalFormalParameter_function_noType_typeParameters() {
     NormalFormalParameter parameter = parseNormalFormalParameter('a<E>()');
     expect(parameter, isNotNull);
@@ -9685,20 +9113,6 @@
     expect(functionParameter.question, isNull);
   }
 
-  void test_parseNormalFormalParameter_function_type_typeParameterComments() {
-    enableGenericMethodComments = true;
-    NormalFormalParameter parameter = parseNormalFormalParameter('A a/*<E>*/()',
-        errorCodes: usingFastaParser ? [] : [HintCode.GENERIC_METHOD_COMMENT]);
-    expect(parameter, isNotNull);
-    expect(parameter, new TypeMatcher<FunctionTypedFormalParameter>());
-    FunctionTypedFormalParameter functionParameter = parameter;
-    expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
-    expect(functionParameter.typeParameters, isNotNull);
-    expect(functionParameter.parameters, isNotNull);
-    expect(functionParameter.question, isNull);
-  }
-
   void test_parseNormalFormalParameter_function_type_typeParameters() {
     NormalFormalParameter parameter = parseNormalFormalParameter('A a<E>()');
     expect(parameter, isNotNull);
@@ -9739,21 +9153,6 @@
     expect(functionParameter.question, isNull);
   }
 
-  void test_parseNormalFormalParameter_function_void_typeParameterComments() {
-    enableGenericMethodComments = true;
-    NormalFormalParameter parameter = parseNormalFormalParameter(
-        'void a/*<E>*/()',
-        errorCodes: usingFastaParser ? [] : [HintCode.GENERIC_METHOD_COMMENT]);
-    expect(parameter, isNotNull);
-    expect(parameter, new TypeMatcher<FunctionTypedFormalParameter>());
-    FunctionTypedFormalParameter functionParameter = parameter;
-    expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
-    expect(functionParameter.typeParameters, isNotNull);
-    expect(functionParameter.parameters, isNotNull);
-    expect(functionParameter.question, isNull);
-  }
-
   void test_parseNormalFormalParameter_function_void_typeParameters() {
     NormalFormalParameter parameter = parseNormalFormalParameter('void a<E>()');
     expect(parameter, isNotNull);
@@ -9916,11 +9315,6 @@
   bool parseAsync = true;
 
   /**
-   * Whether generic method comments should be enabled for the test.
-   */
-  bool enableGenericMethodComments = false;
-
-  /**
    * A flag indicating whether lazy assignment operators should be enabled for
    * the test.
    */
@@ -9939,6 +9333,12 @@
   bool enableOptionalNewAndConst = false;
 
   /**
+   * A flag indicating whether the parser should parse mixin declarations.
+   * https://github.com/dart-lang/language/issues/12
+   */
+  bool isMixinSupportEnabled = false;
+
+  /**
    * A flag indicating whether the parser is to parse part-of directives that
    * specify a URI rather than a library name.
    */
@@ -9986,7 +9386,6 @@
     //
     ScannerResult result = scanString(content,
         includeComments: true,
-        scanGenericMethodComments: enableGenericMethodComments,
         scanLazyAssignmentOperators: enableLazyAssignmentOperators);
     Token token = result.tokens;
     if (result.hasErrors) {
@@ -10003,10 +9402,13 @@
     //
     parser = new Parser(source, listener);
     parser.allowNativeClause = allowNativeClause;
-    parser.parseGenericMethodComments = enableGenericMethodComments;
     parser.parseFunctionBodies = parseFunctionBodies;
     parser.enableNnbd = enableNnbd;
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
+    if (parser is ParserAdapter) {
+      (parser as ParserAdapter).fastaParser.isMixinSupportEnabled =
+          isMixinSupportEnabled;
+    }
     parser.currentToken = token;
   }
 
@@ -10139,7 +9541,6 @@
     //
     ScannerResult result = scanString(content,
         includeComments: true,
-        scanGenericMethodComments: enableGenericMethodComments,
         scanLazyAssignmentOperators: enableLazyAssignmentOperators);
     Token token = result.tokens;
     if (result.hasErrors) {
@@ -10154,6 +9555,9 @@
 
     Parser parser = new Parser(source, listener);
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
+    if (parser is ParserAdapter) {
+      parser.fastaParser.isMixinSupportEnabled = isMixinSupportEnabled;
+    }
     CompilationUnit unit = parser.parseCompilationUnit(token);
     expect(unit, isNotNull);
     if (codes != null) {
@@ -10185,7 +9589,6 @@
     //
     ScannerResult result = scanString(content,
         includeComments: true,
-        scanGenericMethodComments: enableGenericMethodComments,
         scanLazyAssignmentOperators: enableLazyAssignmentOperators);
     Token token = result.tokens;
     if (result.hasErrors) {
@@ -10539,7 +9942,6 @@
     //
     ScannerResult result = scanString(content,
         includeComments: true,
-        scanGenericMethodComments: enableGenericMethodComments,
         scanLazyAssignmentOperators: enableLazyAssignmentOperators);
     Token token = result.tokens;
     if (result.hasErrors) {
@@ -10553,7 +9955,6 @@
     listener.setLineInfo(source, result.lineStarts);
 
     Parser parser = new Parser(source, listener);
-    parser.parseGenericMethodComments = enableGenericMethodComments;
     parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
     Statement statement = parser.parseStatement(token);
     expect(statement, isNotNull);
@@ -10586,7 +9987,6 @@
     // Scan the source.
     //
     ScannerResult result = scanString(content,
-        scanGenericMethodComments: enableGenericMethodComments,
         scanLazyAssignmentOperators: enableLazyAssignmentOperators);
     Token token = result.tokens;
     if (result.hasErrors) {
@@ -15598,27 +14998,6 @@
     expect(statement.functionDeclaration, isNotNull);
   }
 
-  void test_parseFunctionDeclarationStatement_typeParameterComments() {
-    enableGenericMethodComments = true;
-    var statement = parseStatement('/*=E*/ f/*<E>*/(/*=E*/ p) => p * 2;')
-        as FunctionDeclarationStatement;
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT
-      ]);
-    }
-    FunctionDeclaration f = statement.functionDeclaration;
-    expect(f, isNotNull);
-    expect(f.functionExpression.typeParameters, isNotNull);
-    expect(f.returnType, isNotNull);
-    SimpleFormalParameter p = f.functionExpression.parameters.parameters[0];
-    expect(p.type, isNotNull);
-  }
-
   void test_parseFunctionDeclarationStatement_typeParameters() {
     var statement =
         parseStatement('E f<E>(E p) => p * 2;') as FunctionDeclarationStatement;
@@ -15982,21 +15361,6 @@
     expect(statement.expression, isNotNull);
   }
 
-  void
-      test_parseStatement_functionDeclaration_noReturnType_typeParameterComments() {
-    enableGenericMethodComments = true;
-    var statement =
-        parseStatement('f/*<E>*/(a, b) {}') as FunctionDeclarationStatement;
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect(statement.functionDeclaration, isNotNull);
-    expect(statement.functionDeclaration.functionExpression.typeParameters,
-        isNotNull);
-  }
-
   void test_parseStatement_functionDeclaration_noReturnType_typeParameters() {
     var statement =
         parseStatement('f<E>(a, b) {}') as FunctionDeclarationStatement;
@@ -16372,30 +15736,6 @@
     expect(declarationList.variables, hasLength(1));
   }
 
-  void test_parseVariableDeclarationListAfterMetadata_const_typeComment() {
-    enableGenericMethodComments = true;
-    var declarationList = parseVariableDeclarationList('const/*=T*/ a');
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect((declarationList.type as TypeName).name.name, 'T');
-    expect(declarationList.isConst, true);
-  }
-
-  void test_parseVariableDeclarationListAfterMetadata_dynamic_typeComment() {
-    enableGenericMethodComments = true;
-    var declarationList = parseVariableDeclarationList('dynamic/*=T*/ a');
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect((declarationList.type as TypeName).name.name, 'T');
-    expect(declarationList.keyword, isNull);
-  }
-
   void test_parseVariableDeclarationListAfterMetadata_final_noType() {
     var declarationList = parseVariableDeclarationList('final a');
     assertNoErrors();
@@ -16412,18 +15752,6 @@
     expect(declarationList.variables, hasLength(1));
   }
 
-  void test_parseVariableDeclarationListAfterMetadata_final_typeComment() {
-    enableGenericMethodComments = true;
-    var declarationList = parseVariableDeclarationList('final/*=T*/ a');
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect((declarationList.type as TypeName).name.name, 'T');
-    expect(declarationList.isFinal, true);
-  }
-
   void test_parseVariableDeclarationListAfterMetadata_type_multiple() {
     var declarationList = parseVariableDeclarationList('A a, b, c');
     assertNoErrors();
@@ -16440,18 +15768,6 @@
     expect(declarationList.variables, hasLength(1));
   }
 
-  void test_parseVariableDeclarationListAfterMetadata_type_typeComment() {
-    enableGenericMethodComments = true;
-    var declarationList = parseVariableDeclarationList('int/*=T*/ a');
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect((declarationList.type as TypeName).name.name, 'T');
-    expect(declarationList.keyword, isNull);
-  }
-
   void test_parseVariableDeclarationListAfterMetadata_var_multiple() {
     var declarationList = parseVariableDeclarationList('var a, b, c');
     assertNoErrors();
@@ -16468,18 +15784,6 @@
     expect(declarationList.variables, hasLength(1));
   }
 
-  void test_parseVariableDeclarationListAfterMetadata_var_typeComment() {
-    enableGenericMethodComments = true;
-    var declarationList = parseVariableDeclarationList('var/*=T*/ a');
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expect((declarationList.type as TypeName).name.name, 'T');
-    expect(declarationList.keyword, isNull);
-  }
-
   void test_parseVariableDeclarationStatementAfterMetadata_multiple() {
     var statement =
         parseStatement('var x, y, z;') as VariableDeclarationStatement;
@@ -17911,31 +17215,6 @@
     expect(declaration.propertyKeyword, isNull);
   }
 
-  void test_parseFunctionDeclaration_functionWithTypeParameters_comment() {
-    if (usingFastaParser) {
-      // Ignored: Fasta does not support the generic comment syntax.
-      return;
-    }
-    enableGenericMethodComments = true;
-    createParser('/// Doc\nT f/*<E>*/() {}');
-    FunctionDeclaration declaration = parseFullCompilationUnitMember();
-    expect(declaration, isNotNull);
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([HintCode.GENERIC_METHOD_COMMENT]);
-    }
-    expectCommentText(declaration.documentationComment, '/// Doc');
-    expect((declaration.returnType as TypeName).name.name, 'T');
-    expect(declaration.name, isNotNull);
-    FunctionExpression expression = declaration.functionExpression;
-    expect(expression, isNotNull);
-    expect(expression.body, isNotNull);
-    expect(expression.typeParameters, isNotNull);
-    expect(expression.parameters, isNotNull);
-    expect(declaration.propertyKeyword, isNull);
-  }
-
   void test_parseFunctionDeclaration_getter() {
     createParser('/// Doc\nT get p => 0;');
     FunctionDeclaration declaration = parseFullCompilationUnitMember();
@@ -17952,37 +17231,6 @@
     expect(declaration.propertyKeyword, isNotNull);
   }
 
-  void test_parseFunctionDeclaration_getter_generic_comment_returnType() {
-    if (usingFastaParser) {
-      // Ignored: Fasta does not support the generic comment syntax.
-      return;
-    }
-    enableGenericMethodComments = true;
-    createParser('/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;');
-    var member = parseFullCompilationUnitMember();
-    expect(member, isNotNull);
-
-    if (usingFastaParser) {
-      assertNoErrors();
-    } else {
-      assertErrorsWithCodes([
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT,
-        HintCode.GENERIC_METHOD_COMMENT
-      ]);
-    }
-    var functionDeclaration = member as FunctionDeclaration;
-    var functionExpression = functionDeclaration.functionExpression;
-    expect(functionDeclaration.documentationComment, isNull);
-    expect(functionDeclaration.externalKeyword, isNull);
-    expect(functionDeclaration.propertyKeyword, isNull);
-    expect((functionDeclaration.returnType as TypeName).name.name, 'T');
-    expect(functionDeclaration.name, isNotNull);
-    expect(functionExpression.typeParameters, isNotNull);
-    expect(functionExpression.parameters, isNotNull);
-    expect(functionExpression.body, isNotNull);
-  }
-
   void test_parseFunctionDeclaration_metadata() {
     createParser(
         'T f(@A a, @B(2) Foo b, {@C.foo(3) c : 0, @d.E.bar(4, 5) x:0}) {}');
diff --git a/pkg/analyzer/test/generated/resolver_kernel_test.dart b/pkg/analyzer/test/generated/resolver_kernel_test.dart
deleted file mode 100644
index 86724f9..0000000
--- a/pkg/analyzer/test/generated/resolver_kernel_test.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'resolver_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(StrictModeTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class StrictModeTest_Kernel extends StrictModeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-}
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 068fe92..0b44b59 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -214,7 +214,10 @@
     Source source = addSource(code);
 
     TestAnalysisResult analysisResult = await computeAnalysisResult(source);
-    assertErrors(source, [ParserErrorCode.GETTER_IN_FUNCTION]);
+    assertErrors(source, [
+      ParserErrorCode.MISSING_FUNCTION_PARAMETERS,
+      ParserErrorCode.EXPECTED_TOKEN
+    ]);
 
     CompilationUnitElement unit = analysisResult.unit.declaredElement;
     LibraryElement library = unit.library;
@@ -624,11 +627,7 @@
   return n & 0x0F;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_conditional_and_is() async {
@@ -655,11 +654,7 @@
   return (n is! int) ? 0 : n & 0x0F;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_conditional_or_is() async {
@@ -668,11 +663,7 @@
   return (n is! int || n < 0) ? 0 : n & 0x0F;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_forEach() async {
@@ -684,11 +675,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_if_and_is() async {
@@ -725,11 +712,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_if_isNot_abrupt() async {
@@ -741,11 +724,7 @@
   return n & 0x0F;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_if_or_is() async {
@@ -758,11 +737,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_localVar() async {
@@ -772,11 +747,7 @@
   return n & 0x0F;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 }
 
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index 1898824..b16d635 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -348,8 +348,6 @@
    */
   AnalysisOptions get defaultAnalysisOptions => new AnalysisOptionsImpl();
 
-  bool get enableKernelDriver => false;
-
   bool get enableNewAnalysisDriver => false;
 
   /// TODO(brianwilkerson) Remove this getter.
@@ -380,8 +378,6 @@
    */
   TypeSystem get typeSystem => analysisContext2.typeSystem;
 
-  bool get useCFE => false;
-
   /**
    * Add a source file with the given [filePath] in the root of the file system.
    * The file path should be absolute. The file will have the given [contents]
@@ -665,9 +661,6 @@
     }
     options ??= defaultAnalysisOptions;
     if (enableNewAnalysisDriver) {
-      if (useCFE) {
-        (options as AnalysisOptionsImpl)..useFastaParser = true;
-      }
       DartSdk sdk = new MockSdk(resourceProvider: resourceProvider)
         ..context.analysisOptions = options;
 
@@ -699,8 +692,7 @@
           fileContentOverlay,
           null,
           sourceFactory,
-          options,
-          useCFE: enableKernelDriver);
+          options);
       scheduler.start();
     } else {
       if (packages != null) {
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 7dfebb2..62165ac 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -165,11 +165,9 @@
   }
 
   Token _scanWithListener(String source, GatheringErrorListener listener,
-      {bool genericMethodComments: false,
-      bool lazyAssignmentOperators: false}) {
+      {bool lazyAssignmentOperators: false}) {
     Scanner scanner =
         new Scanner(null, new CharSequenceReader(source), listener);
-    scanner.scanGenericMethodComments = genericMethodComments;
     scanner.scanLazyAssignmentOperators = lazyAssignmentOperators;
     Token result = scanner.tokenize();
     listener.setLineInfo(new TestSource(), scanner.lineStarts);
diff --git a/pkg/analyzer/test/generated/sdk_test.dart b/pkg/analyzer/test/generated/sdk_test.dart
index 7761536..0d2d841 100644
--- a/pkg/analyzer/test/generated/sdk_test.dart
+++ b/pkg/analyzer/test/generated/sdk_test.dart
@@ -88,8 +88,10 @@
 
   void test_equals_samePaths_differentOptions() {
     String path = '/a/b/c';
-    AnalysisOptionsImpl leftOptions = new AnalysisOptionsImpl()..useCFE = false;
-    AnalysisOptionsImpl rightOptions = new AnalysisOptionsImpl()..useCFE = true;
+    AnalysisOptionsImpl leftOptions = new AnalysisOptionsImpl()
+      ..useFastaParser = false;
+    AnalysisOptionsImpl rightOptions = new AnalysisOptionsImpl()
+      ..useFastaParser = true;
     SdkDescription left = new SdkDescription(<String>[path], leftOptions);
     SdkDescription right = new SdkDescription(<String>[path], rightOptions);
     expect(left == right, isFalse);
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 732ed20..f38ced1 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -1070,7 +1070,10 @@
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isFalse);
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+    assertErrors(
+      source,
+      [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR],
+    );
     verify([source]);
   }
 
@@ -1088,7 +1091,10 @@
     ClassElement a = unit.getType('A');
     expect(a.isValidMixin, isFalse);
     await computeAnalysisResult(source);
-    assertErrors(source, [CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+    assertErrors(
+      source,
+      [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR],
+    );
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
deleted file mode 100644
index 75bb7db..0000000
--- a/pkg/analyzer/test/generated/static_type_analyzer_kernel_test.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'static_type_analyzer_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(StaticTypeAnalyzer2Test_Kernel);
-  });
-}
-
-@reflectiveTest
-class StaticTypeAnalyzer2Test_Kernel extends StaticTypeAnalyzer2Test_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-}
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
deleted file mode 100644
index 95b7019..0000000
--- a/pkg/analyzer/test/generated/static_type_warning_code_kernel_test.dart
+++ /dev/null
@@ -1,343 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'static_type_warning_code_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(StaticTypeWarningCodeTest_Kernel);
-    defineReflectiveTests(StrongModeStaticTypeWarningCodeTest_Kernel);
-  });
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
-
-@reflectiveTest
-class StaticTypeWarningCodeTest_Kernel
-    extends StaticTypeWarningCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_assert_message_suppresses_type_promotion() async {
-    await super.test_assert_message_suppresses_type_promotion();
-  }
-
-  @override
-  @failingTest
-  test_instanceAccessToStaticMember_method_invocation() async {
-    await super.test_instanceAccessToStaticMember_method_invocation();
-  }
-
-  @override
-  @failingTest
-  test_instanceAccessToStaticMember_method_reference() async {
-    await super.test_instanceAccessToStaticMember_method_reference();
-  }
-
-  @override
-  @failingTest
-  test_instanceAccessToStaticMember_propertyAccess_field() async {
-    await super.test_instanceAccessToStaticMember_propertyAccess_field();
-  }
-
-  @override
-  @failingTest
-  test_instanceAccessToStaticMember_propertyAccess_getter() async {
-    await super.test_instanceAccessToStaticMember_propertyAccess_getter();
-  }
-
-  @override
-  @failingTest
-  test_instanceAccessToStaticMember_propertyAccess_setter() async {
-    await super.test_instanceAccessToStaticMember_propertyAccess_setter();
-  }
-
-  @override
-  @failingTest
-  test_invalidAssignment_dynamic() async {
-    await super.test_invalidAssignment_dynamic();
-  }
-
-  @override
-  @failingTest
-  test_nonTypeAsTypeArgument_notAType() async {
-    await super.test_nonTypeAsTypeArgument_notAType();
-  }
-
-  @override
-  @failingTest
-  test_returnOfInvalidType_async_future_int_mismatches_int() async {
-    await super.test_returnOfInvalidType_async_future_int_mismatches_int();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_classTypeAlias() async {
-    await super.test_typeArgumentNotMatchingBounds_classTypeAlias();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_extends() async {
-    await super.test_typeArgumentNotMatchingBounds_extends();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_extends_regressionInIssue18468Fix() async {
-    await super
-        .test_typeArgumentNotMatchingBounds_extends_regressionInIssue18468Fix();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_fieldFormalParameter() async {
-    await super.test_typeArgumentNotMatchingBounds_fieldFormalParameter();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_functionReturnType() async {
-    await super.test_typeArgumentNotMatchingBounds_functionReturnType();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_functionTypeAlias() async {
-    await super.test_typeArgumentNotMatchingBounds_functionTypeAlias();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_functionTypedFormalParameter() async {
-    await super
-        .test_typeArgumentNotMatchingBounds_functionTypedFormalParameter();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_implements() async {
-    await super.test_typeArgumentNotMatchingBounds_implements();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_is() async {
-    await super.test_typeArgumentNotMatchingBounds_is();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_methodInvocation_localFunction() async {
-    await super
-        .test_typeArgumentNotMatchingBounds_methodInvocation_localFunction();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_methodInvocation_method() async {
-    await super.test_typeArgumentNotMatchingBounds_methodInvocation_method();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_methodInvocation_topLevelFunction() async {
-    await super
-        .test_typeArgumentNotMatchingBounds_methodInvocation_topLevelFunction();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_methodReturnType() async {
-    await super.test_typeArgumentNotMatchingBounds_methodReturnType();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_new() async {
-    await super.test_typeArgumentNotMatchingBounds_new();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound() async {
-    await super.test_typeArgumentNotMatchingBounds_new_superTypeOfUpperBound();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_parameter() async {
-    await super.test_typeArgumentNotMatchingBounds_parameter();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_redirectingConstructor() async {
-    await super.test_typeArgumentNotMatchingBounds_redirectingConstructor();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_typeArgumentList() async {
-    await super.test_typeArgumentNotMatchingBounds_typeArgumentList();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_typeParameter() async {
-    await super.test_typeArgumentNotMatchingBounds_typeParameter();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_variableDeclaration() async {
-    await super.test_typeArgumentNotMatchingBounds_variableDeclaration();
-  }
-
-  @override
-  @failingTest
-  test_typeArgumentNotMatchingBounds_with() async {
-    await super.test_typeArgumentNotMatchingBounds_with();
-  }
-
-  @override
-  @failingTest
-  test_typeParameterSupertypeOfItsBound() async {
-    await super.test_typeParameterSupertypeOfItsBound();
-  }
-
-  @override
-  @failingTest
-  test_typePromotion_booleanAnd_useInRight_mutatedInLeft() async {
-    await super.test_typePromotion_booleanAnd_useInRight_mutatedInLeft();
-  }
-
-  @override
-  @failingTest
-  test_typePromotion_if_and_right_hasAssignment() async {
-    await super.test_typePromotion_if_and_right_hasAssignment();
-  }
-
-  @override
-  @failingTest
-  test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle() async {
-    await super.test_undefinedGetter_wrongNumberOfTypeArguments_tooLittle();
-  }
-
-  @override
-  @failingTest
-  test_undefinedGetter_wrongNumberOfTypeArguments_tooMany() async {
-    await super.test_undefinedGetter_wrongNumberOfTypeArguments_tooMany();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_generic_function_call() async {
-    await super.test_undefinedMethod_generic_function_call();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_ignoreTypePropagation() async {
-    await super.test_undefinedMethod_ignoreTypePropagation();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_leastUpperBoundWithNull() async {
-    await super.test_undefinedMethod_leastUpperBoundWithNull();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_object_call() async {
-    await super.test_undefinedMethod_object_call();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_ofNull() async {
-    await super.test_undefinedMethod_ofNull();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_proxy_annotation_fakeProxy() async {
-    await super.test_undefinedMethod_proxy_annotation_fakeProxy();
-  }
-
-  @override
-  @failingTest
-  test_undefinedMethod_typeLiteral_cascadeTarget() async {
-    await super.test_undefinedMethod_typeLiteral_cascadeTarget();
-  }
-
-  @override
-  @failingTest
-  test_undefinedSuperMethod() async {
-    await super.test_undefinedSuperMethod();
-  }
-
-  @override
-  @failingTest
-  test_wrongNumberOfTypeArguments_typeParameter() async {
-    await super.test_wrongNumberOfTypeArguments_typeParameter();
-  }
-
-  @override
-  @failingTest
-  test_yield_async_to_basic_type() async {
-    await super.test_yield_async_to_basic_type();
-  }
-
-  @override
-  @failingTest
-  test_yield_async_to_iterable() async {
-    await super.test_yield_async_to_iterable();
-  }
-
-  @override
-  @failingTest
-  test_yield_sync_to_basic_type() async {
-    await super.test_yield_sync_to_basic_type();
-  }
-
-  @override
-  @failingTest
-  test_yield_sync_to_stream() async {
-    await super.test_yield_sync_to_stream();
-  }
-}
-
-@reflectiveTest
-class StrongModeStaticTypeWarningCodeTest_Kernel
-    extends StrongModeStaticTypeWarningCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_genericMethodWrongNumberOfTypeArguments() async {
-    await super.test_genericMethodWrongNumberOfTypeArguments();
-  }
-}
diff --git a/pkg/analyzer/test/generated/static_type_warning_code_test.dart b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
index 21a69fe..e650103 100644
--- a/pkg/analyzer/test/generated/static_type_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_type_warning_code_test.dart
@@ -118,15 +118,7 @@
 library lib2;
 f() {}''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_METHOD,
-        HintCode.UNUSED_IMPORT,
-        HintCode.UNUSED_IMPORT
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
-    }
+    assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
   test_assert_message_suppresses_type_promotion() async {
@@ -542,8 +534,7 @@
   }
 
   test_inconsistentMethodInheritance_paramCount() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 abstract class A {
   int x();
 }
@@ -551,15 +542,11 @@
   int x(int y);
 }
 class C implements A, B {
-}''',
-        useCFE
-            ? [StaticWarningCode.INVALID_OVERRIDE_REQUIRED]
-            : [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+}''', [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
   }
 
   test_inconsistentMethodInheritance_paramType() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 abstract class A {
   x(int i);
 }
@@ -567,15 +554,11 @@
   x(String s);
 }
 abstract class C implements A, B {}
-''',
-        useCFE
-            ? [StrongModeCode.INVALID_METHOD_OVERRIDE]
-            : [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+''', [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
   }
 
   test_inconsistentMethodInheritance_returnType() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 abstract class A {
   int x();
 }
@@ -583,80 +566,57 @@
   String x();
 }
 abstract class C implements A, B {}
-''',
-        useCFE
-            ? [StrongModeCode.INVALID_METHOD_OVERRIDE]
-            : [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
+''', [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE]);
   }
 
   test_instanceAccessToStaticMember_method_invocation() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static m() {}
 }
 main(A a) {
   a.m();
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+}''', [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
   test_instanceAccessToStaticMember_method_reference() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static m() {}
 }
 main(A a) {
   a.m;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_GETTER]
-            : [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+}''', [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
   test_instanceAccessToStaticMember_propertyAccess_field() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static var f;
 }
 main(A a) {
   a.f;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_GETTER]
-            : [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+}''', [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
   test_instanceAccessToStaticMember_propertyAccess_getter() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static get f => 42;
 }
 main(A a) {
   a.f;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_GETTER]
-            : [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+}''', [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
   test_instanceAccessToStaticMember_propertyAccess_setter() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static set f(x) {}
 }
 main(A a) {
   a.f = 42;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_SETTER]
-            : [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
+}''', [StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER]);
   }
 
   test_invalidAssignment_compoundAssignment() async {
@@ -789,31 +749,22 @@
   }
 
   test_invocationOfNonFunction_localObject() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 f(Object o) {
   return o();
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
+}''', [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
   test_invocationOfNonFunction_localVariable() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   int x;
   return x();
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
+}''', [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
   test_invocationOfNonFunction_ordinaryInvocation() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static int x;
 }
@@ -821,31 +772,23 @@
   m() {
     A.x();
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
+}''', [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
     // A call to verify(source) fails as A.x() cannot be resolved.
   }
 
   test_invocationOfNonFunction_staticInvocation() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static int get g => 0;
   f() {
     A.g();
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
+}''', [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
     // A call to verify(source) fails as g() cannot be resolved.
   }
 
   test_invocationOfNonFunction_superExpression() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   int get g => 0;
 }
@@ -853,74 +796,48 @@
   m() {
     var v = super.g();
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
+}''', [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION]);
   }
 
   test_invocationOfNonFunctionExpression_literal() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   3(5);
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION]);
+}''', [StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION]);
   }
 
   test_nonBoolCondition_conditional() async {
-    await assertErrorsInCode(
-        "f() { return 3 ? 2 : 1; }",
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_CONDITION]);
+    await assertErrorsInCode("f() { return 3 ? 2 : 1; }",
+        [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
   test_nonBoolCondition_do() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   do {} while (3);
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_CONDITION]);
+}''', [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
   test_nonBoolCondition_for() async {
     // https://github.com/dart-lang/sdk/issues/24713
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   for (;3;) {}
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_CONDITION]);
+}''', [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
   test_nonBoolCondition_if() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   if (3) return 2; else return 1;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_CONDITION]);
+}''', [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
   test_nonBoolCondition_while() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   while (3) {}
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_CONDITION]);
+}''', [StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
 
   test_nonBoolExpression_functionType_bool() async {
@@ -930,90 +847,58 @@
   assert(makeAssertion);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
     verify([source]);
   }
 
   test_nonBoolExpression_functionType_int() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 int makeAssertion() => 1;
 f() {
   assert(makeAssertion);
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
+}''', [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
   }
 
   test_nonBoolExpression_interfaceType() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   assert(0);
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
+}''', [StaticTypeWarningCode.NON_BOOL_EXPRESSION]);
   }
 
   test_nonBoolNegationExpression() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 f() {
   !42;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION]);
+}''', [StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION]);
   }
 
   test_nonBoolOperand_and_left() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 bool f(int left, bool right) {
   return left && right;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_OPERAND]);
+}''', [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
   test_nonBoolOperand_and_right() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 bool f(bool left, String right) {
   return left && right;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_OPERAND]);
+}''', [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
   test_nonBoolOperand_or_left() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 bool f(List<int> left, bool right) {
   return left || right;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_OPERAND]);
+}''', [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
   test_nonBoolOperand_or_right() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 bool f(bool left, double right) {
   return left || right;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.NON_BOOL_OPERAND]);
+}''', [StaticTypeWarningCode.NON_BOOL_OPERAND]);
   }
 
   test_nonTypeAsTypeArgument_notAType() async {
@@ -1024,43 +909,28 @@
   }
 
   test_nonTypeAsTypeArgument_undefinedIdentifier() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class B<E> {}
-f(B<A> b) {}''',
-        useCFE
-            ? [
-                StaticWarningCode.NOT_A_TYPE,
-                CompileTimeErrorCode.UNDEFINED_CLASS
-              ]
-            : [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
+f(B<A> b) {}''', [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
   }
 
   test_returnOfInvalidType_async_future_future_int_mismatches_future_int() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import 'dart:async';
 Future<int> f() async {
   return g();
 }
 Future<Future<int>> g() => null;
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_async_future_int_mismatches_future_string() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import 'dart:async';
 Future<String> f() async {
   return 5;
 }
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_async_future_int_mismatches_int() async {
@@ -1076,84 +946,56 @@
 
   test_returnOfInvalidType_expressionFunctionBody_function() async {
     await assertErrorsInCode(
-        "int f() => '0';",
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+        "int f() => '0';", [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_expressionFunctionBody_getter() async {
     await assertErrorsInCode(
-        "int get g => '0';",
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+        "int get g => '0';", [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_expressionFunctionBody_localFunction() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   String m() {
     int f() => '0';
     return '0';
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+}''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_expressionFunctionBody_method() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   int f() => '0';
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+}''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_function() async {
-    await assertErrorsInCode(
-        "int f() { return '0'; }",
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+    await assertErrorsInCode("int f() { return '0'; }",
+        [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_getter() async {
-    await assertErrorsInCode(
-        "int get g { return '0'; }",
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+    await assertErrorsInCode("int get g { return '0'; }",
+        [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_localFunction() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   String m() {
     int f() { return '0'; }
     return '0';
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+}''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_method() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   int f() { return '0'; }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
+}''', [StaticTypeWarningCode.RETURN_OF_INVALID_TYPE]);
   }
 
   test_returnOfInvalidType_not_issued_for_expressionFunctionBody_void() async {
@@ -1601,28 +1443,20 @@
   }
 
   test_undefinedFunction() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 void f() {
   g();
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
+}''', [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
   }
 
   test_undefinedFunction_inCatch() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 void f() {
   try {
   } on Object {
     g();
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
+}''', [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
   }
 
   test_undefinedFunction_inImportedLib() async {
@@ -1633,11 +1467,7 @@
 library lib;
 h() {}''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
-    }
+    assertErrors(source, [StaticTypeWarningCode.UNDEFINED_FUNCTION]);
   }
 
   test_undefinedGetter() async {
@@ -1726,37 +1556,22 @@
   }
 
   test_undefinedGetter_wrongOfTypeArgument() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A<E> {
   E element;
 }
 main(A<NoSuchType> a) {
   a.element.anyGetterExistsInDynamic;
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_GETTER,
-                StaticWarningCode.NOT_A_TYPE,
-                CompileTimeErrorCode.UNDEFINED_CLASS
-              ]
-            : [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
+}''', [StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT]);
   }
 
   test_undefinedMethod() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   void m() {
     n();
   }
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_METHOD,
-                StaticTypeWarningCode.UNDEFINED_METHOD
-              ]
-            : [StaticTypeWarningCode.UNDEFINED_METHOD]);
+}''', [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
   test_undefinedMethod_assignmentExpression() async {
@@ -1825,20 +1640,13 @@
 class A {
   _foo() {}
 }''');
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 import 'lib.dart';
 class B extends A {
   test() {
     _foo();
   }
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_METHOD,
-                StaticTypeWarningCode.UNDEFINED_METHOD
-              ]
-            : [StaticTypeWarningCode.UNDEFINED_METHOD]);
+}''', [StaticTypeWarningCode.UNDEFINED_METHOD]);
   }
 
   test_undefinedMethod_proxy_annotation_fakeProxy() async {
@@ -1892,78 +1700,51 @@
   }
 
   test_undefinedOperator_indexBoth() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 f(A a) {
   a[0]++;
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_METHOD,
-                StaticTypeWarningCode.UNDEFINED_METHOD
-              ]
-            : [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_undefinedOperator_indexGetter() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 f(A a) {
   a[0];
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_undefinedOperator_indexSetter() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 f(A a) {
   a[0] = 1;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_undefinedOperator_plus() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 f(A a) {
   a + 1;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_undefinedOperator_postfixExpression() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(A a) {
   a++;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_undefinedOperator_prefixExpression() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(A a) {
   ++a;
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
   }
 
   test_undefinedSetter() async {
@@ -2007,48 +1788,33 @@
   }
 
   test_undefinedSuperOperator_binaryExpression() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 class B extends A {
   operator +(value) {
     return super + value;
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
   test_undefinedSuperOperator_indexBoth() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 class B extends A {
   operator [](index) {
     return super[index]++;
   }
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_SUPER_METHOD,
-                StaticTypeWarningCode.UNDEFINED_SUPER_METHOD
-              ]
-            : [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
   test_undefinedSuperOperator_indexGetter() async {
-    await assertErrorsInUnverifiedCode(
-        r'''
+    await assertErrorsInUnverifiedCode(r'''
 class A {}
 class B extends A {
   operator [](index) {
     return super[index + 1];
   }
-}''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_SUPER_METHOD]
-            : [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
+}''', [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
   test_undefinedSuperOperator_indexSetter() async {
@@ -2060,17 +1826,12 @@
     return super[index] = 0;
   }
 }''',
-        useCFE
+        previewDart2
             ? [
                 StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
-                StaticTypeWarningCode.UNDEFINED_SUPER_METHOD
+                StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR
               ]
-            : (previewDart2
-                ? [
-                    StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
-                    StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR
-                  ]
-                : [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]));
+            : [StaticTypeWarningCode.UNDEFINED_SUPER_OPERATOR]);
   }
 
   test_undefinedSuperSetter() async {
@@ -2084,8 +1845,7 @@
   }
 
   test_unqualifiedReferenceToNonLocalStaticMember_getter() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static int get a => 0;
 }
@@ -2093,21 +1853,11 @@
   int b() {
     return a;
   }
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_GETTER,
-                StaticTypeWarningCode.UNDEFINED_GETTER
-              ]
-            : [
-                StaticTypeWarningCode
-                    .UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
-              ]);
+}''', [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
   }
 
   test_unqualifiedReferenceToNonLocalStaticMember_getter_invokeTarget() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static int foo;
 }
@@ -2117,18 +1867,11 @@
     foo.abs();
   }
 }
-''',
-        useCFE
-            ? [StaticTypeWarningCode.UNDEFINED_GETTER]
-            : [
-                StaticTypeWarningCode
-                    .UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
-              ]);
+''', [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
   }
 
   test_unqualifiedReferenceToNonLocalStaticMember_method() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static void a() {}
 }
@@ -2136,21 +1879,11 @@
   void b() {
     a();
   }
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_METHOD,
-                StaticTypeWarningCode.UNDEFINED_METHOD
-              ]
-            : [
-                StaticTypeWarningCode
-                    .UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
-              ]);
+}''', [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
   }
 
   test_unqualifiedReferenceToNonLocalStaticMember_setter() async {
-    await assertErrorsInCode(
-        r'''
+    await assertErrorsInCode(r'''
 class A {
   static set a(x) {}
 }
@@ -2158,16 +1891,7 @@
   b(y) {
     a = y;
   }
-}''',
-        useCFE
-            ? [
-                StaticTypeWarningCode.UNDEFINED_SETTER,
-                StaticTypeWarningCode.UNDEFINED_SETTER
-              ]
-            : [
-                StaticTypeWarningCode
-                    .UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER
-              ]);
+}''', [StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER]);
   }
 
   test_wrongNumberOfTypeArguments_class_tooFew() async {
@@ -2245,67 +1969,47 @@
   }
 
   test_yield_async_to_mistyped_stream() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import 'dart:async';
 Stream<int> f() async* {
   yield "foo";
 }
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
   test_yield_each_async_non_stream() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 f() async* {
   yield* 0;
 }
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
   test_yield_each_async_to_mistyped_stream() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 import 'dart:async';
 Stream<int> f() async* {
   yield* g();
 }
 Stream<String> g() => null;
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
   test_yield_each_sync_non_iterable() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 f() sync* {
   yield* 0;
 }
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
   test_yield_each_sync_to_mistyped_iterable() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 Iterable<int> f() sync* {
   yield* g();
 }
 Iterable<String> g() => null;
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
   test_yield_sync_to_basic_type() async {
@@ -2320,15 +2024,11 @@
   }
 
   test_yield_sync_to_mistyped_iterable() async {
-    await assertErrorsInCode(
-        '''
+    await assertErrorsInCode('''
 Iterable<int> f() sync* {
   yield "foo";
 }
-''',
-        useCFE
-            ? [StaticTypeWarningCode.INVALID_ASSIGNMENT]
-            : [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
+''', [StaticTypeWarningCode.YIELD_OF_INVALID_TYPE]);
   }
 
   test_yield_sync_to_stream() async {
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
deleted file mode 100644
index 6040a18..0000000
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ /dev/null
@@ -1,579 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'static_warning_code_driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(StaticWarningCodeTest_Kernel);
-  });
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
-
-@reflectiveTest
-class StaticWarningCodeTest_Kernel extends StaticWarningCodeTest_Driver {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_ambiguousImport_as() async {
-    return super.test_ambiguousImport_as();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_extends() async {
-    return super.test_ambiguousImport_extends();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_implements() async {
-    return super.test_ambiguousImport_implements();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_inPart() async {
-    return super.test_ambiguousImport_inPart();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_instanceCreation() async {
-    return super.test_ambiguousImport_instanceCreation();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_is() async {
-    return super.test_ambiguousImport_is();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_qualifier() async {
-    return super.test_ambiguousImport_qualifier();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_typeAnnotation() async {
-    return super.test_ambiguousImport_typeAnnotation();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_typeArgument_annotation() async {
-    return super.test_ambiguousImport_typeArgument_annotation();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_typeArgument_instanceCreation() async {
-    return super.test_ambiguousImport_typeArgument_instanceCreation();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_varRead() async {
-    return super.test_ambiguousImport_varRead();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_varWrite() async {
-    return super.test_ambiguousImport_varWrite();
-  }
-
-  @override
-  @failingTest
-  test_ambiguousImport_withPrefix() async {
-    return super.test_ambiguousImport_withPrefix();
-  }
-
-  @override
-  @failingTest
-  test_argumentTypeNotAssignable_const_super() async {
-    return super.test_argumentTypeNotAssignable_const_super();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToClass() async {
-    return super.test_assignmentToClass();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToConst_instanceVariable() async {
-    return super.test_assignmentToConst_instanceVariable();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToConst_instanceVariable_plusEq() async {
-    return super.test_assignmentToConst_instanceVariable_plusEq();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToConst_localVariable() async {
-    return super.test_assignmentToConst_localVariable();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToConst_localVariable_plusEq() async {
-    return super.test_assignmentToConst_localVariable_plusEq();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToEnumType() async {
-    return super.test_assignmentToEnumType();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToFinal_instanceVariable() async {
-    return super.test_assignmentToFinal_instanceVariable();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToFinal_instanceVariable_plusEq() async {
-    return super.test_assignmentToFinal_instanceVariable_plusEq();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToFinalNoSetter_prefixedIdentifier() async {
-    return super.test_assignmentToFinalNoSetter_prefixedIdentifier();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToMethod() async {
-    return super.test_assignmentToMethod();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToTypedef() async {
-    return super.test_assignmentToTypedef();
-  }
-
-  @override
-  @failingTest
-  test_assignmentToTypeParameter() async {
-    return super.test_assignmentToTypeParameter();
-  }
-
-  @override
-  @failingTest
-  test_castToNonType() async {
-    return super.test_castToNonType();
-  }
-
-  @override
-  @failingTest
-  test_conflictingDartImport() async {
-    return super.test_conflictingDartImport();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceGetterAndSuperclassMember_direct_field() async {
-    return super
-        .test_conflictingInstanceGetterAndSuperclassMember_direct_field();
-  }
-
-  @override
-  @failingTest
-  test_conflictingInstanceSetterAndSuperclassMember() async {
-    return super.test_conflictingInstanceSetterAndSuperclassMember();
-  }
-
-  @override
-  @failingTest
-  test_exportDuplicatedLibraryNamed() async {
-    return super.test_exportDuplicatedLibraryNamed();
-  }
-
-  @override
-  @failingTest
-  test_fieldInitializingFormalNotAssignable() async {
-    return super.test_fieldInitializingFormalNotAssignable();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
-  test_finalNotInitialized_inConstructor_1() async {
-    return super.test_finalNotInitialized_inConstructor_1();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
-  test_finalNotInitialized_inConstructor_2() async {
-    return super.test_finalNotInitialized_inConstructor_2();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31073')
-  test_finalNotInitialized_inConstructor_3() async {
-    return super.test_finalNotInitialized_inConstructor_3();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_invocationOfVoidFieldError() async {
-    return super.test_generalizedVoid_invocationOfVoidFieldError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInConditionalLhsError() async {
-    return super.test_generalizedVoid_useOfVoidInConditionalLhsError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInConditionalRhsError() async {
-    return super.test_generalizedVoid_useOfVoidInConditionalRhsError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidInForeachVariableError() async {
-    return super.test_generalizedVoid_useOfVoidInForeachVariableError();
-  }
-
-  @override
-  @failingTest
-  test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError() async {
-    return super.test_generalizedVoid_useOfVoidReturnInNonVoidFunctionError();
-  }
-
-  @override
-  @failingTest
-  test_importDuplicatedLibraryNamed() async {
-    return super.test_importDuplicatedLibraryNamed();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  test_importOfNonLibrary() async {
-    return super.test_importOfNonLibrary();
-  }
-
-  @override
-  @failingTest
-  test_mismatchedAccessorTypes_class() async {
-    return super.test_mismatchedAccessorTypes_class();
-  }
-
-  @override
-  @failingTest
-  test_mismatchedAccessorTypes_getterAndSuperSetter() async {
-    return super.test_mismatchedAccessorTypes_getterAndSuperSetter();
-  }
-
-  @override
-  @failingTest
-  test_mismatchedAccessorTypes_setterAndSuperGetter() async {
-    return super.test_mismatchedAccessorTypes_setterAndSuperGetter();
-  }
-
-  @override
-  @failingTest
-  test_mismatchedAccessorTypes_topLevel() async {
-    return super.test_mismatchedAccessorTypes_topLevel();
-  }
-
-  @override
-  @failingTest
-  test_missingEnumConstantInSwitch() async {
-    return super.test_missingEnumConstantInSwitch();
-  }
-
-  @override
-  @failingTest
-  test_mixedReturnTypes_localFunction() async {
-    return super.test_mixedReturnTypes_localFunction();
-  }
-
-  @override
-  @failingTest
-  test_mixedReturnTypes_method() async {
-    return super.test_mixedReturnTypes_method();
-  }
-
-  @override
-  @failingTest
-  test_mixedReturnTypes_topLevelFunction() async {
-    return super.test_mixedReturnTypes_topLevelFunction();
-  }
-
-  @override
-  @failingTest
-  test_newWithInvalidTypeParameters() async {
-    return super.test_newWithInvalidTypeParameters();
-  }
-
-  @override
-  @failingTest
-  test_newWithInvalidTypeParameters_tooFew() async {
-    return super.test_newWithInvalidTypeParameters_tooFew();
-  }
-
-  @override
-  @failingTest
-  test_newWithInvalidTypeParameters_tooMany() async {
-    return super.test_newWithInvalidTypeParameters_tooMany();
-  }
-
-  @override
-  @failingTest
-  test_newWithNonType() async {
-    return super.test_newWithNonType();
-  }
-
-  @override
-  @failingTest
-  test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubtypeIsUsedInImplementation() async {
-    return super
-        .test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubtypeIsUsedInImplementation();
-  }
-
-  @override
-  @failingTest
-  test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount() async {
-    return super
-        .test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount();
-  }
-
-  @override
-  @failingTest
-  test_nonTypeInCatchClause_notType() async {
-    return super.test_nonTypeInCatchClause_notType();
-  }
-
-  @override
-  @failingTest
-  test_nonVoidReturnForOperator() async {
-    return super.test_nonVoidReturnForOperator();
-  }
-
-  @override
-  @failingTest
-  test_nonVoidReturnForSetter_function() async {
-    return super.test_nonVoidReturnForSetter_function();
-  }
-
-  @override
-  @failingTest
-  test_nonVoidReturnForSetter_method() async {
-    return super.test_nonVoidReturnForSetter_method();
-  }
-
-  @override
-  @failingTest
-  test_redirectToInvalidFunctionType() async {
-    return super.test_redirectToInvalidFunctionType();
-  }
-
-  @override
-  @failingTest
-  test_redirectToInvalidReturnType() async {
-    return super.test_redirectToInvalidReturnType();
-  }
-
-  @override
-  @failingTest
-  test_redirectToMissingConstructor_named() async {
-    return super.test_redirectToMissingConstructor_named();
-  }
-
-  @override
-  @failingTest
-  test_redirectToMissingConstructor_unnamed() async {
-    return super.test_redirectToMissingConstructor_unnamed();
-  }
-
-  @override
-  @failingTest
-  test_redirectToNonClass_notAType() async {
-    return super.test_redirectToNonClass_notAType();
-  }
-
-  @override
-  @failingTest
-  test_redirectToNonClass_undefinedIdentifier() async {
-    return super.test_redirectToNonClass_undefinedIdentifier();
-  }
-
-  @override
-  @failingTest
-  test_returnWithoutValue_async() async {
-    return super.test_returnWithoutValue_async();
-  }
-
-  @override
-  @failingTest
-  test_returnWithoutValue_async_future_object_with_return() {
-    return super.test_returnWithoutValue_async_future_object_with_return();
-  }
-
-  @override
-  @failingTest
-  test_returnWithoutValue_factoryConstructor() async {
-    return super.test_returnWithoutValue_factoryConstructor();
-  }
-
-  @override
-  @failingTest
-  test_returnWithoutValue_function() async {
-    return super.test_returnWithoutValue_function();
-  }
-
-  @override
-  @failingTest
-  test_returnWithoutValue_method() async {
-    return super.test_returnWithoutValue_method();
-  }
-
-  @override
-  @failingTest
-  test_returnWithoutValue_mixedReturnTypes_function() async {
-    return super.test_returnWithoutValue_mixedReturnTypes_function();
-  }
-
-  @override
-  @failingTest
-  test_staticAccessToInstanceMember_method_reference() async {
-    return super.test_staticAccessToInstanceMember_method_reference();
-  }
-
-  @override
-  @failingTest
-  test_staticAccessToInstanceMember_propertyAccess_field() async {
-    return super.test_staticAccessToInstanceMember_propertyAccess_field();
-  }
-
-  @override
-  @failingTest
-  test_staticAccessToInstanceMember_propertyAccess_getter() async {
-    return super.test_staticAccessToInstanceMember_propertyAccess_getter();
-  }
-
-  @override
-  @failingTest
-  test_staticAccessToInstanceMember_propertyAccess_setter() async {
-    return super.test_staticAccessToInstanceMember_propertyAccess_setter();
-  }
-
-  @override
-  @failingTest
-  test_switchExpressionNotAssignable() async {
-    return super.test_switchExpressionNotAssignable();
-  }
-
-  @override
-  @failingTest
-  test_typeAnnotationDeferredClass_functionDeclaration_returnType() async {
-    return super
-        .test_typeAnnotationDeferredClass_functionDeclaration_returnType();
-  }
-
-  @override
-  @failingTest
-  test_typeAnnotationDeferredClass_methodDeclaration_returnType() async {
-    return super
-        .test_typeAnnotationDeferredClass_methodDeclaration_returnType();
-  }
-
-  @override
-  @failingTest
-  test_typeAnnotationDeferredClass_typeParameter_bound() async {
-    return super.test_typeAnnotationDeferredClass_typeParameter_bound();
-  }
-
-  @override
-  @failingTest
-  test_typeTestNonType() async {
-    return super.test_typeTestNonType();
-  }
-
-  @override
-  @failingTest
-  test_undefinedIdentifier_for() async {
-    return super.test_undefinedIdentifier_for();
-  }
-
-  @override
-  @failingTest
-  test_undefinedIdentifier_function() async {
-    return super.test_undefinedIdentifier_function();
-  }
-}
diff --git a/pkg/analyzer/test/generated/static_warning_code_test.dart b/pkg/analyzer/test/generated/static_warning_code_test.dart
index 7582ed5..8ee7ee7 100644
--- a/pkg/analyzer/test/generated/static_warning_code_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_test.dart
@@ -83,6 +83,19 @@
     assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
   }
 
+  test_ambiguousImport_dart() async {
+    Source source = addSource(r'''
+import 'dart:async';
+import 'dart:async2';
+
+Future v;
+''');
+    await computeAnalysisResult(source);
+    if (enableNewAnalysisDriver) {
+      assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]);
+    }
+  }
+
   test_ambiguousImport_extends() async {
     Source source = addSource(r'''
 import 'lib1.dart';
@@ -658,11 +671,7 @@
   A.v = 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
     verify([source]);
   }
 
@@ -675,11 +684,7 @@
   A.v += 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]);
     verify([source]);
   }
 
@@ -726,11 +731,7 @@
   a.v = 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
@@ -744,11 +745,7 @@
   a.v += 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]);
     verify([source]);
   }
 
@@ -759,11 +756,7 @@
   x = 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -774,11 +767,7 @@
   x += 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -788,11 +777,7 @@
   x = 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -803,11 +788,7 @@
   x--;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -818,11 +799,7 @@
   x++;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -833,11 +810,7 @@
   --x;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -848,11 +821,7 @@
   ++x;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -863,11 +832,7 @@
   x--;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -878,11 +843,7 @@
   x++;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -891,11 +852,7 @@
 final x = 0;
 f() { x = 1; }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL]);
     verify([source]);
   }
 
@@ -909,11 +866,7 @@
   a.x = 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]);
     verify([source]);
   }
 
@@ -929,11 +882,7 @@
   B.a.x = 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]);
     verify([source]);
   }
 
@@ -944,11 +893,7 @@
   f = null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FUNCTION]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FUNCTION]);
     verify([source]);
   }
 
@@ -961,11 +906,7 @@
   a.m = () {};
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_METHOD]);
-    }
+    assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_METHOD]);
     verify([source]);
   }
 
@@ -1041,118 +982,6 @@
     verify([source]);
   }
 
-  test_conflictingDartImport() async {
-    Source source = addSource(r'''
-import 'lib.dart';
-import 'dart:async';
-Future f = null;
-Stream s;''');
-    addNamedSource("/lib.dart", r'''
-library lib;
-class Future {}''');
-    await computeAnalysisResult(source);
-    assertErrors(source, [StaticWarningCode.CONFLICTING_DART_IMPORT]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter() async {
-    Source source = addSource(r'''
-class A {
-  static set v(x) {}
-}
-class B extends A {
-  var v;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_getter() async {
-    Source source = addSource(r'''
-class A {
-  static get v => 0;
-}
-class B extends A {
-  get v => 0;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_method() async {
-    Source source = addSource(r'''
-class A {
-  static v() {}
-}
-class B extends A {
-  get v => 0;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_setter() async {
-    Source source = addSource(r'''
-class A {
-  static set v(x) {}
-}
-class B extends A {
-  get v => 0;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect() async {
-    Source source = addSource(r'''
-class A {
-  static int v;
-}
-class B extends A {}
-class C extends B {
-  get v => 0;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin() async {
-    Source source = addSource(r'''
-class M {
-  static int v;
-}
-class B extends Object with M {
-  get v => 0;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
-  test_conflictingInstanceGetterAndSuperclassMember_direct_field() async {
-    Source source = addSource(r'''
-class A {
-  static int v;
-}
-class B extends A {
-  get v => 0;
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER]);
-    verify([source]);
-  }
-
   test_conflictingInstanceMethodSetter2() async {
     Source source = addSource(r'''
 class A {
@@ -1160,13 +989,8 @@
   set foo(a) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]);
     verify([source]);
   }
 
@@ -1177,13 +1001,8 @@
   foo() {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
     verify([source]);
   }
 
@@ -1196,13 +1015,8 @@
   foo() {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
     verify([source]);
   }
 
@@ -1215,27 +1029,8 @@
   foo() {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
-    }
-    verify([source]);
-  }
-
-  test_conflictingInstanceSetterAndSuperclassMember() async {
-    Source source = addSource(r'''
-class A {
-  static int v;
-}
-class B extends A {
-  set v(x) {}
-}''');
-    await computeAnalysisResult(source);
-    assertErrors(source,
-        [StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER]);
+    assertErrors(
+        source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER]);
     verify([source]);
   }
 
@@ -1248,13 +1043,8 @@
   static get x => 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
     verify([source]);
   }
 
@@ -1267,13 +1057,8 @@
   static get x => 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
     verify([source]);
   }
 
@@ -1284,13 +1069,8 @@
   set x(int p) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER]);
     verify([source]);
   }
 
@@ -1301,13 +1081,8 @@
   static set x(int p) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -1318,13 +1093,8 @@
   static set x(int p) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.DECLARED_MEMBER_CONFLICTS_WITH_INHERITED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -1337,14 +1107,7 @@
   A a = const A();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        StaticWarningCode.NEW_WITH_ABSTRACT_CLASS
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]);
-    }
+    assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]);
     verify([source]);
   }
 
@@ -1357,14 +1120,7 @@
   var a = const A<int>();
 }''');
     TestAnalysisResult result = await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.NOT_CONSTANT_EXPRESSION,
-        StaticWarningCode.NEW_WITH_ABSTRACT_CLASS
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]);
-    }
+    assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]);
     verify([source]);
 
     ClassDeclaration classA = result.unit.declarations[0];
@@ -1426,11 +1182,7 @@
   f(0, 1, '2');
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS]);
-    } else {
-      assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]);
-    }
+    assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]);
     verify([source]);
   }
 
@@ -1440,11 +1192,7 @@
   (int x) {} (0, 1);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS]);
-    } else {
-      assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]);
-    }
+    assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]);
     verify([source]);
   }
 
@@ -1455,13 +1203,8 @@
   f(0, 1, '2');
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED]);
     verify([source]);
   }
 
@@ -1471,13 +1214,8 @@
   (int x, {int y}) {} (0, 1);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source,
-          [CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED]);
     verify([source]);
   }
 
@@ -1488,14 +1226,8 @@
   A() : x = 1 {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]
-            : [
-                StaticWarningCode
-                    .FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
-              ]);
+    assertErrors(source,
+        [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
     verify([source]);
   }
 
@@ -1506,12 +1238,7 @@
   A() : x = '';
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE]);
-    }
+    assertErrors(source, [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
@@ -1550,13 +1277,8 @@
   A() : x = 0 {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION]);
     verify([source]);
   }
 
@@ -1567,14 +1289,8 @@
   A(this.x) {}
 }''');
     await computeAnalysisResult(source);
-    assertErrors(
-        source,
-        useCFE
-            ? [CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES]
-            : [
-                StaticWarningCode
-                    .FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
-              ]);
+    assertErrors(source,
+        [StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR]);
     verify([source]);
   }
 
@@ -1784,14 +1500,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_invocationOfVoidResultError() async {
@@ -1801,14 +1510,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_invocationOfVoidToplevelError() async {
@@ -1819,14 +1521,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_throwVoidValueError() async {
@@ -1892,14 +1587,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_METHOD
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_useOfVoidCallMethodError() async {
@@ -1932,14 +1620,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_SETTER
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_useOfVoidCascadeError() async {
@@ -1950,14 +1631,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticWarningCode.USE_OF_VOID_RESULT
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_useOfVoidCastsOk() async {
@@ -2161,14 +1835,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_METHOD,
-        StaticWarningCode.USE_OF_VOID_RESULT
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_useOfVoidInSwitchExpressionError() async {
@@ -2201,14 +1868,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_GETTER
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   test_generalizedVoid_useOfVoidPropertyAccessError() async {
@@ -2219,14 +1879,7 @@
 }
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.USE_OF_VOID_RESULT,
-        StaticTypeWarningCode.UNDEFINED_GETTER
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
   }
 
   @failingTest
@@ -2317,16 +1970,8 @@
 class C implements A, B {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        CompileTimeErrorCode.CONFLICTS_WITH_INHERITED_MEMBER,
-        StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-      ]);
-    } else {
-      assertErrors(source, [
-        StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD
-      ]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD]);
     verify([source]);
   }
 
@@ -2357,9 +2002,7 @@
   int f;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [
         StrongModeCode.INVALID_METHOD_OVERRIDE,
         StrongModeCode.INVALID_METHOD_OVERRIDE
@@ -2387,12 +2030,7 @@
   String get getter => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StrongModeCode.INVALID_METHOD_OVERRIDE,
-        StrongModeCode.INVALID_METHOD_OVERRIDE
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(
@@ -2413,12 +2051,7 @@
   double get g => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StrongModeCode.INVALID_METHOD_OVERRIDE,
-        StrongModeCode.INVALID_METHOD_OVERRIDE
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(
@@ -2540,12 +2173,7 @@
   m(double d) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StrongModeCode.INVALID_METHOD_OVERRIDE,
-        StrongModeCode.INVALID_METHOD_OVERRIDE
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source,
@@ -2701,12 +2329,7 @@
   String m() => '';
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StrongModeCode.INVALID_METHOD_OVERRIDE,
-        StrongModeCode.INVALID_METHOD_OVERRIDE
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(
@@ -2894,7 +2517,7 @@
   m({a}) {}
 }''');
     await computeAnalysisResult(source);
-    if (previewDart2 && !useCFE) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]);
@@ -2911,7 +2534,7 @@
   m({a, c}) {}
 }''');
     await computeAnalysisResult(source);
-    if (previewDart2 && !useCFE) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]);
@@ -2928,7 +2551,7 @@
   m([a]) {}
 }''');
     await computeAnalysisResult(source);
-    if (previewDart2 && !useCFE) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]);
@@ -2945,7 +2568,7 @@
   m(a, b, [c]) {}
 }''');
     await computeAnalysisResult(source);
-    if (previewDart2 && !useCFE) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]);
@@ -2962,7 +2585,7 @@
   m(a, [c, d]) {}
 }''');
     await computeAnalysisResult(source);
-    if (previewDart2 && !useCFE) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]);
@@ -2979,7 +2602,7 @@
   m(a, b) {}
 }''');
     await computeAnalysisResult(source);
-    if (previewDart2 && !useCFE) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_REQUIRED]);
@@ -3018,9 +2641,7 @@
   set setter14(String _) => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [
         StrongModeCode.INVALID_METHOD_OVERRIDE,
         StrongModeCode.INVALID_METHOD_OVERRIDE,
@@ -3068,12 +2689,7 @@
   set s(double d) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StrongModeCode.INVALID_METHOD_OVERRIDE,
-        StrongModeCode.INVALID_METHOD_OVERRIDE
-      ]);
-    } else if (previewDart2) {
+    if (previewDart2) {
       assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     } else {
       assertErrors(source,
@@ -3085,34 +2701,21 @@
   test_listElementTypeNotAssignable() async {
     Source source = addSource("var v = <String> [42];");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]);
-    }
+    assertErrors(source, [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
   test_mapKeyTypeNotAssignable() async {
     Source source = addSource("var v = <String, int > {1 : 2};");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
-    } else {
-      assertErrors(source, [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE]);
-    }
+    assertErrors(source, [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
   test_mapValueTypeNotAssignable() async {
     Source source = addSource("var v = <String, String> {'a' : 2};");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.INVALID_ASSIGNMENT]);
-    } else {
-      assertErrors(source, [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]);
-    }
+    assertErrors(source, [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]);
     verify([source]);
   }
 
@@ -3326,11 +2929,7 @@
 lib.B b;''');
     await computeAnalysisResult(source1);
     await computeAnalysisResult(source2);
-    if (useCFE) {
-      assertErrors(source2, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source2, [StaticWarningCode.NEW_WITH_NON_TYPE]);
-    }
+    assertErrors(source2, [StaticWarningCode.NEW_WITH_NON_TYPE]);
     verify([source1]);
   }
 
@@ -3343,11 +2942,7 @@
   new A.name();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR]);
-    }
+    assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR]);
     // no verify(), 'name' is not resolved
   }
 
@@ -3360,12 +2955,8 @@
   new A();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]);
     verify([source]);
   }
 
@@ -3381,14 +2972,9 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source, [
-        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS
-      ]);
-    }
+    assertErrors(source, [
+      StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS
+    ]);
     verify([source]);
   }
 
@@ -3403,13 +2989,8 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR]);
     verify([source]);
   }
 
@@ -3423,13 +3004,8 @@
 }
 class B = A with M implements I;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3442,13 +3018,8 @@
 abstract class A {}
 class B = A with M;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3461,13 +3032,8 @@
 }
 class B = A with M;''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3499,13 +3065,8 @@
 class C implements I {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3517,13 +3078,8 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3535,13 +3091,8 @@
 class C implements I {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3554,13 +3105,8 @@
   noSuchMethod(v);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3589,13 +3135,8 @@
 class C implements I {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3607,13 +3148,8 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3641,13 +3177,8 @@
 abstract class B implements A { get g1 => 1; }
 class C extends Object with B {}''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
   }
 
   test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_method() async {
@@ -3657,13 +3188,8 @@
 abstract class B implements A { m1() => 1; }
 class C extends Object with B {}''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
   }
 
   test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_setter() async {
@@ -3673,13 +3199,8 @@
 abstract class B implements A { set s1(v) {} }
 class C extends Object with B {}''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
   }
 
   test_nonAbstractClassInheritsAbstractMemberOne_noSuchMethod_interface() async {
@@ -3694,13 +3215,8 @@
 class B extends A implements I {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3717,13 +3233,8 @@
   get field => 0;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3735,13 +3246,8 @@
 class C implements I {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3753,13 +3259,8 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3775,13 +3276,8 @@
 class C extends B {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3795,13 +3291,8 @@
   set v(_) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3815,13 +3306,8 @@
   get v => 1;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE]);
     verify([source]);
   }
 
@@ -3835,14 +3321,8 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source, [
-        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE
-      ]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE]);
     verify([source]);
   }
 
@@ -3855,13 +3335,8 @@
 class C extends A {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
     verify([source]);
   }
 
@@ -3874,13 +3349,8 @@
 class C implements I {
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
     verify([source]);
   }
 
@@ -3895,13 +3365,8 @@
 class C extends Object with B {}
 ''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]);
-    } else {
-      assertErrors(source,
-          [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
-    }
+    assertErrors(source,
+        [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO]);
     verify([source]);
   }
 
@@ -3913,11 +3378,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticWarningCode.NOT_A_TYPE]);
-    } else {
-      assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]);
-    }
+    assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]);
     verify([source]);
   }
 
@@ -3984,12 +3445,7 @@
   f();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
-    } else {
-      assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
-    }
+    assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
@@ -3999,12 +3455,7 @@
   (int x) {} ();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
-    } else {
-      assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
-    }
+    assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
@@ -4016,12 +3467,7 @@
   getter();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
-    } else {
-      assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
-    }
+    assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]);
     verify([source]);
   }
 
@@ -4189,12 +3635,7 @@
   A.m();
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
-    }
+    assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -4207,12 +3648,7 @@
   A.m;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
-    }
+    assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -4225,12 +3661,7 @@
   A.f;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
-    }
+    assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -4243,12 +3674,7 @@
   A.f;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
-    }
+    assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -4261,12 +3687,7 @@
   A.f = 42;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
-    }
+    assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]);
     verify([source]);
   }
 
@@ -4507,15 +3928,8 @@
   static m(K k) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC,
-        StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
-      ]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
@@ -4536,15 +3950,8 @@
   static set s(K k) {}
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC,
-        StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC
-      ]);
-    } else {
-      assertErrors(
-          source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
-    }
+    assertErrors(
+        source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]);
     verify([source]);
   }
 
@@ -4600,42 +4007,26 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticWarningCode.NOT_A_TYPE]);
-    } else {
-      assertErrors(source, [StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME]);
-    }
+    assertErrors(source, [StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME]);
     verify([source]);
   }
 
   test_undefinedClass_instanceCreation() async {
     Source source = addSource("f() { new C(); }");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
   }
 
   test_undefinedClass_variableDeclaration() async {
     Source source = addSource("f() { C c; }");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticWarningCode.NOT_A_TYPE]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]);
   }
 
   test_undefinedClassBoolean_variableDeclaration() async {
     Source source = addSource("f() { boolean v; }");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticWarningCode.NOT_A_TYPE]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS_BOOLEAN]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS_BOOLEAN]);
   }
 
   test_undefinedGetter_fromLibrary() async {
@@ -4647,11 +4038,7 @@
 }''');
     await computeAnalysisResult(source1);
     await computeAnalysisResult(source2);
-    if (useCFE) {
-      assertErrors(source2, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(source2, [StaticWarningCode.UNDEFINED_GETTER]);
-    }
+    assertErrors(source2, [StaticWarningCode.UNDEFINED_GETTER]);
     verify([source1]);
   }
 
@@ -4679,31 +4066,19 @@
   String;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
   test_undefinedIdentifier_initializer() async {
     Source source = addSource("var a = b;");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
   test_undefinedIdentifier_methodInvocation() async {
     Source source = addSource("f() { C.m(); }");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
   test_undefinedIdentifier_private_getter() async {
@@ -4720,14 +4095,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_GETTER,
-        StaticTypeWarningCode.UNDEFINED_GETTER
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
   test_undefinedIdentifier_private_setter() async {
@@ -4744,24 +4112,13 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticTypeWarningCode.UNDEFINED_SETTER,
-        StaticTypeWarningCode.UNDEFINED_SETTER
-      ]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]);
   }
 
   test_undefinedIdentifierAwait_function() async {
     Source source = addSource("void a() { await; }");
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT]);
   }
 
   test_undefinedNamedParameter() async {
@@ -4771,11 +4128,7 @@
   f(c: 1);
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER]);
-    } else {
-      assertErrors(source, [StaticWarningCode.UNDEFINED_NAMED_PARAMETER]);
-    }
+    assertErrors(source, [StaticWarningCode.UNDEFINED_NAMED_PARAMETER]);
     // no verify(), 'c' is not resolved
   }
 
@@ -4787,11 +4140,7 @@
   lib.gg = null;
 }''');
     await computeAnalysisResult(source2);
-    if (useCFE) {
-      assertErrors(source2, [StaticTypeWarningCode.UNDEFINED_SETTER]);
-    } else {
-      assertErrors(source2, [StaticWarningCode.UNDEFINED_SETTER]);
-    }
+    assertErrors(source2, [StaticWarningCode.UNDEFINED_SETTER]);
   }
 
   test_undefinedStaticMethodOrGetter_getter() async {
@@ -4863,11 +4212,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
@@ -4881,11 +4226,7 @@
   }
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    } else {
-      assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
-    }
+    assertErrors(source, [StaticWarningCode.USE_OF_VOID_RESULT]);
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart b/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
deleted file mode 100644
index ef83790..0000000
--- a/pkg/analyzer/test/generated/strong_mode_kernel_test.dart
+++ /dev/null
@@ -1,370 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'strong_mode_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(StrongModeLocalInferenceTest_Kernel);
-    defineReflectiveTests(StrongModeStaticTypeAnalyzer2Test_Kernel);
-    defineReflectiveTests(StrongModeTypePropagationTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class StrongModeLocalInferenceTest_Kernel extends StrongModeLocalInferenceTest {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get enableNewAnalysisDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_constrainedByBounds2() async {
-    await super.test_constrainedByBounds2();
-  }
-
-  @override
-  @failingTest
-  test_constrainedByBounds3() async {
-    await super.test_constrainedByBounds3();
-  }
-
-  @override
-  @failingTest
-  test_constrainedByBounds5() async {
-    await super.test_constrainedByBounds5();
-  }
-
-  @override
-  @failingTest
-  test_covarianceChecks() async {
-    await super.test_covarianceChecks();
-  }
-
-  @override
-  @failingTest
-  test_covarianceChecks_genericMethods() async {
-    await super.test_covarianceChecks_genericMethods();
-  }
-
-  @override
-  @failingTest
-  test_covarianceChecks_returnFunction() async {
-    await super.test_covarianceChecks_returnFunction();
-  }
-
-  @override
-  @failingTest
-  test_covarianceChecks_superclass() async {
-    await super.test_covarianceChecks_superclass();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_downwards8() async {
-    await super.test_futureOr_downwards8();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_methods2() async {
-    await super.test_futureOr_methods2();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_methods3() async {
-    await super.test_futureOr_methods3();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_methods4() async {
-    await super.test_futureOr_methods4();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_no_return() async {
-    await super.test_futureOr_no_return();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_no_return_value() async {
-    await super.test_futureOr_no_return_value();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_return_null() async {
-    await super.test_futureOr_return_null();
-  }
-
-  @override
-  @failingTest
-  test_futureOr_upwards2() async {
-    await super.test_futureOr_upwards2();
-  }
-
-  @override
-  @failingTest
-  test_generic_partial() async {
-    await super.test_generic_partial();
-    // TODO(brianwilkerson) This test periodically fails (by not throwing an
-    // exception), so I am temporarily disabling it. The cause of the flaky
-    // behavior needs to be investigated.
-    fail('Flaky test');
-  }
-
-  @override
-  @failingTest
-  test_inference_error_arguments() async {
-    await super.test_inference_error_arguments();
-  }
-
-  @override
-  @failingTest
-  test_inference_error_arguments2() async {
-    await super.test_inference_error_arguments2();
-  }
-
-  @override
-  @failingTest
-  test_inference_error_extendsFromReturn() async {
-    await super.test_inference_error_extendsFromReturn();
-  }
-
-  @override
-  @failingTest
-  test_inference_error_extendsFromReturn2() async {
-    await super.test_inference_error_extendsFromReturn2();
-  }
-
-  @override
-  @failingTest
-  test_inference_error_genericFunction() async {
-    await super.test_inference_error_genericFunction();
-  }
-
-  @override
-  @failingTest
-  test_inference_error_returnContext() async {
-    await super.test_inference_error_returnContext();
-  }
-
-  @override
-  @failingTest
-  test_inferGenericInstantiation2() async {
-    await super.test_inferGenericInstantiation2();
-  }
-
-  @override
-  @failingTest
-  test_instanceCreation() async {
-    await super.test_instanceCreation();
-    // TODO(brianwilkerson) This test fails as expected when run as part of a
-    // larger group of tests, but does not fail when run individually (such as
-    // on the bots).
-    fail('Flaky test');
-  }
-
-  @override
-  @failingTest
-  test_pinning_multipleConstraints1() async {
-    await super.test_pinning_multipleConstraints1();
-  }
-
-  @override
-  @failingTest
-  test_pinning_multipleConstraints3() async {
-    await super.test_pinning_multipleConstraints3();
-  }
-
-  @override
-  @failingTest
-  test_redirectedConstructor_named() {
-    return super.test_redirectedConstructor_named();
-  }
-
-  @override
-  @failingTest
-  test_redirectedConstructor_unnamed() {
-    return super.test_redirectedConstructor_unnamed();
-  }
-
-  @override
-  @failingTest
-  test_redirectingConstructor_propagation() async {
-    await super.test_redirectingConstructor_propagation();
-    // TODO(brianwilkerson) Figure out why this test is flaky.
-    fail('Flaky test');
-  }
-}
-
-@reflectiveTest
-class StrongModeStaticTypeAnalyzer2Test_Kernel
-    extends StrongModeStaticTypeAnalyzer2Test {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get enableNewAnalysisDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-
-  @override
-  @failingTest
-  test_genericFunction_parameter() async {
-    await super.test_genericFunction_parameter();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_explicitTypeParams() async {
-    await super.test_genericMethod_explicitTypeParams();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionExpressionInvocation_explicit() async {
-    await super.test_genericMethod_functionExpressionInvocation_explicit();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit() {
-    return super
-        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_explicit();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred() {
-    return super
-        .test_genericMethod_functionExpressionInvocation_functionTypedParameter_inferred();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionExpressionInvocation_inferred() async {
-    await super.test_genericMethod_functionExpressionInvocation_inferred();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionInvocation_explicit() async {
-    await super.test_genericMethod_functionInvocation_explicit();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionInvocation_functionTypedParameter_explicit() {
-    return super
-        .test_genericMethod_functionInvocation_functionTypedParameter_explicit();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionInvocation_functionTypedParameter_inferred() {
-    return super
-        .test_genericMethod_functionInvocation_functionTypedParameter_inferred();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionInvocation_inferred() async {
-    await super.test_genericMethod_functionInvocation_inferred();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_functionTypedParameter_tearoff() {
-    return super.test_genericMethod_functionTypedParameter_tearoff();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_implicitDynamic() async {
-    await super.test_genericMethod_implicitDynamic();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_nestedCapture() async {
-    await super.test_genericMethod_nestedCapture();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_partiallyAppliedErrorWithBound() async {
-    await super.test_genericMethod_partiallyAppliedErrorWithBound();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_tearoff() async {
-    await super.test_genericMethod_tearoff();
-  }
-
-  @override
-  @failingTest
-  test_genericMethod_toplevel_field_staticTearoff() {
-    return super.test_genericMethod_toplevel_field_staticTearoff();
-  }
-
-  @override
-  test_notInstantiatedBound_class_error_recursion_less_direct() async {
-    return super.test_notInstantiatedBound_class_error_recursion_less_direct();
-  }
-
-  @override
-  @failingTest
-  test_notInstantiatedBound_class_error_recursion_typedef() {
-    return super.test_notInstantiatedBound_class_error_recursion_typedef();
-  }
-
-  @override
-  @failingTest
-  test_setterWithDynamicTypeIsError() async {
-    await super.test_setterWithDynamicTypeIsError();
-  }
-
-  @override
-  @failingTest
-  test_setterWithOtherTypeIsError() async {
-    await super.test_setterWithOtherTypeIsError();
-  }
-}
-
-@reflectiveTest
-class StrongModeTypePropagationTest_Kernel
-    extends StrongModeTypePropagationTest {
-  @override
-  bool get enableKernelDriver => true;
-
-  @override
-  bool get enableNewAnalysisDriver => true;
-
-  @override
-  bool get useCFE => true;
-
-  @override
-  bool get usingFastaParser => true;
-}
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index a3c29fe..0456a6f 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -3460,12 +3460,7 @@
   T f<T extends B>(T x) => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS]);
-    } else {
-      assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
-    }
+    assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     verify([source]);
   }
 
@@ -3480,12 +3475,7 @@
   T f<T extends A>(T x) => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(
-          source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS]);
-    } else {
-      assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
-    }
+    assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     verify([source]);
   }
 
@@ -3511,15 +3501,7 @@
   S f<T, S>(T x) => null;
 }''');
     await computeAnalysisResult(source);
-    if (useCFE) {
-      assertErrors(source, [
-        StaticWarningCode.INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS,
-        StrongModeCode.INVALID_METHOD_OVERRIDE,
-        StrongModeCode.INVALID_METHOD_OVERRIDE
-      ]);
-    } else {
-      assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
-    }
+    assertErrors(source, [StrongModeCode.INVALID_METHOD_OVERRIDE]);
     verify([source]);
   }
 
diff --git a/pkg/analyzer/test/generated/test_all.dart b/pkg/analyzer/test/generated/test_all.dart
index 52a3081..8e490e9 100644
--- a/pkg/analyzer/test/generated/test_all.dart
+++ b/pkg/analyzer/test/generated/test_all.dart
@@ -8,43 +8,33 @@
 import 'bazel_test.dart' as bazel_test;
 import 'checked_mode_compile_time_error_code_driver_test.dart'
     as checked_mode_compile_time_error_code_driver_test;
-import 'checked_mode_compile_time_error_code_kernel_test.dart'
-    as checked_mode_compile_time_error_code_kernel_test;
 import 'checked_mode_compile_time_error_code_test.dart'
     as checked_mode_compile_time_error_code_test;
 import 'compile_time_error_code_driver_test.dart'
     as compile_time_error_code_driver_test;
-import 'compile_time_error_code_kernel_test.dart'
-    as compile_time_error_code_kernel_test;
 import 'compile_time_error_code_test.dart' as compile_time_error_code_test;
 import 'constant_test.dart' as constant_test;
 import 'declaration_resolver_test.dart' as declaration_resolver_test;
 import 'element_resolver_test.dart' as element_resolver_test;
 import 'engine_test.dart' as engine_test;
 import 'error_suppression_driver_test.dart' as error_suppression_driver_test;
-import 'error_suppression_kernel_test.dart' as error_suppression_kernel_test;
 import 'error_suppression_test.dart' as error_suppression_test;
 import 'gn_test.dart' as gn_test;
 import 'hint_code_driver_test.dart' as hint_code_driver_test;
-import 'hint_code_kernel_test.dart' as hint_code_kernel_test;
 import 'hint_code_test.dart' as hint_code_test;
 import 'inheritance_manager_test.dart' as inheritance_manager_test;
 import 'invalid_code_driver_test.dart' as invalid_code_driver_test;
-import 'invalid_code_kernel_test.dart' as invalid_code_kernel_test;
 import 'invalid_code_test.dart' as invalid_code_test;
 import 'java_core_test.dart' as java_core_test;
 import 'java_io_test.dart' as java_io_test;
 import 'non_error_resolver_driver_test.dart' as non_error_resolver_driver_test;
-import 'non_error_resolver_kernel_test.dart' as non_error_resolver_kernel_test;
 import 'non_error_resolver_test.dart' as non_error_resolver_test;
 import 'non_hint_code_driver_test.dart' as non_hint_code_driver_test;
-import 'non_hint_code_kernel_test.dart' as non_hint_code_kernel_test;
 import 'non_hint_code_test.dart' as non_hint_code_test;
 import 'package_test.dart' as package_test;
 import 'parser_fasta_test.dart' as parser_fasta_test;
 import 'parser_test.dart' as parser_test;
 import 'resolver_driver_test.dart' as resolver_driver_test;
-import 'resolver_kernel_test.dart' as resolver_kernel_test;
 import 'resolver_test.dart' as resolver_test;
 import 'scanner_test.dart' as scanner_test;
 import 'sdk_test.dart' as sdk_test;
@@ -52,21 +42,14 @@
 import 'source_factory_test.dart' as source_factory_test;
 import 'static_type_analyzer_driver_test.dart'
     as static_type_analyzer_driver_test;
-import 'static_type_analyzer_kernel_test.dart'
-    as static_type_analyzer_kernel_test;
 import 'static_type_analyzer_test.dart' as static_type_analyzer_test;
 import 'static_type_warning_code_driver_test.dart'
     as static_type_warning_code_driver_test;
-import 'static_type_warning_code_kernel_test.dart'
-    as static_type_warning_code_kernel_test;
 import 'static_type_warning_code_test.dart' as static_type_warning_code_test;
 import 'static_warning_code_driver_test.dart'
     as static_warning_code_driver_test;
-import 'static_warning_code_kernel_test.dart'
-    as static_warning_code_kernel_test;
 import 'static_warning_code_test.dart' as static_warning_code_test;
 import 'strong_mode_driver_test.dart' as strong_mode_driver_test;
-import 'strong_mode_kernel_test.dart' as strong_mode_kernel_test;
 import 'strong_mode_test.dart' as strong_mode_test;
 import 'type_system_test.dart' as type_system_test;
 import 'utilities_dart_test.dart' as utilities_dart_test;
@@ -77,55 +60,43 @@
     all_the_rest.main();
     bazel_test.main();
     checked_mode_compile_time_error_code_driver_test.main();
-    checked_mode_compile_time_error_code_kernel_test.main();
     checked_mode_compile_time_error_code_test.main();
     compile_time_error_code_driver_test.main();
-    compile_time_error_code_kernel_test.main();
     compile_time_error_code_test.main();
     constant_test.main();
     declaration_resolver_test.main();
     element_resolver_test.main();
     engine_test.main();
     error_suppression_driver_test.main();
-    error_suppression_kernel_test.main();
     error_suppression_test.main();
     gn_test.main();
     hint_code_driver_test.main();
-    hint_code_kernel_test.main();
     hint_code_test.main();
     inheritance_manager_test.main();
     invalid_code_driver_test.main();
-    invalid_code_kernel_test.main();
     invalid_code_test.main();
     java_core_test.main();
     java_io_test.main();
     non_error_resolver_driver_test.main();
-    non_error_resolver_kernel_test.main();
     non_error_resolver_test.main();
     non_hint_code_driver_test.main();
-    non_hint_code_kernel_test.main();
     non_hint_code_test.main();
     package_test.main();
     parser_fasta_test.main();
     parser_test.main();
     resolver_driver_test.main();
-    resolver_kernel_test.main();
     resolver_test.main();
     scanner_test.main();
     sdk_test.main();
     simple_resolver_test.main();
     source_factory_test.main();
     static_type_analyzer_driver_test.main();
-    static_type_analyzer_kernel_test.main();
     static_type_analyzer_test.main();
     static_type_warning_code_driver_test.main();
-    static_type_warning_code_kernel_test.main();
     static_type_warning_code_test.main();
     static_warning_code_driver_test.main();
-    static_warning_code_kernel_test.main();
     static_warning_code_test.main();
     strong_mode_driver_test.main();
-    strong_mode_kernel_test.main();
     strong_mode_test.main();
     type_system_test.main();
     utilities_dart_test.main();
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 84369c0..43d2d3b 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -909,7 +909,7 @@
   }
 
   void test_visitRethrowExpression() {
-    _assertCloneExpression('rethrow');
+    _assertCloneStatement('rethrow;');
   }
 
   void test_visitReturnStatement_expression() {
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index 65c2c1f..b242bb1 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -2384,7 +2384,6 @@
     _assertNoExceptions();
   }
 
-  @failingTest // TODO(paulberry): Remove the annotation when dartbug.com/28515 is fixed.
   void test_resolveCompilationUnit_existingElementModel() {
     prepareAnalysisContext(new AnalysisOptionsImpl());
     Source source = addSource('/test.dart', r'''
diff --git a/pkg/analyzer/test/src/context/mock_sdk.dart b/pkg/analyzer/test/src/context/mock_sdk.dart
index acbef13..73c70d6 100644
--- a/pkg/analyzer/test/src/context/mock_sdk.dart
+++ b/pkg/analyzer/test/src/context/mock_sdk.dart
@@ -98,6 +98,13 @@
 '''
 });
 
+const _MockSdkLibrary _LIB_ASYNC2 =
+    const _MockSdkLibrary('dart:async2', '$sdkRoot/lib/async2/async2.dart', '''
+library dart.async2;
+
+class Future {}
+''');
+
 const _MockSdkLibrary _LIB_COLLECTION = const _MockSdkLibrary(
     'dart:collection', '$sdkRoot/lib/collection/collection.dart', '''
 library dart.collection;
@@ -314,7 +321,7 @@
 class Duration implements Comparable<Duration> {}
 
 class Exception {
-  factory Exception([var message]);
+  factory Exception([var message]) => null;
 }
 
 external bool identical(Object a, Object b);
@@ -443,6 +450,7 @@
 const List<SdkLibrary> _LIBRARIES = const [
   _LIB_CORE,
   _LIB_ASYNC,
+  _LIB_ASYNC2,
   _LIB_COLLECTION,
   _LIB_CONVERT,
   _LIB_FOREIGN_HELPER,
@@ -458,6 +466,7 @@
     "dart:core": "$sdkRoot/lib/core/core.dart",
     "dart:html": "$sdkRoot/lib/html/dartium/html_dartium.dart",
     "dart:async": "$sdkRoot/lib/async/async.dart",
+    "dart:async2": "$sdkRoot/lib/async2/async2.dart",
     "dart:async/stream.dart": "$sdkRoot/lib/async/stream.dart",
     "dart:collection": "$sdkRoot/lib/collection/collection.dart",
     "dart:convert": "$sdkRoot/lib/convert/convert.dart",
@@ -511,8 +520,6 @@
     if (generateSummaryFiles) {
       List<int> bytes = _computeLinkedBundleBytes();
       provider.newFileWithBytes(
-          provider.convertPath('/lib/_internal/spec.sum'), bytes);
-      provider.newFileWithBytes(
           provider.convertPath('/lib/_internal/strong.sum'), bytes);
     }
   }
@@ -572,7 +579,7 @@
   PackageBundle getLinkedBundle() {
     if (_bundle == null) {
       resource.File summaryFile =
-          provider.getFile(provider.convertPath('/lib/_internal/spec.sum'));
+          provider.getFile(provider.convertPath('/lib/_internal/strong.sum'));
       List<int> bytes;
       if (summaryFile.exists) {
         bytes = summaryFile.readAsBytesSync();
@@ -614,7 +621,7 @@
     List<Source> librarySources = sdkLibraries
         .map((SdkLibrary library) => mapDartUri(library.shortName))
         .toList();
-    return new SummaryBuilder(librarySources, context, true).build();
+    return new SummaryBuilder(librarySources, context).build();
   }
 }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 3c1ae2c..a3f21c0 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/analysis/status.dart';
 import 'package:analyzer/src/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/generated/parser.dart' as analyzer;
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
@@ -66,11 +67,6 @@
   String testFile;
   String testCode;
 
-  /**
-   * Whether to enable the Dart 2.0 Common Front End.
-   */
-  bool useCFE = false;
-
   bool get disableChangesAndCacheAllResults => false;
 
   void addTestFile(String content, {bool priority: false}) {
@@ -105,12 +101,11 @@
         ], null, provider),
         createAnalysisOptions(),
         disableChangesAndCacheAllResults: disableChangesAndCacheAllResults,
-        externalSummaries: externalSummaries,
-        useCFE: useCFE);
+        externalSummaries: externalSummaries);
   }
 
   AnalysisOptionsImpl createAnalysisOptions() =>
-      new AnalysisOptionsImpl()..useFastaParser = useCFE;
+      new AnalysisOptionsImpl()..useFastaParser = analyzer.Parser.useFasta;
 
   int findOffset(String search) {
     int offset = testCode.indexOf(search);
diff --git a/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart b/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart
index 6b5131c..336414a 100644
--- a/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/defined_names_test.dart
@@ -17,7 +17,7 @@
 
 @reflectiveTest
 class DefinedNamesTest extends ParserTestCase {
-  test_classMemberNames() {
+  test_classMemberNames_class() {
     DefinedNames names = _computeDefinedNames('''
 class A {
   int a, b;
@@ -36,6 +36,25 @@
         unorderedEquals(['a', 'b', 'd', 'e', 'f', 'g']));
   }
 
+  test_classMemberNames_mixin() {
+    DefinedNames names = _computeDefinedNames('''
+mixin A {
+  int a, b;
+  A();
+  A.c();
+  d() {}
+  get e => null;
+  set f(_) {}
+}
+mixin B {
+  g() {}
+}
+''');
+    expect(names.topLevelNames, unorderedEquals(['A', 'B']));
+    expect(names.classMemberNames,
+        unorderedEquals(['a', 'b', 'd', 'e', 'f', 'g']));
+  }
+
   test_topLevelNames() {
     DefinedNames names = _computeDefinedNames('''
 class A {}
@@ -45,9 +64,10 @@
 get E => null;
 set F(_) {}
 var G, H;
+mixin M {}
 ''');
     expect(names.topLevelNames,
-        unorderedEquals(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']));
+        unorderedEquals(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'M']));
     expect(names.classMemberNames, isEmpty);
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
deleted file mode 100644
index 0663b45..0000000
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'driver_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(AnalysisDriverTest_Kernel);
-  });
-}
-
-/// Wrapper around the test package's `fail` function.
-///
-/// Unlike the test package's `fail` function, this function is not annotated
-/// with @alwaysThrows, so we can call it at the top of a test method without
-/// causing the rest of the method to be flagged as dead code.
-void _fail(String message) {
-  fail(message);
-}
-
-@reflectiveTest
-class AnalysisDriverTest_Kernel extends AnalysisDriverTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  test_asyncChangesDuringAnalysis_getErrors() async {
-    // TODO(brianwilkerson) Re-enable this test. It was disabled because it
-    // appears to be flaky (possibly OS specific).
-    //  Unexpected exceptions:
-    //  Path: /test/lib/test.dart
-    //  Exception: NoSuchMethodError: The getter 'iterator' was called on null.
-    //  Receiver: null
-    //  Tried calling: iterator
-    //  #0      Object.noSuchMethod (dart:core-patch/dart:core/object_patch.dart:46)
-    //  #1      _LibraryWalker.evaluateScc (package:front_end/src/incremental/file_state.dart:581:35)
-    //  #2      _LibraryWalker.evaluate (package:front_end/src/incremental/file_state.dart:571:5)
-    //  #3      DependencyWalker.walk.strongConnect (package:front_end/src/dependency_walker.dart:149:13)
-    //  #4      DependencyWalker.walk (package:front_end/src/dependency_walker.dart:168:18)
-    //  #5      FileState.topologicalOrder (package:front_end/src/incremental/file_state.dart:147:19)
-    //  #6      KernelDriver.getKernelSequence.<anonymous closure>.<anonymous closure> (package:front_end/src/incremental/kernel_driver.dart:282:50)
-    //  #7      PerformanceLog.run (package:front_end/src/base/performance_logger.dart:34:15)
-    //  #8      KernelDriver.getKernelSequence.<anonymous closure> (package:front_end/src/incremental/kernel_driver.dart:281:43)
-//    await super.test_asyncChangesDuringAnalysis_getErrors();
-  }
-
-  test_componentMetadata_incremental_merge() async {
-    var a = _p('/a.dart');
-    var b = _p('/b.dart');
-    provider.newFile(a, r'''
-class A {
-  A.a();
-}
-''');
-    provider.newFile(b, r'''
-class B {
-  B.b();
-}
-''');
-    await driver.getResult(a);
-    await driver.getResult(b);
-
-    // This will fail if compilation of 'b' removed metadata for 'a'.
-    // We use metadata to get constructor name offsets.
-    await driver.getResult(a);
-
-    // And check that 'b' still has its metadata as well.
-    await driver.getResult(b);
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_errors_uriDoesNotExist_export() async {
-    await super.test_errors_uriDoesNotExist_export();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_errors_uriDoesNotExist_import() async {
-    await super.test_errors_uriDoesNotExist_import();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_errors_uriDoesNotExist_import_deferred() async {
-    await super.test_errors_uriDoesNotExist_import_deferred();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_errors_uriDoesNotExist_part() async {
-    await super.test_errors_uriDoesNotExist_part();
-  }
-
-  @override
-  test_externalSummaries() {
-    // Skipped by design.
-  }
-
-  @override
-  test_externalSummaries_partReuse() {
-    // Skipped by design.
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_getResult_doesNotExist() async {
-    await super.test_getResult_doesNotExist();
-  }
-
-  @failingTest
-  @override
-  test_getResult_importLibrary_thenRemoveIt() async {
-    await super.test_getResult_importLibrary_thenRemoveIt();
-  }
-
-  @failingTest
-  @override
-  test_getResult_invalid_annotation_functionAsConstructor() async {
-    await super.test_getResult_invalid_annotation_functionAsConstructor();
-  }
-
-  @failingTest
-  @override
-  test_getResult_invalidUri() async {
-    await super.test_getResult_invalidUri();
-  }
-
-  @failingTest
-  @override
-  test_getResult_invalidUri_exports_dart() async {
-    await super.test_getResult_invalidUri_exports_dart();
-  }
-
-  @failingTest
-  @override
-  test_getResult_invalidUri_imports_dart() async {
-    await super.test_getResult_invalidUri_imports_dart();
-  }
-
-  @failingTest
-  @override
-  test_getResult_invalidUri_metadata() async {
-    await super.test_getResult_invalidUri_metadata();
-  }
-
-  @failingTest
-  @override
-  test_getResult_mix_fileAndPackageUris() async {
-    await super.test_getResult_mix_fileAndPackageUris();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31409')
-  @override
-  test_getResult_nameConflict_local() async {
-    await super.test_getResult_nameConflict_local();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/31409')
-  @override
-  test_getResult_nameConflict_local_typeInference() async {
-    await super.test_getResult_nameConflict_local_typeInference();
-  }
-
-  @override
-  @failingTest
-  test_missingDartLibrary_async() {
-    return super.test_missingDartLibrary_async();
-  }
-
-  @override
-  @failingTest
-  test_missingDartLibrary_core() {
-    return super.test_missingDartLibrary_core();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  @override
-  test_part_getResult_noLibrary() async {
-    await super.test_part_getResult_noLibrary();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  @override
-  test_part_getUnitElement_noLibrary() async {
-    _fail('This test fails even with @failingTest');
-    await super.test_part_getUnitElement_noLibrary();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  @override
-  test_part_results_afterLibrary() async {
-    await super.test_part_results_afterLibrary();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
-  @override
-  test_part_results_noLibrary() async {
-    await super.test_part_results_noLibrary();
-  }
-
-  @failingTest
-  @override
-  test_removeFile_invalidate_importers() async {
-    await super.test_removeFile_invalidate_importers();
-  }
-
-  String _p(String path) => provider.convertPath(path);
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
deleted file mode 100644
index 1a18218..0000000
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'driver_resolution_test.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(AnalysisDriverResolutionTest_Kernel);
-  });
-}
-
-@reflectiveTest
-class AnalysisDriverResolutionTest_Kernel extends AnalysisDriverResolutionTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_generic_function_type() async {
-    await super.test_generic_function_type();
-  }
-
-  @override
-  @failingTest
-  test_invalid_annotation_on_variable_declaration_for() async {
-    await super.test_invalid_annotation_on_variable_declaration_for();
-  }
-
-  @override
-  @failingTest
-  test_invalid_constructor_initializer_field_importPrefix() async {
-    await super.test_invalid_constructor_initializer_field_importPrefix();
-  }
-
-  @override
-  @failingTest
-  test_methodInvocation_topLevelFunction_generic() async {
-    await super.test_methodInvocation_topLevelFunction_generic();
-  }
-
-  @override
-  @failingTest
-  test_unresolved_assignment_left_indexed1_simple() async {
-    await super.test_unresolved_assignment_left_indexed1_simple();
-  }
-
-  @override
-  @failingTest
-  test_unresolved_assignment_left_indexed2_simple() async {
-    await super.test_unresolved_assignment_left_indexed2_simple();
-  }
-
-  @override
-  @failingTest
-  test_unresolved_assignment_left_indexed3_simple() async {
-    await super.test_unresolved_assignment_left_indexed3_simple();
-  }
-
-  @override
-  @failingTest
-  test_unresolved_assignment_left_indexed4_simple() async {
-    await super.test_unresolved_assignment_left_indexed4_simple();
-  }
-
-  @override
-  @failingTest
-  test_unresolved_redirectingFactory_22() async {
-    await super.test_unresolved_redirectingFactory_22();
-  }
-}
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 8624cb8..57c42eb 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -9,17 +9,17 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../../../utils.dart';
+import '../resolution/find_element.dart';
+import '../resolution/find_node.dart';
 import 'base.dart';
 
 main() {
@@ -153,17 +153,16 @@
       expect(name.prefix.staticType, isNull);
 
       assertElement(name.identifier, expectedElement);
-      if (useCFE) {
-        assertType(name.identifier, expectedType);
-      }
+      expect(name.identifier.staticType, isNull);
     }
   }
 
+  void assertTypeNull(Identifier node) {
+    expect(node.staticType, isNull);
+  }
+
   void assertUnresolvedInvokeType(DartType invokeType) {
-    if (useCFE) {
-      // TODO(scheglov) https://github.com/dart-lang/sdk/issues/33682
-      expect(invokeType.toString(), '() → dynamic');
-    }
+    expect(invokeType, isDynamicType);
   }
 
   /// Creates a function that checks that an expression is a reference to a top
@@ -216,8 +215,8 @@
 
   Future resolveTestFile() async {
     result = await driver.getResult(testFile);
-    findNode = new FindNode(result);
-    findElement = new FindElement(result);
+    findNode = new FindNode(result.content, result.unit);
+    findElement = new FindElement(result.unit);
   }
 
   test_adjacentStrings() async {
@@ -887,1059 +886,6 @@
     }
   }
 
-  test_assign_in_const_context() async {
-    addTestFile('''
-void f(num x, int y) {
-  const [x = y];
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x =');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y]');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_to_ambiguous_type() async {
-    provider.newFile(_p('/test/lib/a.dart'), 'class C {}');
-    provider.newFile(_p('/test/lib/b.dart'), 'class C {}');
-    addTestFile('''
-import 'a.dart';
-import 'b.dart';
-void f(int x) {
-  C = x;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x;');
-    assertType(xRef, 'int');
-    assertElement(xRef, findElement.parameter('x'));
-  }
-
-  test_assign_to_class() async {
-    addTestFile('''
-class C {}
-void f(int x) {
-  C = x;
-}
-''');
-    await resolveTestFile();
-
-    var cRef = findNode.simple('C =');
-    assertType(cRef, 'Type');
-    assertElement(cRef, findElement.class_('C'));
-    var xRef = findNode.simple('x;');
-    assertType(xRef, 'int');
-    assertElement(xRef, findElement.parameter('x'));
-  }
-
-  test_assign_to_non_lvalue() async {
-    addTestFile('''
-void f(int x, double y, String z) {
-  x + y = z;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x +');
-    assertType(xRef, 'int');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y =');
-    assertType(yRef, 'double');
-    assertElement(yRef, findElement.parameter('y'));
-    var zRef = findNode.simple('z;');
-    assertType(zRef, 'String');
-    assertElement(zRef, findElement.parameter('z'));
-  }
-
-  test_assign_to_postfix_increment() async {
-    addTestFile('''
-void f(num x, int y) {
-  x++ = y;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x++');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y;');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_to_postfix_increment_compound() async {
-    addTestFile('''
-void f(num x, int y) {
-  x++ += y;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x++');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y;');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_to_postfix_increment_null_aware() async {
-    addTestFile('''
-void f(num x, int y) {
-  x++ ??= y;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x++');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y;');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_to_prefix_increment() async {
-    addTestFile('''
-void f(num x, int y) {
-  ++x = y;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x =');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y;');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_to_prefix_increment_compound() async {
-    addTestFile('''
-void f(num x, int y) {
-  ++x += y;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x +=');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y;');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_to_prefix_increment_null_aware() async {
-    addTestFile('''
-void f(num x, int y) {
-  ++x ??= y;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x ??=');
-    assertType(xRef, 'num');
-    assertElement(xRef, findElement.parameter('x'));
-    var yRef = findNode.simple('y;');
-    assertType(yRef, 'int');
-    assertElement(yRef, findElement.parameter('y'));
-  }
-
-  test_assign_with_synthetic_lhs() async {
-    addTestFile('''
-void f(int x) {
-  = x;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x;');
-    assertType(xRef, 'int');
-    assertElement(xRef, findElement.parameter('x'));
-  }
-
-  test_assign_with_synthetic_lhs_in_method() async {
-    addTestFile('''
-class C {
-  void f(int x) {
-    = x;
-  }
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x;');
-    assertType(xRef, 'int');
-    assertElement(xRef, findElement.parameter('x'));
-  }
-
-  test_assignment_to_final_parameter() async {
-    addTestFile('''
-f(final int x) {
-  x += 2;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findNode.simple('x)').staticElement;
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, same(xElement));
-    expect(xReference.staticType.toString(), 'int');
-  }
-
-  test_assignment_to_final_variable_local() async {
-    addTestFile('''
-main() {
-  final x = 1;
-  x += 2;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findNode.simple('x =').staticElement;
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, same(xElement));
-    expect(xReference.staticType.toString(), 'int');
-  }
-
-  test_assignment_to_getter_instance_direct() async {
-    addTestFile('''
-class C {
-  int get x => 0;
-}
-f(C c) {
-  c.x += 2;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findElement.getter('x');
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, useCFE ? isNull : same(xElement));
-    expect(xReference.staticType.toString(), useCFE ? 'dynamic' : 'int');
-  }
-
-  test_assignment_to_getter_instance_via_implicit_this() async {
-    addTestFile('''
-class C {
-  int get x => 0;
-  f() {
-    x += 2;
-  }
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findElement.getter('x');
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, useCFE ? isNull : same(xElement));
-    expect(xReference.staticType.toString(), useCFE ? 'dynamic' : 'int');
-  }
-
-  test_assignment_to_getter_static_direct() async {
-    addTestFile('''
-class C {
-  static int get x => 0;
-}
-main() {
-  C.x += 2;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findElement.getter('x');
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, useCFE ? isNull : same(xElement));
-    expect(xReference.staticType.toString(), useCFE ? 'dynamic' : 'int');
-  }
-
-  test_assignment_to_getter_static_via_scope() async {
-    addTestFile('''
-class C {
-  static int get x => 0;
-  f() {
-    x += 2;
-  }
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findElement.getter('x');
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, useCFE ? isNull : same(xElement));
-    expect(xReference.staticType.toString(), useCFE ? 'dynamic' : 'int');
-  }
-
-  test_assignment_to_getter_top_level() async {
-    addTestFile('''
-int get x => 0;
-main() {
-  x += 2;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var xElement = findElement.topGet('x');
-    expect(xElement, isNotNull);
-    var xReference = findNode.simple('x +=');
-    expect(xReference.staticElement, useCFE ? isNull : same(xElement));
-    expect(xReference.staticType.toString(), useCFE ? 'dynamic' : 'int');
-  }
-
-  test_assignment_to_prefix() async {
-    var a = _p('/test/lib/a.dart');
-    provider.newFile(a, '''
-var x = 0;
-''');
-    addTestFile('''
-import 'a.dart' as p;
-main() {
-  p += 2;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var pElement = findElement.prefix('p');
-    expect(pElement, isNotNull);
-    var pReference = findNode.simple('p +=');
-    expect(pReference.staticElement, same(pElement));
-    expect(pReference.staticType, isNull);
-  }
-
-  test_assignmentExpression_compound_indexExpression() async {
-    String content = r'''
-main() {
-  var items = <num>[1, 2, 3];
-  items[0] += 4;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-
-    var typeProvider = unit.declaredElement.context.typeProvider;
-    InterfaceType numType = typeProvider.numType;
-    InterfaceType intType = typeProvider.intType;
-    InterfaceType listType = typeProvider.listType;
-    InterfaceType listNumType = listType.instantiate([numType]);
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement itemsElement;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      VariableDeclaration itemsNode = statement.variables.variables[0];
-      itemsElement = itemsNode.declaredElement;
-      expect(itemsElement.type, listNumType);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.PLUS_EQ);
-      expect(assignment.staticElement, isNotNull);
-      expect(assignment.staticElement.name, '+');
-      expect(assignment.staticType, typeProvider.numType); // num + int = num
-
-      IndexExpression indexExpression = assignment.leftHandSide;
-      expect(indexExpression.staticType, numType);
-      expect(indexExpression.index.staticType, intType);
-
-      MethodMember actualElement = indexExpression.staticElement;
-      MethodMember expectedElement = listNumType.getMethod('[]=');
-      expect(actualElement.name, '[]=');
-      expect(actualElement.baseElement, same(expectedElement.baseElement));
-      expect(actualElement.returnType, VoidTypeImpl.instance);
-      expect(actualElement.parameters[0].type, intType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_compound_local() async {
-    String content = r'''
-main() {
-  num v = 0;
-  v += 3;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement v;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      v = statement.variables.variables[0].declaredElement;
-      expect(v.type, typeProvider.numType);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.PLUS_EQ);
-      expect(assignment.staticElement, isNotNull);
-      expect(assignment.staticElement.name, '+');
-      expect(assignment.staticType, typeProvider.numType); // num + int = num
-
-      SimpleIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(v));
-      expect(left.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_compound_prefixedIdentifier() async {
-    String content = r'''
-main() {
-  var c = new C();
-  c.f += 2;
-}
-class C {
-  num f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cClassDeclaration = unit.declarations[1];
-    ClassElement cClassElement = cClassDeclaration.declaredElement;
-    FieldElement fElement = cClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement c;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      c = statement.variables.variables[0].declaredElement;
-      expect(c.type, cClassElement.type);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.PLUS_EQ);
-      expect(assignment.staticElement, isNotNull);
-      expect(assignment.staticElement.name, '+');
-      expect(assignment.staticType, typeProvider.numType); // num + int = num
-
-      PrefixedIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(fElement.setter));
-      expect(left.staticType, typeProvider.numType);
-
-      expect(left.prefix.staticElement, c);
-      expect(left.prefix.staticType, cClassElement.type);
-
-      expect(left.identifier.staticElement, same(fElement.setter));
-      expect(left.identifier.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_compound_propertyAccess() async {
-    String content = r'''
-main() {
-  new C().f += 2;
-}
-class C {
-  num f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cClassDeclaration = unit.declarations[1];
-    ClassElement cClassElement = cClassDeclaration.declaredElement;
-    FieldElement fElement = cClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    {
-      ExpressionStatement statement = mainStatements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.PLUS_EQ);
-      expect(assignment.staticElement, isNotNull);
-      expect(assignment.staticElement.name, '+');
-      expect(assignment.staticType, typeProvider.numType); // num + int = num
-
-      PropertyAccess left = assignment.leftHandSide;
-      expect(left.staticType, typeProvider.numType);
-
-      InstanceCreationExpression newC = left.target;
-      expect(newC.staticElement, cClassElement.unnamedConstructor);
-
-      expect(left.propertyName.staticElement, same(fElement.setter));
-      expect(left.propertyName.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_nullAware_local() async {
-    String content = r'''
-main() {
-  String v;
-  v ??= 'test';
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement v;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      v = statement.variables.variables[0].declaredElement;
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.QUESTION_QUESTION_EQ);
-      expect(assignment.staticElement, isNull);
-      expect(assignment.staticType, typeProvider.stringType);
-
-      SimpleIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(v));
-      expect(left.staticType, typeProvider.stringType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.stringType);
-    }
-  }
-
-  test_assignmentExpression_propertyAccess_forwardingStub() async {
-    String content = r'''
-class A {
-  int f;
-}
-abstract class I<T> {
-  T f;
-}
-class B extends A implements I<int> {}
-main() {
-  new B().f = 1;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration aNode = unit.declarations[0];
-    ClassElement aElement = aNode.declaredElement;
-    FieldElement fElement = aElement.getField('f');
-
-    ClassDeclaration bNode = unit.declarations[2];
-    ClassElement bElement = bNode.declaredElement;
-
-    List<Statement> mainStatements = _getMainStatements(result);
-    ExpressionStatement statement = mainStatements[0];
-
-    AssignmentExpression assignment = statement.expression;
-    expect(assignment.staticType, typeProvider.intType);
-
-    PropertyAccess left = assignment.leftHandSide;
-    expect(left.staticType, typeProvider.intType);
-
-    InstanceCreationExpression newB = left.target;
-    expect(newB.staticElement, bElement.unnamedConstructor);
-
-    expect(left.propertyName.staticElement, same(fElement.setter));
-    expect(left.propertyName.staticType, typeProvider.intType);
-
-    Expression right = assignment.rightHandSide;
-    expect(right.staticType, typeProvider.intType);
-  }
-
-  test_assignmentExpression_simple_indexExpression() async {
-    String content = r'''
-main() {
-  var items = <int>[1, 2, 3];
-  items[0] = 4;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-
-    var typeProvider = unit.declaredElement.context.typeProvider;
-    InterfaceType intType = typeProvider.intType;
-    InterfaceType listType = typeProvider.listType;
-    InterfaceType listIntType = listType.instantiate([intType]);
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement itemsElement;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      VariableDeclaration itemsNode = statement.variables.variables[0];
-      itemsElement = itemsNode.declaredElement;
-      expect(itemsElement.type, listIntType);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.EQ);
-      expect(assignment.staticElement, isNull);
-      expect(assignment.staticType, typeProvider.intType);
-
-      IndexExpression indexExpression = assignment.leftHandSide;
-      expect(indexExpression.staticType, intType);
-      expect(indexExpression.index.staticType, intType);
-
-      MethodMember actualElement = indexExpression.staticElement;
-      MethodMember expectedElement = listIntType.getMethod('[]=');
-      expect(actualElement.name, '[]=');
-      expect(actualElement.baseElement, same(expectedElement.baseElement));
-      expect(actualElement.returnType, VoidTypeImpl.instance);
-      expect(actualElement.parameters[0].type, intType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_instanceField_unqualified() async {
-    String content = r'''
-class C {
-  num f = 0;
-  foo() {
-    f = 2;
-  }
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cDeclaration = unit.declarations[0];
-    FieldElement fElement = cDeclaration.declaredElement.fields[0];
-
-    MethodDeclaration fooDeclaration = cDeclaration.members[1];
-    BlockFunctionBody fooBody = fooDeclaration.body;
-
-    {
-      ExpressionStatement statement = fooBody.block.statements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.EQ);
-      expect(assignment.staticElement, isNull);
-      expect(assignment.staticType, typeProvider.intType);
-
-      SimpleIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(fElement.setter));
-      expect(left.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_local() async {
-    String content = r'''
-main() {
-  num v = 0;
-  v = 2;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement v;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      v = statement.variables.variables[0].declaredElement;
-      expect(v.type, typeProvider.numType);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.EQ);
-      expect(assignment.staticElement, isNull);
-      expect(assignment.staticType, typeProvider.intType);
-
-      SimpleIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(v));
-      expect(left.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_prefixedIdentifier() async {
-    String content = r'''
-main() {
-  var c = new C();
-  c.f = 2;
-}
-class C {
-  num f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cClassDeclaration = unit.declarations[1];
-    ClassElement cClassElement = cClassDeclaration.declaredElement;
-    FieldElement fElement = cClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement c;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      c = statement.variables.variables[0].declaredElement;
-      expect(c.type, cClassElement.type);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.staticType, typeProvider.intType);
-
-      PrefixedIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(fElement.setter));
-      expect(left.staticType, typeProvider.numType);
-
-      expect(left.prefix.staticElement, c);
-      expect(left.prefix.staticType, cClassElement.type);
-
-      expect(left.identifier.staticElement, same(fElement.setter));
-      expect(left.identifier.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_prefixedIdentifier_staticField() async {
-    String content = r'''
-main() {
-  C.f = 2;
-}
-class C {
-  static num f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cClassDeclaration = unit.declarations[1];
-    ClassElement cClassElement = cClassDeclaration.declaredElement;
-    FieldElement fElement = cClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    {
-      ExpressionStatement statement = mainStatements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.staticType, typeProvider.intType);
-
-      PrefixedIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(fElement.setter));
-      expect(left.staticType, typeProvider.numType);
-
-      expect(left.prefix.staticElement, cClassElement);
-      expect(left.prefix.staticType, cClassElement.type);
-
-      expect(left.identifier.staticElement, same(fElement.setter));
-      expect(left.identifier.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_propertyAccess() async {
-    String content = r'''
-main() {
-  new C().f = 2;
-}
-class C {
-  num f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cClassDeclaration = unit.declarations[1];
-    ClassElement cClassElement = cClassDeclaration.declaredElement;
-    FieldElement fElement = cClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    {
-      ExpressionStatement statement = mainStatements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.staticType, typeProvider.intType);
-
-      PropertyAccess left = assignment.leftHandSide;
-      expect(left.staticType, typeProvider.numType);
-
-      InstanceCreationExpression newC = left.target;
-      expect(newC.staticElement, cClassElement.unnamedConstructor);
-
-      expect(left.propertyName.staticElement, same(fElement.setter));
-      expect(left.propertyName.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_propertyAccess_chained() async {
-    String content = r'''
-main() {
-  var a = new A();
-  a.b.f = 2;
-}
-class A {
-  B b;
-}
-class B {
-  num f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration aClassDeclaration = unit.declarations[1];
-    ClassElement aClassElement = aClassDeclaration.declaredElement;
-    FieldElement bElement = aClassElement.getField('b');
-
-    ClassDeclaration bClassDeclaration = unit.declarations[2];
-    ClassElement bClassElement = bClassDeclaration.declaredElement;
-    FieldElement fElement = bClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement a;
-    {
-      VariableDeclarationStatement statement = mainStatements[0];
-      a = statement.variables.variables[0].declaredElement;
-      expect(a.type, aClassElement.type);
-    }
-
-    {
-      ExpressionStatement statement = mainStatements[1];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.staticType, typeProvider.intType);
-
-      PropertyAccess fAccess = assignment.leftHandSide;
-      expect(fAccess.propertyName.name, 'f');
-      expect(fAccess.propertyName.staticElement, same(fElement.setter));
-      expect(fAccess.propertyName.staticType, typeProvider.numType);
-
-      PrefixedIdentifier bAccess = fAccess.target;
-      expect(bAccess.identifier.name, 'b');
-      expect(bAccess.identifier.staticElement, same(bElement.getter));
-      expect(bAccess.identifier.staticType, bClassElement.type);
-
-      SimpleIdentifier aIdentifier = bAccess.prefix;
-      expect(aIdentifier.name, 'a');
-      expect(aIdentifier.staticElement, a);
-      expect(aIdentifier.staticType, aClassElement.type);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_propertyAccess_setter() async {
-    String content = r'''
-main() {
-  new C().f = 2;
-}
-class C {
-  void set f(num _) {}
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cClassDeclaration = unit.declarations[1];
-    ClassElement cClassElement = cClassDeclaration.declaredElement;
-    FieldElement fElement = cClassElement.getField('f');
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    {
-      ExpressionStatement statement = mainStatements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.staticType, typeProvider.intType);
-
-      PropertyAccess left = assignment.leftHandSide;
-      expect(left.staticType, typeProvider.numType);
-
-      InstanceCreationExpression newC = left.target;
-      expect(newC.staticElement, cClassElement.unnamedConstructor);
-
-      expect(left.propertyName.staticElement, same(fElement.setter));
-      expect(left.propertyName.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_staticField_unqualified() async {
-    String content = r'''
-class C {
-  static num f = 0;
-  foo() {
-    f = 2;
-  }
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    ClassDeclaration cDeclaration = unit.declarations[0];
-    FieldElement fElement = cDeclaration.declaredElement.fields[0];
-
-    MethodDeclaration fooDeclaration = cDeclaration.members[1];
-    BlockFunctionBody fooBody = fooDeclaration.body;
-
-    {
-      ExpressionStatement statement = fooBody.block.statements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.EQ);
-      expect(assignment.staticElement, isNull);
-      expect(assignment.staticType, typeProvider.intType);
-
-      SimpleIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(fElement.setter));
-      expect(left.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
-  test_assignmentExpression_simple_topLevelVariable() async {
-    String content = r'''
-main() {
-  v = 2;
-}
-num v = 0;
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-    var typeProvider = unit.declaredElement.context.typeProvider;
-
-    TopLevelVariableElement v;
-    {
-      TopLevelVariableDeclaration declaration = unit.declarations[1];
-      v = declaration.variables.variables[0].declaredElement;
-      expect(v.type, typeProvider.numType);
-    }
-
-    List<Statement> mainStatements = _getMainStatements(result);
-    {
-      ExpressionStatement statement = mainStatements[0];
-
-      AssignmentExpression assignment = statement.expression;
-      expect(assignment.operator.type, TokenType.EQ);
-      expect(assignment.staticElement, isNull);
-      expect(assignment.staticType, typeProvider.intType);
-
-      SimpleIdentifier left = assignment.leftHandSide;
-      expect(left.staticElement, same(v.setter));
-      expect(left.staticType, typeProvider.numType);
-
-      Expression right = assignment.rightHandSide;
-      expect(right.staticType, typeProvider.intType);
-    }
-  }
-
   test_binary_operator_with_synthetic_operands() async {
     addTestFile('''
 void main() {
@@ -2589,6 +1535,7 @@
     }
   }
 
+  @failingTest
   test_deferredImport_loadLibrary_invocation() async {
     var a = _p('/test/lib/a.dart');
     provider.newFile(a, '');
@@ -2611,9 +1558,10 @@
 
     var name = invocation.methodName;
     assertElement(name, import.importedLibrary.loadLibraryFunction);
-    assertType(name, useCFE ? '() → Future<dynamic>' : null);
+    assertType(name, '() → Future<dynamic>');
   }
 
+  @failingTest
   test_deferredImport_loadLibrary_invocation_argument() async {
     var a = _p('/test/lib/a.dart');
     provider.newFile(a, '');
@@ -2638,7 +1586,7 @@
 
     var name = invocation.methodName;
     assertElement(name, import.importedLibrary.loadLibraryFunction);
-    assertType(name, useCFE ? '() → Future<dynamic>' : null);
+    assertType(name, '() → Future<dynamic>');
 
     var bRef = invocation.argumentList.arguments[0];
     assertElement(bRef, findElement.topGet('b'));
@@ -3098,18 +2046,17 @@
 ''');
     await resolveTestFile();
 
-    ClassDeclaration aNode = result.unit.declarations[0];
-    ClassElement eElement = aNode.declaredElement;
-    MethodElement mElement = eElement.getMethod('m');
+//    ClassDeclaration aNode = result.unit.declarations[0];
+//    ClassElement eElement = aNode.declaredElement;
+//    MethodElement mElement = eElement.getMethod('m');
 
     List<Statement> mainStatements = _getMainStatements(result);
 
     ExpressionStatement statement = mainStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.staticInvokeType.toString(), '(int) → void');
-    if (useCFE) {
-      expect(invocation.methodName.staticElement, same(mElement));
-    }
+    // TODO(scheglov) Check for MethodElement
+//    expect(invocation.methodName.staticElement, same(mElement));
   }
 
   test_function_call_with_synthetic_arguments() async {
@@ -3221,30 +2168,6 @@
     expect(actualElement.parameters[0].type, intType);
   }
 
-  test_indexExpression_cascade_assign() async {
-    addTestFile(r'''
-main() {
-  <int, int>{}..[1] = 10;
-}
-''');
-    await resolveTestFile();
-
-    var cascade = findNode.cascade('<int, int>');
-    assertType(cascade, 'Map<int, int>');
-
-    MapLiteral map = cascade.target;
-    assertType(map, 'Map<int, int>');
-    assertTypeArguments(map.typeArguments, [intType, intType]);
-
-    AssignmentExpression assignment = cascade.cascadeSections[0];
-    assertElementNull(assignment);
-    assertType(assignment, 'int');
-
-    IndexExpression indexed = assignment.leftHandSide;
-    assertMember(indexed, 'Map<int, int>', mapElement.getMethod('[]='));
-    assertType(indexed, 'int');
-  }
-
   test_instanceCreation_factory() async {
     String content = r'''
 class C {
@@ -3443,11 +2366,7 @@
 
       PrefixedIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, same(cElement));
-      if (useCFE) {
-        expect(typeIdentifier.staticType, cTypeInt);
-      } else {
-        expect(typeIdentifier.staticType, cTypeDynamic);
-      }
+      expect(typeIdentifier.staticType, cTypeDynamic);
 
       SimpleIdentifier typePrefix = typeIdentifier.prefix;
       expect(typePrefix.name, 'p');
@@ -3472,11 +2391,7 @@
 
       PrefixedIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, cElement);
-      if (useCFE) {
-        expect(typeIdentifier.staticType, cTypeDouble);
-      } else {
-        expect(typeIdentifier.staticType, cTypeDynamic);
-      }
+      expect(typeIdentifier.staticType, cTypeDynamic);
 
       SimpleIdentifier typePrefix = typeIdentifier.prefix;
       expect(typePrefix.name, 'p');
@@ -3520,6 +2435,7 @@
     }
   }
 
+  @failingTest
   test_instanceCreation_unprefixed() async {
     addTestFile(r'''
 main() {
@@ -3543,7 +2459,6 @@
     ConstructorElement defaultConstructor = cElement.constructors[0];
     ConstructorElement namedConstructor = cElement.constructors[1];
     InterfaceType cType = cElement.type;
-    var cTypeDynamic = cType.instantiate([DynamicTypeImpl.instance]);
 
     var statements = _getMainStatements(result);
     {
@@ -3559,11 +2474,7 @@
 
       SimpleIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, same(cElement));
-      if (useCFE) {
-        expect(typeIdentifier.staticType, cTypeInt);
-      } else {
-        expect(typeIdentifier.staticType, cTypeDynamic);
-      }
+      expect(typeIdentifier.staticType, isNull);
 
       expect(creation.constructorName.name, isNull);
     }
@@ -3583,7 +2494,7 @@
 
       SimpleIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, same(cElement));
-      expect(typeIdentifier.staticType, cTypeBool);
+      expect(typeIdentifier.staticType, isNull);
 
       expect(creation.constructorName.name, isNull);
     }
@@ -3601,11 +2512,7 @@
 
       SimpleIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, cElement);
-      if (useCFE) {
-        expect(typeIdentifier.staticType, cTypeDouble);
-      } else {
-        expect(typeIdentifier.staticType, cTypeDynamic);
-      }
+      expect(typeIdentifier.staticType, isNull);
 
       expect(typeIdentifier.staticElement, same(cElement));
 
@@ -3629,7 +2536,7 @@
 
       SimpleIdentifier typeIdentifier = typeName.name;
       expect(typeIdentifier.staticElement, cElement);
-      expect(typeIdentifier.staticType, cTypeBool);
+      expect(typeIdentifier.staticType, isNull);
 
       SimpleIdentifier constructorName = creation.constructorName.name;
       expect(constructorName.staticElement, namedConstructor);
@@ -3721,93 +2628,6 @@
     // analyzer/FE integration.
   }
 
-  test_invalid_assign_notLValue_parenthesized() async {
-    addTestFile(r'''
-int a, b;
-double c = 0.0;
-main() {
-  (a + b) = c;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var parenthesized = findNode.parenthesized('(a + b)');
-    assertType(parenthesized, 'int');
-
-    assertTopGetRef('a + b', 'a');
-    assertTopGetRef('b)', 'b');
-    assertTopGetRef('c;', 'c');
-
-    var assignment = findNode.assignment('= c');
-    if (useCFE) {
-      assertElementNull(assignment);
-      assertTypeDynamic(assignment);
-    }
-  }
-
-  test_invalid_assignment_types_local() async {
-    addTestFile(r'''
-int a;
-bool b;
-main() {
-  a = b;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a = b');
-    assertElementNull(assignment);
-    assertType(assignment, 'bool');
-
-    SimpleIdentifier aRef = assignment.leftHandSide;
-    assertElement(aRef, findElement.topVar('a').setter);
-    assertType(aRef, 'int');
-
-    SimpleIdentifier bRef = assignment.rightHandSide;
-    assertElement(bRef, findElement.topVar('b').getter);
-    assertType(bRef, 'bool');
-  }
-
-  test_invalid_assignment_types_top() async {
-    addTestFile(r'''
-int a = 0;
-bool b = a;
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var bDeclaration = findNode.variableDeclaration('b =');
-    TopLevelVariableElement bElement = bDeclaration.declaredElement;
-    assertElement(bDeclaration.name, bElement);
-    assertType(bDeclaration.name, 'bool');
-    expect(bElement.type.toString(), 'bool');
-
-    SimpleIdentifier aRef = bDeclaration.initializer;
-    assertElement(aRef, findElement.topGet('a'));
-    assertType(aRef, 'int');
-  }
-
-  test_invalid_assignment_types_top_const() async {
-    addTestFile(r'''
-const int a = 0;
-const bool b = a;
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var bDeclaration = findNode.variableDeclaration('b =');
-    TopLevelVariableElement bElement = bDeclaration.declaredElement;
-    assertElement(bDeclaration.name, bElement);
-    assertType(bDeclaration.name, 'bool');
-    expect(bElement.type.toString(), 'bool');
-
-    SimpleIdentifier aRef = bDeclaration.initializer;
-    assertElement(aRef, findElement.topGet('a'));
-    assertType(aRef, 'int');
-  }
-
   test_invalid_catch_parameters_3() async {
     addTestFile(r'''
 main() {
@@ -3841,8 +2661,7 @@
     expect(result.errors, isNotEmpty);
 
     assertTypeDynamic(findNode.simple('e,'));
-    assertType(findNode.simple('s})'),
-        useCFE || Parser.useFasta ? 'StackTrace' : 'dynamic');
+    assertType(findNode.simple('s})'), 'StackTrace');
   }
 
   test_invalid_catch_parameters_optional_stack() async {
@@ -3855,8 +2674,7 @@
     expect(result.errors, isNotEmpty);
 
     assertTypeDynamic(findNode.simple('e,'));
-    assertType(findNode.simple('s])'),
-        useCFE || Parser.useFasta ? 'StackTrace' : 'dynamic');
+    assertType(findNode.simple('s])'), 'StackTrace');
   }
 
   test_invalid_const_as() async {
@@ -3996,11 +2814,7 @@
     expect(result.errors, isNotEmpty);
 
     var xRef = findNode.simple('X = ');
-    if (useCFE) {
-      assertElement(xRef, findElement.class_('X'));
-    } else {
-      assertElementNull(xRef);
-    }
+    assertElementNull(xRef);
 
     var aRef = findNode.simple('a;');
     assertElement(aRef, findElement.topGet('a'));
@@ -4038,11 +2852,7 @@
     expect(result.errors, isNotEmpty);
 
     var xRef = findNode.simple('x = ');
-    if (useCFE) {
-      assertElement(xRef, findElement.import('dart:async').prefix);
-    } else {
-      assertElementNull(xRef);
-    }
+    assertElementNull(xRef);
 
     var aRef = findNode.simple('a;');
     assertElement(aRef, findElement.topGet('a'));
@@ -4061,11 +2871,7 @@
     expect(result.errors, isNotEmpty);
 
     var xRef = findNode.simple('x = ');
-    if (useCFE) {
-      assertElement(xRef, findElement.method('x'));
-    } else {
-      assertElementNull(xRef);
-    }
+    assertElementNull(xRef);
 
     var aRef = findNode.simple('a;');
     assertElement(aRef, findElement.topGet('a'));
@@ -4103,11 +2909,7 @@
     expect(result.errors, isNotEmpty);
 
     var xRef = findNode.simple('x = ');
-    if (useCFE) {
-      assertElement(xRef, findElement.topFunction('x'));
-    } else {
-      assertElementNull(xRef);
-    }
+    assertElementNull(xRef);
 
     var aRef = findNode.simple('a;');
     assertElement(aRef, findElement.topGet('a'));
@@ -4126,11 +2928,7 @@
     expect(result.errors, isNotEmpty);
 
     var xRef = findNode.simple('x = ');
-    if (useCFE) {
-      assertElement(xRef, findElement.topVar('x'));
-    } else {
-      assertElementNull(xRef);
-    }
+    assertElementNull(xRef);
 
     var aRef = findNode.simple('a;');
     assertElement(aRef, findElement.topGet('a'));
@@ -4148,11 +2946,7 @@
     expect(result.errors, isNotEmpty);
 
     var tRef = findNode.simple('T = ');
-    if (useCFE) {
-      assertElement(tRef, findElement.typeParameter('T'));
-    } else {
-      assertElementNull(tRef);
-    }
+    assertElementNull(tRef);
 
     var aRef = findNode.simple('a;');
     assertElement(aRef, findElement.topGet('a'));
@@ -4344,17 +3138,16 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    if (useCFE) {
-      var aRef = findNode.simple('a;');
-      assertElement(aRef, findElement.parameter('a'));
-      assertType(aRef, 'int');
+    var aRef = findNode.simple('a;');
+    assertElement(aRef, findElement.parameter('a'));
+    assertType(aRef, 'int');
 
-      var bRef = findNode.simple('b;');
-      assertElement(bRef, findElement.parameter('b'));
-      assertType(bRef, 'double');
-    }
+    var bRef = findNode.simple('b;');
+    assertElement(bRef, findElement.parameter('b'));
+    assertType(bRef, 'double');
   }
 
+  @failingTest
   test_invalid_instanceCreation_abstract() async {
     addTestFile(r'''
 abstract class C<T> {
@@ -4385,7 +3178,7 @@
       TypeName type = constructorName.type;
       expect(type.typeArguments, isNull);
       assertElement(type.name, c);
-      assertType(type.name, useCFE ? 'C<int>' : 'C<dynamic>');
+      assertTypeNull(type.name);
 
       SimpleIdentifier aRef = creation.argumentList.arguments[0];
       assertElement(aRef, findElement.topGet('a'));
@@ -4402,7 +3195,7 @@
       TypeName type = constructorName.type;
       expect(type.typeArguments, isNull);
       assertElement(type.name, c);
-      assertType(type.name, useCFE ? 'C<bool>' : 'C<dynamic>');
+      assertType(type.name, 'C<bool>');
 
       SimpleIdentifier bRef = creation.argumentList.arguments[0];
       assertElement(bRef, findElement.topGet('b'));
@@ -4537,6 +3330,7 @@
     assertType(aRef, 'int');
   }
 
+  @failingTest
   test_invalid_instanceCreation_prefixAsType() async {
     addTestFile(r'''
 import 'dart:math' as p;
@@ -4551,10 +3345,8 @@
     ImportElement import = findNode.import('dart:math').element;
 
     var pRef = findNode.simple('p(a)');
-    if (useCFE) {
-      assertElement(pRef, import.prefix);
-      assertTypeDynamic(pRef);
-    }
+    assertElement(pRef, import.prefix);
+    assertTypeDynamic(pRef);
 
     var aRef = findNode.simple('a);');
     assertElement(aRef, findElement.topGet('a'));
@@ -4767,13 +3559,14 @@
 
     var pRef = invocation.methodName;
     assertElement(pRef, import.prefix);
-    assertType(pRef, useCFE ? null : 'dynamic');
+    assertTypeDynamic(pRef);
 
     var aRef = findNode.simple('a);');
     assertElement(aRef, findElement.topGet('a'));
     assertType(aRef, 'int');
   }
 
+  @failingTest
   test_invalid_methodInvocation_simpleIdentifier() async {
     addTestFile(r'''
 int foo = 0;
@@ -4798,6 +3591,7 @@
     expect(name.staticType, typeProvider.intType);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_class_constructor() async {
     addTestFile(r'''
 class A {
@@ -4812,13 +3606,14 @@
 
     var aRef = findNode.simple('A.T v;');
     assertElement(aRef, findElement.class_('A'));
-    assertType(aRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(aRef);
 
     var tRef = findNode.simple('T v;');
     assertElement(tRef, null);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_class_instanceField() async {
     addTestFile(r'''
 class A {
@@ -4833,13 +3628,14 @@
 
     var aRef = findNode.simple('A.T v;');
     assertElement(aRef, findElement.class_('A'));
-    assertType(aRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(aRef);
 
     var tRef = findNode.simple('T v;');
     assertElement(tRef, null);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_class_instanceMethod() async {
     addTestFile(r'''
 class A {
@@ -4854,13 +3650,14 @@
 
     var aRef = findNode.simple('A.T v;');
     assertElement(aRef, findElement.class_('A'));
-    assertType(aRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(aRef);
 
     var tRef = findNode.simple('T v;');
     assertElement(tRef, null);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_class_staticField() async {
     addTestFile(r'''
 class A {
@@ -4875,13 +3672,14 @@
 
     var aRef = findNode.simple('A.T v;');
     assertElement(aRef, findElement.class_('A'));
-    assertType(aRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(aRef);
 
     var tRef = findNode.simple('T v;');
     assertElement(tRef, null);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_class_staticMethod() async {
     addTestFile(r'''
 class A {
@@ -4896,13 +3694,14 @@
 
     var aRef = findNode.simple('A.T v;');
     assertElement(aRef, findElement.class_('A'));
-    assertType(aRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(aRef);
 
     var tRef = findNode.simple('T v;');
     assertElement(tRef, null);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_topLevelFunction() async {
     addTestFile(r'''
 int T() => 0;
@@ -4914,10 +3713,11 @@
     expect(result.errors, isNotEmpty);
 
     var tRef = findNode.simple('T v;');
-    assertElement(tRef, useCFE ? findElement.topFunction('T') : null);
+    assertElement(tRef, findElement.topFunction('T'));
     assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_topLevelFunction_prefixed() async {
     var a = _p('/test/lib/a.dart');
     provider.newFile(a, r'''
@@ -4943,13 +3743,14 @@
     expect(pRef.staticType, null);
 
     var tRef = prefixedName.identifier;
-    assertElement(tRef, useCFE ? tElement : null);
-    expect(pRef.staticType, null);
+    assertElement(tRef, tElement);
+    assertTypeDynamic(tRef);
 
     TypeName typeName = prefixedName.parent;
     expect(typeName.type, isDynamicType);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_topLevelVariable() async {
     addTestFile(r'''
 int T;
@@ -4961,10 +3762,11 @@
     expect(result.errors, isNotEmpty);
 
     var tRef = findNode.simple('T v;');
-    assertElement(tRef, useCFE ? findElement.topGet('T') : null);
+    assertElement(tRef, findElement.topGet('T'));
     assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_topLevelVariable_name() async {
     addTestFile(r'''
 int A;
@@ -4977,13 +3779,14 @@
 
     var aRef = findNode.simple('A.T v;');
     assertElement(aRef, findElement.topGet('A'));
-    assertType(aRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(aRef);
 
     var tRef = findNode.simple('T v;');
     assertElement(tRef, null);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_topLevelVariable_prefixed() async {
     var a = _p('/test/lib/a.dart');
     provider.newFile(a, r'''
@@ -5009,13 +3812,14 @@
     expect(pRef.staticType, null);
 
     var tRef = prefixedName.identifier;
-    assertElement(tRef, useCFE ? tElement : null);
-    expect(pRef.staticType, null);
+    assertElement(tRef, tElement);
+    assertTypeDynamic(tRef);
 
     TypeName typeName = prefixedName.parent;
     expect(typeName.type, isDynamicType);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_typeParameter_name() async {
     addTestFile(r'''
 main<T>() {
@@ -5026,13 +3830,12 @@
     expect(result.errors, isNotEmpty);
 
     var tRef = findNode.simple('T.U v;');
-    if (useCFE) {
-      var tElement = findNode.typeParameter('T>()').declaredElement;
-      assertElement(tRef, tElement);
-      assertTypeDynamic(tRef);
-    }
+    var tElement = findNode.typeParameter('T>()').declaredElement;
+    assertElement(tRef, tElement);
+    assertTypeDynamic(tRef);
   }
 
+  @failingTest
   test_invalid_nonTypeAsType_unresolved_name() async {
     addTestFile(r'''
 main() {
@@ -5044,7 +3847,7 @@
 
     var tRef = findNode.simple('T.U v;');
     assertElementNull(tRef);
-    assertType(tRef, useCFE ? 'dynamic' : null);
+    assertTypeDynamic(tRef);
   }
 
   test_invalid_rethrow() async {
@@ -5314,6 +4117,7 @@
     // analyzer/FE integration.
   }
 
+  @failingTest
   test_local_function_generic() async {
     addTestFile(r'''
 void main() {
@@ -5398,12 +4202,9 @@
     MethodInvocation fInvocation = vDeclaration.initializer;
     expect(fInvocation.methodName.staticElement, same(fElement));
     expect(fInvocation.staticType, typeProvider.intType);
-    // TODO(scheglov) We don't support invoke types well.
-//    if (useCFE) {
-//      String fInstantiatedType = '(int, String) → int';
-//      expect(fInvocation.methodName.staticType.toString(), fInstantiatedType);
-//      expect(fInvocation.staticInvokeType.toString(), fInstantiatedType);
-//    }
+
+    assertTypeNull(fInvocation.methodName);
+    expect(fInvocation.staticInvokeType.toString(), '(int, String) → int');
   }
 
   test_local_function_generic_f_bounded() async {
@@ -6586,13 +5387,8 @@
     expect(target.staticType.toString(), '(int) → double');
 
     SimpleIdentifier methodName = invocation.methodName;
-    if (useCFE) {
-      expect(methodName.staticElement, isNull);
-      expect(methodName.staticType, isNull);
-    } else {
-      expect(methodName.staticElement, same(parameter));
-      expect(methodName.staticType, parameter.type);
-    }
+    expect(methodName.staticElement, same(parameter));
+    expect(methodName.staticType, parameter.type);
   }
 
   test_methodInvocation_instanceMethod_forwardingStub() async {
@@ -6672,8 +5468,7 @@
       assertInvokeType(invocation, invokeTypeStr);
 
       assertMember(invocation.methodName, 'C<int>', mElement);
-      assertType(invocation.methodName,
-          useCFE ? invokeTypeStr : '<U>(int, U) → Map<int, U>');
+      assertType(invocation.methodName, '<U>(int, U) → Map<int, U>');
 
       _assertArgumentToParameter(arguments[0], mElement.parameters[0]);
       _assertArgumentToParameter(arguments[1], mElement.parameters[1]);
@@ -6726,11 +5521,7 @@
     ExpressionStatement statement = fooStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.methodName.staticElement, same(fElement.getter));
-    if (useCFE) {
-      _assertDynamicFunctionType(invocation.staticInvokeType);
-    } else {
-      expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
-    }
+    expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
     expect(invocation.staticType, DynamicTypeImpl.instance);
 
     List<Expression> arguments = invocation.argumentList.arguments;
@@ -6760,11 +5551,7 @@
     ExpressionStatement statement = fooStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.methodName.staticElement, same(fElement));
-    if (useCFE) {
-      _assertDynamicFunctionType(invocation.staticInvokeType);
-    } else {
-      expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
-    }
+    expect(invocation.staticInvokeType, DynamicTypeImpl.instance);
     expect(invocation.staticType, DynamicTypeImpl.instance);
 
     List<Expression> arguments = invocation.argumentList.arguments;
@@ -6827,7 +5614,7 @@
     ExpressionStatement statement = mainStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.methodName.staticElement, same(fElement));
-    _assertDynamicFunctionType(invocation.staticInvokeType);
+    expect(invocation.staticInvokeType, isDynamicType);
     expect(invocation.staticType, DynamicTypeImpl.instance);
 
     List<Expression> arguments = invocation.argumentList.arguments;
@@ -6881,7 +5668,7 @@
     ExpressionStatement statement = mainStatements[0];
     MethodInvocation invocation = statement.expression;
     expect(invocation.methodName.staticElement, same(fElement.getter));
-    _assertDynamicFunctionType(invocation.staticInvokeType);
+    expect(invocation.staticInvokeType, isDynamicType);
     expect(invocation.staticType, DynamicTypeImpl.instance);
 
     List<Expression> arguments = invocation.argumentList.arguments;
@@ -6922,9 +5709,7 @@
       var invokeTypeStr = '(int) → void';
       expect(invocation.staticType.toString(), 'void');
       expect(invocation.staticInvokeType.toString(), invokeTypeStr);
-      if (!useCFE) {
-        expect(invocation.staticInvokeType.element, same(mElement));
-      }
+      expect(invocation.staticInvokeType.element, same(mElement));
       expect(invocation.methodName.staticElement, same(mElement));
       expect(invocation.methodName.staticType.toString(), invokeTypeStr);
 
@@ -6946,9 +5731,7 @@
       var invokeTypeStr = '(int) → void';
       expect(invocation.staticType.toString(), 'void');
       expect(invocation.staticInvokeType.toString(), invokeTypeStr);
-      if (!useCFE) {
-        expect(invocation.staticInvokeType.element, same(mElement));
-      }
+      expect(invocation.staticInvokeType.element, same(mElement));
       expect(invocation.methodName.staticElement, same(mElement));
       expect(invocation.methodName.staticType.toString(), invokeTypeStr);
 
@@ -7010,6 +5793,7 @@
     _assertArgumentToParameter(arguments[1], fElement.parameters[1]);
   }
 
+  @failingTest
   test_methodInvocation_topLevelFunction_generic() async {
     addTestFile(r'''
 void main() {
@@ -7051,9 +5835,7 @@
       List<Expression> arguments = invocation.argumentList.arguments;
 
       expect(invocation.methodName.staticElement, same(fElement));
-      if (useCFE) {
-        expect(invocation.methodName.staticType.toString(), fTypeString);
-      }
+      expect(invocation.methodName.staticType.toString(), fTypeString);
       expect(invocation.staticType, VoidTypeImpl.instance);
       expect(invocation.staticInvokeType.toString(), fTypeString);
 
@@ -7071,9 +5853,7 @@
       List<Expression> arguments = invocation.argumentList.arguments;
 
       expect(invocation.methodName.staticElement, same(fElement));
-      if (useCFE) {
-        expect(invocation.methodName.staticType.toString(), fTypeString);
-      }
+      expect(invocation.methodName.staticType.toString(), fTypeString);
       expect(invocation.staticType, VoidTypeImpl.instance);
       expect(invocation.staticInvokeType.toString(), fTypeString);
 
@@ -7116,6 +5896,7 @@
     }
   }
 
+  @failingTest
   test_optionalConst_prefixed() async {
     provider.newFile(_p('/test/lib/a.dart'), r'''
 class C {
@@ -7229,11 +6010,7 @@
     expect(result.errors, isNotEmpty);
 
     var tRef = findNode.typeName('T<');
-    assertTypeName(
-      tRef,
-      findElement.typeParameter('T'),
-      useCFE ? 'dynamic' : 'T',
-    );
+    assertTypeName(tRef, findElement.typeParameter('T'), 'T');
 
     var intRef = findNode.typeName('int,');
     assertTypeName(intRef, intElement, 'int');
@@ -7309,11 +6086,7 @@
     expect(result.errors, isNotEmpty);
 
     var tRef = findNode.typeName('T<');
-    assertTypeName(
-      tRef,
-      findElement.typeParameter('T'),
-      useCFE ? 'dynamic' : 'T',
-    );
+    assertTypeName(tRef, findElement.typeParameter('T'), 'T');
 
     var intRef = findNode.typeName('int,');
     assertTypeName(intRef, intElement, 'int');
@@ -7648,11 +6421,7 @@
 
     SimpleIdentifier methodName = prefixed.identifier;
     expect(methodName.staticElement, isNull);
-    if (useCFE) {
-      expect(methodName.staticType, isNull);
-    } else {
-      expect(methodName.staticType, typeProvider.dynamicType);
-    }
+    expect(methodName.staticType, typeProvider.dynamicType);
   }
 
   test_prefixedIdentifier_importPrefix_className() async {
@@ -9343,353 +8112,7 @@
     assertType(identifier, 'Type');
   }
 
-  test_unresolved_assignment_left_identifier_compound() async {
-    addTestFile(r'''
-int b;
-main() {
-  a += b;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a += b');
-    assertElementNull(assignment);
-    assertTypeDynamic(assignment);
-
-    assertElementNull(assignment.leftHandSide);
-    assertTypeDynamic(assignment.leftHandSide);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('b'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_identifier_simple() async {
-    addTestFile(r'''
-int b;
-main() {
-  a = b;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a = b');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    assertElementNull(assignment.leftHandSide);
-    assertTypeDynamic(assignment.leftHandSide);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('b'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_indexed1_simple() async {
-    addTestFile(r'''
-int c;
-main() {
-  a[b] = c;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a[b] = c');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    IndexExpression indexed = assignment.leftHandSide;
-    assertElementNull(indexed);
-    assertTypeDynamic(indexed);
-
-    assertElementNull(indexed.target);
-    assertTypeDynamic(indexed.target);
-
-    assertElementNull(indexed.index);
-    assertTypeDynamic(indexed.index);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('c'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_indexed2_simple() async {
-    addTestFile(r'''
-A a;
-int c;
-main() {
-  a[b] = c;
-}
-class A {}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a[b] = c');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    IndexExpression indexed = assignment.leftHandSide;
-    assertElementNull(indexed);
-    assertTypeDynamic(indexed);
-
-    assertElement(indexed.target, findElement.topGet('a'));
-    assertType(indexed.target, 'A');
-
-    assertElementNull(indexed.index);
-    assertTypeDynamic(indexed.index);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('c'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_indexed3_simple() async {
-    addTestFile(r'''
-A a;
-int c;
-main() {
-  a[b] = c;
-}
-class A {
-  operator[]=(double b) {}
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a[b] = c');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    IndexExpression indexed = assignment.leftHandSide;
-    assertElement(indexed, findElement.method('[]='));
-    assertTypeDynamic(indexed);
-
-    assertElement(indexed.target, findElement.topGet('a'));
-    assertType(indexed.target, 'A');
-
-    assertElementNull(indexed.index);
-    assertTypeDynamic(indexed.index);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('c'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_indexed4_simple() async {
-    addTestFile(r'''
-double b;
-int c;
-main() {
-  a[b] = c;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a[b] = c');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    IndexExpression indexed = assignment.leftHandSide;
-    assertElementNull(indexed);
-    assertTypeDynamic(indexed);
-
-    assertElementNull(indexed.target);
-    assertTypeDynamic(indexed.target);
-
-    assertElement(indexed.index, findElement.topGet('b'));
-    assertType(indexed.index, 'double');
-
-    assertElement(assignment.rightHandSide, findElement.topGet('c'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_prefixed1_simple() async {
-    addTestFile(r'''
-int c;
-main() {
-  a.b = c;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a.b = c');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    PrefixedIdentifier prefixed = assignment.leftHandSide;
-    assertElementNull(prefixed);
-    assertTypeDynamic(prefixed);
-
-    assertElementNull(prefixed.prefix);
-    assertTypeDynamic(prefixed.prefix);
-
-    assertElementNull(prefixed.identifier);
-    assertTypeDynamic(prefixed.identifier);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('c'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_prefixed2_simple() async {
-    addTestFile(r'''
-class A {}
-A a;
-int c;
-main() {
-  a.b = c;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a.b = c');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    PrefixedIdentifier prefixed = assignment.leftHandSide;
-    assertElementNull(prefixed);
-    assertTypeDynamic(prefixed);
-
-    assertElement(prefixed.prefix, findElement.topGet('a'));
-    assertType(prefixed.prefix, 'A');
-
-    assertElementNull(prefixed.identifier);
-    assertTypeDynamic(prefixed.identifier);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('c'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_property1_simple() async {
-    addTestFile(r'''
-int d;
-main() {
-  a.b.c = d;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a.b.c = d');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    PropertyAccess access = assignment.leftHandSide;
-    assertTypeDynamic(access);
-
-    PrefixedIdentifier prefixed = access.target;
-    assertElementNull(prefixed);
-    assertTypeDynamic(prefixed);
-
-    assertElementNull(prefixed.prefix);
-    assertTypeDynamic(prefixed.prefix);
-
-    assertElementNull(prefixed.identifier);
-    assertTypeDynamic(prefixed.identifier);
-
-    assertElementNull(access.propertyName);
-    assertTypeDynamic(access.propertyName);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('d'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_property2_simple() async {
-    addTestFile(r'''
-A a;
-int d;
-main() {
-  a.b.c = d;
-}
-class A {}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var assignment = findNode.assignment('a.b.c = d');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    PropertyAccess access = assignment.leftHandSide;
-    assertTypeDynamic(access);
-
-    PrefixedIdentifier prefixed = access.target;
-    assertElementNull(prefixed);
-    assertTypeDynamic(prefixed);
-
-    assertElement(prefixed.prefix, findElement.topGet('a'));
-    assertType(prefixed.prefix, 'A');
-
-    assertElementNull(prefixed.identifier);
-    assertTypeDynamic(prefixed.identifier);
-
-    assertElementNull(access.propertyName);
-    assertTypeDynamic(access.propertyName);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('d'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
-  test_unresolved_assignment_left_property3_simple() async {
-    addTestFile(r'''
-A a;
-int d;
-main() {
-  a.b.c = d;
-}
-class A { B b; }
-class B {}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-    var bElement = findElement.field('b');
-
-    var assignment = findNode.assignment('a.b.c = d');
-    assertElementNull(assignment);
-    if (useCFE) {
-      assertType(assignment, 'int');
-    }
-
-    PropertyAccess access = assignment.leftHandSide;
-    assertTypeDynamic(access);
-
-    PrefixedIdentifier prefixed = access.target;
-    assertElement(prefixed, bElement.getter);
-    assertType(prefixed, 'B');
-
-    assertElement(prefixed.prefix, findElement.topGet('a'));
-    assertType(prefixed.prefix, 'A');
-
-    assertElement(prefixed.identifier, bElement.getter);
-    assertType(prefixed.identifier, 'B');
-
-    assertElementNull(access.propertyName);
-    assertTypeDynamic(access.propertyName);
-
-    assertElement(assignment.rightHandSide, findElement.topGet('d'));
-    assertType(assignment.rightHandSide, 'int');
-  }
-
+  @failingTest
   test_unresolved_instanceCreation_name_11() async {
     addTestFile(r'''
 int arg1, arg2;
@@ -9704,29 +8127,24 @@
     ExpressionStatement statement = statements[0];
 
     InstanceCreationExpression creation = statement.expression;
-    if (useCFE) {
-      expect(creation.staticType, isDynamicType);
-    }
+    expect(creation.staticType, isDynamicType);
 
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
     TypeName typeName = constructorName.type;
-    if (useCFE) {
-      expect(typeName.type, isDynamicType);
-    }
+    expect(typeName.type, isDynamicType);
 
     SimpleIdentifier typeIdentifier = typeName.name;
     expect(typeIdentifier.staticElement, isNull);
-    if (useCFE) {
-      expect(typeIdentifier.staticType, isDynamicType);
-    }
+    expect(typeIdentifier.staticType, isDynamicType);
 
     assertTypeArguments(typeName.typeArguments, [intType, doubleType]);
     _assertInvocationArguments(creation.argumentList,
         [checkTopVarRef('arg1'), checkTopVarUndefinedNamedRef('arg2')]);
   }
 
+  @failingTest
   test_unresolved_instanceCreation_name_21() async {
     addTestFile(r'''
 int arg1, arg2;
@@ -9741,23 +8159,17 @@
     ExpressionStatement statement = statements[0];
 
     InstanceCreationExpression creation = statement.expression;
-    if (useCFE) {
-      expect(creation.staticType, isDynamicType);
-    }
+    expect(creation.staticType, isDynamicType);
 
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
     TypeName typeName = constructorName.type;
-    if (useCFE) {
-      expect(typeName.type, isDynamicType);
-    }
+    expect(typeName.type, isDynamicType);
 
     PrefixedIdentifier typePrefixed = typeName.name;
     expect(typePrefixed.staticElement, isNull);
-    if (useCFE) {
-      expect(typePrefixed.staticType, isDynamicType);
-    }
+    expect(typePrefixed.staticType, isDynamicType);
 
     SimpleIdentifier typePrefix = typePrefixed.prefix;
     expect(typePrefix.staticElement, isNull);
@@ -9765,15 +8177,14 @@
 
     SimpleIdentifier typeIdentifier = typePrefixed.identifier;
     expect(typeIdentifier.staticElement, isNull);
-    if (useCFE) {
-      expect(typeIdentifier.staticType, isDynamicType);
-    }
+    expect(typeIdentifier.staticType, isDynamicType);
 
     assertTypeArguments(typeName.typeArguments, [intType, doubleType]);
     _assertInvocationArguments(creation.argumentList,
         [checkTopVarRef('arg1'), checkTopVarUndefinedNamedRef('arg2')]);
   }
 
+  @failingTest
   test_unresolved_instanceCreation_name_22() async {
     addTestFile(r'''
 import 'dart:math' as foo;
@@ -9792,23 +8203,17 @@
     ExpressionStatement statement = statements[0];
 
     InstanceCreationExpression creation = statement.expression;
-    if (useCFE) {
-      expect(creation.staticType, isDynamicType);
-    }
+    expect(creation.staticType, isDynamicType);
 
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
     TypeName typeName = constructorName.type;
-    if (useCFE) {
-      expect(typeName.type, isDynamicType);
-    }
+    expect(typeName.type, isDynamicType);
 
     PrefixedIdentifier typePrefixed = typeName.name;
     expect(typePrefixed.staticElement, isNull);
-    if (useCFE) {
-      expect(typePrefixed.staticType, isDynamicType);
-    }
+    expect(typePrefixed.staticType, isDynamicType);
 
     SimpleIdentifier typePrefix = typePrefixed.prefix;
     expect(typePrefix.staticElement, same(foo));
@@ -9816,15 +8221,14 @@
 
     SimpleIdentifier typeIdentifier = typePrefixed.identifier;
     expect(typeIdentifier.staticElement, isNull);
-    if (useCFE) {
-      expect(typeIdentifier.staticType, isDynamicType);
-    }
+    expect(typeIdentifier.staticType, isDynamicType);
 
     assertTypeArguments(typeName.typeArguments, [intType, doubleType]);
     _assertInvocationArguments(creation.argumentList,
         [checkTopVarRef('arg1'), checkTopVarUndefinedNamedRef('arg2')]);
   }
 
+  @failingTest
   test_unresolved_instanceCreation_name_31() async {
     addTestFile(r'''
 int arg1, arg2;
@@ -9839,41 +8243,34 @@
     ExpressionStatement statement = statements[0];
 
     InstanceCreationExpression creation = statement.expression;
-    if (useCFE) {
-      expect(creation.staticType, isDynamicType);
-    }
+    expect(creation.staticType, isUndefinedType);
 
     ConstructorName constructorName = creation.constructorName;
 
     TypeName typeName = constructorName.type;
-    if (useCFE) {
-      expect(typeName.type, isDynamicType);
-    }
+    expect(typeName.type, isUndefinedType);
 
     PrefixedIdentifier typePrefixed = typeName.name;
-    expect(typePrefixed.staticElement, isNull);
-    if (useCFE) {
-      expect(typePrefixed.staticType, isDynamicType);
-    }
+    assertElementNull(typePrefixed);
+    assertTypeNull(typePrefixed);
 
     SimpleIdentifier typePrefix = typePrefixed.prefix;
-    expect(typePrefix.staticElement, isNull);
-    expect(typePrefix.staticType, isNull);
+    assertElementNull(typePrefix);
+    assertTypeNull(typePrefix);
 
     SimpleIdentifier typeIdentifier = typePrefixed.identifier;
-    expect(typeIdentifier.staticElement, isNull);
-    if (useCFE) {
-      expect(typeIdentifier.staticType, isDynamicType);
-    }
+    assertElementNull(typeIdentifier);
+    assertTypeNull(typeIdentifier);
 
-    expect(constructorName.name.staticElement, isNull);
-    expect(constructorName.name.staticType, isNull);
+    assertElementNull(constructorName.name);
+    assertTypeNull(constructorName.name);
 
     assertTypeArguments(typeName.typeArguments, [intType, doubleType]);
     _assertInvocationArguments(creation.argumentList,
         [checkTopVarRef('arg1'), checkTopVarUndefinedNamedRef('arg2')]);
   }
 
+  @failingTest
   test_unresolved_instanceCreation_name_32() async {
     addTestFile(r'''
 import 'dart:math' as foo;
@@ -9893,41 +8290,34 @@
     ExpressionStatement statement = statements[0];
 
     InstanceCreationExpression creation = statement.expression;
-    if (useCFE) {
-      expect(creation.staticType, isDynamicType);
-    }
+    expect(creation.staticType, isUndefinedType);
 
     ConstructorName constructorName = creation.constructorName;
 
     TypeName typeName = constructorName.type;
-    if (useCFE) {
-      expect(typeName.type, isDynamicType);
-    }
+    expect(typeName.type, isUndefinedType);
 
     PrefixedIdentifier typePrefixed = typeName.name;
-    expect(typePrefixed.staticElement, isNull);
-    if (useCFE) {
-      expect(typePrefixed.staticType, isDynamicType);
-    }
+    assertElementNull(typePrefixed);
+    assertTypeNull(typePrefixed);
 
     SimpleIdentifier typePrefix = typePrefixed.prefix;
-    expect(typePrefix.staticElement, same(foo));
-    expect(typePrefix.staticType, isNull);
+    assertElement(typePrefix, foo);
+    assertTypeNull(typePrefix);
 
     SimpleIdentifier typeIdentifier = typePrefixed.identifier;
-    expect(typeIdentifier.staticElement, isNull);
-    if (useCFE) {
-      expect(typeIdentifier.staticType, isDynamicType);
-    }
+    assertElementNull(typeIdentifier);
+    assertTypeNull(typeIdentifier);
 
-    expect(constructorName.name.staticElement, isNull);
-    expect(constructorName.name.staticType, isNull);
+    assertElementNull(constructorName.name);
+    assertTypeNull(constructorName.name);
 
     assertTypeArguments(typeName.typeArguments, [intType, doubleType]);
     _assertInvocationArguments(creation.argumentList,
         [checkTopVarRef('arg1'), checkTopVarUndefinedNamedRef('arg2')]);
   }
 
+  @failingTest
   test_unresolved_instanceCreation_name_33() async {
     addTestFile(r'''
 import 'dart:math' as foo;
@@ -9948,31 +8338,27 @@
     ExpressionStatement statement = statements[0];
 
     InstanceCreationExpression creation = statement.expression;
-    if (useCFE) {
-      expect(creation.staticType, isDynamicType);
-    }
+    expect(creation.staticType, randomElement.type);
 
     ConstructorName constructorName = creation.constructorName;
 
     TypeName typeName = constructorName.type;
-    if (useCFE) {
-      expect(typeName.type, isDynamicType);
-    }
+    assertType(typeName, 'Random');
 
     PrefixedIdentifier typePrefixed = typeName.name;
-    expect(typePrefixed.staticElement, same(randomElement));
-    expect(typePrefixed.staticType, useCFE ? dynamicType : randomElement.type);
+    assertElement(typePrefixed, randomElement);
+    assertTypeNull(typePrefixed);
 
     SimpleIdentifier typePrefix = typePrefixed.prefix;
-    expect(typePrefix.staticElement, same(foo));
-    expect(typePrefix.staticType, isNull);
+    assertElement(typePrefix, foo);
+    assertTypeNull(typePrefix);
 
     SimpleIdentifier typeIdentifier = typePrefixed.identifier;
-    expect(typeIdentifier.staticElement, same(randomElement));
-    expect(typeIdentifier.staticType, useCFE ? dynamicType : null);
+    assertElement(typeIdentifier, randomElement);
+    assertTypeNull(typeIdentifier);
 
-    expect(constructorName.name.staticElement, isNull);
-    expect(constructorName.name.staticType, isNull);
+    assertElementNull(constructorName.name);
+    assertTypeNull(constructorName.name);
 
     assertTypeArguments(typeName.typeArguments, [intType, doubleType]);
     _assertInvocationArguments(creation.argumentList,
@@ -10331,7 +8717,7 @@
 
     var namedRef = findNode.simple('named;');
     assertElementNull(namedRef);
-    expect(namedRef.staticType, useCFE ? isDynamicType : isNull);
+    assertTypeNull(namedRef);
   }
 
   test_unresolved_simpleIdentifier() async {
@@ -10413,9 +8799,9 @@
     assertType(intRef, 'int');
   }
 
-  /// Assert that the [argument] is associated with the [expected],
-  /// if [useCFE] is `null`. If the [argument] is a [NamedExpression],
-  /// the name must be resolved to the parameter in both cases.
+  /// Assert that the [argument] is associated with the [expected]. If the
+  /// [argument] is a [NamedExpression], the name must be resolved to the
+  /// parameter.
   void _assertArgumentToParameter(
       Expression argument, ParameterElement expected,
       {DartType memberType}) {
@@ -10474,15 +8860,6 @@
         name: name, offset: offset, kind: kind, type: type);
   }
 
-  /// Assert that the [type] is a function type `() -> dynamic`.
-  void _assertDynamicFunctionType(DartType type) {
-    if (useCFE) {
-      expect(type.toString(), '() → dynamic');
-    } else {
-      expect(type, DynamicTypeImpl.instance);
-    }
-  }
-
   /// Test that [argumentList] has exactly two arguments - required `arg1`, and
   /// unresolved named `arg2`, both are the reference to top-level variables.
   void _assertInvocationArguments(ArgumentList argumentList,
@@ -10558,325 +8935,3 @@
    */
   String _p(String path) => provider.convertPath(path);
 }
-
-class FindElement {
-  final AnalysisResult result;
-
-  FindElement(this.result);
-
-  CompilationUnitElement get unitElement => result.unit.declaredElement;
-
-  ClassElement class_(String name) {
-    for (var class_ in unitElement.types) {
-      if (class_.name == name) {
-        return class_;
-      }
-    }
-    fail('Not found class: $name');
-  }
-
-  ExportElement export(String targetUri) {
-    ExportElement exportElement;
-    for (var export in unitElement.library.exports) {
-      var exportedUri = export.exportedLibrary.source.uri.toString();
-      if (exportedUri == targetUri) {
-        if (exportElement != null) {
-          throw new StateError('Not unique $targetUri export.');
-        }
-        exportElement = export;
-      }
-    }
-    if (exportElement != null) {
-      return exportElement;
-    }
-    fail('Not found export: $targetUri');
-  }
-
-  FieldElement field(String name) {
-    for (var type in unitElement.types) {
-      for (var field in type.fields) {
-        if (field.name == name) {
-          return field;
-        }
-      }
-    }
-    fail('Not found class field: $name');
-  }
-
-  FunctionElement function(String name) {
-    for (var function in unitElement.functions) {
-      if (function.name == name) {
-        return function;
-      }
-    }
-    fail('Not found top-level function: $name');
-  }
-
-  PropertyAccessorElement getter(String name) {
-    for (var class_ in unitElement.types) {
-      for (var accessor in class_.accessors) {
-        if (accessor.isGetter && accessor.displayName == name) {
-          return accessor;
-        }
-      }
-    }
-    fail('Not found class accessor: $name');
-  }
-
-  ImportElement import(String targetUri) {
-    ImportElement importElement;
-    for (var import in unitElement.library.imports) {
-      var importedUri = import.importedLibrary.source.uri.toString();
-      if (importedUri == targetUri) {
-        if (importElement != null) {
-          throw new StateError('Not unique $targetUri import.');
-        }
-        importElement = import;
-      }
-    }
-    if (importElement != null) {
-      return importElement;
-    }
-    fail('Not found import: $targetUri');
-  }
-
-  MethodElement method(String name) {
-    for (var type in unitElement.types) {
-      for (var method in type.methods) {
-        if (method.name == name) {
-          return method;
-        }
-      }
-    }
-    fail('Not found class method: $name');
-  }
-
-  ParameterElement parameter(String name) {
-    ParameterElement parameterElement;
-    void considerParameter(ParameterElement parameter) {
-      if (parameter.name == name) {
-        if (parameterElement != null) {
-          throw new StateError('Parameter name $name is not unique.');
-        }
-        parameterElement = parameter;
-      }
-    }
-
-    for (var accessor in unitElement.accessors) {
-      accessor.parameters.forEach(considerParameter);
-    }
-    for (var function in unitElement.functions) {
-      function.parameters.forEach(considerParameter);
-    }
-    for (var function in unitElement.functionTypeAliases) {
-      function.parameters.forEach(considerParameter);
-    }
-    for (var class_ in unitElement.types) {
-      for (var constructor in class_.constructors) {
-        constructor.parameters.forEach(considerParameter);
-      }
-      for (var method in class_.methods) {
-        method.parameters.forEach(considerParameter);
-      }
-    }
-    if (parameterElement != null) {
-      return parameterElement;
-    }
-    fail('No parameter found with name $name');
-  }
-
-  PrefixElement prefix(String name) {
-    for (var import_ in unitElement.library.imports) {
-      var prefix = import_.prefix;
-      if (prefix != null && prefix.name == name) {
-        return prefix;
-      }
-    }
-    fail('Prefix not found: $name');
-  }
-
-  PropertyAccessorElement setter(String name) {
-    for (var class_ in unitElement.types) {
-      for (var accessor in class_.accessors) {
-        if (accessor.isSetter && accessor.displayName == name) {
-          return accessor;
-        }
-      }
-    }
-    fail('Not found class accessor: $name');
-  }
-
-  FunctionElement topFunction(String name) {
-    for (var function in unitElement.functions) {
-      if (function.name == name) {
-        return function;
-      }
-    }
-    fail('Not found top-level function: $name');
-  }
-
-  PropertyAccessorElement topGet(String name) {
-    return topVar(name).getter;
-  }
-
-  PropertyAccessorElement topSet(String name) {
-    return topVar(name).setter;
-  }
-
-  TopLevelVariableElement topVar(String name) {
-    for (var variable in unitElement.topLevelVariables) {
-      if (variable.name == name) {
-        return variable;
-      }
-    }
-    fail('Not found top-level variable: $name');
-  }
-
-  TypeParameterElement typeParameter(String name) {
-    TypeParameterElement result;
-
-    void consider(TypeParameterElement candidate) {
-      if (candidate.name == name) {
-        if (result != null) {
-          throw new StateError('Type parameter $name is not unique.');
-        }
-        result = candidate;
-      }
-    }
-
-    for (var type in unitElement.functionTypeAliases) {
-      type.typeParameters.forEach(consider);
-    }
-    for (var type in unitElement.types) {
-      type.typeParameters.forEach(consider);
-    }
-    if (result != null) {
-      return result;
-    }
-    fail('Not found type parameter: $name');
-  }
-}
-
-class FindNode {
-  final AnalysisResult result;
-
-  FindNode(this.result);
-
-  LibraryDirective get libraryDirective {
-    return result.unit.directives.singleWhere((d) => d is LibraryDirective);
-  }
-
-  AssignmentExpression assignment(String search) {
-    return _node(search).getAncestor((n) => n is AssignmentExpression);
-  }
-
-  CascadeExpression cascade(String search) {
-    return _node(search).getAncestor((n) => n is CascadeExpression);
-  }
-
-  ExportDirective export(String search) {
-    return _node(search).getAncestor((n) => n is ExportDirective);
-  }
-
-  FunctionExpression functionExpression(String search) {
-    return _node(search).getAncestor((n) => n is FunctionExpression);
-  }
-
-  GenericFunctionType genericFunctionType(String search) {
-    return _node(search).getAncestor((n) => n is GenericFunctionType);
-  }
-
-  ImportDirective import(String search) {
-    return _node(search).getAncestor((n) => n is ImportDirective);
-  }
-
-  InstanceCreationExpression instanceCreation(String search) {
-    return _node(search).getAncestor((n) => n is InstanceCreationExpression);
-  }
-
-  ListLiteral listLiteral(String search) {
-    return _node(search).getAncestor((n) => n is ListLiteral);
-  }
-
-  MapLiteral mapLiteral(String search) {
-    return _node(search).getAncestor((n) => n is MapLiteral);
-  }
-
-  MethodInvocation methodInvocation(String search) {
-    return _node(search).getAncestor((n) => n is MethodInvocation);
-  }
-
-  ParenthesizedExpression parenthesized(String search) {
-    return _node(search).getAncestor((n) => n is ParenthesizedExpression);
-  }
-
-  PartDirective part(String search) {
-    return _node(search).getAncestor((n) => n is PartDirective);
-  }
-
-  PartOfDirective partOf(String search) {
-    return _node(search).getAncestor((n) => n is PartOfDirective);
-  }
-
-  PostfixExpression postfix(String search) {
-    return _node(search).getAncestor((n) => n is PostfixExpression);
-  }
-
-  PrefixExpression prefix(String search) {
-    return _node(search).getAncestor((n) => n is PrefixExpression);
-  }
-
-  PrefixedIdentifier prefixed(String search) {
-    return _node(search).getAncestor((n) => n is PrefixedIdentifier);
-  }
-
-  RethrowExpression rethrow_(String search) {
-    return _node(search).getAncestor((n) => n is RethrowExpression);
-  }
-
-  SimpleIdentifier simple(String search) {
-    return _node(search);
-  }
-
-  SimpleFormalParameter simpleParameter(String search) {
-    return _node(search).getAncestor((n) => n is SimpleFormalParameter);
-  }
-
-  StringLiteral stringLiteral(String search) {
-    return _node(search).getAncestor((n) => n is StringLiteral);
-  }
-
-  SuperExpression super_(String search) {
-    return _node(search).getAncestor((n) => n is SuperExpression);
-  }
-
-  ThisExpression this_(String search) {
-    return _node(search).getAncestor((n) => n is ThisExpression);
-  }
-
-  ThrowExpression throw_(String search) {
-    return _node(search).getAncestor((n) => n is ThrowExpression);
-  }
-
-  TypeName typeName(String search) {
-    return _node(search).getAncestor((n) => n is TypeName);
-  }
-
-  TypeParameter typeParameter(String search) {
-    return _node(search).getAncestor((n) => n is TypeParameter);
-  }
-
-  VariableDeclaration variableDeclaration(String search) {
-    return _node(search).getAncestor((n) => n is VariableDeclaration);
-  }
-
-  AstNode _node(String search) {
-    var content = result.content;
-    var index = content.indexOf(search);
-    if (content.indexOf(search, index + 1) != -1) {
-      fail('The pattern |$search| is not unique in:\n$content');
-    }
-    expect(index, greaterThanOrEqualTo(0));
-    return new NodeLocator2(index).searchWithin(result.unit);
-  }
-}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index b533f9b..d8db996 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1365,7 +1365,7 @@
     } on ArgumentError {}
   }
 
-  test_getFilesDefiningClassMemberName() async {
+  test_getFilesDefiningClassMemberName_class() async {
     var a = _p('/test/bin/a.dart');
     var b = _p('/test/bin/b.dart');
     var c = _p('/test/bin/c.dart');
@@ -1391,6 +1391,32 @@
         unorderedEquals([d]));
   }
 
+  test_getFilesDefiningClassMemberName_mixin() async {
+    var a = _p('/test/bin/a.dart');
+    var b = _p('/test/bin/b.dart');
+    var c = _p('/test/bin/c.dart');
+    var d = _p('/test/bin/d.dart');
+
+    provider.newFile(a, 'mixin A { m1() {} }');
+    provider.newFile(b, 'mixin B { m2() {} }');
+    provider.newFile(c, 'mixin C { m2() {} }');
+    provider.newFile(d, 'mixin D { m3() {} }');
+
+    driver.addFile(a);
+    driver.addFile(b);
+    driver.addFile(c);
+    driver.addFile(d);
+
+    expect(await driver.getFilesDefiningClassMemberName('m1'),
+        unorderedEquals([a]));
+
+    expect(await driver.getFilesDefiningClassMemberName('m2'),
+        unorderedEquals([b, c]));
+
+    expect(await driver.getFilesDefiningClassMemberName('m3'),
+        unorderedEquals([d]));
+  }
+
   test_getFilesReferencingName() async {
     var a = _p('/test/bin/a.dart');
     var b = _p('/test/bin/b.dart');
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index dbd664a..9a28fc6 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -197,6 +197,28 @@
       ..isReferencedAt('B; // 3', false);
   }
 
+  test_isImplementedBy_MixinDeclaration_implementsClause() async {
+    await _indexTestUnit('''
+class A {} // 1
+mixin M implements A {} // 2
+''');
+    ClassElement elementA = findElement('A');
+    assertThat(elementA)
+      ..isImplementedAt('A {} // 2', false)
+      ..isReferencedAt('A {} // 2', false);
+  }
+
+  test_isImplementedBy_MixinDeclaration_onClause() async {
+    await _indexTestUnit('''
+class A {} // 1
+mixin M on A {} // 2
+''');
+    ClassElement elementA = findElement('A');
+    assertThat(elementA)
+      ..isImplementedAt('A {} // 2', false)
+      ..isReferencedAt('A {} // 2', false);
+  }
+
   test_isInvokedBy_FieldElement() async {
     await _indexTestUnit('''
 class A {
@@ -338,7 +360,7 @@
       ..isInvokedAt('ggg(); // nq', false);
   }
 
-  test_isMixedInBy_ClassDeclaration() async {
+  test_isMixedInBy_ClassDeclaration_class() async {
     await _indexTestUnit('''
 class A {} // 1
 class B extends Object with A {} // 2
@@ -361,7 +383,18 @@
     assertThat(elementA).isMixedInAt('A {} // 2', true);
   }
 
-  test_isMixedInBy_ClassTypeAlias() async {
+  test_isMixedInBy_ClassDeclaration_mixin() async {
+    await _indexTestUnit('''
+mixin A {} // 1
+class B extends Object with A {} // 2
+''');
+    ClassElement elementA = findElement('A');
+    assertThat(elementA)
+      ..isMixedInAt('A {} // 2', false)
+      ..isReferencedAt('A {} // 2', false);
+  }
+
+  test_isMixedInBy_ClassTypeAlias_class() async {
     await _indexTestUnit('''
 class A {} // 1
 class B = Object with A; // 2
@@ -370,6 +403,15 @@
     assertThat(elementA).isMixedInAt('A; // 2', false);
   }
 
+  test_isMixedInBy_ClassTypeAlias_mixin() async {
+    await _indexTestUnit('''
+mixin A {} // 1
+class B = Object with A; // 2
+''');
+    ClassElement elementA = findElement('A');
+    assertThat(elementA).isMixedInAt('A; // 2', false);
+  }
+
   test_isReferencedBy_ClassElement() async {
     await _indexTestUnit('''
 class A {
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 53e073e..cbadbb3 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -21,7 +21,6 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SearchTest);
-    defineReflectiveTests(SearchTest_UseCFE);
   });
 }
 
@@ -74,7 +73,7 @@
   CompilationUnitElement testUnitElement;
   LibraryElement testLibraryElement;
 
-  test_classMembers() async {
+  test_classMembers_class() async {
     await _resolveTestUnit('''
 class A {
   test() {}
@@ -100,6 +99,25 @@
     expect(await driver.search.classMembers('test'), isEmpty);
   }
 
+  test_classMembers_mixin() async {
+    await _resolveTestUnit('''
+mixin A {
+  test() {}
+}
+mixin B {
+  int test = 1;
+  int testTwo = 2;
+  main() {
+    int test = 3;
+  }
+}
+''');
+    ClassElement a = _findElement('A');
+    ClassElement b = _findElement('B');
+    expect(await driver.search.classMembers('test'),
+        unorderedEquals([a.methods[0], b.fields[0]]));
+  }
+
   test_declarations_class() async {
     await _resolveTestUnit('''
 class C {
@@ -200,6 +218,30 @@
     expect(declarations, hasLength(2));
   }
 
+  test_declarations_mixin() async {
+    await _resolveTestUnit('''
+mixin M {
+  int f;
+  int get g => 0;
+  void set s(_) {}
+  void m() {}
+}
+''');
+    var files = new LinkedHashSet<String>();
+    List<Declaration> declarations =
+        await driver.search.declarations(null, null, files);
+    _assertHasDeclaration(declarations, 'M', DeclarationKind.MIXIN,
+        offset: 6, codeOffset: 0, codeLength: 71);
+    _assertHasDeclaration(declarations, 'f', DeclarationKind.FIELD,
+        offset: 16, codeOffset: 12, codeLength: 5, mixinName: 'M');
+    _assertHasDeclaration(declarations, 'g', DeclarationKind.GETTER,
+        offset: 29, codeOffset: 21, codeLength: 15, mixinName: 'M');
+    _assertHasDeclaration(declarations, 's', DeclarationKind.SETTER,
+        offset: 48, codeOffset: 39, codeLength: 16, mixinName: 'M');
+    _assertHasDeclaration(declarations, 'm', DeclarationKind.METHOD,
+        offset: 63, codeOffset: 58, codeLength: 11, mixinName: 'M');
+  }
+
   test_declarations_onlyForFile() async {
     var a = _p('/test/lib/a.dart');
     var b = _p('/test/lib/b.dart');
@@ -657,6 +699,19 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_ClassElement_mixin() async {
+    await _resolveTestUnit('''
+mixin A {}
+class B extends Object with A {} // with
+''');
+    ClassElement element = _findElementAtString('A {}');
+    Element b = _findElement('B');
+    var expected = [
+      _expectId(b, SearchResultKind.REFERENCE, 'A {} // with'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_CompilationUnitElement() async {
     provider.newFile(_p('$testProject/foo.dart'), '');
     await _resolveTestUnit('''
@@ -1643,6 +1698,22 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchSubtypes_mixinDeclaration() async {
+    await _resolveTestUnit('''
+class T {}
+mixin A on T {} // A
+mixin B implements T {} // B
+''');
+    ClassElement element = _findElement('T');
+    ClassElement a = _findElement('A');
+    ClassElement b = _findElement('B');
+    var expected = [
+      _expectId(a, SearchResultKind.REFERENCE, 'T {} // A'),
+      _expectId(b, SearchResultKind.REFERENCE, 'T {} // B'),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_subtypes() async {
     await _resolveTestUnit('''
 class A {}
@@ -1844,31 +1915,38 @@
     await _resolveTestUnit('''
 class A {} // A
 class B = Object with A;
-typedef C();
-D() {}
-var e = null;
-class NoMatchABCDE {}
+mixin C {}
+typedef D();
+e() {}
+var f = null;
+class NoMatchABCDEF {}
 ''');
     Element a = _findElement('A');
     Element b = _findElement('B');
     Element c = _findElement('C');
     Element d = _findElement('D');
     Element e = _findElement('e');
-    RegExp regExp = new RegExp(r'^[ABCDe]$');
+    Element f = _findElement('f');
+    RegExp regExp = new RegExp(r'^[ABCDef]$');
     expect(await driver.search.topLevelElements(regExp),
-        unorderedEquals([a, b, c, d, e]));
+        unorderedEquals([a, b, c, d, e, f]));
   }
 
   Declaration _assertHasDeclaration(
       List<Declaration> declarations, String name, DeclarationKind kind,
-      {int offset, int codeOffset, int codeLength, String className}) {
+      {int offset,
+      int codeOffset,
+      int codeLength,
+      String className,
+      String mixinName}) {
     for (var declaration in declarations) {
       if (declaration.name == name &&
           declaration.kind == kind &&
           (offset == null || declaration.offset == offset) &&
           (codeOffset == null || declaration.codeOffset == codeOffset) &&
           (codeLength == null || declaration.codeLength == codeLength) &&
-          declaration.className == className) {
+          declaration.className == className &&
+          declaration.mixinName == mixinName) {
         return declaration;
       }
     }
@@ -1977,23 +2055,3 @@
     expect(matches, unorderedEquals(expectedMatches));
   }
 }
-
-@reflectiveTest
-class SearchTest_UseCFE extends SearchTest {
-  @override
-  bool get useCFE => true;
-
-  @failingTest
-  @override
-  test_classMembers_importNotDart() => super.test_classMembers_importNotDart();
-
-  @failingTest
-  @override
-  test_searchReferences_LabelElement() =>
-      super.test_searchReferences_LabelElement();
-
-  @failingTest
-  @override
-  test_subtypes_partWithoutLibrary() =>
-      super.test_subtypes_partWithoutLibrary();
-}
diff --git a/pkg/analyzer/test/src/dart/analysis/test_all.dart b/pkg/analyzer/test/src/dart/analysis/test_all.dart
index 20acbf2..7c74b6b 100644
--- a/pkg/analyzer/test/src/dart/analysis/test_all.dart
+++ b/pkg/analyzer/test/src/dart/analysis/test_all.dart
@@ -9,8 +9,6 @@
 import 'context_locator_test.dart' as context_locator;
 import 'context_root_test.dart' as context_root;
 import 'defined_names_test.dart' as defined_names;
-import 'driver_kernel_test.dart' as driver_kernel;
-import 'driver_resolution_kernel_test.dart' as driver_resolution_kernel;
 import 'driver_resolution_test.dart' as driver_resolution;
 import 'driver_test.dart' as driver;
 import 'file_state_test.dart' as file_state;
@@ -30,9 +28,7 @@
     context_root.main();
     defined_names.main();
     driver.main();
-    driver_kernel.main();
     driver_resolution.main();
-    driver_resolution_kernel.main();
     file_state.main();
     index.main();
     mutex.main();
diff --git a/pkg/analyzer/test/src/dart/constant/value_test.dart b/pkg/analyzer/test/src/dart/constant/value_test.dart
index 3d02cda..c0eab74 100644
--- a/pkg/analyzer/test/src/dart/constant/value_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/value_test.dart
@@ -1289,6 +1289,10 @@
     _assertRemainder(_intValue(1), _intValue(7), _intValue(2));
   }
 
+  void test_remainder_knownInt_knownInt_zero() {
+    _assertRemainder(null, _intValue(7), _intValue(0));
+  }
+
   void test_remainder_knownInt_knownString() {
     _assertRemainder(null, _intValue(7), _stringValue("2"));
   }
@@ -1325,6 +1329,10 @@
     _assertShiftLeft(_intValue(48), _intValue(6), _intValue(3));
   }
 
+  void test_shiftLeft_knownInt_knownInt_negative() {
+    _assertShiftLeft(null, _intValue(1), _intValue(-1));
+  }
+
   void test_shiftLeft_knownInt_knownString() {
     _assertShiftLeft(null, _intValue(6), _stringValue(null));
   }
@@ -1357,6 +1365,10 @@
     _assertShiftRight(_intValue(6), _intValue(48), _intValue(3));
   }
 
+  void test_shiftRight_knownInt_knownInt_negative() {
+    _assertShiftRight(null, _intValue(1), _intValue(-1));
+  }
+
   void test_shiftRight_knownInt_knownString() {
     _assertShiftRight(null, _intValue(48), _stringValue(null));
   }
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 45e17dcb..15e8e7b 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -41,7 +41,6 @@
     defineReflectiveTests(LibraryElementImplTest);
     defineReflectiveTests(MethodElementImplTest);
     defineReflectiveTests(MethodMemberTest);
-    defineReflectiveTests(MultiplyDefinedElementImplTest);
     defineReflectiveTests(ParameterElementImplTest);
     defineReflectiveTests(PropertyAccessorElementImplTest);
     defineReflectiveTests(TopLevelVariableElementImplTest);
@@ -3910,68 +3909,6 @@
 }
 
 @reflectiveTest
-class MultiplyDefinedElementImplTest extends EngineTestCase {
-  void test_fromElements_conflicting() {
-    TopLevelVariableElement firstElement =
-        ElementFactory.topLevelVariableElement2('xx');
-    TopLevelVariableElement secondElement =
-        ElementFactory.topLevelVariableElement2('yy');
-    _addToLibrary([firstElement, secondElement]);
-    Element result = MultiplyDefinedElementImpl.fromElements(
-        null, firstElement, secondElement);
-    EngineTestCase.assertInstanceOf(
-        (obj) => obj is MultiplyDefinedElement, MultiplyDefinedElement, result);
-    List<Element> elements =
-        (result as MultiplyDefinedElement).conflictingElements;
-    expect(elements, hasLength(2));
-    for (int i = 0; i < elements.length; i++) {
-      EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
-          TopLevelVariableElement, elements[i]);
-    }
-  }
-
-  void test_fromElements_multiple() {
-    TopLevelVariableElement firstElement =
-        ElementFactory.topLevelVariableElement2('xx');
-    TopLevelVariableElement secondElement =
-        ElementFactory.topLevelVariableElement2('yy');
-    TopLevelVariableElement thirdElement =
-        ElementFactory.topLevelVariableElement2('zz');
-    _addToLibrary([firstElement, secondElement, thirdElement]);
-    Element result = MultiplyDefinedElementImpl.fromElements(
-        null,
-        MultiplyDefinedElementImpl.fromElements(
-            null, firstElement, secondElement),
-        thirdElement);
-    EngineTestCase.assertInstanceOf(
-        (obj) => obj is MultiplyDefinedElement, MultiplyDefinedElement, result);
-    List<Element> elements =
-        (result as MultiplyDefinedElement).conflictingElements;
-    expect(elements, hasLength(3));
-    for (int i = 0; i < elements.length; i++) {
-      EngineTestCase.assertInstanceOf((obj) => obj is TopLevelVariableElement,
-          TopLevelVariableElement, elements[i]);
-    }
-  }
-
-  void test_fromElements_nonConflicting() {
-    TopLevelVariableElement element =
-        ElementFactory.topLevelVariableElement2('xx');
-    _addToLibrary([element]);
-    expect(MultiplyDefinedElementImpl.fromElements(null, element, element),
-        same(element));
-  }
-
-  void _addToLibrary(List<TopLevelVariableElement> variables) {
-    CompilationUnitElementImpl compilationUnit =
-        ElementFactory.compilationUnit('lib.dart');
-    LibraryElementImpl library = ElementFactory.library(null, 'lib');
-    library.definingCompilationUnit = compilationUnit;
-    compilationUnit.topLevelVariables = variables;
-  }
-}
-
-@reflectiveTest
 class ParameterElementImplTest extends EngineTestCase {
   void test_computeNode_DefaultFormalParameter() {
     AnalysisContextHelper contextHelper = new AnalysisContextHelper();
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
new file mode 100644
index 0000000..6316ceb
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -0,0 +1,1247 @@
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AssignmentDriverResolutionTest);
+    defineReflectiveTests(AssignmentTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class AssignmentDriverResolutionTest extends DriverResolutionTest
+    with AssignmentResolutionMixin {}
+
+abstract class AssignmentResolutionMixin implements ResolutionTest {
+  test_compound_indexExpression() async {
+    addTestFile(r'''
+main() {
+  var x = <num>[1, 2, 3];
+  x[0] += 4;
+}
+''');
+    await resolveTestFile();
+
+    AssignmentExpression assignment = findNode.assignment('+= 4');
+    assertElement(assignment, numElement.getMethod('+'));
+    assertType(assignment, 'num'); // num + int = num
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertMember(indexed, 'List<num>', listElement.getMethod('[]='));
+    assertType(indexed, 'num');
+
+    SimpleIdentifier xRef = indexed.target;
+    assertElement(xRef, findElement.localVar('x'));
+    assertType(xRef, 'List<num>');
+
+    IntegerLiteral index = indexed.index;
+    assertType(index, 'int');
+
+    Expression right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_compound_local() async {
+    addTestFile(r'''
+main() {
+  num v = 0;
+  v += 3;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('v += 3');
+    assertElement(assignment, numElement.getMethod('+'));
+    assertType(assignment, 'num'); // num + int = num
+
+    SimpleIdentifier left = assignment.leftHandSide;
+    assertElement(left, findElement.localVar('x'));
+    assertType(left, 'num');
+
+    Expression right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_compound_prefixedIdentifier() async {
+    addTestFile(r'''
+main() {
+  var c = new C();
+  c.f += 2;
+}
+class C {
+  num f;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('c.f += 2');
+    assertElement(assignment, numElement.getMethod('+'));
+    assertType(assignment, 'num'); // num + int = num
+
+    PrefixedIdentifier left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    var cRef = left.prefix;
+    assertElement(cRef, findElement.localVar('c'));
+    assertType(cRef, 'C');
+
+    var fRef = left.identifier;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_compound_propertyAccess() async {
+    addTestFile(r'''
+main() {
+  new C().f += 2;
+}
+class C {
+  num f;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('f += 2');
+    assertElement(assignment, numElement.getMethod('+'));
+    assertType(assignment, 'num'); // num + int = num
+
+    PropertyAccess left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    InstanceCreationExpression creation = left.target;
+    assertElement(creation, findElement.unnamedConstructor('C'));
+    assertType(creation, 'C');
+
+    var fRef = left.propertyName;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_in_const_context() async {
+    addTestFile('''
+void f(num x, int y) {
+  const [x = y];
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x =');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y]');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_indexExpression_cascade() async {
+    addTestFile(r'''
+main() {
+  <int, double>{}..[1] = 2.0;
+}
+''');
+    await resolveTestFile();
+
+    var cascade = findNode.cascade('<int, double>');
+    assertType(cascade, 'Map<int, double>');
+
+    MapLiteral map = cascade.target;
+    assertType(map, 'Map<int, double>');
+    assertTypeName(map.typeArguments.arguments[0], intElement, 'int');
+    assertTypeName(map.typeArguments.arguments[1], doubleElement, 'double');
+
+    AssignmentExpression assignment = cascade.cascadeSections[0];
+    assertElementNull(assignment);
+    assertType(assignment, 'double');
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertMember(indexed, 'Map<int, double>', mapElement.getMethod('[]='));
+    assertType(indexed, 'double');
+  }
+
+  test_notLValue_parenthesized() async {
+    addTestFile(r'''
+int a, b;
+double c = 0.0;
+main() {
+  (a + b) = c;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var parenthesized = findNode.parenthesized('(a + b)');
+    assertType(parenthesized, 'int');
+
+    assertTopGetRef('a + b', 'a');
+    assertTopGetRef('b)', 'b');
+    assertTopGetRef('c;', 'c');
+
+    var assignment = findNode.assignment('= c');
+    assertElementNull(assignment);
+    assertType(assignment, 'double');
+  }
+
+  test_nullAware_local() async {
+    addTestFile(r'''
+main() {
+  String v;
+  v ??= 'test';
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('v ??=');
+    assertElementNull(assignment);
+    assertType(assignment, 'String');
+
+    SimpleIdentifier left = assignment.leftHandSide;
+    assertElement(left, findElement.localVar('v'));
+    assertType(left, 'String');
+
+    Expression right = assignment.rightHandSide;
+    assertType(right, 'String');
+  }
+
+  test_propertyAccess_forwardingStub() async {
+    addTestFile(r'''
+class A {
+  int f;
+}
+abstract class I<T> {
+  T f;
+}
+class B extends A implements I<int> {}
+main() {
+  new B().f = 1;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('f = 1');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess left = assignment.leftHandSide;
+    assertType(left, 'int');
+
+    InstanceCreationExpression creation = left.target;
+    assertElement(creation, findElement.unnamedConstructor('B'));
+    assertType(creation, 'B');
+
+    var fRef = left.propertyName;
+    assertElement(fRef, findElement.setter('f', inClass: 'A'));
+    assertType(fRef, 'int');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_indexExpression() async {
+    addTestFile(r'''
+main() {
+  var x = <int>[1, 2, 3];
+  x[0] = 4;
+}
+''');
+    await resolveTestFile();
+
+    AssignmentExpression assignment = findNode.assignment('= 4');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertMember(indexed, 'List<int>', listElement.getMethod('[]='));
+    assertType(indexed, 'int');
+
+    var xRef = indexed.target;
+    assertElement(xRef, findElement.localVar('x'));
+    assertType(xRef, 'List<int>');
+
+    IntegerLiteral index = indexed.index;
+    assertType(index, 'int');
+
+    Expression right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_instanceField_unqualified() async {
+    addTestFile(r'''
+class C {
+  num f = 0;
+  foo() {
+    f = 2;
+  }
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('f = 2;');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    SimpleIdentifier left = assignment.leftHandSide;
+    assertElement(left, findElement.setter('f'));
+    assertType(left, 'num');
+
+    Expression right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_local() async {
+    addTestFile(r'''
+main() {
+  num v = 0;
+  v = 2;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('v = 2;');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    SimpleIdentifier left = assignment.leftHandSide;
+    assertElement(left, findElement.localVar('v'));
+    assertType(left, 'num');
+
+    Expression right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_prefixedIdentifier() async {
+    addTestFile(r'''
+main() {
+  var c = new C();
+  c.f = 2;
+}
+class C {
+  num f;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('c.f = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PrefixedIdentifier left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    var cRef = left.prefix;
+    assertElement(cRef, findElement.localVar('c'));
+    assertType(cRef, 'C');
+
+    var fRef = left.identifier;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_prefixedIdentifier_staticField() async {
+    addTestFile(r'''
+main() {
+  C.f = 2;
+}
+class C {
+  static num f;
+}
+''');
+
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('C.f = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PrefixedIdentifier left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    var cRef = left.prefix;
+    assertElement(cRef, findElement.class_('C'));
+    // TODO(scheglov) Why not `Type`? Should it even have a type?
+    assertType(cRef, 'C');
+
+    var fRef = left.identifier;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_propertyAccess() async {
+    addTestFile(r'''
+main() {
+  new C().f = 2;
+}
+class C {
+  num f;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('f = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    InstanceCreationExpression creation = left.target;
+    assertElement(creation, findElement.unnamedConstructor('C'));
+    assertType(creation, 'C');
+
+    var fRef = left.propertyName;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_propertyAccess_chained() async {
+    addTestFile(r'''
+main() {
+  var a = new A();
+  a.b.f = 2;
+}
+class A {
+  B b;
+}
+class B {
+  num f;
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('a.b.f = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    PrefixedIdentifier ab = left.target;
+    assertType(ab, 'B');
+
+    var aRef = ab.prefix;
+    assertElement(aRef, findElement.localVar('a'));
+    assertType(aRef, 'A');
+
+    var bRef = ab.identifier;
+    assertElement(bRef, findElement.getter('b'));
+    assertType(bRef, 'B');
+
+    var fRef = left.propertyName;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_propertyAccess_setter() async {
+    addTestFile(r'''
+main() {
+  new C().f = 2;
+}
+class C {
+  void set f(num _) {}
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('f = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess left = assignment.leftHandSide;
+    assertType(left, 'num');
+
+    InstanceCreationExpression creation = left.target;
+    assertElement(creation, findElement.unnamedConstructor('C'));
+    assertType(creation, 'C');
+
+    var fRef = left.propertyName;
+    assertElement(fRef, findElement.setter('f'));
+    assertType(fRef, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_staticField_unqualified() async {
+    addTestFile(r'''
+class C {
+  static num f = 0;
+  foo() {
+    f = 2;
+  }
+}
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('f = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    SimpleIdentifier left = assignment.leftHandSide;
+    assertElement(left, findElement.setter('f'));
+    assertType(left, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_simple_topLevelVariable() async {
+    addTestFile(r'''
+main() {
+  v = 2;
+}
+num v = 0;
+''');
+    await resolveTestFile();
+
+    var assignment = findNode.assignment('v = 2');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    SimpleIdentifier left = assignment.leftHandSide;
+    assertElement(left, findElement.topSet('v'));
+    assertType(left, 'num');
+
+    var right = assignment.rightHandSide;
+    assertType(right, 'int');
+  }
+
+  test_to_class() async {
+    addTestFile('''
+class C {}
+void f(int x) {
+  C = x;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var cRef = findNode.simple('C =');
+    assertElement(cRef, findElement.class_('C'));
+    assertType(cRef, 'Type');
+
+    var xRef = findNode.simple('x;');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_class_ambiguous() async {
+    newFile('/test/lib/a.dart', content: 'class C {}');
+    newFile('/test/lib/b.dart', content: 'class C {}');
+    addTestFile('''
+import 'a.dart';
+import 'b.dart';
+void f(int x) {
+  C = x;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x;');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_final_parameter() async {
+    addTestFile('''
+f(final int x) {
+  x += 2;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_final_variable_local() async {
+    addTestFile('''
+main() {
+  final x = 1;
+  x += 2;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.localVar('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_getter_instance_direct() async {
+    addTestFile('''
+class C {
+  int get x => 0;
+}
+f(C c) {
+  c.x += 2;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.getter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_getter_instance_via_implicit_this() async {
+    addTestFile('''
+class C {
+  int get x => 0;
+  f() {
+    x += 2;
+  }
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.getter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_getter_static_direct() async {
+    addTestFile('''
+class C {
+  static int get x => 0;
+}
+main() {
+  C.x += 2;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.getter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_getter_static_via_scope() async {
+    addTestFile('''
+class C {
+  static int get x => 0;
+  f() {
+    x += 2;
+  }
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.getter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_getter_top_level() async {
+    addTestFile('''
+int get x => 0;
+main() {
+  x += 2;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.topGet('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_to_non_lvalue() async {
+    addTestFile('''
+void f(int x, double y, String z) {
+  x + y = z;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'int');
+
+    var yRef = findNode.simple('y =');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'double');
+
+    var zRef = findNode.simple('z;');
+    assertElement(zRef, findElement.parameter('z'));
+    assertType(zRef, 'String');
+  }
+
+  test_to_postfix_increment() async {
+    addTestFile('''
+void f(num x, int y) {
+  x++ = y;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x++');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y;');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_to_postfix_increment_compound() async {
+    addTestFile('''
+void f(num x, int y) {
+  x++ += y;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x++');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y;');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_to_postfix_increment_null_aware() async {
+    addTestFile('''
+void f(num x, int y) {
+  x++ ??= y;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x++');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y;');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_to_prefix() async {
+    newFile('/test/lib/a.dart', content: '''
+var x = 0;
+''');
+    addTestFile('''
+import 'a.dart' as p;
+main() {
+  p += 2;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var pRef = findNode.simple('p +=');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeDynamic(pRef);
+  }
+
+  test_to_prefix_increment() async {
+    addTestFile('''
+void f(num x, int y) {
+  ++x = y;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x =');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y;');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_to_prefix_increment_compound() async {
+    addTestFile('''
+void f(num x, int y) {
+  ++x += y;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x +=');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y;');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_to_prefix_increment_null_aware() async {
+    addTestFile('''
+void f(num x, int y) {
+  ++x ??= y;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x ??=');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'num');
+
+    var yRef = findNode.simple('y;');
+    assertElement(yRef, findElement.parameter('y'));
+    assertType(yRef, 'int');
+  }
+
+  test_types_local() async {
+    addTestFile(r'''
+int a;
+bool b;
+main() {
+  a = b;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a = b');
+    assertElementNull(assignment);
+    assertType(assignment, 'bool');
+
+    assertIdentifierTopSetRef(assignment.leftHandSide, 'a');
+    assertIdentifierTopGetRef(assignment.rightHandSide, 'b');
+  }
+
+  test_types_top() async {
+    addTestFile(r'''
+int a = 0;
+bool b = a;
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var bDeclaration = findNode.variableDeclaration('b =');
+    TopLevelVariableElement bElement = bDeclaration.declaredElement;
+    assertElement(bDeclaration.name, findElement.topVar('b'));
+    assertType(bDeclaration.name, 'bool');
+    expect(bElement.type.toString(), 'bool');
+
+    SimpleIdentifier aRef = bDeclaration.initializer;
+    assertElement(aRef, findElement.topGet('a'));
+    assertType(aRef, 'int');
+  }
+
+  test_types_top_const() async {
+    addTestFile(r'''
+const int a = 0;
+const bool b = a;
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var bDeclaration = findNode.variableDeclaration('b =');
+    TopLevelVariableElement bElement = bDeclaration.declaredElement;
+    assertElement(bDeclaration.name, bElement);
+    assertType(bDeclaration.name, 'bool');
+    expect(bElement.type.toString(), 'bool');
+
+    SimpleIdentifier aRef = bDeclaration.initializer;
+    assertElement(aRef, findElement.topGet('a'));
+    assertType(aRef, 'int');
+  }
+
+  test_unresolved_left_identifier_compound() async {
+    addTestFile(r'''
+int b;
+main() {
+  a += b;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a += b');
+    assertElementNull(assignment);
+    assertTypeDynamic(assignment);
+
+    assertElementNull(assignment.leftHandSide);
+    assertTypeDynamic(assignment.leftHandSide);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('b'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_identifier_simple() async {
+    addTestFile(r'''
+int b;
+main() {
+  a = b;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a = b');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    assertElementNull(assignment.leftHandSide);
+    assertTypeDynamic(assignment.leftHandSide);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('b'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_indexed1_simple() async {
+    addTestFile(r'''
+int c;
+main() {
+  a[b] = c;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a[b] = c');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertElementNull(indexed);
+    assertTypeDynamic(indexed);
+
+    assertElementNull(indexed.target);
+    assertTypeDynamic(indexed.target);
+
+    assertElementNull(indexed.index);
+    assertTypeDynamic(indexed.index);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('c'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_indexed2_simple() async {
+    addTestFile(r'''
+A a;
+int c;
+main() {
+  a[b] = c;
+}
+class A {}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a[b] = c');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertElementNull(indexed);
+    assertTypeDynamic(indexed);
+
+    assertElement(indexed.target, findElement.topGet('a'));
+    assertType(indexed.target, 'A');
+
+    assertElementNull(indexed.index);
+    assertTypeDynamic(indexed.index);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('c'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_indexed3_simple() async {
+    addTestFile(r'''
+A a;
+int c;
+main() {
+  a[b] = c;
+}
+class A {
+  operator[]=(double b) {}
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a[b] = c');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertElement(indexed, findElement.method('[]='));
+    assertTypeDynamic(indexed);
+
+    assertElement(indexed.target, findElement.topGet('a'));
+    assertType(indexed.target, 'A');
+
+    assertElementNull(indexed.index);
+    assertTypeDynamic(indexed.index);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('c'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_indexed4_simple() async {
+    addTestFile(r'''
+double b;
+int c;
+main() {
+  a[b] = c;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a[b] = c');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    IndexExpression indexed = assignment.leftHandSide;
+    assertElementNull(indexed);
+    assertTypeDynamic(indexed);
+
+    assertElementNull(indexed.target);
+    assertTypeDynamic(indexed.target);
+
+    assertElement(indexed.index, findElement.topGet('b'));
+    assertType(indexed.index, 'double');
+
+    assertElement(assignment.rightHandSide, findElement.topGet('c'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_prefixed1_simple() async {
+    addTestFile(r'''
+int c;
+main() {
+  a.b = c;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a.b = c');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PrefixedIdentifier prefixed = assignment.leftHandSide;
+    assertElementNull(prefixed);
+    assertTypeDynamic(prefixed);
+
+    assertElementNull(prefixed.prefix);
+    assertTypeDynamic(prefixed.prefix);
+
+    assertElementNull(prefixed.identifier);
+    assertTypeDynamic(prefixed.identifier);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('c'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_prefixed2_simple() async {
+    addTestFile(r'''
+class A {}
+A a;
+int c;
+main() {
+  a.b = c;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a.b = c');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PrefixedIdentifier prefixed = assignment.leftHandSide;
+    assertElementNull(prefixed);
+    assertTypeDynamic(prefixed);
+
+    assertElement(prefixed.prefix, findElement.topGet('a'));
+    assertType(prefixed.prefix, 'A');
+
+    assertElementNull(prefixed.identifier);
+    assertTypeDynamic(prefixed.identifier);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('c'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_property1_simple() async {
+    addTestFile(r'''
+int d;
+main() {
+  a.b.c = d;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a.b.c = d');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess access = assignment.leftHandSide;
+    assertTypeDynamic(access);
+
+    PrefixedIdentifier prefixed = access.target;
+    assertElementNull(prefixed);
+    assertTypeDynamic(prefixed);
+
+    assertElementNull(prefixed.prefix);
+    assertTypeDynamic(prefixed.prefix);
+
+    assertElementNull(prefixed.identifier);
+    assertTypeDynamic(prefixed.identifier);
+
+    assertElementNull(access.propertyName);
+    assertTypeDynamic(access.propertyName);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('d'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_property2_simple() async {
+    addTestFile(r'''
+A a;
+int d;
+main() {
+  a.b.c = d;
+}
+class A {}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var assignment = findNode.assignment('a.b.c = d');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess access = assignment.leftHandSide;
+    assertTypeDynamic(access);
+
+    PrefixedIdentifier prefixed = access.target;
+    assertElementNull(prefixed);
+    assertTypeDynamic(prefixed);
+
+    assertElement(prefixed.prefix, findElement.topGet('a'));
+    assertType(prefixed.prefix, 'A');
+
+    assertElementNull(prefixed.identifier);
+    assertTypeDynamic(prefixed.identifier);
+
+    assertElementNull(access.propertyName);
+    assertTypeDynamic(access.propertyName);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('d'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_unresolved_left_property3_simple() async {
+    addTestFile(r'''
+A a;
+int d;
+main() {
+  a.b.c = d;
+}
+class A { B b; }
+class B {}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+    var bElement = findElement.field('b');
+
+    var assignment = findNode.assignment('a.b.c = d');
+    assertElementNull(assignment);
+    assertType(assignment, 'int');
+
+    PropertyAccess access = assignment.leftHandSide;
+    assertTypeDynamic(access);
+
+    PrefixedIdentifier prefixed = access.target;
+    assertElement(prefixed, bElement.getter);
+    assertType(prefixed, 'B');
+
+    assertElement(prefixed.prefix, findElement.topGet('a'));
+    assertType(prefixed.prefix, 'A');
+
+    assertElement(prefixed.identifier, bElement.getter);
+    assertType(prefixed.identifier, 'B');
+
+    assertElementNull(access.propertyName);
+    assertTypeDynamic(access.propertyName);
+
+    assertElement(assignment.rightHandSide, findElement.topGet('d'));
+    assertType(assignment.rightHandSide, 'int');
+  }
+
+  test_with_synthetic_lhs() async {
+    addTestFile('''
+void f(int x) {
+  = x;
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x;');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'int');
+  }
+
+  test_with_synthetic_lhs_in_method() async {
+    addTestFile('''
+class C {
+  void f(int x) {
+    = x;
+  }
+}
+''');
+    await resolveTestFile();
+    expect(result.errors, isNotEmpty);
+
+    var xRef = findNode.simple('x;');
+    assertElement(xRef, findElement.parameter('x'));
+    assertType(xRef, 'int');
+  }
+}
+
+@reflectiveTest
+class AssignmentTaskResolutionTest extends TaskResolutionTest
+    with AssignmentResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
new file mode 100644
index 0000000..166176c
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -0,0 +1,73 @@
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ClassDriverResolutionTest);
+    defineReflectiveTests(ClassTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class ClassDriverResolutionTest extends DriverResolutionTest
+    with ClassResolutionMixin {}
+
+abstract class ClassResolutionMixin implements ResolutionTest {
+  test_error_memberWithClassName_getter() async {
+    addTestFile(r'''
+class C {
+  int get C => null;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+  }
+
+  test_error_memberWithClassName_getter_static() async {
+    addTestFile(r'''
+class C {
+  static int get C => null;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+
+    var method = findNode.methodDeclaration('C =>');
+    expect(method.isGetter, isTrue);
+    expect(method.isStatic, isTrue);
+    assertElement(method, findElement.getter('C'));
+  }
+
+  test_error_memberWithClassName_setter() async {
+    addTestFile(r'''
+class C {
+  set C(_) {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+  }
+
+  test_error_memberWithClassName_setter_static() async {
+    addTestFile(r'''
+class C {
+  static set C(_) {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+
+    var method = findNode.methodDeclaration('C(_)');
+    expect(method.isSetter, isTrue);
+    expect(method.isStatic, isTrue);
+  }
+}
+
+@reflectiveTest
+class ClassTaskResolutionTest extends TaskResolutionTest
+    with ClassResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart b/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart
new file mode 100644
index 0000000..9c93015
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart
@@ -0,0 +1,67 @@
+import 'dart:async';
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/dart/analysis/byte_store.dart';
+import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/file_state.dart';
+import 'package:analyzer/src/dart/analysis/performance_logger.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/source/package_map_resolver.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+
+import '../../context/mock_sdk.dart';
+import 'resolution.dart';
+
+/// [AnalysisDriver] based implementation of [ResolutionTest].
+class DriverResolutionTest extends Object
+    with ResourceProviderMixin, ResolutionTest {
+  final ByteStore byteStore = new MemoryByteStore();
+
+  final StringBuffer logBuffer = new StringBuffer();
+  PerformanceLog logger;
+
+  DartSdk sdk;
+  AnalysisDriverScheduler scheduler;
+  AnalysisDriver driver;
+
+  @override
+  Future<TestAnalysisResult> resolveFile(String path) async {
+    AnalysisResult result = await driver.getResult(path);
+    return new TestAnalysisResult(
+      path,
+      result.content,
+      result.unit,
+      result.errors,
+    );
+  }
+
+  void setUp() {
+    sdk = new MockSdk(resourceProvider: resourceProvider);
+    logger = new PerformanceLog(logBuffer);
+    scheduler = new AnalysisDriverScheduler(logger);
+
+    Map<String, List<Folder>> packageMap = <String, List<Folder>>{
+      'test': [getFolder('/test/lib')],
+      'aaa': [getFolder('/aaa/lib')],
+      'bbb': [getFolder('/bbb/lib')],
+    };
+
+    driver = new AnalysisDriver(
+        scheduler,
+        logger,
+        resourceProvider,
+        byteStore,
+        new FileContentOverlay(),
+        null,
+        new SourceFactory([
+          new DartUriResolver(sdk),
+          new PackageMapUriResolver(resourceProvider, packageMap),
+          new ResourceUriResolver(resourceProvider)
+        ], null, resourceProvider),
+        new AnalysisOptionsImpl());
+
+    scheduler.start();
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/find_element.dart b/pkg/analyzer/test/src/dart/resolution/find_element.dart
new file mode 100644
index 0000000..0b1ed90
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/find_element.dart
@@ -0,0 +1,267 @@
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:test/test.dart';
+
+import 'function_ast_visitor.dart';
+
+class FindElement {
+  final CompilationUnit unit;
+
+  FindElement(this.unit);
+
+  CompilationUnitElement get unitElement => unit.declaredElement;
+
+  ClassElement class_(String name) {
+    for (var class_ in unitElement.types) {
+      if (class_.name == name) {
+        return class_;
+      }
+    }
+    fail('Not found class: $name');
+  }
+
+  ClassElement enum_(String name) {
+    for (var enum_ in unitElement.enums) {
+      if (enum_.name == name) {
+        return enum_;
+      }
+    }
+    fail('Not found enum: $name');
+  }
+
+  ExportElement export(String targetUri) {
+    ExportElement exportElement;
+    for (var export in unitElement.library.exports) {
+      var exportedUri = export.exportedLibrary.source.uri.toString();
+      if (exportedUri == targetUri) {
+        if (exportElement != null) {
+          throw new StateError('Not unique $targetUri export.');
+        }
+        exportElement = export;
+      }
+    }
+    if (exportElement != null) {
+      return exportElement;
+    }
+    fail('Not found export: $targetUri');
+  }
+
+  FieldElement field(String name) {
+    for (var type in unitElement.mixins) {
+      for (var field in type.fields) {
+        if (field.name == name) {
+          return field;
+        }
+      }
+    }
+    for (var type in unitElement.types) {
+      for (var field in type.fields) {
+        if (field.name == name) {
+          return field;
+        }
+      }
+    }
+    fail('Not found class field: $name');
+  }
+
+  FunctionElement function(String name) {
+    for (var function in unitElement.functions) {
+      if (function.name == name) {
+        return function;
+      }
+    }
+    fail('Not found top-level function: $name');
+  }
+
+  PropertyAccessorElement getter(String name) {
+    for (var class_ in unitElement.types) {
+      for (var accessor in class_.accessors) {
+        if (accessor.isGetter && accessor.displayName == name) {
+          return accessor;
+        }
+      }
+    }
+    fail('Not found class accessor: $name');
+  }
+
+  ImportElement import(String targetUri) {
+    ImportElement importElement;
+    for (var import in unitElement.library.imports) {
+      var importedUri = import.importedLibrary.source.uri.toString();
+      if (importedUri == targetUri) {
+        if (importElement != null) {
+          throw new StateError('Not unique $targetUri import.');
+        }
+        importElement = import;
+      }
+    }
+    if (importElement != null) {
+      return importElement;
+    }
+    fail('Not found import: $targetUri');
+  }
+
+  InterfaceType interfaceType(String name) {
+    return class_(name).type;
+  }
+
+  LocalVariableElement localVar(String name) {
+    LocalVariableElement result;
+    unit.accept(new FunctionAstVisitor(
+      variableDeclaration: (node) {
+        var element = node.declaredElement;
+        if (element is LocalVariableElement) {
+          if (result != null) {
+            throw new StateError('Local variable name $name is not unique.');
+          }
+          result = element;
+        }
+      },
+    ));
+    if (result == null) {
+      fail('Not found local variable: $name');
+    }
+    return result;
+  }
+
+  MethodElement method(String name) {
+    for (var type in unitElement.types) {
+      for (var method in type.methods) {
+        if (method.name == name) {
+          return method;
+        }
+      }
+    }
+    fail('Not found class method: $name');
+  }
+
+  ClassElement mixin(String name) {
+    for (var mixin in unitElement.mixins) {
+      if (mixin.name == name) {
+        return mixin;
+      }
+    }
+    fail('Not found mixin: $name');
+  }
+
+  ParameterElement parameter(String name) {
+    ParameterElement parameterElement;
+    void considerParameter(ParameterElement parameter) {
+      if (parameter.name == name) {
+        if (parameterElement != null) {
+          throw new StateError('Parameter name $name is not unique.');
+        }
+        parameterElement = parameter;
+      }
+    }
+
+    for (var accessor in unitElement.accessors) {
+      accessor.parameters.forEach(considerParameter);
+    }
+    for (var function in unitElement.functions) {
+      function.parameters.forEach(considerParameter);
+    }
+    for (var function in unitElement.functionTypeAliases) {
+      function.parameters.forEach(considerParameter);
+    }
+    for (var class_ in unitElement.types) {
+      for (var constructor in class_.constructors) {
+        constructor.parameters.forEach(considerParameter);
+      }
+      for (var method in class_.methods) {
+        method.parameters.forEach(considerParameter);
+      }
+    }
+    if (parameterElement != null) {
+      return parameterElement;
+    }
+    fail('No parameter found with name $name');
+  }
+
+  PrefixElement prefix(String name) {
+    for (var import_ in unitElement.library.imports) {
+      var prefix = import_.prefix;
+      if (prefix != null && prefix.name == name) {
+        return prefix;
+      }
+    }
+    fail('Prefix not found: $name');
+  }
+
+  PropertyAccessorElement setter(String name, {String inClass}) {
+    PropertyAccessorElement result;
+    for (var class_ in unitElement.types) {
+      if (inClass != null && class_.name != inClass) {
+        continue;
+      }
+      for (var accessor in class_.accessors) {
+        if (accessor.isSetter && accessor.displayName == name) {
+          if (result == null) {
+            result = accessor;
+          } else {
+            throw new StateError('Class setter $name is not unique.');
+          }
+        }
+      }
+    }
+    if (result == null) {
+      fail('Not found class setter: $name');
+    }
+    return result;
+  }
+
+  FunctionElement topFunction(String name) {
+    for (var function in unitElement.functions) {
+      if (function.name == name) {
+        return function;
+      }
+    }
+    fail('Not found top-level function: $name');
+  }
+
+  PropertyAccessorElement topGet(String name) {
+    return topVar(name).getter;
+  }
+
+  PropertyAccessorElement topSet(String name) {
+    return topVar(name).setter;
+  }
+
+  TopLevelVariableElement topVar(String name) {
+    for (var variable in unitElement.topLevelVariables) {
+      if (variable.name == name) {
+        return variable;
+      }
+    }
+    fail('Not found top-level variable: $name');
+  }
+
+  TypeParameterElement typeParameter(String name) {
+    TypeParameterElement result;
+
+    void consider(TypeParameterElement candidate) {
+      if (candidate.name == name) {
+        if (result != null) {
+          throw new StateError('Type parameter $name is not unique.');
+        }
+        result = candidate;
+      }
+    }
+
+    for (var type in unitElement.functionTypeAliases) {
+      type.typeParameters.forEach(consider);
+    }
+    for (var type in unitElement.types) {
+      type.typeParameters.forEach(consider);
+    }
+    if (result != null) {
+      return result;
+    }
+    fail('Not found type parameter: $name');
+  }
+
+  ConstructorElement unnamedConstructor(String name) {
+    return class_(name).unnamedConstructor;
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/find_node.dart b/pkg/analyzer/test/src/dart/resolution/find_node.dart
new file mode 100644
index 0000000..55998cc
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/find_node.dart
@@ -0,0 +1,157 @@
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:test/test.dart';
+
+class FindNode {
+  final String content;
+  final CompilationUnit unit;
+
+  FindNode(this.content, this.unit);
+
+  LibraryDirective get libraryDirective {
+    return unit.directives.singleWhere((d) => d is LibraryDirective);
+  }
+
+  Annotation annotation(String search) {
+    return _node(search, (n) => n is Annotation);
+  }
+
+  AssignmentExpression assignment(String search) {
+    return _node(search, (n) => n is AssignmentExpression);
+  }
+
+  CascadeExpression cascade(String search) {
+    return _node(search, (n) => n is CascadeExpression);
+  }
+
+  CommentReference commentReference(String search) {
+    return _node(search, (n) => n is CommentReference);
+  }
+
+  ConstructorDeclaration constructor(String search) {
+    return _node(search, (n) => n is ConstructorDeclaration);
+  }
+
+  ExportDirective export(String search) {
+    return _node(search, (n) => n is ExportDirective);
+  }
+
+  FieldFormalParameter fieldFormalParameter(String search) {
+    return _node(search, (n) => n is FieldFormalParameter);
+  }
+
+  FunctionExpression functionExpression(String search) {
+    return _node(search, (n) => n is FunctionExpression);
+  }
+
+  GenericFunctionType genericFunctionType(String search) {
+    return _node(search, (n) => n is GenericFunctionType);
+  }
+
+  ImportDirective import(String search) {
+    return _node(search, (n) => n is ImportDirective);
+  }
+
+  InstanceCreationExpression instanceCreation(String search) {
+    return _node(search, (n) => n is InstanceCreationExpression);
+  }
+
+  ListLiteral listLiteral(String search) {
+    return _node(search, (n) => n is ListLiteral);
+  }
+
+  MapLiteral mapLiteral(String search) {
+    return _node(search, (n) => n is MapLiteral);
+  }
+
+  MethodDeclaration methodDeclaration(String search) {
+    return _node(search, (n) => n is MethodDeclaration);
+  }
+
+  MethodInvocation methodInvocation(String search) {
+    return _node(search, (n) => n is MethodInvocation);
+  }
+
+  MixinDeclaration mixin(String search) {
+    return _node(search, (n) => n is MixinDeclaration);
+  }
+
+  ParenthesizedExpression parenthesized(String search) {
+    return _node(search, (n) => n is ParenthesizedExpression);
+  }
+
+  PartDirective part(String search) {
+    return _node(search, (n) => n is PartDirective);
+  }
+
+  PartOfDirective partOf(String search) {
+    return _node(search, (n) => n is PartOfDirective);
+  }
+
+  PostfixExpression postfix(String search) {
+    return _node(search, (n) => n is PostfixExpression);
+  }
+
+  PrefixExpression prefix(String search) {
+    return _node(search, (n) => n is PrefixExpression);
+  }
+
+  PrefixedIdentifier prefixed(String search) {
+    return _node(search, (n) => n is PrefixedIdentifier);
+  }
+
+  RethrowExpression rethrow_(String search) {
+    return _node(search, (n) => n is RethrowExpression);
+  }
+
+  SimpleIdentifier simple(String search) {
+    return _node(search, (_) => true);
+  }
+
+  SimpleFormalParameter simpleParameter(String search) {
+    return _node(search, (n) => n is SimpleFormalParameter);
+  }
+
+  StringLiteral stringLiteral(String search) {
+    return _node(search, (n) => n is StringLiteral);
+  }
+
+  SuperExpression super_(String search) {
+    return _node(search, (n) => n is SuperExpression);
+  }
+
+  ThisExpression this_(String search) {
+    return _node(search, (n) => n is ThisExpression);
+  }
+
+  ThrowExpression throw_(String search) {
+    return _node(search, (n) => n is ThrowExpression);
+  }
+
+  TypeName typeName(String search) {
+    return _node(search, (n) => n is TypeName);
+  }
+
+  TypeParameter typeParameter(String search) {
+    return _node(search, (n) => n is TypeParameter);
+  }
+
+  VariableDeclaration variableDeclaration(String search) {
+    return _node(search, (n) => n is VariableDeclaration);
+  }
+
+  AstNode _node(String search, bool Function(AstNode) predicate) {
+    var index = content.indexOf(search);
+    if (content.indexOf(search, index + 1) != -1) {
+      fail('The pattern |$search| is not unique in:\n$content');
+    }
+    expect(index, greaterThanOrEqualTo(0));
+
+    var node = new NodeLocator2(index).searchWithin(unit);
+    expect(node, isNotNull);
+
+    var result = node.getAncestor(predicate);
+    expect(result, isNotNull);
+    return result;
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/for_in_test.dart b/pkg/analyzer/test/src/dart/resolution/for_in_test.dart
new file mode 100644
index 0000000..3062f41
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/for_in_test.dart
@@ -0,0 +1,44 @@
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ForInDriverResolutionTest);
+    defineReflectiveTests(ForInTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class ForInDriverResolutionTest extends DriverResolutionTest
+    with ForInResolutionMixin {}
+
+abstract class ForInResolutionMixin implements ResolutionTest {
+  test_importPrefix_asIterable() async {
+    // TODO(scheglov) Remove this test (already tested as import prefix).
+    // TODO(scheglov) Move other for-in tests here.
+    addTestFile(r'''
+import 'dart:async' as p;
+
+main() {
+  for (var x in p) {}
+}
+''');
+    await resolveTestFile();
+    assertHasTestErrors();
+
+    var xRef = findNode.simple('x in');
+    expect(xRef.staticElement, isNotNull);
+
+    var pRef = findNode.simple('p) {}');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeDynamic(pRef);
+  }
+}
+
+@reflectiveTest
+class ForInTaskResolutionTest extends TaskResolutionTest
+    with ForInResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart b/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart
new file mode 100644
index 0000000..d860e9c
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/function_ast_visitor.dart
@@ -0,0 +1,26 @@
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+
+/// [RecursiveAstVisitor] that delegates visit methods to functions.
+class FunctionAstVisitor extends RecursiveAstVisitor<void> {
+  final void Function(SimpleIdentifier) simpleIdentifier;
+  final void Function(VariableDeclaration) variableDeclaration;
+
+  FunctionAstVisitor({this.simpleIdentifier, this.variableDeclaration});
+
+  @override
+  void visitSimpleIdentifier(SimpleIdentifier node) {
+    if (simpleIdentifier != null) {
+      simpleIdentifier(node);
+    }
+    super.visitSimpleIdentifier(node);
+  }
+
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
+    if (variableDeclaration != null) {
+      variableDeclaration(node);
+    }
+    super.visitVariableDeclaration(node);
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart b/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart
new file mode 100644
index 0000000..ea22bc8
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/import_prefix_test.dart
@@ -0,0 +1,115 @@
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ImportPrefixDriverResolutionTest);
+    defineReflectiveTests(ImportPrefixTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class ImportPrefixDriverResolutionTest extends DriverResolutionTest
+    with ImportPrefixResolutionMixin {}
+
+abstract class ImportPrefixResolutionMixin implements ResolutionTest {
+  test_asExpression_expressionStatement() async {
+    addTestFile(r'''
+import 'dart:async' as p;
+
+main() {
+  p; // use
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT,
+    ]);
+
+    var pRef = findNode.simple('p; // use');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeDynamic(pRef);
+  }
+
+  test_asExpression_forIn_iterable() async {
+    addTestFile(r'''
+import 'dart:async' as p;
+
+main() {
+  for (var x in p) {}
+}
+''');
+    await resolveTestFile();
+    assertHasTestErrors();
+
+    var xRef = findNode.simple('x in');
+    expect(xRef.staticElement, isNotNull);
+
+    var pRef = findNode.simple('p) {}');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeDynamic(pRef);
+  }
+
+  test_asExpression_instanceCreation_argument() async {
+    addTestFile(r'''
+import 'dart:async' as p;
+
+class C<T> {
+  C(a);
+}
+
+main() {
+  var x = new C(p);
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT,
+    ]);
+
+    var pRef = findNode.simple('p);');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeDynamic(pRef);
+  }
+
+  test_asPrefix_methodInvocation() async {
+    addTestFile(r'''
+import 'dart:math' as p;
+
+main() {
+  p.max(0, 0);
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var pRef = findNode.simple('p.max');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeNull(pRef);
+  }
+
+  test_asPrefix_prefixedIdentifier() async {
+    addTestFile(r'''
+import 'dart:async' as p;
+
+main() {
+  p.Future;
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var pRef = findNode.simple('p.Future');
+    assertElement(pRef, findElement.prefix('p'));
+    assertTypeNull(pRef);
+  }
+}
+
+@reflectiveTest
+class ImportPrefixTaskResolutionTest extends TaskResolutionTest
+    with ImportPrefixResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
new file mode 100644
index 0000000..2440c6a
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -0,0 +1,684 @@
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+import 'resolution.dart';
+import 'task_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(MixinDriverResolutionTest);
+    defineReflectiveTests(MixinTaskResolutionTest);
+  });
+}
+
+@reflectiveTest
+class MixinDriverResolutionTest extends DriverResolutionTest
+    with MixinResolutionMixin {}
+
+abstract class MixinResolutionMixin implements ResolutionTest {
+  test_accessor_getter() async {
+    addTestFile(r'''
+mixin M {
+  int get g => 0;
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+
+    var accessors = element.accessors;
+    expect(accessors, hasLength(1));
+
+    var gElement = accessors[0];
+    assertElementName(gElement, 'g', offset: 20);
+
+    var gNode = findNode.methodDeclaration('g =>');
+    assertElement(gNode.name, gElement);
+
+    var fields = element.fields;
+    expect(fields, hasLength(1));
+    assertElementName(fields[0], 'g', isSynthetic: true);
+  }
+
+  test_accessor_method() async {
+    addTestFile(r'''
+mixin M {
+  void foo() {}
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+
+    var methods = element.methods;
+    expect(methods, hasLength(1));
+
+    var fooElement = methods[0];
+    assertElementName(fooElement, 'foo', offset: 17);
+
+    var fooNode = findNode.methodDeclaration('foo()');
+    assertElement(fooNode.name, fooElement);
+  }
+
+  test_accessor_setter() async {
+    addTestFile(r'''
+mixin M {
+  void set s(int _) {}
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+
+    var accessors = element.accessors;
+    expect(accessors, hasLength(1));
+
+    var sElement = accessors[0];
+    assertElementName(sElement, 's=', offset: 21);
+
+    var gNode = findNode.methodDeclaration('s(int _)');
+    assertElement(gNode.name, sElement);
+
+    var fields = element.fields;
+    expect(fields, hasLength(1));
+    assertElementName(fields[0], 's', isSynthetic: true);
+  }
+
+  test_classDeclaration_with() async {
+    addTestFile(r'''
+mixin M {}
+class A extends Object with M {} // A
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var mElement = findElement.mixin('M');
+
+    var aElement = findElement.class_('A');
+    assertElementTypes(aElement.mixins, [mElement.type]);
+
+    var mRef = findNode.typeName('M {} // A');
+    assertTypeName(mRef, mElement, 'M');
+  }
+
+  test_classTypeAlias_with() async {
+    addTestFile(r'''
+mixin M {}
+class A = Object with M;
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var mElement = findElement.mixin('M');
+
+    var aElement = findElement.class_('A');
+    assertElementTypes(aElement.mixins, [mElement.type]);
+
+    var mRef = findNode.typeName('M;');
+    assertTypeName(mRef, mElement, 'M');
+  }
+
+  test_commentReference() async {
+    addTestFile(r'''
+const a = 0;
+
+/// Reference [a] in documentation.
+mixin M {}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var aRef = findNode.commentReference('a]').identifier;
+    assertElement(aRef, findElement.topGet('a'));
+    assertTypeNull(aRef);
+  }
+
+  test_element() async {
+    addTestFile(r'''
+mixin M {}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var mixin = findNode.mixin('mixin M');
+    var element = findElement.mixin('M');
+    assertElement(mixin, element);
+
+    expect(element.typeParameters, isEmpty);
+    assertElementTypes(element.superclassConstraints, [objectType]);
+  }
+
+  test_error_conflictingTypeVariableAndClass() async {
+    addTestFile(r'''
+mixin M<M> {}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS,
+    ]);
+  }
+
+  test_error_conflictingTypeVariableAndMember_field() async {
+    addTestFile(r'''
+mixin M<T> {
+  var T;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
+    ]);
+  }
+
+  test_error_conflictingTypeVariableAndMember_getter() async {
+    addTestFile(r'''
+mixin M<T> {
+  get T => null;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
+    ]);
+  }
+
+  test_error_conflictingTypeVariableAndMember_method() async {
+    addTestFile(r'''
+mixin M<T> {
+  T() {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
+    ]);
+  }
+
+  test_error_conflictingTypeVariableAndMember_method_static() async {
+    addTestFile(r'''
+mixin M<T> {
+  static T() {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
+    ]);
+  }
+
+  test_error_conflictingTypeVariableAndMember_setter() async {
+    addTestFile(r'''
+mixin M<T> {
+  void set T(_) {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
+    ]);
+  }
+
+  test_error_duplicateDefinition_field() async {
+    addTestFile(r'''
+mixin M {
+  int t;
+  int t;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+  }
+
+  test_error_duplicateDefinition_field_method() async {
+    addTestFile(r'''
+mixin M {
+  int t;
+  void t() {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+  }
+
+  test_error_duplicateDefinition_getter() async {
+    addTestFile(r'''
+mixin M {
+  int get t => 0;
+  int get t => 0;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+  }
+
+  test_error_duplicateDefinition_method() async {
+    addTestFile(r'''
+mixin M {
+  void t() {}
+  void t() {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+  }
+
+  test_error_duplicateDefinition_setter() async {
+    addTestFile(r'''
+mixin M {
+  void set t(_) {}
+  void set t(_) {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.DUPLICATE_DEFINITION]);
+  }
+
+  test_error_finalNotInitialized() async {
+    addTestFile(r'''
+mixin M {
+  final int f;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([StaticWarningCode.FINAL_NOT_INITIALIZED]);
+  }
+
+  test_error_finalNotInitialized_OK() async {
+    addTestFile(r'''
+mixin M {
+  final int f = 0;
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+  }
+
+  test_error_finalNotInitializedConstructor() async {
+    addTestFile(r'''
+mixin M {
+  final int f;
+  M();
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR,
+      StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
+    ]);
+  }
+
+  test_error_finalNotInitializedConstructor_OK() async {
+    addTestFile(r'''
+mixin M {
+  final int f;
+  M(this.f);
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+
+    var element = findElement.mixin('M');
+    var constructorElement = element.constructors.single;
+
+    var fpNode = findNode.fieldFormalParameter('f);');
+    assertElement(fpNode.identifier, constructorElement.parameters[0]);
+
+    FieldFormalParameterElement fpElement = fpNode.declaredElement;
+    expect(fpElement.field, same(findElement.field('f')));
+  }
+
+  test_error_getterAndMethodWithSameName() async {
+    addTestFile(r'''
+mixin M {
+  void t() {}
+  int get t => 0;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME]);
+  }
+
+  test_error_implementsClause_deferredClass() async {
+    addTestFile(r'''
+import 'dart:math' deferred as math;
+mixin M implements math.Random {}
+''');
+    await resolveTestFile();
+    var mathImport = findElement.import('dart:math');
+    var randomElement = mathImport.importedLibrary.getType('Random');
+
+    assertTestErrors([
+      CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.interfaces, [randomElement.type]);
+
+    var typeRef = findNode.typeName('Random {}');
+    assertTypeName(typeRef, randomElement, 'Random',
+        expectedPrefix: mathImport.prefix);
+  }
+
+  test_error_implementsClause_disallowedClass_int() async {
+    addTestFile(r'''
+mixin M implements int {}
+''');
+    await resolveTestFile();
+
+    assertTestErrors([
+      CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.interfaces, [intType]);
+
+    var typeRef = findNode.typeName('int {}');
+    assertTypeName(typeRef, intElement, 'int');
+  }
+
+  test_error_implementsClause_nonClass_void() async {
+    addTestFile(r'''
+mixin M implements void {}
+''');
+    await resolveTestFile();
+
+    assertTestErrors([
+      CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.interfaces, []);
+
+    var typeRef = findNode.typeName('void {}');
+    assertTypeName(typeRef, null, 'void');
+  }
+
+  test_error_memberWithClassName_getter() async {
+    addTestFile(r'''
+mixin M {
+  int get M => 0;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+  }
+
+  test_error_memberWithClassName_getter_static() async {
+    addTestFile(r'''
+mixin M {
+  static int get M => 0;
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+  }
+
+  test_error_memberWithClassName_setter() async {
+    addTestFile(r'''
+mixin M {
+  void set M(_) {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+  }
+
+  test_error_memberWithClassName_setter_static() async {
+    addTestFile(r'''
+mixin M {
+  static void set M(_) {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME]);
+  }
+
+  test_error_methodAndGetterWithSameName() async {
+    addTestFile(r'''
+mixin M {
+  int get t => 0;
+  void t() {}
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME]);
+  }
+
+  test_error_mixinDeclaresConstructor() async {
+    addTestFile(r'''
+mixin M {
+  M(int a) {
+    a; // read
+  }
+}
+''');
+    await resolveTestFile();
+    assertTestErrors([CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR]);
+
+    // Even though it is an error for a mixin to declare a constructor,
+    // we still build elements for constructors, and resolve them.
+
+    var element = findElement.mixin('M');
+    var constructors = element.constructors;
+    expect(constructors, hasLength(1));
+    var constructorElement = constructors[0];
+
+    var constructorNode = findNode.constructor('M(int a)');
+    assertElement(constructorNode, constructorElement);
+
+    var aElement = constructorElement.parameters[0];
+    var aNode = constructorNode.parameters.parameters[0];
+    assertElement(aNode, aElement);
+
+    var aRef = findNode.simple('a; // read');
+    assertElement(aRef, aElement);
+    assertType(aRef, 'int');
+  }
+
+  test_error_onClause_deferredClass() async {
+    addTestFile(r'''
+import 'dart:math' deferred as math;
+mixin M on math.Random {}
+''');
+    await resolveTestFile();
+    var mathImport = findElement.import('dart:math');
+    var randomElement = mathImport.importedLibrary.getType('Random');
+
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DEFERRED_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, [randomElement.type]);
+
+    var typeRef = findNode.typeName('Random {}');
+    assertTypeName(typeRef, randomElement, 'Random',
+        expectedPrefix: mathImport.prefix);
+  }
+
+  test_error_onClause_disallowedClass_int() async {
+    addTestFile(r'''
+mixin M on int {}
+''');
+    await resolveTestFile();
+
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, [intType]);
+
+    var typeRef = findNode.typeName('int {}');
+    assertTypeName(typeRef, intElement, 'int');
+  }
+
+  test_error_onClause_nonClass_dynamic() async {
+    addTestFile(r'''
+mixin M on dynamic {}
+''');
+    await resolveTestFile();
+
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, [objectType]);
+
+    var typeRef = findNode.typeName('dynamic {}');
+    assertTypeName(typeRef, dynamicElement, 'dynamic');
+  }
+
+  test_error_onClause_nonClass_enum() async {
+    addTestFile(r'''
+enum E {E1, E2, E3}
+mixin M on E {}
+''');
+    await resolveTestFile();
+
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, [objectType]);
+
+    var typeRef = findNode.typeName('E {}');
+    assertTypeName(typeRef, findElement.enum_('E'), 'E');
+  }
+
+  test_error_onClause_nonClass_void() async {
+    addTestFile(r'''
+mixin M on void {}
+''');
+    await resolveTestFile();
+
+    assertTestErrors([
+      CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_CLASS,
+    ]);
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, [objectType]);
+
+    var typeRef = findNode.typeName('void {}');
+    assertTypeName(typeRef, null, 'void');
+  }
+
+  test_field() async {
+    addTestFile(r'''
+mixin M<T> {
+  T f;
+}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+
+    var typeParameters = element.typeParameters;
+    expect(typeParameters, hasLength(1));
+
+    var tElement = typeParameters.single;
+    assertElementName(tElement, 'T', offset: 8);
+    assertEnclosingElement(tElement, element);
+
+    var tNode = findNode.typeParameter('T> {');
+    assertElement(tNode.name, tElement);
+
+    var fields = element.fields;
+    expect(fields, hasLength(1));
+
+    var fElement = fields[0];
+    assertElementName(fElement, 'f', offset: 17);
+    assertEnclosingElement(fElement, element);
+
+    var fNode = findNode.variableDeclaration('f;');
+    assertElement(fNode.name, fElement);
+
+    assertTypeName(findNode.typeName('T f'), tElement, 'T');
+
+    var accessors = element.accessors;
+    expect(accessors, hasLength(2));
+    assertElementName(accessors[0], 'f', isSynthetic: true);
+    assertElementName(accessors[1], 'f=', isSynthetic: true);
+  }
+
+  test_implementsClause() async {
+    addTestFile(r'''
+class A {}
+class B {}
+
+mixin M implements A, B {} // M
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.interfaces, [
+      findElement.interfaceType('A'),
+      findElement.interfaceType('B'),
+    ]);
+
+    var aRef = findNode.typeName('A, ');
+    assertTypeName(aRef, findElement.class_('A'), 'A');
+
+    var bRef = findNode.typeName('B {} // M');
+    assertTypeName(bRef, findElement.class_('B'), 'B');
+  }
+
+  test_metadata() async {
+    addTestFile(r'''
+const a = 0;
+
+@a
+mixin M {}
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var a = findElement.topGet('a');
+    var element = findElement.mixin('M');
+
+    var metadata = element.metadata;
+    expect(metadata, hasLength(1));
+    expect(metadata[0].element, same(a));
+
+    var annotation = findNode.annotation('@a');
+    assertElement(annotation, a);
+    expect(annotation.elementAnnotation, same(metadata[0]));
+  }
+
+  test_onClause() async {
+    addTestFile(r'''
+class A {}
+class B {}
+
+mixin M on A, B {} // M
+''');
+    await resolveTestFile();
+    assertNoTestErrors();
+
+    var element = findElement.mixin('M');
+    assertElementTypes(element.superclassConstraints, [
+      findElement.interfaceType('A'),
+      findElement.interfaceType('B'),
+    ]);
+
+    var aRef = findNode.typeName('A, ');
+    assertTypeName(aRef, findElement.class_('A'), 'A');
+
+    var bRef = findNode.typeName('B {} // M');
+    assertTypeName(bRef, findElement.class_('B'), 'B');
+  }
+}
+
+@reflectiveTest
+class MixinTaskResolutionTest extends TaskResolutionTest
+    with MixinResolutionMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
new file mode 100644
index 0000000..eacf271
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -0,0 +1,236 @@
+import 'dart:async';
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/dart/element/member.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/error/hint_codes.dart';
+import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:test/test.dart';
+
+import '../../../generated/test_support.dart';
+import 'find_element.dart';
+import 'find_node.dart';
+
+final isBottomType = new TypeMatcher<BottomTypeImpl>();
+
+final isDynamicType = new TypeMatcher<DynamicTypeImpl>();
+
+final isUndefinedType = new TypeMatcher<UndefinedTypeImpl>();
+
+final isVoidType = new TypeMatcher<VoidTypeImpl>();
+
+/// Base for resolution tests.
+abstract class ResolutionTest implements ResourceProviderMixin {
+  TestAnalysisResult result;
+  FindNode findNode;
+  FindElement findElement;
+
+  ClassElement get doubleElement => typeProvider.doubleType.element;
+
+  InterfaceType get doubleType => typeProvider.doubleType;
+
+  Element get dynamicElement => typeProvider.dynamicType.element;
+
+  ClassElement get intElement => typeProvider.intType.element;
+
+  InterfaceType get intType => typeProvider.intType;
+
+  ClassElement get listElement => typeProvider.listType.element;
+
+  ClassElement get mapElement => typeProvider.mapType.element;
+
+  ClassElement get numElement => typeProvider.numType.element;
+
+  InterfaceType get objectType => typeProvider.objectType;
+
+  TypeProvider get typeProvider =>
+      result.unit.declaredElement.context.typeProvider;
+
+  void addTestFile(String content) {
+    newFile('/test/lib/test.dart', content: content);
+  }
+
+  void assertElement(AstNode node, Element expected) {
+    Element actual = getNodeElement(node);
+    expect(actual, same(expected));
+  }
+
+  void assertElementName(Element element, String name,
+      {bool isSynthetic = false, int offset}) {
+    expect(element.name, name);
+    expect(element.isSynthetic, isSynthetic);
+    if (offset != null) {
+      expect(element.nameOffset, offset);
+    }
+  }
+
+  void assertElementNull(Expression node) {
+    Element actual = getNodeElement(node);
+    expect(actual, isNull);
+  }
+
+  void assertElementType(DartType type, DartType expected) {
+    expect(type, expected);
+  }
+
+  void assertElementTypes(List<DartType> types, List<DartType> expected) {
+    expect(types, hasLength(expected.length));
+    for (var i = 0; i < types.length; ++i) {
+      assertElementType(types[i], expected[i]);
+    }
+  }
+
+  void assertEnclosingElement(Element element, Element expectedEnclosing) {
+    expect(element.enclosingElement, expectedEnclosing);
+  }
+
+  /**
+   * Assert that the number of error codes in reported [errors] matches the
+   * number of [expected] error codes. The order of errors is ignored.
+   */
+  void assertErrors(List<AnalysisError> errors,
+      [List<ErrorCode> expected = const <ErrorCode>[]]) {
+    var errorListener = new GatheringErrorListener();
+    for (AnalysisError error in result.errors) {
+      ErrorCode errorCode = error.errorCode;
+      if (errorCode == HintCode.UNUSED_CATCH_CLAUSE ||
+          errorCode == HintCode.UNUSED_CATCH_STACK ||
+          errorCode == HintCode.UNUSED_ELEMENT ||
+          errorCode == HintCode.UNUSED_FIELD ||
+          errorCode == HintCode.UNUSED_LOCAL_VARIABLE) {
+        continue;
+      }
+      errorListener.onError(error);
+    }
+    errorListener.assertErrorsWithCodes(expected);
+  }
+
+  void assertHasTestErrors() {
+    expect(result.errors, isNotEmpty);
+  }
+
+  void assertIdentifierTopGetRef(SimpleIdentifier ref, String name) {
+    var getter = findElement.topGet(name);
+    assertElement(ref, getter);
+
+    var type = getter.returnType.toString();
+    assertType(ref, type);
+  }
+
+  void assertIdentifierTopSetRef(SimpleIdentifier ref, String name) {
+    var setter = findElement.topSet(name);
+    assertElement(ref, setter);
+
+    var type = setter.parameters[0].type.toString();
+    assertType(ref, type);
+  }
+
+  void assertMember(
+      Expression node, String expectedDefiningType, Element expectedBase) {
+    Member actual = getNodeElement(node);
+    expect(actual.definingType.toString(), expectedDefiningType);
+    expect(actual.baseElement, same(expectedBase));
+  }
+
+  void assertNoTestErrors() {
+    expect(result.errors, isEmpty);
+  }
+
+  void assertTestErrors(List<ErrorCode> expected) {
+    assertErrors(result.errors, expected);
+  }
+
+  void assertTopGetRef(String search, String name) {
+    var ref = findNode.simple(search);
+    assertIdentifierTopGetRef(ref, name);
+  }
+
+  void assertType(AstNode node, String expected) {
+    DartType actual;
+    if (node is Expression) {
+      actual = node.staticType;
+    } else if (node is GenericFunctionType) {
+      actual = node.type;
+    } else if (node is TypeName) {
+      actual = node.type;
+    } else {
+      fail('Unsupported node: (${node.runtimeType}) $node');
+    }
+    expect(actual?.toString(), expected);
+  }
+
+  void assertTypeDynamic(Expression expression) {
+    DartType actual = expression.staticType;
+    expect(actual, isDynamicType);
+  }
+
+  void assertTypeName(
+      TypeName node, Element expectedElement, String expectedType,
+      {PrefixElement expectedPrefix}) {
+    assertType(node, expectedType);
+
+    if (expectedPrefix == null) {
+      var name = node.name as SimpleIdentifier;
+      assertElement(name, expectedElement);
+      assertType(name, expectedType);
+    } else {
+      var name = node.name as PrefixedIdentifier;
+
+      assertElement(name.prefix, expectedPrefix);
+      expect(name.prefix.staticType, isNull);
+
+      assertElement(name.identifier, expectedElement);
+      expect(name.identifier.staticType, isNull);
+    }
+  }
+
+  void assertTypeNull(Expression node) {
+    expect(node.staticType, isNull);
+  }
+
+  Element getNodeElement(AstNode node) {
+    if (node is Annotation) {
+      return node.element;
+    } else if (node is AssignmentExpression) {
+      return node.staticElement;
+    } else if (node is Declaration) {
+      return node.declaredElement;
+    } else if (node is FormalParameter) {
+      return node.declaredElement;
+    } else if (node is Identifier) {
+      return node.staticElement;
+    } else if (node is IndexExpression) {
+      return node.staticElement;
+    } else if (node is InstanceCreationExpression) {
+      return node.staticElement;
+    } else if (node is PostfixExpression) {
+      return node.staticElement;
+    } else if (node is PrefixExpression) {
+      return node.staticElement;
+    } else {
+      fail('Unsupported node: (${node.runtimeType}) $node');
+    }
+  }
+
+  Future<TestAnalysisResult> resolveFile(String path);
+
+  Future<void> resolveTestFile() async {
+    var path = convertPath('/test/lib/test.dart');
+    result = await resolveFile(path);
+    findNode = new FindNode(result.content, result.unit);
+    findElement = new FindElement(result.unit);
+  }
+}
+
+class TestAnalysisResult {
+  final String path;
+  final String content;
+  final CompilationUnit unit;
+  final List<AnalysisError> errors;
+
+  TestAnalysisResult(this.path, this.content, this.unit, this.errors);
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/task_resolution.dart b/pkg/analyzer/test/src/dart/resolution/task_resolution.dart
new file mode 100644
index 0000000..4d8448e
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/task_resolution.dart
@@ -0,0 +1,53 @@
+import 'dart:async';
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/source/package_map_resolver.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+
+import '../../../generated/analysis_context_factory.dart';
+import '../../context/mock_sdk.dart';
+import 'resolution.dart';
+
+/// Task model based implementation of [ResolutionTest].
+class TaskResolutionTest extends Object
+    with ResourceProviderMixin, ResolutionTest {
+  DartSdk sdk;
+
+  SourceFactory sourceFactory;
+  InternalAnalysisContext analysisContext;
+
+  @override
+  Future<TestAnalysisResult> resolveFile(String path) async {
+    var file = resourceProvider.getFile(path);
+    var content = file.readAsStringSync();
+    var source = file.createSource();
+
+    analysisContext.computeKindOf(source);
+    List<Source> libraries = analysisContext.getLibrariesContaining(source);
+    Source library = libraries.first;
+
+    var unit = analysisContext.resolveCompilationUnit2(source, library);
+    var errors = analysisContext.computeErrors(source);
+
+    return new TestAnalysisResult(path, content, unit, errors);
+  }
+
+  void setUp() {
+    sdk = new MockSdk(resourceProvider: resourceProvider);
+
+    Map<String, List<Folder>> packageMap = <String, List<Folder>>{
+      'test': [getFolder('/test/lib')],
+      'aaa': [getFolder('/aaa/lib')],
+      'bbb': [getFolder('/bbb/lib')],
+    };
+
+    analysisContext = AnalysisContextFactory.contextWithCore(
+      contributedResolver:
+          new PackageMapUriResolver(resourceProvider, packageMap),
+      resourceProvider: resourceProvider,
+    );
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
new file mode 100644
index 0000000..6863f71
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -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.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'assignment_test.dart' as assignment_test;
+import 'class_test.dart' as class_test;
+import 'for_in_test.dart' as for_in_test;
+import 'import_prefix_test.dart' as import_prefix_test;
+import 'mixin_test.dart' as mixin_test;
+
+main() {
+  defineReflectiveSuite(() {
+    assignment_test.main();
+    class_test.main();
+    for_in_test.main();
+    import_prefix_test.main();
+    mixin_test.main();
+  }, name: 'resolution');
+}
diff --git a/pkg/analyzer/test/src/dart/sdk/patch_test.dart b/pkg/analyzer/test/src/dart/sdk/patch_test.dart
index e6f1c71..6ffbf04 100644
--- a/pkg/analyzer/test/src/dart/sdk/patch_test.dart
+++ b/pkg/analyzer/test/src/dart/sdk/patch_test.dart
@@ -721,8 +721,8 @@
       };
       File file = provider.newFile(_p('/sdk/lib/test/test.dart'), '');
       Source source = file.createSource(Uri.parse('dart:test'));
-      CompilationUnit unit = SdkPatcher.parse(source, true, listener);
-      patcher.patch(provider, true, patchPaths, listener, source, unit);
+      CompilationUnit unit = SdkPatcher.parse(source, listener);
+      patcher.patch(provider, patchPaths, listener, source, unit);
     }, throwsArgumentError);
   }
 
@@ -756,8 +756,8 @@
     _createSdk();
 
     Source source = file.createSource(Uri.parse('dart:_internal'));
-    CompilationUnit unit = SdkPatcher.parse(source, true, listener);
-    patcher.patch(provider, true, patchPaths, listener, source, unit);
+    CompilationUnit unit = SdkPatcher.parse(source, listener);
+    patcher.patch(provider, patchPaths, listener, source, unit);
     _assertUnitCode(
         unit,
         'library dart._internal; class A {} '
@@ -808,8 +808,8 @@
     {
       Uri uri = Uri.parse('dart:test');
       Source source = fileLib.createSource(uri);
-      CompilationUnit unit = SdkPatcher.parse(source, true, listener);
-      patcher.patch(provider, true, patchPaths, listener, source, unit);
+      CompilationUnit unit = SdkPatcher.parse(source, listener);
+      patcher.patch(provider, patchPaths, listener, source, unit);
       _assertUnitCode(
           unit,
           "library test; part 'test_part.dart'; import 'foo.dart'; "
@@ -819,8 +819,8 @@
     {
       Uri uri = Uri.parse('dart:test/test_part.dart');
       Source source = filePart.createSource(uri);
-      CompilationUnit unit = SdkPatcher.parse(source, true, listener);
-      patcher.patch(provider, true, patchPaths, listener, source, unit);
+      CompilationUnit unit = SdkPatcher.parse(source, listener);
+      patcher.patch(provider, patchPaths, listener, source, unit);
       _assertUnitCode(unit, "part of test; class B {int _b() => 1;}");
     }
   }
@@ -1072,8 +1072,8 @@
     _createSdk();
 
     Source source = file.createSource(Uri.parse('dart:test'));
-    CompilationUnit unit = SdkPatcher.parse(source, true, listener);
-    patcher.patch(provider, true, patchPaths, listener, source, unit);
+    CompilationUnit unit = SdkPatcher.parse(source, listener);
+    patcher.patch(provider, patchPaths, listener, source, unit);
     return unit;
   }
 
diff --git a/pkg/analyzer/test/src/dart/test_all.dart b/pkg/analyzer/test/src/dart/test_all.dart
index 78ac68f..7855e3e 100644
--- a/pkg/analyzer/test/src/dart/test_all.dart
+++ b/pkg/analyzer/test/src/dart/test_all.dart
@@ -10,6 +10,7 @@
 import 'ast/test_all.dart' as ast;
 import 'constant/test_all.dart' as constant;
 import 'element/test_all.dart' as element;
+import 'resolution/test_all.dart' as resolution;
 import 'sdk/test_all.dart' as sdk;
 
 /// Utility for manually running all tests.
@@ -19,6 +20,7 @@
     ast.main();
     constant.main();
     element.main();
+    resolution.main();
     sdk.main();
   }, name: 'dart');
 }
diff --git a/pkg/analyzer/test/src/fasta/body_builder_test_helper.dart b/pkg/analyzer/test/src/fasta/body_builder_test_helper.dart
deleted file mode 100644
index 22a2cc8..0000000
--- a/pkg/analyzer/test/src/fasta/body_builder_test_helper.dart
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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' show File;
-
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type.dart';
-import "package:front_end/src/api_prototype/front_end.dart";
-import "package:front_end/src/api_prototype/memory_file_system.dart";
-import "package:front_end/src/base/processed_options.dart";
-import "package:front_end/src/compute_platform_binaries_location.dart";
-import 'package:front_end/src/fasta/compiler_context.dart';
-import 'package:front_end/src/fasta/dill/dill_target.dart';
-import "package:front_end/src/fasta/fasta_codes.dart";
-import "package:front_end/src/fasta/kernel/kernel_target.dart";
-import 'package:front_end/src/fasta/ticker.dart';
-import 'package:front_end/src/fasta/uri_translator_impl.dart';
-import 'package:kernel/class_hierarchy.dart' as kernel;
-import 'package:kernel/core_types.dart' as kernel;
-import 'package:kernel/kernel.dart' as kernel;
-import 'package:test/test.dart';
-
-Element _buildElement(kernel.Class coreType) {
-  ClassElementImpl element =
-      new ClassElementImpl(coreType.name, coreType.fileOffset);
-  element.typeParameters = coreType.typeParameters.map((parameter) {
-    TypeParameterElementImpl element =
-        new TypeParameterElementImpl(parameter.name, parameter.fileOffset);
-    element.type = new TypeParameterTypeImpl(element);
-    return element;
-  }).toList();
-  return element;
-}
-
-class CompilerTestContext extends CompilerContext {
-  KernelTarget kernelTarget;
-
-  CompilerTestContext(ProcessedOptions options) : super(options);
-
-  Uri get entryPoint => options.inputs.single;
-
-  static Future<T> runWithTestOptions<T>(
-      Future<T> action(CompilerTestContext c)) async {
-    // TODO(danrubel): Consider HybridFileSystem.
-    final MemoryFileSystem fs =
-        new MemoryFileSystem(Uri.parse("org-dartlang-test:///"));
-
-    /// The custom URI used to locate the dill file in the MemoryFileSystem.
-    final Uri sdkSummary = fs.currentDirectory.resolve("vm_platform.dill");
-
-    /// The in memory test code URI
-    final Uri entryPoint = fs.currentDirectory.resolve("main.dart");
-
-    // Read the dill file containing kernel platform summaries into memory.
-    List<int> sdkSummaryBytes = await new File.fromUri(
-            computePlatformBinariesLocation().resolve("vm_platform.dill"))
-        .readAsBytes();
-    fs.entityForUri(sdkSummary).writeAsBytesSync(sdkSummaryBytes);
-
-    final CompilerOptions optionBuilder = new CompilerOptions()
-      ..strongMode = false // TODO(danrubel): enable strong mode.
-      ..reportMessages = true
-      ..verbose = false
-      ..fileSystem = fs
-      ..sdkSummary = sdkSummary
-      ..onProblem = (FormattedMessage problem, Severity severity,
-          List<FormattedMessage> context) {
-        // TODO(danrubel): Capture problems and check against expectations.
-//        print(problem.formatted);
-      };
-
-    final ProcessedOptions options =
-        new ProcessedOptions(optionBuilder, [entryPoint]);
-
-    UriTranslatorImpl uriTranslator = await options.getUriTranslator();
-
-    return await new CompilerTestContext(options)
-        .runInContext<T>((CompilerContext _c) async {
-      CompilerTestContext c = _c;
-      DillTarget dillTarget = new DillTarget(
-          new Ticker(isVerbose: false), uriTranslator, options.target);
-
-      c.kernelTarget = new KernelTarget(fs, true, dillTarget, uriTranslator);
-
-      // Load the dill file containing platform code.
-      dillTarget.loader.read(Uri.parse('dart:core'), -1, fileUri: sdkSummary);
-      kernel.Component sdkComponent =
-          kernel.loadComponentFromBytes(sdkSummaryBytes);
-      dillTarget.loader
-          .appendLibraries(sdkComponent, byteCount: sdkSummaryBytes.length);
-      await dillTarget.buildOutlines();
-      await c.kernelTarget.buildOutlines();
-      c.kernelTarget.computeCoreTypes();
-      assert(c.kernelTarget.loader.coreTypes != null);
-
-      // Initialize the typeProvider if types should be resolved.
-      Map<String, Element> map = <String, Element>{};
-      var coreTypes = c.kernelTarget.loader.coreTypes;
-      for (var coreType in [
-        coreTypes.boolClass,
-        coreTypes.doubleClass,
-        coreTypes.functionClass,
-        coreTypes.futureClass,
-        coreTypes.futureOrClass,
-        coreTypes.intClass,
-        coreTypes.iterableClass,
-        coreTypes.iteratorClass,
-        coreTypes.listClass,
-        coreTypes.mapClass,
-        coreTypes.nullClass,
-        coreTypes.numClass,
-        coreTypes.objectClass,
-        coreTypes.stackTraceClass,
-        coreTypes.streamClass,
-        coreTypes.stringClass,
-        coreTypes.symbolClass,
-        coreTypes.typeClass
-      ]) {
-        map[coreType.name] = _buildElement(coreType);
-      }
-
-      T result;
-      Completer<T> completer = new Completer<T>();
-      // Since we're using `package:test_reflective_loader`, we can't rely on
-      // normal async behavior, as `defineReflectiveSuite` doesn't return a
-      // future. However, since it's built on top of `package:test`, we can
-      // obtain a future that completes when all the tests are done using
-      // `tearDownAll`. This allows this function to complete no earlier than
-      // when the tests are done. This is important, as we don't want to call
-      // `CompilerContext.clear` before then.
-      tearDownAll(() => completer.complete(result));
-      result = await action(c);
-      return completer.future;
-    });
-  }
-
-  static CompilerTestContext get current => CompilerContext.current;
-}
diff --git a/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart b/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
index 9701fbc..bb6f791 100644
--- a/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/code_order_test.dart
@@ -14,6 +14,7 @@
     defineReflectiveTests(CompilationUnitMemberTest);
     defineReflectiveTests(ImportDirectiveTest);
     defineReflectiveTests(MisplacedMetadataTest);
+    defineReflectiveTests(MixinDeclarationTest);
     defineReflectiveTests(TryStatementTest);
   });
 }
@@ -339,6 +340,58 @@
 }
 
 /**
+ * Test how well the parser recovers when the clauses in a mixin declaration are
+ * out of order.
+ */
+@reflectiveTest
+class MixinDeclarationTest extends AbstractRecoveryTest {
+  void test_implementsBeforeOn() {
+    testRecovery('''
+mixin A implements B on C {}
+''', [ParserErrorCode.IMPLEMENTS_BEFORE_ON], '''
+mixin A on C implements B {}
+''');
+  }
+
+  void test_multipleOn() {
+    testRecovery('''
+mixin A on B on C {}
+''', [ParserErrorCode.MULTIPLE_ON_CLAUSES], '''
+mixin A on B, C {}
+''');
+  }
+
+  void test_multipleImplements() {
+    testRecovery('''
+mixin A implements B implements C, D {}
+''', [ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES], '''
+mixin A implements B, C, D {}
+''');
+  }
+
+  @failingTest
+  void test_typing_implements() {
+    testRecovery('''
+mixin Foo imple
+mixin UnrelatedMixin on Bar {}
+''', [ParserErrorCode.MULTIPLE_WITH_CLAUSES], '''
+mixin Foo {}
+mixin UnrelatedMixin on Bar {}
+''');
+  }
+
+  void test_typing_implements_identifier() {
+    testRecovery('''
+mixin Foo implements CurrentlyTypingHere
+mixin UnrelatedMixin on Bar {}
+''', [ParserErrorCode.MISSING_CLASS_BODY], '''
+mixin Foo implements CurrentlyTypingHere {}
+mixin UnrelatedMixin on Bar {}
+''');
+  }
+}
+
+/**
  * Test how well the parser recovers when the clauses in a try statement are
  * out of order.
  */
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
new file mode 100644
index 0000000..c61a1dc
--- /dev/null
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/constructor_test.dart
@@ -0,0 +1,88 @@
+import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+
+import 'partial_code_support.dart';
+
+main() {
+  new ConstructorTest().buildAll();
+}
+
+class ConstructorTest extends PartialCodeTest {
+  buildAll() {
+    buildTests(
+        'constructor',
+        [
+          new TestDescriptor(
+            'colon',
+            'C() :',
+            [
+              ParserErrorCode.MISSING_INITIALIZER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+            failing: ['methodNonVoid', 'getter', 'setter'],
+          ),
+          new TestDescriptor(
+            'colon_block',
+            'C() : {}',
+            [ParserErrorCode.MISSING_INITIALIZER],
+            'C() {}',
+            adjustValidUnitBeforeComparison: setSeparator,
+          ),
+          new TestDescriptor(
+            'colon_semicolon',
+            'C() : ;',
+            [ParserErrorCode.MISSING_INITIALIZER],
+            'C();',
+            adjustValidUnitBeforeComparison: setSeparator,
+          ),
+          new TestDescriptor(
+            'super',
+            'C() : super',
+            [
+              ParserErrorCode.EXPECTED_TOKEN,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : super() {}',
+          ),
+          new TestDescriptor(
+            'super_dot',
+            'C() : super.',
+            [
+              ParserErrorCode.EXPECTED_TOKEN,
+              ParserErrorCode.MISSING_IDENTIFIER,
+              ParserErrorCode.MISSING_FUNCTION_BODY
+            ],
+            'C() : super._s_() {}',
+            failing: ['fieldConst', 'methodNonVoid', 'getter', 'setter'],
+          ),
+          new TestDescriptor(
+            'super_qdot',
+            'C() : super?.',
+            [
+              ParserErrorCode.INVALID_OPERATOR_FOR_SUPER,
+              ParserErrorCode.EXPECTED_TOKEN,
+              ParserErrorCode.MISSING_FUNCTION_BODY,
+            ],
+            'C() : super?._s_() {}',
+            expectedErrorsInValidCode: [
+              ParserErrorCode.INVALID_OPERATOR_FOR_SUPER
+            ],
+            failing: ['methodNonVoid', 'getter', 'setter'],
+          ),
+        ],
+        PartialCodeTest.classMemberSuffixes,
+        head: 'class C {',
+        tail: '}');
+  }
+
+  CompilationUnit setSeparator(CompilationUnit unit) {
+    ClassDeclaration declaration = unit.declarations[0];
+    ConstructorDeclaration member = declaration.members[0];
+    member.separator =
+        new Token(TokenType.COLON, member.parameters.endToken.charOffset + 1);
+    return unit;
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_test.dart
new file mode 100644
index 0000000..e2e5d7b
--- /dev/null
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/mixin_declaration_test.dart
@@ -0,0 +1,102 @@
+// 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.
+
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+
+import 'partial_code_support.dart';
+
+main() {
+  new MixinDeclarationTest().buildAll();
+}
+
+class MixinDeclarationTest extends PartialCodeTest {
+  buildAll() {
+    buildTests(
+        'mixin_declaration',
+        [
+          new TestDescriptor(
+              'keyword',
+              'mixin',
+              [
+                ParserErrorCode.MISSING_IDENTIFIER,
+                ParserErrorCode.MISSING_CLASS_BODY
+              ],
+              'mixin _s_ {}',
+              failing: ['functionNonVoid', 'getter']),
+          new TestDescriptor('named', 'mixin A',
+              [ParserErrorCode.MISSING_CLASS_BODY], 'mixin A {}'),
+          new TestDescriptor(
+              'on',
+              'mixin A on',
+              [
+                ParserErrorCode.EXPECTED_TYPE_NAME,
+                ParserErrorCode.MISSING_CLASS_BODY
+              ],
+              'mixin A on _s_ {}',
+              failing: ['functionVoid', 'functionNonVoid', 'getter']),
+          new TestDescriptor('onBody', 'mixin A on {}',
+              [ParserErrorCode.EXPECTED_TYPE_NAME], 'mixin A on _s_ {}'),
+          new TestDescriptor(
+              'onNameComma',
+              'mixin A on B,',
+              [
+                ParserErrorCode.EXPECTED_TYPE_NAME,
+                ParserErrorCode.MISSING_CLASS_BODY
+              ],
+              'mixin A on B, _s_ {}',
+              failing: ['functionVoid', 'functionNonVoid', 'getter']),
+          new TestDescriptor('onNameCommaBody', 'mixin A on B, {}',
+              [ParserErrorCode.EXPECTED_TYPE_NAME], 'mixin A on B, _s_ {}'),
+          new TestDescriptor(
+              'onImplementsNameBody',
+              'mixin A on implements B {}',
+              [ParserErrorCode.EXPECTED_TYPE_NAME],
+              'mixin A on _s_ implements B {}',
+              allFailing: true),
+          new TestDescriptor(
+              'onNameImplements',
+              'mixin A on B implements',
+              [
+                ParserErrorCode.EXPECTED_TYPE_NAME,
+                ParserErrorCode.MISSING_CLASS_BODY
+              ],
+              'mixin A on B implements _s_ {}',
+              failing: ['functionVoid', 'functionNonVoid', 'getter']),
+          new TestDescriptor(
+              'onNameImplements',
+              'mixin A on B implements {}',
+              [ParserErrorCode.EXPECTED_TYPE_NAME],
+              'mixin A on B implements _s_ {}'),
+          new TestDescriptor(
+              'implements',
+              'mixin A implements',
+              [
+                ParserErrorCode.EXPECTED_TYPE_NAME,
+                ParserErrorCode.MISSING_CLASS_BODY
+              ],
+              'mixin A implements _s_ {}',
+              failing: ['functionVoid', 'functionNonVoid', 'getter']),
+          new TestDescriptor(
+              'implementsBody',
+              'mixin A implements {}',
+              [ParserErrorCode.EXPECTED_TYPE_NAME],
+              'mixin A implements _s_ {}'),
+          new TestDescriptor(
+              'implementsNameComma',
+              'mixin A implements B,',
+              [
+                ParserErrorCode.EXPECTED_TYPE_NAME,
+                ParserErrorCode.MISSING_CLASS_BODY
+              ],
+              'mixin A implements B, _s_ {}',
+              failing: ['functionVoid', 'functionNonVoid', 'getter']),
+          new TestDescriptor(
+              'implementsNameCommaBody',
+              'mixin A implements B, {}',
+              [ParserErrorCode.EXPECTED_TYPE_NAME],
+              'mixin A implements B, _s_ {}'),
+        ],
+        PartialCodeTest.declarationSuffixes);
+  }
+}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
index 676666d..62a722f 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/partial_code_support.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:test/test.dart';
@@ -9,6 +10,8 @@
 import '../../../../generated/test_support.dart';
 import '../recovery_test_support.dart';
 
+typedef CompilationUnit AdjustValidUnitBeforeComparison(CompilationUnit unit);
+
 /**
  * A base class that adds support for tests that test how well the parser
  * recovers when the user has entered an incomplete (but otherwise correct)
@@ -198,6 +201,8 @@
         try {
           testRecovery(
               invalid.toString(), expectedInvalidCodeErrors, valid.toString(),
+              adjustValidUnitBeforeComparison:
+                  descriptor.adjustValidUnitBeforeComparison,
               expectedErrorsInValidCode: expectedValidCodeErrors);
           failed = true;
         } catch (e) {
@@ -209,6 +214,8 @@
       } else {
         testRecovery(
             invalid.toString(), expectedInvalidCodeErrors, valid.toString(),
+            adjustValidUnitBeforeComparison:
+                descriptor.adjustValidUnitBeforeComparison,
             expectedErrorsInValidCode: expectedValidCodeErrors);
       }
     });
@@ -257,10 +264,19 @@
   final List<String> failing;
 
   /**
+   * A function that modifies the valid compilation unit before it is compared
+   * with the invalid compilation unit, or `null` if no modification needed.
+   */
+  AdjustValidUnitBeforeComparison adjustValidUnitBeforeComparison;
+
+  /**
    * Initialize a newly created test descriptor.
    */
   TestDescriptor(this.name, this.invalid, this.errorCodes, this.valid,
-      {this.allFailing: false, this.failing, this.expectedErrorsInValidCode});
+      {this.allFailing: false,
+      this.failing,
+      this.expectedErrorsInValidCode,
+      this.adjustValidUnitBeforeComparison});
 }
 
 /**
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart
index 56d8b47..e5abf74 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/test_all.dart
@@ -8,6 +8,8 @@
 import 'assert_statement_test.dart' as assert_statement;
 import 'break_statement_test.dart' as break_statement;
 import 'class_declaration_test.dart' as class_declaration;
+import 'constructor_test.dart' as constructor;
+import 'mixin_declaration_test.dart' as mixin_declaration;
 import 'continue_statement_test.dart' as continue_statement;
 import 'do_statement_test.dart' as do_statement;
 import 'enum_declaration_test.dart' as enum_declaration;
@@ -38,6 +40,7 @@
     assert_statement.main();
     break_statement.main();
     class_declaration.main();
+    constructor.main();
     continue_statement.main();
     do_statement.main();
     enum_declaration.main();
@@ -51,6 +54,7 @@
     library_directive.main();
     local_variable.main();
     method_declaration.main();
+    mixin_declaration.main();
     parameter.main();
     part_directive.main();
     part_of_directive.main();
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 935abfb..09b1a87 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -173,6 +173,8 @@
 
     if (e.isEnum) {
       buffer.write('enum ');
+    } else if (e.isMixin) {
+      buffer.write('mixin ');
     } else {
       buffer.write('class ');
     }
@@ -189,6 +191,13 @@
       writeType(e.supertype);
     }
 
+    if (e.isMixin) {
+      if (e.superclassConstraints.isEmpty) {
+        throw new StateError('At least Object is expected.');
+      }
+      writeList(' on ', '', e.superclassConstraints, ', ', writeType);
+    }
+
     writeList(' with ', '', e.mixins, ', ', writeType);
     writeList(' implements ', '', e.interfaces, ', ', writeType);
 
@@ -661,13 +670,6 @@
       fail('Unknown parameter kind');
     }
 
-    // Kernel desugars omitted default parameter values to 'null'.
-    // Analyzer does not set initializer at all.
-    // It is not an interesting distinction, so we skip NullLiteral(s).
-    if (defaultValue is NullLiteral) {
-      defaultValue = null;
-    }
-
     writeMetadata(e, '', ' ');
 
     writeIf(e.isCovariant, 'covariant ');
@@ -885,6 +887,7 @@
     e.functionTypeAliases.forEach(writeFunctionTypeAliasElement);
     e.enums.forEach(writeClassElement);
     e.types.forEach(writeClassElement);
+    e.mixins.forEach(writeClassElement);
     e.topLevelVariables.forEach(writePropertyInducingElement);
     e.accessors.forEach(writePropertyAccessorElement);
     e.functions.forEach(writeFunctionElement);
diff --git a/pkg/analyzer/test/src/summary/expr_builder_test.dart b/pkg/analyzer/test/src/summary/expr_builder_test.dart
index b15753d..ef991be 100644
--- a/pkg/analyzer/test/src/summary/expr_builder_test.dart
+++ b/pkg/analyzer/test/src/summary/expr_builder_test.dart
@@ -446,6 +446,48 @@
     checkSimpleExpression('({x}) => 0');
   }
 
+  @failingTest
+  void test_pushLocalFunctionReference_nested() {
+    prepareAnalysisContext(new AnalysisOptionsImpl()..previewDart2 = false);
+    var expr =
+        checkSimpleExpression('(x) => (y) => x + y') as FunctionExpression;
+    var outerFunctionElement = expr.declaredElement;
+    var xElement = outerFunctionElement.parameters[0];
+    var x = expr.parameters.parameters[0];
+    expect(x.declaredElement, same(xElement));
+    var outerBody = expr.body as ExpressionFunctionBody;
+    var outerBodyExpr = outerBody.expression as FunctionExpression;
+    var innerFunctionElement = outerBodyExpr.declaredElement;
+    var yElement = innerFunctionElement.parameters[0];
+    var y = outerBodyExpr.parameters.parameters[0];
+    expect(y.declaredElement, same(yElement));
+    var innerBody = outerBodyExpr.body as ExpressionFunctionBody;
+    var innerBodyExpr = innerBody.expression as BinaryExpression;
+    var xRef = innerBodyExpr.leftOperand as SimpleIdentifier;
+    var yRef = innerBodyExpr.rightOperand as SimpleIdentifier;
+    expect(xRef.staticElement, same(xElement));
+    expect(yRef.staticElement, same(yElement));
+  }
+
+  @failingTest
+  void test_pushLocalFunctionReference_paramReference() {
+    prepareAnalysisContext(new AnalysisOptionsImpl()..previewDart2 = false);
+    var expr = checkSimpleExpression('(x, y) => x + y') as FunctionExpression;
+    var localFunctionElement = expr.declaredElement;
+    var xElement = localFunctionElement.parameters[0];
+    var yElement = localFunctionElement.parameters[1];
+    var x = expr.parameters.parameters[0];
+    var y = expr.parameters.parameters[1];
+    expect(x.declaredElement, same(xElement));
+    expect(y.declaredElement, same(yElement));
+    var body = expr.body as ExpressionFunctionBody;
+    var bodyExpr = body.expression as BinaryExpression;
+    var xRef = bodyExpr.leftOperand as SimpleIdentifier;
+    var yRef = bodyExpr.rightOperand as SimpleIdentifier;
+    expect(xRef.staticElement, same(xElement));
+    expect(yRef.staticElement, same(yElement));
+  }
+
   void test_pushLocalFunctionReference_positionalParam_untyped() {
     checkSimpleExpression('([x]) => 0');
   }
@@ -522,48 +564,4 @@
   void test_typeCheck_negated() {
     checkSimpleExpression('0 is! num', expectedText: '!(0 is num)');
   }
-
-  void xtest_pushLocalFunctionReference_nested() {
-    // TODO(devoncarew): This test fails when run in strong mode.
-    // Failed assertion: line 5116 pos 16:
-    //   'Linker._initializerTypeInferenceCycle == null': is not true.
-    prepareAnalysisContext(new AnalysisOptionsImpl()..previewDart2 = false);
-    var expr =
-        checkSimpleExpression('(x) => (y) => x + y') as FunctionExpression;
-    var outerFunctionElement = expr.declaredElement;
-    var xElement = outerFunctionElement.parameters[0];
-    var x = expr.parameters.parameters[0];
-    expect(x.declaredElement, same(xElement));
-    var outerBody = expr.body as ExpressionFunctionBody;
-    var outerBodyExpr = outerBody.expression as FunctionExpression;
-    var innerFunctionElement = outerBodyExpr.declaredElement;
-    var yElement = innerFunctionElement.parameters[0];
-    var y = outerBodyExpr.parameters.parameters[0];
-    expect(y.declaredElement, same(yElement));
-    var innerBody = outerBodyExpr.body as ExpressionFunctionBody;
-    var innerBodyExpr = innerBody.expression as BinaryExpression;
-    var xRef = innerBodyExpr.leftOperand as SimpleIdentifier;
-    var yRef = innerBodyExpr.rightOperand as SimpleIdentifier;
-    expect(xRef.staticElement, same(xElement));
-    expect(yRef.staticElement, same(yElement));
-  }
-
-  void xtest_pushLocalFunctionReference_paramReference() {
-    // TODO(devoncarew): This test fails when run in strong mode.
-    prepareAnalysisContext(new AnalysisOptionsImpl()..previewDart2 = false);
-    var expr = checkSimpleExpression('(x, y) => x + y') as FunctionExpression;
-    var localFunctionElement = expr.declaredElement;
-    var xElement = localFunctionElement.parameters[0];
-    var yElement = localFunctionElement.parameters[1];
-    var x = expr.parameters.parameters[0];
-    var y = expr.parameters.parameters[1];
-    expect(x.declaredElement, same(xElement));
-    expect(y.declaredElement, same(yElement));
-    var body = expr.body as ExpressionFunctionBody;
-    var bodyExpr = body.expression as BinaryExpression;
-    var xRef = bodyExpr.leftOperand as SimpleIdentifier;
-    var yRef = bodyExpr.rightOperand as SimpleIdentifier;
-    expect(xRef.staticElement, same(xElement));
-    expect(yRef.staticElement, same(yElement));
-  }
 }
diff --git a/pkg/analyzer/test/src/summary/linker_test.dart b/pkg/analyzer/test/src/summary/linker_test.dart
index fe04b53..12b8e8c 100644
--- a/pkg/analyzer/test/src/summary/linker_test.dart
+++ b/pkg/analyzer/test/src/summary/linker_test.dart
@@ -4,13 +4,12 @@
 
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/link.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'summarize_ast_test.dart';
+import 'test_strategies.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -19,87 +18,21 @@
 }
 
 @reflectiveTest
-class LinkerUnitTest extends SummaryLinkerTest {
-  Linker linker;
+class LinkerUnitTest extends SummaryLinkerTestStrategyTwoPhase
+    with LinkerUnitTestCases {}
 
-  LinkerInputs linkerInputs;
-  LibraryElementInBuildUnit _testLibrary;
-  @override
-  bool get allowMissingFiles => false;
-
+/// Test cases that exercise the summary linker in a white-box fashion.
+///
+/// These test cases may be mixed into any class derived from
+/// [SummaryLinkerTestStrategy], allowing the linker to be unit-tested in a
+/// variety of ways.
+abstract class LinkerUnitTestCases implements SummaryLinkerTestStrategy {
   Matcher get isUndefined => const TypeMatcher<UndefinedElementForLink>();
 
-  LibraryElementInBuildUnit get testLibrary => _testLibrary ??=
-      linker.getLibrary(linkerInputs.testDartUri) as LibraryElementInBuildUnit;
-
-  void createLinker(String text, {String path: '/test.dart'}) {
-    linkerInputs = createLinkerInputs(text, path: path);
-    Map<String, LinkedLibraryBuilder> linkedLibraries = setupForLink(
-        linkerInputs.linkedLibraries,
-        linkerInputs.getUnit,
-        linkerInputs.getDeclaredVariable);
-    linker = new Linker(linkedLibraries, linkerInputs.getDependency,
-        linkerInputs.getUnit, true);
-  }
-
   LibraryElementForLink getLibrary(String uri) {
     return linker.getLibrary(Uri.parse(uri));
   }
 
-  void test_apiSignature_apiChanges() {
-    var bundle0 =
-        createPackageBundle('f(int i) { print(i); }', path: '/test.dart');
-    var bundle1 =
-        createPackageBundle('f(String s) { print(s); }', path: '/test.dart');
-    expect(bundle0.apiSignature, isNotEmpty);
-    expect(bundle1.apiSignature, isNotEmpty);
-    expect(bundle0.apiSignature, isNot(bundle1.apiSignature));
-  }
-
-  void test_apiSignature_localChanges() {
-    var bundle0 = createPackageBundle('f() { print(0); }', path: '/test.dart');
-    var bundle1 = createPackageBundle('f() { print(1); }', path: '/test.dart');
-    expect(bundle0.apiSignature, isNotEmpty);
-    expect(bundle1.apiSignature, isNotEmpty);
-    expect(bundle0.apiSignature, bundle1.apiSignature);
-  }
-
-  void test_apiSignature_orderChange() {
-    // A change to the order in which files are processed should not affect the
-    // API signature.
-    addNamedSource('/a.dart', 'class A {}');
-    var bundle0 = createPackageBundle('class B {}', path: '/b.dart');
-    addNamedSource('/b.dart', 'class B {}');
-    var bundle1 = createPackageBundle('class A {}', path: '/a.dart');
-    expect(bundle0.apiSignature, isNotEmpty);
-    expect(bundle1.apiSignature, isNotEmpty);
-    expect(bundle0.apiSignature, bundle1.apiSignature);
-  }
-
-  void test_apiSignature_unlinkedOnly() {
-    // The API signature of a package bundle should only contain unlinked
-    // information.  In this test, the linked information for bundle2 and
-    // bundle3 refer to class C as existing in different files.  But the
-    // unlinked information for bundle2 and bundle3 should be the same, so their
-    // API signatures should be the same.
-    addNamedSource('/a.dart', 'class C {}');
-    var bundle0 = createPackageBundle('', path: '/b.dart');
-    addNamedSource('/a.dart', '');
-    var bundle1 = createPackageBundle('class C {}', path: '/b.dart');
-    var text = '''
-import 'a.dart';
-import 'b.dart';
-class D extends C {}
-''';
-    addBundle('/bundle0.ds', bundle0);
-    var bundle2 = createPackageBundle(text, path: '/c.dart');
-    addBundle('/bundle1.ds', bundle1);
-    var bundle3 = createPackageBundle(text, path: '/c.dart');
-    expect(bundle2.apiSignature, isNotEmpty);
-    expect(bundle3.apiSignature, isNotEmpty);
-    expect(bundle2.apiSignature, bundle3.apiSignature);
-  }
-
   void test_baseClass_genericWithAccessor() {
     createLinker('''
 class B<T> {
@@ -109,7 +42,7 @@
   var j;
 }
     ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -123,7 +56,7 @@
   void f() {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -137,7 +70,7 @@
   void f(g) {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -151,7 +84,7 @@
   var j;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -166,7 +99,7 @@
   Future<T> f() => null;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -180,7 +113,7 @@
   void f() {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
   }
 
@@ -193,7 +126,7 @@
   var c;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -213,7 +146,7 @@
 import "b.dart";
 var z = y;
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('z')).inferredType.toString(),
         'int');
   }
@@ -291,7 +224,7 @@
   F<int> f;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
 
     ClassElementForLink_Class B = library.getContainedName('B');
@@ -302,28 +235,28 @@
 
   void test_getContainedName_nonStaticField() {
     createLinker('class C { var f; }');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     ClassElementForLink_Class c = library.getContainedName('C');
     expect(c.getContainedName('f'), isNot(isUndefined));
   }
 
   void test_getContainedName_nonStaticGetter() {
     createLinker('class C { get g => null; }');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     ClassElementForLink_Class c = library.getContainedName('C');
     expect(c.getContainedName('g'), isNot(isUndefined));
   }
 
   void test_getContainedName_nonStaticMethod() {
     createLinker('class C { m() {} }');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     ClassElementForLink_Class c = library.getContainedName('C');
     expect(c.getContainedName('m'), isNot(isUndefined));
   }
 
   void test_getContainedName_nonStaticSetter() {
     createLinker('class C { void set s(value) {} }');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     ClassElementForLink_Class c = library.getContainedName('C');
     expect(c.getContainedName('s='), isNot(isUndefined));
   }
@@ -337,7 +270,7 @@
 import 'a.dart';
 var y = x;
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('y')).inferredType.toString(),
         '() → Null');
   }
@@ -357,7 +290,7 @@
 import 'a.dart';
 var y = C.x;
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('y')).inferredType.toString(),
         '(D) → E');
   }
@@ -378,7 +311,7 @@
   void foo(bar) {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('C');
     expect(cls.methods, hasLength(1));
@@ -394,7 +327,7 @@
   final f = true ? <T>(T t) => 0 : <T>(T t) => 1;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('C');
     expect(cls.fields, hasLength(1));
@@ -409,7 +342,7 @@
   var f = x; // Inferred type: dynamic
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('C');
     expect(cls.fields, hasLength(1));
@@ -426,7 +359,7 @@
   f(x) {} // Inferred param type: dynamic
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('C');
     expect(cls.methods, hasLength(1));
@@ -444,7 +377,7 @@
   void m(p) {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('B');
     expect(cls.methods, hasLength(1));
@@ -463,7 +396,7 @@
   f() {} // Inferred return type: dynamic
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('C');
     expect(cls.methods, hasLength(1));
@@ -479,7 +412,7 @@
   f() {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('C');
     expect(cls.methods, hasLength(1));
@@ -499,7 +432,7 @@
   map<R2>(f) => null;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class c = library.getContainedName('C');
     expect(c.methods, hasLength(1));
@@ -524,7 +457,7 @@
   map<R2>(fs) => null;
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class c = library.getContainedName('C');
     expect(c.methods, hasLength(1));
@@ -546,7 +479,7 @@
 ''');
     expect(
         _getVariable(linker
-                .getLibrary(linkerInputs.testDartUri)
+                .getLibrary(testDartUri)
                 .getContainedName('C')
                 .getContainedName('y'))
             .inferredType
@@ -560,9 +493,7 @@
 var y = x;
 ''');
     expect(
-        _getVariable(linker
-                .getLibrary(linkerInputs.testDartUri)
-                .getContainedName('y'))
+        _getVariable(linker.getLibrary(testDartUri).getContainedName('y'))
             .inferredType
             .toString(),
         'dynamic');
@@ -578,7 +509,7 @@
 import 'a.dart';
 var z = y; // Inferred type: dynamic
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('z')).inferredType.toString(),
         'dynamic');
   }
@@ -594,7 +525,7 @@
 import 'a.dart';
 var x = new C().f; // Inferred type: int
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('x')).inferredType.toString(),
         'int');
   }
@@ -612,7 +543,7 @@
   var g = new C().f; // Inferred type: int
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     ClassElementForLink_Class classD = library.getContainedName('D');
     expect(classD.fields[0].inferredType.toString(), 'int');
   }
@@ -633,7 +564,7 @@
   f(i) {} // Inferred param type: int
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('D');
     expect(cls.methods, hasLength(1));
@@ -656,7 +587,7 @@
 import 'a.dart';
 var x = new C().f(); // Inferred type: int
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     expect(_getVariable(library.getContainedName('x')).inferredType.toString(),
         'int');
   }
@@ -677,7 +608,7 @@
   f() => 2; //Inferred return type: int
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     ClassElementForLink_Class cls = library.getContainedName('D');
     expect(cls.methods, hasLength(1));
@@ -690,9 +621,7 @@
     addBundle('/a.ds', bundle);
     createLinker('import "a.dart"; var x = C.f;', path: '/b.dart');
     expect(
-        _getVariable(linker
-                .getLibrary(linkerInputs.testDartUri)
-                .getContainedName('x'))
+        _getVariable(linker.getLibrary(testDartUri).getContainedName('x'))
             .inferredType
             .toString(),
         'int');
@@ -703,9 +632,7 @@
     addBundle('/a.ds', bundle);
     createLinker('import "a.dart"; var b = a;', path: '/b.dart');
     expect(
-        _getVariable(linker
-                .getLibrary(linkerInputs.testDartUri)
-                .getContainedName('b'))
+        _getVariable(linker.getLibrary(testDartUri).getContainedName('b'))
             .inferredType
             .toString(),
         'int');
@@ -732,7 +659,7 @@
   void foo(X2 x) {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
 
     ClassElementForLink_Class C = library.getContainedName('C');
@@ -748,7 +675,7 @@
 class D<T extends num> {}
 final x = new C<D>();
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     PropertyAccessorElementForLink_Variable x = library.getContainedName('x');
     ParameterizedType type1 = x.returnType;
@@ -766,7 +693,7 @@
 class C<T extends num> {}
 final x = new C();
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     PropertyAccessorElementForLink_Variable x = library.getContainedName('x');
     ParameterizedType type1 = x.returnType;
@@ -781,7 +708,7 @@
 typedef T F<T extends num>();
 final x = new List<F>();
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     PropertyAccessorElementForLink_Variable x = library.getContainedName('x');
     ParameterizedType type1 = x.returnType;
@@ -801,7 +728,7 @@
   'f': f
 };
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -903,7 +830,7 @@
   void f() {}
 }
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     library.libraryCycleForLink.ensureLinked();
     // No assertions--just make sure it doesn't crash.
   }
@@ -938,21 +865,21 @@
 
   void test_topLevelFunction_isStatic() {
     createLinker('f() {}');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     TopLevelFunctionElementForLink f = library.getContainedName('f');
     expect(f.isStatic, true);
   }
 
   void test_topLevelGetter_isStatic() {
     createLinker('get x => null;');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     PropertyAccessorElementForLink_Executable x = library.getContainedName('x');
     expect(x.isStatic, true);
   }
 
   void test_topLevelSetter_isStatic() {
     createLinker('void set x(value) {}');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     PropertyAccessorElementForLink_Executable x =
         library.getContainedName('x=');
     expect(x.isStatic, true);
@@ -960,7 +887,7 @@
 
   void test_topLevelVariable_isStatic() {
     createLinker('var x;');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     PropertyAccessorElementForLink_Variable x = library.getContainedName('x');
     expect(x.isStatic, true);
     expect(x.variable.isStatic, true);
@@ -1019,7 +946,7 @@
 int j;
 var v = 0;
 ''');
-    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    LibraryElementForLink library = linker.getLibrary(testDartUri);
     PropertyAccessorElementForLink_Variable c = library.getContainedName('c');
     expect(c.variable.initializer, isNotNull);
     PropertyAccessorElementForLink_Variable i = library.getContainedName('i');
diff --git a/pkg/analyzer/test/src/summary/prelinker_test.dart b/pkg/analyzer/test/src/summary/prelinker_test.dart
index abc11be..6ac254a 100644
--- a/pkg/analyzer/test/src/summary/prelinker_test.dart
+++ b/pkg/analyzer/test/src/summary/prelinker_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:analyzer/src/summary/idl.dart';
-import 'package:analyzer/src/summary/prelink.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'summarize_ast_test.dart';
 import 'summary_common.dart';
+import 'test_strategies.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -15,34 +13,11 @@
   });
 }
 
-/**
- * Override of [SummaryTest] which verifies the correctness of the prelinker by
- * creating summaries from the element model, discarding their prelinked
- * information, and then recreating it using the prelinker.
- */
+/// Tests for the pre-linker which exercise it using the old (two-phase) summary
+/// generation strategy.
+///
+/// TODO(paulberry): eliminate these tests once we have transitioned over to
+/// one-step summary generation.
 @reflectiveTest
-class PrelinkerTest extends LinkedSummarizeAstTest {
-  @override
-  bool get skipFullyLinkedData => true;
-
-  @override
-  void serializeLibraryText(String text, {bool allowErrors: false}) {
-    super.serializeLibraryText(text, allowErrors: allowErrors);
-
-    UnlinkedUnit getPart(String absoluteUri) {
-      return linkerInputs.getUnit(absoluteUri);
-    }
-
-    UnlinkedPublicNamespace getImport(String absoluteUri) {
-      return getPart(absoluteUri)?.publicNamespace;
-    }
-
-    linked = new LinkedLibrary.fromBuffer(prelink(
-        linkerInputs.testDartUri.toString(),
-        linkerInputs.unlinkedDefiningUnit,
-        getPart,
-        getImport,
-        (String declaredVariable) => null).toBuffer());
-    validateLinkedLibrary(linked);
-  }
-}
+class PrelinkerTest extends SummaryBlackBoxTestStrategyPrelink
+    with SummaryTestCases {}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
index 43cccd7..c103ef5 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
@@ -28,7 +28,7 @@
 import '../context/abstract_context.dart';
 import 'element_text.dart';
 import 'resynthesize_common.dart';
-import 'summary_common.dart';
+import 'test_strategies.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -94,7 +94,7 @@
         .toSet();
 
     Map<String, LinkedLibrary> linkedSummaries = link(nonSdkLibraryUris,
-        getDependency, getUnit, context.declaredVariables.get, true);
+        getDependency, getUnit, context.declaredVariables.get);
 
     return new TestSummaryResynthesizer(
         context,
@@ -259,7 +259,9 @@
   @override
   AnalysisOptionsImpl createOptions() {
     if (isStrongMode) {
-      return super.createOptions()..previewDart2 = true;
+      return super.createOptions()
+        ..previewDart2 = true
+        ..isMixinSupportEnabled = true;
     } else {
       return super.createOptions()..previewDart2 = false;
     }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 50151bf..ccf3ed2 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -285,12 +285,22 @@
     expect(resynthesized.source, original.source);
     expect(resynthesized.librarySource, original.librarySource);
     compareLineInfo(resynthesized.lineInfo, original.lineInfo);
+
     expect(resynthesized.types.length, original.types.length,
         reason: '$desc.types.length');
     for (int i = 0; i < resynthesized.types.length; i++) {
       compareClassElements(
           resynthesized.types[i], original.types[i], original.types[i].name);
     }
+
+    // TODO(scheglov) Uncomment once the tasks based implementation is ready.
+//    expect(resynthesized.mixins.length, original.mixins.length,
+//        reason: '$desc.mixins.length');
+//    for (int i = 0; i < resynthesized.mixins.length; i++) {
+//      compareClassElements(
+//          resynthesized.mixins[i], original.mixins[i], original.mixins[i].name);
+//    }
+
     expect(resynthesized.topLevelVariables.length,
         original.topLevelVariables.length,
         reason: '$desc.topLevelVariables.length');
@@ -8991,7 +9001,7 @@
 class C {
   dynamic x;
   C([@
-        a/*location: test.dart;a?*/ dynamic this.x]);
+        a/*location: test.dart;a?*/ dynamic this.x = null]);
 }
 const dynamic a = null;
 ''');
@@ -9064,7 +9074,7 @@
     checkElementText(library, r'''
 const dynamic a = null;
 dynamic f([@
-        a/*location: test.dart;a?*/ () → dynamic g]) {}
+        a/*location: test.dart;a?*/ () → dynamic g = null]) {}
 ''');
   }
 
@@ -9222,7 +9232,7 @@
     checkElementText(library, r'''
 const dynamic a = null;
 dynamic f([@
-        a/*location: test.dart;a?*/ dynamic x]) {}
+        a/*location: test.dart;a?*/ dynamic x = null]) {}
 ''');
   }
 
@@ -9415,6 +9425,48 @@
     }
   }
 
+  test_mixin() async {
+    var library = await checkLibrary(r'''
+class A {}
+class B {}
+class C {}
+class D {}
+
+mixin M<T extends num, U> on A, B implements C, D {
+  T f;
+  U get g => 0;
+  set s(int v) {}
+  int m(double v) => 0;
+}
+''');
+    checkElementText(library, r'''
+class A {
+}
+class B {
+}
+class C {
+}
+class D {
+}
+mixin M<T extends num, U> on A, B implements C, D {
+  T f;
+  U get g {}
+  void set s(int v) {}
+  int m(double v) {}
+}
+''');
+  }
+
+  test_mixin_implicitObjectSuperclassConstraint() async {
+    var library = await checkLibrary(r'''
+mixin M {}
+''');
+    checkElementText(library, r'''
+mixin M on Object {
+}
+''');
+  }
+
   test_nameConflict_exportedAndLocal() async {
     namesThatCannotBeResolved.add('V');
     addLibrarySource('/a.dart', 'class C {}');
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
deleted file mode 100644
index 4e30ddc..0000000
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library analyzer.test.src.summary.resynthesize_kernel_test;
-
-import 'dart:async';
-import 'dart:typed_data';
-
-import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/dart/analysis/frontend_resolution.dart';
-import 'package:analyzer/src/dart/analysis/kernel_context.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/kernel/resynthesize.dart';
-import 'package:front_end/src/api_prototype/byte_store.dart';
-import 'package:front_end/src/base/performance_logger.dart';
-import 'package:test/src/frontend/expect.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import '../context/mock_sdk.dart';
-import 'element_text.dart';
-import 'resynthesize_common.dart';
-
-main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ResynthesizeTest_Kernel);
-  });
-}
-
-/// Tests marked with this annotation fail because they test features that
-/// were implemented in Analyzer, but are intentionally not included into
-/// the Dart 2.0 plan, so will not be implemented by Fasta.
-const notForDart2 = const Object();
-
-/// Tests marked with this annotation fail because of a Fasta problem.
-class FastaProblem {
-  const FastaProblem(String issueUri);
-}
-
-@reflectiveTest
-class ResynthesizeTest_Kernel extends ResynthesizeTest {
-  final resourceProvider = new MemoryResourceProvider();
-
-  @override
-  bool get isSharedFrontEnd => true;
-
-  @override
-  bool get isStrongMode => true;
-
-  @override
-  Source addLibrarySource(String path, String content) {
-    path = resourceProvider.convertPath(path);
-    File file = resourceProvider.newFile(path, content);
-    return file.createSource();
-  }
-
-  @override
-  Source addSource(String path, String content) {
-    path = resourceProvider.convertPath(path);
-    File file = resourceProvider.newFile(path, content);
-    return file.createSource();
-  }
-
-  @override
-  Future<LibraryElementImpl> checkLibrary(String text,
-      {bool allowErrors: false, bool dumpSummaries: false}) async {
-    new MockSdk(resourceProvider: resourceProvider);
-
-    String testPath = resourceProvider.convertPath('/test.dart');
-    File testFile = resourceProvider.newFile(testPath, text);
-    Uri testUri = testFile.toUri();
-    String testUriStr = testUri.toString();
-
-    KernelResynthesizer resynthesizer = await _createResynthesizer(testUri);
-    return resynthesizer.getLibrary(testUriStr);
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30857')
-  test_class_constructor_field_formal_multiple_matching_fields() async {
-    await super.test_class_constructor_field_formal_multiple_matching_fields();
-  }
-
-  @override
-  test_class_setter_invalid_named_parameter() async {
-    var library = await checkLibrary('class C { void set x({a}) {} }');
-    checkElementText(library, r'''
-class C {
-  void set x(dynamic #synthetic) {}
-}
-''');
-  }
-
-  @override
-  test_class_setter_invalid_no_parameter() async {
-    var library = await checkLibrary('class C { void set x() {} }');
-    checkElementText(library, r'''
-class C {
-  void set x(dynamic #synthetic) {}
-}
-''');
-  }
-
-  @override
-  test_class_setter_invalid_optional_parameter() async {
-    var library = await checkLibrary('class C { void set x([a]) {} }');
-    checkElementText(library, r'''
-class C {
-  void set x(dynamic #synthetic) {}
-}
-''');
-  }
-
-  @override
-  test_class_setter_invalid_too_many_parameters() async {
-    var library = await checkLibrary('class C { void set x(a, b) {} }');
-    checkElementText(library, r'''
-class C {
-  void set x(dynamic #synthetic) {}
-}
-''');
-  }
-
-  @failingTest // See dartbug.com/32290
-  test_const_constructor_inferred_args() =>
-      super.test_const_constructor_inferred_args();
-
-  @failingTest
-  @notForDart2
-  test_export_configurations_useFirst() async {
-    await super.test_export_configurations_useFirst();
-  }
-
-  @failingTest
-  @notForDart2
-  test_export_configurations_useSecond() async {
-    await super.test_export_configurations_useSecond();
-  }
-
-  @failingTest
-  @notForDart2
-  test_exportImport_configurations_useFirst() async {
-    await super.test_exportImport_configurations_useFirst();
-  }
-
-  test_getElement_unit() async {
-    String text = 'class C {}';
-    Source source = addLibrarySource('/test.dart', text);
-
-    new MockSdk(resourceProvider: resourceProvider);
-    var resynthesizer = await _createResynthesizer(source.uri);
-
-    CompilationUnitElement unitElement = resynthesizer.getElement(
-        new ElementLocationImpl.con3(
-            [source.uri.toString(), source.uri.toString()]));
-    expect(unitElement.librarySource, source);
-    expect(unitElement.source, source);
-
-    // TODO(scheglov) Add some more checks?
-    // TODO(scheglov) Add tests for other elements
-  }
-
-  @failingTest
-  @notForDart2
-  test_import_configurations_useFirst() async {
-    await super.test_import_configurations_useFirst();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30725')
-  test_import_invalidUri_metadata() async {
-    await super.test_import_invalidUri_metadata();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30267')
-  test_invalid_nameConflict_imported() async {
-    await super.test_invalid_nameConflict_imported();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30267')
-  test_invalid_nameConflict_imported_exported() async {
-    await super.test_invalid_nameConflict_imported_exported();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30267')
-  test_invalid_nameConflict_local() async {
-    await super.test_invalid_nameConflict_local();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30725')
-  test_invalidUri_part_emptyUri() async {
-    await super.test_invalidUri_part_emptyUri();
-  }
-
-  @failingTest
-  test_invalidUris() async {
-    await super.test_invalidUris();
-  }
-
-  @failingTest
-  test_metadata_enumConstantDeclaration() async {
-    await super.test_metadata_enumConstantDeclaration();
-  }
-
-  @failingTest
-  @notForDart2
-  test_parameter_checked_inherited() async {
-    // @checked is deprecated, use `covariant` instead.
-    await super.test_parameter_checked_inherited();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_parts_invalidUri() async {
-    await super.test_parts_invalidUri();
-  }
-
-  @failingTest
-  test_setter_inferred_type_conflictingInheritance() async {
-    await super.test_setter_inferred_type_conflictingInheritance();
-  }
-
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30267')
-  test_unresolved_annotation_instanceCreation_argument_super() async {
-    await super.test_unresolved_annotation_instanceCreation_argument_super();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_unresolved_export() async {
-    await super.test_unresolved_export();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_unresolved_import() async {
-    await super.test_unresolved_import();
-  }
-
-  @override
-  @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/33719')
-  test_unresolved_part() async {
-    await super.test_unresolved_part();
-  }
-
-  Future<KernelResynthesizer> _createResynthesizer(Uri testUri) async {
-    var logger = new PerformanceLog(null);
-    var byteStore = new MemoryByteStore();
-    var analysisOptions = new AnalysisOptionsImpl();
-
-    var fsState = new FileSystemState(
-        logger,
-        byteStore,
-        new FileContentOverlay(),
-        resourceProvider,
-        sourceFactory,
-        analysisOptions,
-        new Uint32List(0));
-
-    var compiler = new FrontEndCompiler(
-        logger,
-        new MemoryByteStore(),
-        analysisOptions,
-        null,
-        sourceFactory,
-        fsState,
-        resourceProvider.pathContext);
-
-    LibraryCompilationResult libraryResult = await compiler.compile(testUri);
-
-    return KernelContext.buildResynthesizer(fsState, libraryResult, context);
-  }
-}
diff --git a/pkg/analyzer/test/src/summary/summarize_ast_one_phase_test.dart b/pkg/analyzer/test/src/summary/summarize_ast_one_phase_test.dart
new file mode 100644
index 0000000..10863d3
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/summarize_ast_one_phase_test.dart
@@ -0,0 +1,108 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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 'summary_common.dart';
+import 'test_strategies.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(SummarizeAstOnePhaseTest);
+  });
+}
+
+@reflectiveTest
+class SummarizeAstOnePhaseTest extends SummaryBlackBoxTestStrategyOnePhase
+    with SummaryTestCases {
+  @override
+  @failingTest
+  test_bottom_reference_shared() {
+    super.test_bottom_reference_shared();
+  }
+
+  @override
+  @failingTest
+  test_closure_executable_with_imported_return_type() {
+    super.test_closure_executable_with_imported_return_type();
+  }
+
+  @override
+  @failingTest
+  test_closure_executable_with_return_type_from_closure() {
+    super.test_closure_executable_with_return_type_from_closure();
+  }
+
+  @override
+  @failingTest
+  test_closure_executable_with_unimported_return_type() {
+    super.test_closure_executable_with_unimported_return_type();
+  }
+
+  @override
+  @failingTest
+  test_implicit_dependencies_follow_other_dependencies() {
+    super.test_implicit_dependencies_follow_other_dependencies();
+  }
+
+  @override
+  @failingTest
+  test_inferred_type_refers_to_function_typed_param_of_typedef() {
+    super.test_inferred_type_refers_to_function_typed_param_of_typedef();
+  }
+
+  @override
+  @failingTest
+  test_inferred_type_refers_to_nested_function_typed_param() {
+    super.test_inferred_type_refers_to_nested_function_typed_param();
+  }
+
+  @override
+  @failingTest
+  test_inferred_type_refers_to_nested_function_typed_param_named() {
+    super.test_inferred_type_refers_to_nested_function_typed_param_named();
+  }
+
+  @override
+  @failingTest
+  test_initializer_executable_with_bottom_return_type() {
+    super.test_initializer_executable_with_bottom_return_type();
+  }
+
+  @override
+  @failingTest
+  test_initializer_executable_with_imported_return_type() {
+    super.test_initializer_executable_with_imported_return_type();
+  }
+
+  @override
+  @failingTest
+  test_initializer_executable_with_return_type_from_closure() {
+    super.test_initializer_executable_with_return_type_from_closure();
+  }
+
+  @override
+  @failingTest
+  test_initializer_executable_with_return_type_from_closure_field() {
+    super.test_initializer_executable_with_return_type_from_closure_field();
+  }
+
+  @override
+  @failingTest
+  test_initializer_executable_with_unimported_return_type() {
+    super.test_initializer_executable_with_unimported_return_type();
+  }
+
+  @override
+  @failingTest
+  test_syntheticFunctionType_genericClosure() {
+    super.test_syntheticFunctionType_genericClosure();
+  }
+
+  @override
+  @failingTest
+  test_syntheticFunctionType_inGenericClass() {
+    super.test_syntheticFunctionType_inGenericClass();
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart b/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart
index a6f9de1..6c2d84c 100644
--- a/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart
+++ b/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart
@@ -4,7 +4,8 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'summarize_ast_test.dart';
+import 'summary_common.dart';
+import 'test_strategies.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -12,11 +13,9 @@
   });
 }
 
-/**
- * Override of [LinkedSummarizeAstTest] which uses strong mode.
- */
 @reflectiveTest
-class LinkedSummarizeAstStrongTest extends LinkedSummarizeAstTest {
+class LinkedSummarizeAstStrongTest extends SummaryBlackBoxTestStrategyTwoPhase
+    with SummaryTestCases {
   @override
   @failingTest
   test_bottom_reference_shared() {
diff --git a/pkg/analyzer/test/src/summary/summarize_ast_test.dart b/pkg/analyzer/test/src/summary/summarize_ast_test.dart
deleted file mode 100644
index 9cdd293..0000000
--- a/pkg/analyzer/test/src/summary/summarize_ast_test.dart
+++ /dev/null
@@ -1,254 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for 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:analyzer/analyzer.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/scanner/reader.dart';
-import 'package:analyzer/src/dart/scanner/scanner.dart';
-import 'package:analyzer/src/generated/parser.dart';
-import 'package:analyzer/src/generated/source.dart';
-import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary/idl.dart';
-import 'package:analyzer/src/summary/link.dart';
-import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:analyzer/src/summary/summarize_ast.dart';
-import 'package:analyzer/src/summary/summarize_elements.dart';
-import 'package:test/test.dart';
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'summary_common.dart';
-
-main() {}
-
-/**
- * Override of [SummaryTest] which creates linked summaries directly from the
- * AST.
- */
-@reflectiveTest
-abstract class LinkedSummarizeAstTest extends SummaryLinkerTest
-    with SummaryTest {
-  @override
-  LinkedLibrary linked;
-
-  @override
-  List<UnlinkedUnit> unlinkedUnits;
-
-  LinkerInputs linkerInputs;
-
-  @override
-  bool get skipFullyLinkedData => false;
-
-  @override
-  void serializeLibraryText(String text, {bool allowErrors: false}) {
-    Map<String, UnlinkedUnitBuilder> uriToUnit = this._filesToLink.uriToUnit;
-    linkerInputs = createLinkerInputs(text);
-    linked = link(
-        linkerInputs.linkedLibraries,
-        linkerInputs.getDependency,
-        linkerInputs.getUnit,
-        (name) => null,
-        true)[linkerInputs.testDartUri.toString()];
-    expect(linked, isNotNull);
-    validateLinkedLibrary(linked);
-    unlinkedUnits = <UnlinkedUnit>[linkerInputs.unlinkedDefiningUnit];
-    for (String relativeUriStr
-        in linkerInputs.unlinkedDefiningUnit.publicNamespace.parts) {
-      Uri relativeUri;
-      try {
-        relativeUri = Uri.parse(relativeUriStr);
-      } on FormatException {
-        unlinkedUnits.add(new UnlinkedUnitBuilder());
-        continue;
-      }
-
-      UnlinkedUnit unit = uriToUnit[
-          resolveRelativeUri(linkerInputs.testDartUri, relativeUri).toString()];
-      if (unit == null) {
-        if (!allowMissingFiles) {
-          fail('Test referred to unknown unit $relativeUriStr');
-        }
-      } else {
-        unlinkedUnits.add(unit);
-      }
-    }
-  }
-
-  test_class_no_superclass() {
-    UnlinkedClass cls = serializeClassText('part of dart.core; class Object {}',
-        className: 'Object');
-    expect(cls.supertype, isNull);
-    expect(cls.hasNoSupertype, isTrue);
-  }
-}
-
-/**
- * Instances of the class [LinkerInputs] encapsulate the necessary information
- * to pass to the summary linker.
- */
-class LinkerInputs {
-  final bool _allowMissingFiles;
-  final Map<String, UnlinkedUnit> _uriToUnit;
-  final Uri testDartUri;
-  final UnlinkedUnit unlinkedDefiningUnit;
-  final Map<String, LinkedLibrary> _dependentLinkedLibraries;
-  final Map<String, UnlinkedUnit> _dependentUnlinkedUnits;
-
-  LinkerInputs(
-      this._allowMissingFiles,
-      this._uriToUnit,
-      this.testDartUri,
-      this.unlinkedDefiningUnit,
-      this._dependentLinkedLibraries,
-      this._dependentUnlinkedUnits);
-
-  Set<String> get linkedLibraries => _uriToUnit.keys.toSet();
-
-  String getDeclaredVariable(String name) {
-    return null;
-  }
-
-  LinkedLibrary getDependency(String absoluteUri) {
-    Map<String, LinkedLibrary> sdkLibraries =
-        SerializedMockSdk.instance.uriToLinkedLibrary;
-    LinkedLibrary linkedLibrary =
-        sdkLibraries[absoluteUri] ?? _dependentLinkedLibraries[absoluteUri];
-    if (linkedLibrary == null && !_allowMissingFiles) {
-      Set<String> librariesAvailable = sdkLibraries.keys.toSet();
-      librariesAvailable.addAll(_dependentLinkedLibraries.keys);
-      fail('Linker unexpectedly requested LinkedLibrary for "$absoluteUri".'
-          '  Libraries available: ${librariesAvailable.toList()}');
-    }
-    return linkedLibrary;
-  }
-
-  UnlinkedUnit getUnit(String absoluteUri) {
-    if (absoluteUri == null) {
-      return null;
-    }
-    UnlinkedUnit unit = _uriToUnit[absoluteUri] ??
-        SerializedMockSdk.instance.uriToUnlinkedUnit[absoluteUri] ??
-        _dependentUnlinkedUnits[absoluteUri];
-    if (unit == null && !_allowMissingFiles) {
-      fail('Linker unexpectedly requested unit for "$absoluteUri".');
-    }
-    return unit;
-  }
-}
-
-/**
- * Base class providing the ability to run the summary linker using summaries
- * build from ASTs.
- */
-abstract class SummaryLinkerTest {
-  /**
-   * Information about the files to be linked.
-   */
-  _FilesToLink _filesToLink = new _FilesToLink();
-
-  /**
-   * A test will set this to `true` if it contains `import`, `export`, or
-   * `part` declarations that deliberately refer to non-existent files.
-   */
-  bool get allowMissingFiles;
-
-  /**
-   * Add the given package bundle as a dependency so that it may be referenced
-   * by the files under test.
-   */
-  void addBundle(String path, PackageBundle bundle) {
-    _filesToLink.summaryDataStore.addBundle(path, bundle);
-  }
-
-  /**
-   * Add the given source file so that it may be referenced by the file under
-   * test.
-   */
-  Source addNamedSource(String filePath, String contents) {
-    CompilationUnit unit = _parseText(contents);
-    UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
-    _filesToLink.uriToUnit[absUri(filePath)] = unlinkedUnit;
-    // Tests using SummaryLinkerTest don't actually need the returned
-    // Source, so we can safely return `null`.
-    return null;
-  }
-
-  LinkerInputs createLinkerInputs(String text,
-      {String path: '/test.dart', String uri}) {
-    uri ??= absUri(path);
-    Uri testDartUri = Uri.parse(uri);
-    UnlinkedUnitBuilder unlinkedDefiningUnit =
-        createUnlinkedSummary(testDartUri, text);
-    _filesToLink.uriToUnit[testDartUri.toString()] = unlinkedDefiningUnit;
-    LinkerInputs linkerInputs = new LinkerInputs(
-        allowMissingFiles,
-        _filesToLink.uriToUnit,
-        testDartUri,
-        unlinkedDefiningUnit,
-        _filesToLink.summaryDataStore.linkedMap,
-        _filesToLink.summaryDataStore.unlinkedMap);
-    // Reset _filesToLink in case the test needs to start a new package bundle.
-    _filesToLink = new _FilesToLink();
-    return linkerInputs;
-  }
-
-  /**
-   * Link together the given file, along with any other files passed to
-   * [addNamedSource], to form a package bundle.  Reset the state of the buffers
-   * accumulated by [addNamedSource] and [addBundle] so that further bundles
-   * can be created.
-   */
-  PackageBundleBuilder createPackageBundle(String text,
-      {String path: '/test.dart', String uri}) {
-    PackageBundleAssembler assembler = new PackageBundleAssembler();
-    LinkerInputs linkerInputs = createLinkerInputs(text, path: path, uri: uri);
-    Map<String, LinkedLibraryBuilder> linkedLibraries = link(
-        linkerInputs.linkedLibraries,
-        linkerInputs.getDependency,
-        linkerInputs.getUnit,
-        linkerInputs.getDeclaredVariable,
-        true);
-    linkedLibraries.forEach(assembler.addLinkedLibrary);
-    linkerInputs._uriToUnit.forEach((String uri, UnlinkedUnit unit) {
-      // Note: it doesn't matter what we store for the hash because it isn't
-      // used in these tests.
-      assembler.addUnlinkedUnitWithHash(uri, unit, 'HASH');
-    });
-    return assembler.assemble();
-  }
-
-  UnlinkedUnitBuilder createUnlinkedSummary(Uri uri, String text) =>
-      serializeAstUnlinked(_parseText(text));
-
-  CompilationUnit _parseText(String text) {
-    CharSequenceReader reader = new CharSequenceReader(text);
-    Scanner scanner =
-        new Scanner(null, reader, AnalysisErrorListener.NULL_LISTENER);
-    Token token = scanner.tokenize();
-    Parser parser = new Parser(
-        NonExistingSource.unknown, AnalysisErrorListener.NULL_LISTENER);
-    CompilationUnit unit = parser.parseCompilationUnit(token);
-    unit.lineInfo = new LineInfo(scanner.lineStarts);
-    return unit;
-  }
-}
-
-/**
- * [_FilesToLink] stores information about a set of files to be linked together.
- * This information is grouped into a class to allow it to be reset easily when
- * [SummaryLinkerTest.createLinkerInputs] is called.
- */
-class _FilesToLink {
-  /**
-   * Map from absolute URI to the [UnlinkedUnit] for each compilation unit
-   * passed to [addNamedSource].
-   */
-  Map<String, UnlinkedUnitBuilder> uriToUnit = <String, UnlinkedUnitBuilder>{};
-
-  /**
-   * Information about summaries to be included in the link process.
-   */
-  SummaryDataStore summaryDataStore = new SummaryDataStore([]);
-}
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index 980639d..22eb0d3 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -14,18 +14,9 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/public_namespace_computer.dart'
     as public_namespace;
-import 'package:path/path.dart' show posix;
 import 'package:test/test.dart';
 
-import '../context/mock_sdk.dart';
-
-/**
- * Convert the given Posix style file [path] to the corresponding absolute URI.
- */
-String absUri(String path) {
-  String absolutePath = posix.absolute(path);
-  return posix.toUri(absolutePath).toString();
-}
+import 'test_strategies.dart';
 
 /**
  * Convert a summary object (or a portion of one) into a canonical form that
@@ -83,85 +74,18 @@
  */
 typedef void _EntityRefValidator(EntityRef entityRef);
 
-/**
- * [SerializedMockSdk] is a singleton class representing the result of
- * serializing the mock SDK to summaries.  It is computed once and then shared
- * among test invocations so that we don't bog down the tests.
- *
- * Note: should an exception occur during computation of [instance], it will
- * silently be set to null to allow other tests to complete quickly.
- */
-class SerializedMockSdk {
-  static final SerializedMockSdk instance = _serializeMockSdk();
-
-  final Map<String, UnlinkedUnit> uriToUnlinkedUnit;
-
-  final Map<String, LinkedLibrary> uriToLinkedLibrary;
-  SerializedMockSdk._(this.uriToUnlinkedUnit, this.uriToLinkedLibrary);
-
-  static SerializedMockSdk _serializeMockSdk() {
-    try {
-      Map<String, UnlinkedUnit> uriToUnlinkedUnit = <String, UnlinkedUnit>{};
-      Map<String, LinkedLibrary> uriToLinkedLibrary = <String, LinkedLibrary>{};
-      PackageBundle bundle = new MockSdk().getLinkedBundle();
-      for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) {
-        String uri = bundle.unlinkedUnitUris[i];
-        uriToUnlinkedUnit[uri] = bundle.unlinkedUnits[i];
-      }
-      for (int i = 0; i < bundle.linkedLibraryUris.length; i++) {
-        String uri = bundle.linkedLibraryUris[i];
-        uriToLinkedLibrary[uri] = bundle.linkedLibraries[i];
-      }
-      return new SerializedMockSdk._(uriToUnlinkedUnit, uriToLinkedLibrary);
-    } catch (_) {
-      return null;
-    }
-  }
-}
-
-/**
- * Base class containing most summary tests.  This allows summary tests to be
- * re-used to exercise all the different ways in which summaries can be
- * generated (e.g. direct from the AST, from the element model, from a
- * "relinking" process, etc.)
- */
-abstract class SummaryTest {
-  /**
-   * A test will set this to `true` if it contains `import`, `export`, or
-   * `part` declarations that deliberately refer to non-existent files.
-   */
-  bool allowMissingFiles = false;
-
+/// Test cases that exercise summary generation in a black-box fashion.
+///
+/// These test cases may be mixed into any class derived from
+/// [SummaryBlackBoxTestStrategy], allowing summary generation to be unit-tested
+/// in a variety of ways.
+abstract class SummaryTestCases implements SummaryBlackBoxTestStrategy {
   /**
    * Get access to the linked defining compilation unit.
    */
   LinkedUnit get definingUnit => linked.units[0];
 
   /**
-   * Get access to the linked summary that results from serializing and
-   * then deserializing the library under test.
-   */
-  LinkedLibrary get linked;
-
-  /**
-   * `true` if the linked portion of the summary only contains prelinked data.
-   * This happens because we don't yet have a full linker; only a prelinker.
-   */
-  bool get skipFullyLinkedData;
-
-  /**
-   * Get access to the unlinked compilation unit summaries that result from
-   * serializing and deserializing the library under test.
-   */
-  List<UnlinkedUnit> get unlinkedUnits;
-
-  /**
-   * Add the given source file so that it may be referenced by the file under
-   * test.
-   */
-  Source addNamedSource(String filePath, String contents);
-
-  /**
    * TODO(scheglov) rename "Const" to "Expr" everywhere
    */
   void assertUnlinkedConst(UnlinkedExpr constExpr,
@@ -691,6 +615,26 @@
   }
 
   /**
+   * Find the mixin with the given [name] in the summary, and return its
+   * [UnlinkedClass] data structure.
+   */
+  UnlinkedClass findMixin(String name) {
+    UnlinkedClass result;
+    for (UnlinkedClass mixin in unlinkedUnits[0].mixins) {
+      if (mixin.name == name) {
+        if (result != null) {
+          fail('Duplicate mixin $name');
+        }
+        result = mixin;
+      }
+    }
+    if (result == null) {
+      fail('Mixin $name not found in serialized output.');
+    }
+    return result;
+  }
+
+  /**
    * Find the parameter with the given [name] in [parameters].
    */
   UnlinkedParam findParameter(List<UnlinkedParam> parameters, String name) {
@@ -798,12 +742,6 @@
   }
 
   /**
-   * Serialize the given library [text], then deserialize it and store its
-   * summary in [lib].
-   */
-  void serializeLibraryText(String text, {bool allowErrors: false});
-
-  /**
    * Serialize the given method [text] and return the summary of the executable
    * with the given [executableName].
    */
@@ -816,6 +754,16 @@
   }
 
   /**
+   * Serialize the given library [text] and return the summary of the mixin
+   * with the given [name].
+   */
+  UnlinkedClass serializeMixinText(String text,
+      {String name: 'M', bool allowErrors: false}) {
+    serializeLibraryText(text, allowErrors: allowErrors);
+    return findMixin(name);
+  }
+
+  /**
    * Serialize the given library [text] and return the summary of the typedef
    * with the given [typedefName].
    */
@@ -1389,6 +1337,13 @@
     expect(cls.mixins, isEmpty);
   }
 
+  test_class_no_superclass() {
+    UnlinkedClass cls = serializeClassText('part of dart.core; class Object {}',
+        className: 'Object');
+    expect(cls.supertype, isNull);
+    expect(cls.hasNoSupertype, isTrue);
+  }
+
   test_class_no_type_param() {
     UnlinkedClass cls = serializeClassText('class C {}');
     expect(cls.typeParameters, isEmpty);
@@ -8623,6 +8578,11 @@
             .annotations);
   }
 
+  test_metadata_mixinDeclaration() {
+    checkAnnotationA(
+        serializeMixinText('const a = null; @a mixin M {}').annotations);
+  }
+
   test_metadata_multiple_annotations() {
     UnlinkedClass cls =
         serializeClassText('const a = null, b = null; @a @b class C {}');
@@ -8797,6 +8757,119 @@
     expect(f.inferredReturnTypeSlot, 0);
   }
 
+  test_mixin() {
+    UnlinkedClass mixin = serializeMixinText('mixin M {}');
+    expect(mixin.name, 'M');
+    expect(mixin.nameOffset, 6);
+
+    expect(mixin.executables, isEmpty);
+    expect(mixin.interfaces, isEmpty);
+    expect(mixin.mixins, isEmpty);
+    expect(mixin.superclassConstraints, isEmpty);
+  }
+
+  test_mixin_codeRange() {
+    UnlinkedClass mixin = serializeMixinText(' mixin M {}');
+    _assertCodeRange(mixin.codeRange, 1, 10);
+  }
+
+  test_mixin_documented() {
+    String text = '''
+// Extra comment so doc comment offset != 0
+/**
+ * Docs
+ */
+mixin M {}''';
+    UnlinkedClass mixin = serializeMixinText(text);
+    expect(mixin.documentationComment, isNotNull);
+    checkDocumentationComment(mixin.documentationComment, text);
+  }
+
+  test_mixin_documented_tripleSlash() {
+    String text = '''
+/// aaa
+/// bbbb
+/// cc
+mixin M {}''';
+    UnlinkedClass mixin = serializeMixinText(text);
+    UnlinkedDocumentationComment comment = mixin.documentationComment;
+    expect(comment, isNotNull);
+    expect(comment.text, '/// aaa\n/// bbbb\n/// cc');
+  }
+
+  test_mixin_executables() {
+    UnlinkedClass mixin = serializeMixinText(r'''
+mixin M {
+  double f;
+  int get g => 0;
+  set s(int v) {}
+  int m(int v) => 0;
+}
+''');
+    expect(mixin.fields, hasLength(1));
+    expect(mixin.fields[0].name, 'f');
+    checkTypeRef(mixin.fields[0].type, 'dart:core', 'double');
+
+    expect(mixin.executables, hasLength(3));
+
+    expect(mixin.executables[0].name, 'g');
+    expect(mixin.executables[0].kind, UnlinkedExecutableKind.getter);
+    checkTypeRef(mixin.executables[0].returnType, 'dart:core', 'int');
+
+    expect(mixin.executables[1].name, 's=');
+    expect(mixin.executables[1].kind, UnlinkedExecutableKind.setter);
+
+    expect(mixin.executables[2].name, 'm');
+    expect(mixin.executables[2].kind, UnlinkedExecutableKind.functionOrMethod);
+    checkTypeRef(mixin.executables[2].returnType, 'dart:core', 'int');
+  }
+
+  test_mixin_implements() {
+    UnlinkedClass mixin = serializeMixinText(r'''
+class A {}
+class B {}
+mixin M implements A, B {}
+''');
+    expect(mixin.executables, isEmpty);
+    expect(mixin.mixins, isEmpty);
+    expect(mixin.superclassConstraints, isEmpty);
+
+    expect(mixin.interfaces, hasLength(2));
+    checkTypeRef(mixin.interfaces[0], null, 'A');
+    checkTypeRef(mixin.interfaces[1], null, 'B');
+  }
+
+  test_mixin_superclassConstraints() {
+    UnlinkedClass mixin = serializeMixinText(r'''
+class A {}
+class B {}
+class C {}
+class D {}
+mixin M on A, B implements C, D {}
+''');
+    expect(mixin.executables, isEmpty);
+    expect(mixin.mixins, isEmpty);
+
+    expect(mixin.superclassConstraints, hasLength(2));
+    checkTypeRef(mixin.superclassConstraints[0], null, 'A');
+    checkTypeRef(mixin.superclassConstraints[1], null, 'B');
+
+    expect(mixin.interfaces, hasLength(2));
+    checkTypeRef(mixin.interfaces[0], null, 'C');
+    checkTypeRef(mixin.interfaces[1], null, 'D');
+  }
+
+  test_mixin_typeParameters() {
+    UnlinkedClass mixin = serializeMixinText('mixin M<T extends num, U> {}');
+    expect(mixin.typeParameters, hasLength(2));
+
+    expect(mixin.typeParameters[0].name, 'T');
+    checkTypeRef(mixin.typeParameters[0].bound, 'dart:core', 'num');
+
+    expect(mixin.typeParameters[1].name, 'U');
+    expect(mixin.typeParameters[1].bound, isNull);
+  }
+
   test_nested_generic_functions() {
     UnlinkedExecutable executable = serializeVariableText('''
 var v = (() {
@@ -9831,42 +9904,6 @@
   }
 
   /**
-   * Verify invariants of the given [linkedLibrary].
-   */
-  void validateLinkedLibrary(LinkedLibrary linkedLibrary) {
-    for (LinkedUnit unit in linkedLibrary.units) {
-      for (LinkedReference reference in unit.references) {
-        switch (reference.kind) {
-          case ReferenceKind.classOrEnum:
-          case ReferenceKind.topLevelPropertyAccessor:
-          case ReferenceKind.topLevelFunction:
-          case ReferenceKind.typedef:
-            // This reference can have either a zero or a nonzero dependency,
-            // since it refers to top level element which might or might not be
-            // imported from another library.
-            break;
-          case ReferenceKind.prefix:
-            // Prefixes should have a dependency of 0, since they come from the
-            // current library.
-            expect(reference.dependency, 0,
-                reason: 'Nonzero dependency for prefix');
-            break;
-          case ReferenceKind.unresolved:
-            // Unresolved references always have a dependency of 0.
-            expect(reference.dependency, 0,
-                reason: 'Nonzero dependency for undefined');
-            break;
-          default:
-            // This reference should have a dependency of 0, since it refers to
-            // an element that is contained within some other element.
-            expect(reference.dependency, 0,
-                reason: 'Nonzero dependency for ${reference.kind}');
-        }
-      }
-    }
-  }
-
-  /**
    * Assert that serializing the given [expr] of form `(a op= 1 + 2) + 3`
    * uses the given [expectedAssignOperator].
    */
diff --git a/pkg/analyzer/test/src/summary/test_all.dart b/pkg/analyzer/test/src/summary/test_all.dart
index d064155..fd2f7a4 100644
--- a/pkg/analyzer/test/src/summary/test_all.dart
+++ b/pkg/analyzer/test/src/summary/test_all.dart
@@ -11,9 +11,8 @@
 import 'package_bundle_reader_test.dart' as package_bundle_reader_test;
 import 'prelinker_test.dart' as prelinker_test;
 import 'resynthesize_ast_test.dart' as resynthesize_ast_test;
-import 'resynthesize_kernel_test.dart' as resynthesize_kernel_test;
+import 'summarize_ast_one_phase_test.dart' as summarize_ast_one_phase_test;
 import 'summarize_ast_strong_test.dart' as summarize_ast_strong_test;
-import 'summarize_ast_test.dart' as summarize_ast_test;
 import 'top_level_inference_test.dart' as top_level_inference_test;
 
 main() {
@@ -25,9 +24,8 @@
     package_bundle_reader_test.main();
     prelinker_test.main();
     resynthesize_ast_test.main();
-    resynthesize_kernel_test.main();
+    summarize_ast_one_phase_test.main();
     summarize_ast_strong_test.main();
-    summarize_ast_test.main();
     top_level_inference_test.main();
   }, name: 'summary');
 }
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
new file mode 100644
index 0000000..b12f5da
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -0,0 +1,565 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/scanner/reader.dart';
+import 'package:analyzer/src/dart/scanner/scanner.dart';
+import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/summary/format.dart';
+import 'package:analyzer/src/summary/idl.dart';
+import 'package:analyzer/src/summary/link.dart';
+import 'package:analyzer/src/summary/one_phase.dart';
+import 'package:analyzer/src/summary/package_bundle_reader.dart';
+import 'package:analyzer/src/summary/prelink.dart';
+import 'package:analyzer/src/summary/summarize_ast.dart';
+import 'package:analyzer/src/summary/summarize_elements.dart';
+import 'package:path/path.dart' show posix;
+import 'package:test/test.dart';
+
+import '../context/mock_sdk.dart';
+
+/**
+ * Convert the given Posix style file [path] to the corresponding absolute URI.
+ */
+String absUri(String path) {
+  String absolutePath = posix.absolute(path);
+  return posix.toUri(absolutePath).toString();
+}
+
+CompilationUnit _parseText(String text) {
+  CharSequenceReader reader = new CharSequenceReader(text);
+  Scanner scanner =
+      new Scanner(null, reader, AnalysisErrorListener.NULL_LISTENER);
+  Token token = scanner.tokenize();
+  Parser parser = new Parser(
+      NonExistingSource.unknown, AnalysisErrorListener.NULL_LISTENER);
+  (parser as ParserAdapter).fastaParser.isMixinSupportEnabled = true;
+  CompilationUnit unit = parser.parseCompilationUnit(token);
+  unit.lineInfo = new LineInfo(scanner.lineStarts);
+  return unit;
+}
+
+/**
+ * Verify invariants of the given [linkedLibrary].
+ */
+void _validateLinkedLibrary(LinkedLibrary linkedLibrary) {
+  for (LinkedUnit unit in linkedLibrary.units) {
+    for (LinkedReference reference in unit.references) {
+      switch (reference.kind) {
+        case ReferenceKind.classOrEnum:
+        case ReferenceKind.topLevelPropertyAccessor:
+        case ReferenceKind.topLevelFunction:
+        case ReferenceKind.typedef:
+          // This reference can have either a zero or a nonzero dependency,
+          // since it refers to top level element which might or might not be
+          // imported from another library.
+          break;
+        case ReferenceKind.prefix:
+          // Prefixes should have a dependency of 0, since they come from the
+          // current library.
+          expect(reference.dependency, 0,
+              reason: 'Nonzero dependency for prefix');
+          break;
+        case ReferenceKind.unresolved:
+          // Unresolved references always have a dependency of 0.
+          expect(reference.dependency, 0,
+              reason: 'Nonzero dependency for undefined');
+          break;
+        default:
+          // This reference should have a dependency of 0, since it refers to
+          // an element that is contained within some other element.
+          expect(reference.dependency, 0,
+              reason: 'Nonzero dependency for ${reference.kind}');
+      }
+    }
+  }
+}
+
+/**
+ * [SerializedMockSdk] is a singleton class representing the result of
+ * serializing the mock SDK to summaries.  It is computed once and then shared
+ * among test invocations so that we don't bog down the tests.
+ *
+ * Note: should an exception occur during computation of [instance], it will
+ * silently be set to null to allow other tests to complete quickly.
+ */
+class SerializedMockSdk {
+  static final SerializedMockSdk instance = _serializeMockSdk();
+
+  final Map<String, UnlinkedUnit> uriToUnlinkedUnit;
+
+  final Map<String, LinkedLibrary> uriToLinkedLibrary;
+  SerializedMockSdk._(this.uriToUnlinkedUnit, this.uriToLinkedLibrary);
+
+  static SerializedMockSdk _serializeMockSdk() {
+    try {
+      Map<String, UnlinkedUnit> uriToUnlinkedUnit = <String, UnlinkedUnit>{};
+      Map<String, LinkedLibrary> uriToLinkedLibrary = <String, LinkedLibrary>{};
+      PackageBundle bundle = new MockSdk().getLinkedBundle();
+      for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) {
+        String uri = bundle.unlinkedUnitUris[i];
+        uriToUnlinkedUnit[uri] = bundle.unlinkedUnits[i];
+      }
+      for (int i = 0; i < bundle.linkedLibraryUris.length; i++) {
+        String uri = bundle.linkedLibraryUris[i];
+        uriToLinkedLibrary[uri] = bundle.linkedLibraries[i];
+      }
+      return new SerializedMockSdk._(uriToUnlinkedUnit, uriToLinkedLibrary);
+    } catch (_) {
+      return null;
+    }
+  }
+}
+
+/// Abstract base class for tests involving summaries.
+///
+/// Test classes should not extend this class directly; they should extend a
+/// class that implements this class with methods that drive summary generation.
+/// The tests themselves can then be provided via mixin, allowing summaries to
+/// be tested in a variety of ways.
+abstract class SummaryBaseTestStrategy {
+  /**
+   * Add the given source file so that it may be referenced by the file under
+   * test.
+   */
+  void addNamedSource(String filePath, String contents);
+}
+
+/// Abstract base class for black-box tests of summaries.
+///
+/// Test classes should not extend this class directly; they should extend a
+/// class that implements this class with methods that drive summary generation.
+/// The tests themselves can then be provided via mixin, allowing summaries to
+/// be tested in a variety of ways.
+abstract class SummaryBlackBoxTestStrategy extends SummaryBaseTestStrategy {
+  /**
+   * A test will set this to `true` if it contains `import`, `export`, or
+   * `part` declarations that deliberately refer to non-existent files.
+   */
+  void set allowMissingFiles(bool value);
+
+  /**
+   * Get access to the linked summary that results from serializing and
+   * then deserializing the library under test.
+   */
+  LinkedLibrary get linked;
+
+  /**
+   * `true` if the linked portion of the summary only contains prelinked data.
+   * This happens because we don't yet have a full linker; only a prelinker.
+   */
+  bool get skipFullyLinkedData;
+
+  /**
+   * Get access to the unlinked compilation unit summaries that result from
+   * serializing and deserializing the library under test.
+   */
+  List<UnlinkedUnit> get unlinkedUnits;
+
+  /**
+   * Serialize the given library [text], then deserialize it and store its
+   * summary in [lib].
+   */
+  void serializeLibraryText(String text, {bool allowErrors: false});
+}
+
+/// Implementation of [SummaryBlackBoxTestStrategy] that drives summary
+/// generation using the new one-phase API.
+class SummaryBlackBoxTestStrategyOnePhase
+    implements SummaryBlackBoxTestStrategy {
+  /// Information about the files to be summarized.
+  final _filesToSummarize = _FilesToLink<CompilationUnit>();
+
+  final _testUriString = absUri('/test.dart');
+
+  bool _allowMissingFiles = false;
+
+  @override
+  LinkedLibrary linked;
+
+  @override
+  List<UnlinkedUnit> unlinkedUnits;
+
+  SummaryBlackBoxTestStrategyOnePhase() {
+    // TODO(paulberry): cache the bundle?
+    _filesToSummarize.summaryDataStore
+        .addBundle(null, new MockSdk().getLinkedBundle());
+  }
+
+  @override
+  void set allowMissingFiles(bool value) {
+    _allowMissingFiles = value;
+  }
+
+  @override
+  bool get skipFullyLinkedData => false;
+
+  @override
+  void addNamedSource(String filePath, String contents) {
+    _filesToSummarize.uriToUnit[absUri(filePath)] = _parseText(contents);
+  }
+
+  @override
+  void serializeLibraryText(String text, {bool allowErrors = false}) {
+    addNamedSource('/test.dart', text);
+    var assembler = PackageBundleAssembler();
+    summarize(_filesToSummarize.uriToUnit, _filesToSummarize.summaryDataStore,
+        assembler, (name) => null, _allowMissingFiles);
+    var result = assembler.assemble();
+    linked = _findLinkedLibrary(result, _testUriString);
+    unlinkedUnits =
+        _findUnlinkedUnits(result, _testUriString, _allowMissingFiles);
+  }
+
+  static LinkedLibrary _findLinkedLibrary(
+      PackageBundle bundle, String uriString) {
+    for (int i = 0; i < bundle.linkedLibraryUris.length; i++) {
+      if (bundle.linkedLibraryUris[i] == uriString) {
+        return bundle.linkedLibraries[i];
+      }
+    }
+    throw new StateError('LinkedLibrary $uriString not found in bundle');
+  }
+
+  static List<UnlinkedUnit> _findUnlinkedUnits(
+      PackageBundle bundle, String uriString, bool allowMissingFiles) {
+    var uriToUnlinkedUnit = <String, UnlinkedUnit>{};
+    for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) {
+      uriToUnlinkedUnit[bundle.unlinkedUnitUris[i]] = bundle.unlinkedUnits[i];
+    }
+    var unlinkedDefiningUnit = uriToUnlinkedUnit[uriString];
+    var unlinkedUnits = <UnlinkedUnit>[unlinkedDefiningUnit];
+    var definingUnitUri = Uri.parse(uriString);
+    for (String relativeUriStr in unlinkedDefiningUnit.publicNamespace.parts) {
+      Uri relativeUri;
+      try {
+        relativeUri = Uri.parse(relativeUriStr);
+      } on FormatException {
+        unlinkedUnits.add(new UnlinkedUnitBuilder());
+        continue;
+      }
+
+      UnlinkedUnit unit = uriToUnlinkedUnit[
+          resolveRelativeUri(definingUnitUri, relativeUri).toString()];
+      if (unit == null) {
+        if (!allowMissingFiles) {
+          fail('Test referred to unknown unit $relativeUriStr');
+        }
+      } else {
+        unlinkedUnits.add(unit);
+      }
+    }
+    return unlinkedUnits;
+  }
+}
+
+/// Implementation of [SummaryBlackBoxTestStrategy] that drives summary
+/// generation using the old two-phase API, and exercises the pre-linker only.
+class SummaryBlackBoxTestStrategyPrelink
+    extends _SummaryBlackBoxTestStrategyTwoPhase
+    implements SummaryBlackBoxTestStrategy {
+  @override
+  bool get skipFullyLinkedData => true;
+
+  @override
+  void serializeLibraryText(String text, {bool allowErrors: false}) {
+    super.serializeLibraryText(text, allowErrors: allowErrors);
+
+    UnlinkedUnit getPart(String absoluteUri) {
+      return _linkerInputs.getUnit(absoluteUri);
+    }
+
+    UnlinkedPublicNamespace getImport(String absoluteUri) {
+      return getPart(absoluteUri)?.publicNamespace;
+    }
+
+    linked = new LinkedLibrary.fromBuffer(prelink(
+        _linkerInputs._testDartUri.toString(),
+        _linkerInputs._unlinkedDefiningUnit,
+        getPart,
+        getImport,
+        (String declaredVariable) => null).toBuffer());
+    _validateLinkedLibrary(linked);
+  }
+}
+
+/// Implementation of [SummaryBlackBoxTestStrategy] that drives summary
+/// generation using the old two-phase API, and exercises full summary
+/// generation.
+class SummaryBlackBoxTestStrategyTwoPhase
+    extends _SummaryBlackBoxTestStrategyTwoPhase
+    implements SummaryBlackBoxTestStrategy {
+  @override
+  bool get skipFullyLinkedData => false;
+}
+
+/// Abstract base class for unit tests of the summary linker.
+///
+/// Test classes should not extend this class directly; they should extend a
+/// class that implements this class with methods that drive summary generation.
+/// The tests themselves can then be provided via mixin, allowing summaries to
+/// be tested in a variety of ways.
+abstract class SummaryLinkerTestStrategy extends SummaryBaseTestStrategy {
+  Linker get linker;
+
+  /// Gets the URI of the main library under test.
+  ///
+  /// May only be called after [createLinker].
+  Uri get testDartUri;
+
+  LibraryElementInBuildUnit get testLibrary;
+
+  /**
+   * Add the given package bundle as a dependency so that it may be referenced
+   * by the files under test.
+   */
+  void addBundle(String path, PackageBundle bundle);
+
+  void createLinker(String text, {String path: '/test.dart'});
+
+  /**
+   * Link together the given file, along with any other files passed to
+   * [addNamedSource], to form a package bundle.  Reset the state of the buffers
+   * accumulated by [addNamedSource] and [addBundle] so that further bundles
+   * can be created.
+   */
+  PackageBundleBuilder createPackageBundle(String text,
+      {String path: '/test.dart', String uri});
+}
+
+/// Implementation of [SummaryLinkerTestStrategy] that drives summary generation
+/// using the old two-phase API.
+class SummaryLinkerTestStrategyTwoPhase extends _SummaryBaseTestStrategyTwoPhase
+    implements SummaryLinkerTestStrategy {
+  LibraryElementInBuildUnit _testLibrary;
+
+  @override
+  Linker linker;
+
+  @override
+  Uri get testDartUri => _linkerInputs._testDartUri;
+
+  @override
+  LibraryElementInBuildUnit get testLibrary =>
+      _testLibrary ??= linker.getLibrary(_linkerInputs._testDartUri)
+          as LibraryElementInBuildUnit;
+
+  @override
+  bool get _allowMissingFiles => false;
+
+  @override
+  void addBundle(String path, PackageBundle bundle) {
+    _filesToLink.summaryDataStore.addBundle(path, bundle);
+  }
+
+  @override
+  void createLinker(String text, {String path: '/test.dart'}) {
+    _linkerInputs = _createLinkerInputs(text, path: path);
+    Map<String, LinkedLibraryBuilder> linkedLibraries = setupForLink(
+        _linkerInputs.linkedLibraries,
+        _linkerInputs.getUnit,
+        _linkerInputs.getDeclaredVariable);
+    linker = new Linker(
+        linkedLibraries, _linkerInputs.getDependency, _linkerInputs.getUnit);
+  }
+
+  @override
+  PackageBundleBuilder createPackageBundle(String text,
+      {String path: '/test.dart', String uri}) {
+    PackageBundleAssembler assembler = new PackageBundleAssembler();
+    _LinkerInputs linkerInputs =
+        _createLinkerInputs(text, path: path, uri: uri);
+    Map<String, LinkedLibraryBuilder> linkedLibraries = link(
+        linkerInputs.linkedLibraries,
+        linkerInputs.getDependency,
+        linkerInputs.getUnit,
+        linkerInputs.getDeclaredVariable);
+    linkedLibraries.forEach(assembler.addLinkedLibrary);
+    linkerInputs._uriToUnit.forEach((String uri, UnlinkedUnit unit) {
+      assembler.addUnlinkedUnitViaUri(uri, unit);
+    });
+    return assembler.assemble();
+  }
+}
+
+/**
+ * [_FilesToLink] stores information about a set of files to be linked together.
+ * This information is grouped into a class to allow it to be reset easily when
+ * [_SummaryBaseTestStrategyTwoPhase._createLinkerInputs] is called.
+ *
+ * The generic parameter [U] is the type of information stored for each
+ * compilation unit.
+ */
+class _FilesToLink<U> {
+  /**
+   * Map from absolute URI to the [U] for each compilation unit passed to
+   * [addNamedSource].
+   */
+  Map<String, U> uriToUnit = <String, U>{};
+
+  /**
+   * Information about summaries to be included in the link process.
+   */
+  SummaryDataStore summaryDataStore = new SummaryDataStore([]);
+}
+
+/**
+ * Instances of the class [_LinkerInputs] encapsulate the necessary information
+ * to pass to the summary linker.
+ */
+class _LinkerInputs {
+  final bool _allowMissingFiles;
+  final Map<String, UnlinkedUnit> _uriToUnit;
+  final Uri _testDartUri;
+  final UnlinkedUnit _unlinkedDefiningUnit;
+  final Map<String, LinkedLibrary> _dependentLinkedLibraries;
+  final Map<String, UnlinkedUnit> _dependentUnlinkedUnits;
+
+  _LinkerInputs(
+      this._allowMissingFiles,
+      this._uriToUnit,
+      this._testDartUri,
+      this._unlinkedDefiningUnit,
+      this._dependentLinkedLibraries,
+      this._dependentUnlinkedUnits);
+
+  Set<String> get linkedLibraries => _uriToUnit.keys.toSet();
+
+  String getDeclaredVariable(String name) {
+    return null;
+  }
+
+  LinkedLibrary getDependency(String absoluteUri) {
+    Map<String, LinkedLibrary> sdkLibraries =
+        SerializedMockSdk.instance.uriToLinkedLibrary;
+    LinkedLibrary linkedLibrary =
+        sdkLibraries[absoluteUri] ?? _dependentLinkedLibraries[absoluteUri];
+    if (linkedLibrary == null && !_allowMissingFiles) {
+      Set<String> librariesAvailable = sdkLibraries.keys.toSet();
+      librariesAvailable.addAll(_dependentLinkedLibraries.keys);
+      fail('Linker unexpectedly requested LinkedLibrary for "$absoluteUri".'
+          '  Libraries available: ${librariesAvailable.toList()}');
+    }
+    return linkedLibrary;
+  }
+
+  UnlinkedUnit getUnit(String absoluteUri) {
+    if (absoluteUri == null) {
+      return null;
+    }
+    UnlinkedUnit unit = _uriToUnit[absoluteUri] ??
+        SerializedMockSdk.instance.uriToUnlinkedUnit[absoluteUri] ??
+        _dependentUnlinkedUnits[absoluteUri];
+    if (unit == null && !_allowMissingFiles) {
+      fail('Linker unexpectedly requested unit for "$absoluteUri".');
+    }
+    return unit;
+  }
+}
+
+/// Implementation of [SummaryBaseTestStrategy] that drives summary generation
+/// using the old two-phase API.
+abstract class _SummaryBaseTestStrategyTwoPhase
+    implements SummaryBaseTestStrategy {
+  /**
+   * Information about the files to be linked.
+   */
+  _FilesToLink<UnlinkedUnitBuilder> _filesToLink =
+      new _FilesToLink<UnlinkedUnitBuilder>();
+
+  _LinkerInputs _linkerInputs;
+
+  bool get _allowMissingFiles;
+
+  @override
+  void addNamedSource(String filePath, String contents) {
+    CompilationUnit unit = _parseText(contents);
+    UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
+    _filesToLink.uriToUnit[absUri(filePath)] = unlinkedUnit;
+  }
+
+  UnlinkedUnitBuilder createUnlinkedSummary(Uri uri, String text) =>
+      serializeAstUnlinked(_parseText(text));
+
+  _LinkerInputs _createLinkerInputs(String text,
+      {String path: '/test.dart', String uri}) {
+    uri ??= absUri(path);
+    Uri testDartUri = Uri.parse(uri);
+    UnlinkedUnitBuilder unlinkedDefiningUnit =
+        createUnlinkedSummary(testDartUri, text);
+    _filesToLink.uriToUnit[testDartUri.toString()] = unlinkedDefiningUnit;
+    _LinkerInputs linkerInputs = new _LinkerInputs(
+        _allowMissingFiles,
+        _filesToLink.uriToUnit,
+        testDartUri,
+        unlinkedDefiningUnit,
+        _filesToLink.summaryDataStore.linkedMap,
+        _filesToLink.summaryDataStore.unlinkedMap);
+    // Reset _filesToLink in case the test needs to start a new package bundle.
+    _filesToLink = new _FilesToLink<UnlinkedUnitBuilder>();
+    return linkerInputs;
+  }
+}
+
+/// Implementation of [SummaryBlackBoxTestStrategy] that drives summary
+/// generation using the old two-phase API.
+///
+/// Not intended to be used directly; instead use a derived class that either
+/// exercises the full summary algorithmm or just pre-linking.
+abstract class _SummaryBlackBoxTestStrategyTwoPhase
+    extends _SummaryBaseTestStrategyTwoPhase
+    implements SummaryBlackBoxTestStrategy {
+  @override
+  List<UnlinkedUnit> unlinkedUnits;
+
+  @override
+  LinkedLibrary linked;
+
+  @override
+  bool _allowMissingFiles = false;
+
+  @override
+  void set allowMissingFiles(bool value) {
+    _allowMissingFiles = value;
+  }
+
+  @override
+  void serializeLibraryText(String text, {bool allowErrors: false}) {
+    Map<String, UnlinkedUnitBuilder> uriToUnit = this._filesToLink.uriToUnit;
+    _linkerInputs = _createLinkerInputs(text);
+    linked = link(
+        _linkerInputs.linkedLibraries,
+        _linkerInputs.getDependency,
+        _linkerInputs.getUnit,
+        (name) => null)[_linkerInputs._testDartUri.toString()];
+    expect(linked, isNotNull);
+    _validateLinkedLibrary(linked);
+    unlinkedUnits = <UnlinkedUnit>[_linkerInputs._unlinkedDefiningUnit];
+    for (String relativeUriStr
+        in _linkerInputs._unlinkedDefiningUnit.publicNamespace.parts) {
+      Uri relativeUri;
+      try {
+        relativeUri = Uri.parse(relativeUriStr);
+      } on FormatException {
+        unlinkedUnits.add(new UnlinkedUnitBuilder());
+        continue;
+      }
+
+      UnlinkedUnit unit = uriToUnit[
+          resolveRelativeUri(_linkerInputs._testDartUri, relativeUri)
+              .toString()];
+      if (unit == null) {
+        if (!_allowMissingFiles) {
+          fail('Test referred to unknown unit $relativeUriStr');
+        }
+      } else {
+        unlinkedUnits.add(unit);
+      }
+    }
+  }
+}
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 9aa47e4..2bd64ac 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -2646,17 +2646,17 @@
 }
 
 class T1 extends Base {
-  /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE,error:INVALID_METHOD_OVERRIDE*/B get f => null;
+  /*error:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE,error:INVALID_METHOD_OVERRIDE*/B get f => null;
 }
 
 class T2 extends Base {
-  /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE,error:INVALID_METHOD_OVERRIDE*/set f(
+  /*error:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE,error:INVALID_METHOD_OVERRIDE*/set f(
       B b) => null;
 }
 
 class T3 extends Base {
   /*error:INVALID_METHOD_OVERRIDE*/final B
-      /*warning:FINAL_NOT_INITIALIZED*/f;
+      /*error:FINAL_NOT_INITIALIZED*/f;
 }
 class T4 extends Base {
   // two: one for the getter one for the setter.
@@ -2664,11 +2664,11 @@
 }
 
 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T5 implements Base {
-  /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_METHOD_OVERRIDE*/B get f => null;
+  /*error:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_METHOD_OVERRIDE*/B get f => null;
 }
 
 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T6 implements Base {
-  /*warning:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_METHOD_OVERRIDE*/set f(B b) => null;
+  /*error:MISMATCHED_GETTER_AND_SETTER_TYPES_FROM_SUPERTYPE, error:INVALID_METHOD_OVERRIDE*/set f(B b) => null;
 }
 
 class /*error:NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE*/T7 implements Base {
@@ -3676,12 +3676,12 @@
   set b(y) => voidFn();
   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:NON_VOID_RETURN_FOR_SETTER*/int set e(y) => 4;
+  /*error:NON_VOID_RETURN_FOR_SETTER*/int set f(y) =>
     /*error:RETURN_OF_INVALID_TYPE*/voidFn();
   set g(y) {return /*error:RETURN_OF_INVALID_TYPE*/4;}
   void set h(y) {return /*error:RETURN_OF_INVALID_TYPE*/4;}
-  /*warning:NON_VOID_RETURN_FOR_SETTER*/int set i(y) {return 4;}
+  /*error:NON_VOID_RETURN_FOR_SETTER*/int set i(y) {return 4;}
 }
 ''');
   }
diff --git a/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart b/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
index 458b4c1..9ae9154 100644
--- a/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
@@ -280,7 +280,7 @@
 class A {
   final int x;
 
-  /*warning:FINAL_NOT_INITIALIZED_CONSTRUCTOR_1*/A();
+  /*error:FINAL_NOT_INITIALIZED_CONSTRUCTOR_1*/A();
 }
 ''');
     await check(nonnullableTypes: <String>['dart:core,int']);
diff --git a/pkg/analyzer/tool/analyzer_cfe_progress.dart b/pkg/analyzer/tool/analyzer_cfe_progress.dart
deleted file mode 100644
index 86783f6..0000000
--- a/pkg/analyzer/tool/analyzer_cfe_progress.dart
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io' as io;
-
-import 'package:analyzer/dart/analysis/context_builder.dart';
-import 'package:analyzer/dart/analysis/context_locator.dart';
-import 'package:analyzer/dart/analysis/context_root.dart';
-import 'package:analyzer/dart/analysis/results.dart';
-import 'package:analyzer/dart/analysis/session.dart';
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/physical_file_system.dart';
-import 'package:path/path.dart' as path;
-
-/// Count failing Analyzer CFE integration tests.
-///
-/// We look for classes ending in *Test_UseCFE or *Test_Kernel with test
-/// methods that are marked with @failingTest annotations.
-///
-/// In addition, we count the test exclusions from pkg/pkg.status related to
-/// using Fasta with the Analyzer.
-void main() {
-  if (!io.FileSystemEntity.isDirectorySync('pkg')) {
-    io.stderr
-        .writeln('This tool should be run from the top level sdk directory.');
-    io.exit(1);
-  }
-
-  final List<String> analysisPaths = [
-    'pkg/analysis_server',
-    'pkg/analyzer_cli',
-    'pkg/analyzer_plugin',
-    'pkg/analyzer',
-  ];
-
-  final ResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
-  ContextLocator locator =
-      new ContextLocator(resourceProvider: resourceProvider);
-  List<ContextRoot> contextRoots =
-      locator.locateRoots(includedPaths: analysisPaths);
-  ContextBuilder builder =
-      new ContextBuilder(resourceProvider: resourceProvider);
-
-  for (ContextRoot contextRoot in contextRoots) {
-    if (!analysisPaths
-        .any((analysisPath) => contextRoot.root.path.endsWith(analysisPath))) {
-      continue;
-    }
-
-    AnalysisSession analysisSession =
-        builder.createContext(contextRoot: contextRoot).currentSession;
-    print('\nCFE tests for ${path.relative(contextRoot.root.path)}:');
-
-    int totalFailingCount = 0;
-
-    for (String analyzedPath in contextRoot.analyzedFiles()) {
-      if (!analyzedPath.endsWith('_test.dart')) {
-        continue;
-      }
-
-      ParseResult result = analysisSession.getParsedAstSync(analyzedPath);
-      CompilationUnit unit = result.unit;
-
-      for (ClassDeclaration member
-          in unit.declarations.where((member) => member is ClassDeclaration)) {
-        String className = member.name.toString();
-        if (!className.endsWith('Test_UseCFE') &&
-            !className.endsWith('Test_Kernel')) {
-          continue;
-        }
-
-        int failingCount = 0;
-
-        for (MethodDeclaration method
-            in member.members.where((member) => member is MethodDeclaration)) {
-          String methodName = method.name.toString();
-          if (!methodName.startsWith('test_')) {
-            continue;
-          }
-
-          if (method.metadata.any((Annotation annotation) =>
-              annotation.name.toString() == 'failingTest')) {
-            failingCount++;
-          }
-        }
-
-        totalFailingCount += failingCount;
-      }
-    }
-
-    print('  $totalFailingCount failing tests');
-  }
-
-  // tests/language_2/language_2_analyzer.status:
-  //   [ $compiler == dart2analyzer && $fasta ]
-  print('\nCFE tests for tests/language_2:');
-  int useCfeLanguage2 = countExclusions(
-      'tests/language_2/language_2_analyzer.status',
-      r'[ $compiler == dart2analyzer && $fasta ]');
-  print('  $useCfeLanguage2 failing tests');
-
-  // Also count the Fasta '-DuseFastaParser=true' tests.
-  print('\n--use-fasta-parser exclusions from status files');
-
-  int testExclusions = 0;
-
-  // pkg/pkg.status:
-  //   [ $builder_tag == analyzer_use_fasta && $runtime == vm ]
-  testExclusions += countExclusions('pkg/pkg.status',
-      r'[ $builder_tag == analyzer_use_fasta && $runtime == vm ]');
-
-  // tests/language_2/language_2_analyzer.status:
-  //   [ $compiler == dart2analyzer && $analyzer_use_fasta_parser ]
-  testExclusions += countExclusions(
-      'tests/language_2/language_2_analyzer.status',
-      r'[ $compiler == dart2analyzer && $analyzer_use_fasta_parser ]');
-
-  print('  $testExclusions failing tests');
-}
-
-int countExclusions(String filePath, String exclusionHeader) {
-  io.File file = new io.File(filePath);
-  List<String> lines = file.readAsLinesSync();
-  lines = lines
-      .where((line) => line.trim().isNotEmpty && !line.trim().startsWith('#'))
-      .toList();
-
-  int index = lines.indexOf(exclusionHeader);
-  if (index == -1) {
-    print('error parsing ${file.path}');
-  }
-
-  lines = lines.sublist(index + 1);
-  int endIndex = lines.indexWhere((line) => line.startsWith('['));
-  if (endIndex >= 0) {
-    lines = lines.sublist(0, endIndex);
-  }
-
-  return lines.length;
-}
diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
index 4596071..78642c2 100644
--- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart
+++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart
@@ -24,9 +24,9 @@
   //
   // Validate the SDK path.
   //
-  sdkPath ??= FolderBasedDartSdk
-      .defaultSdkDirectory(PhysicalResourceProvider.INSTANCE)
-      .path;
+  sdkPath ??=
+      FolderBasedDartSdk.defaultSdkDirectory(PhysicalResourceProvider.INSTANCE)
+          .path;
   if (!FileSystemEntity.isDirectorySync('$sdkPath/lib')) {
     print("'$sdkPath/lib' does not exist.");
     _printUsage();
@@ -36,10 +36,8 @@
   //
   // Handle commands.
   //
-  if (command == 'build-spec') {
-    _buildSummary(sdkPath, outFilePath, false);
-  } else if (command == 'build-strong') {
-    _buildSummary(sdkPath, outFilePath, true);
+  if (command == 'build-strong') {
+    _buildSummary(sdkPath, outFilePath);
   } else {
     _printUsage();
     return;
@@ -51,11 +49,10 @@
  */
 const BINARY_NAME = "build_sdk_summaries";
 
-void _buildSummary(String sdkPath, String outPath, bool strong) {
-  String modeName = strong ? 'strong' : 'spec';
-  print('Generating $modeName mode summary.');
+void _buildSummary(String sdkPath, String outPath) {
+  print('Generating strong mode summary.');
   Stopwatch sw = new Stopwatch()..start();
-  List<int> bytes = new SummaryBuilder.forSdk(sdkPath, strong).build();
+  List<int> bytes = new SummaryBuilder.forSdk(sdkPath).build();
   new File(outPath).writeAsBytesSync(bytes, mode: FileMode.writeOnly);
   print('\tDone in ${sw.elapsedMilliseconds} ms.');
 }
@@ -66,8 +63,6 @@
 void _printUsage() {
   print('Usage: $BINARY_NAME command arguments');
   print('Where command can be one of the following:');
-  print('  build-spec output_file [sdk_path]');
-  print('    Generate spec mode summary file.');
   print('  build-strong output_file [sdk_path]');
   print('    Generate strong mode summary file.');
 }
diff --git a/pkg/analyzer/tool/summary/dump_inferred_types.dart b/pkg/analyzer/tool/summary/dump_inferred_types.dart
index 2107faa..e0eec04 100644
--- a/pkg/analyzer/tool/summary/dump_inferred_types.dart
+++ b/pkg/analyzer/tool/summary/dump_inferred_types.dart
@@ -40,7 +40,7 @@
 
   InferredTypeCollector(
       GetDependencyCallback getDependency, GetUnitCallback getUnit)
-      : _linker = new Linker({}, getDependency, getUnit, true);
+      : _linker = new Linker({}, getDependency, getUnit);
 
   /**
    * If an inferred type exists matching the given [slot], record that it is the
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index 1604d01..97495b4 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -215,6 +215,7 @@
     for (CompilationUnitMember decl in idlParsed.declarations) {
       if (decl is ClassDeclaration) {
         bool isTopLevel = false;
+        bool isDeprecated = false;
         String fileIdentifier;
         String clsName = decl.name;
         for (Annotation annotation in decl.metadata) {
@@ -222,14 +223,6 @@
               annotation.name == 'TopLevel' &&
               annotation.constructorName == null) {
             isTopLevel = true;
-            if (annotation.arguments == null) {
-              throw new Exception(
-                  'Class `$clsName`: TopLevel requires parenthesis');
-            }
-            if (annotation.constructorName != null) {
-              throw new Exception(
-                  "Class `$clsName`: TopLevel doesn't have named constructors");
-            }
             if (annotation.arguments.length == 1) {
               Expression arg = annotation.arguments[0];
               if (arg is StringLiteral) {
@@ -243,11 +236,15 @@
               throw new Exception(
                   'Class `$clsName`: TopLevel requires 0 or 1 arguments');
             }
+          } else if (annotation.arguments == null &&
+              annotation.name == 'deprecated' &&
+              annotation.constructorName == null) {
+            isDeprecated = true;
           }
         }
         String doc = _getNodeDoc(decl);
         idlModel.ClassDeclaration cls = new idlModel.ClassDeclaration(
-            doc, clsName, isTopLevel, fileIdentifier);
+            doc, clsName, isTopLevel, fileIdentifier, isDeprecated);
         _idl.classes[clsName] = cls;
         String expectedBase = 'base.SummaryClass';
         if (decl.superclass == null || decl.superclass.name != expectedBase) {
@@ -445,18 +442,22 @@
       out();
     }
     for (idlModel.ClassDeclaration cls in _idl.classes.values) {
-      _generateBuilder(cls);
-      out();
+      if (!cls.isDeprecated) {
+        _generateBuilder(cls);
+        out();
+      }
       if (cls.isTopLevel) {
         _generateReadFunction(cls);
         out();
       }
-      _generateReader(cls);
-      out();
-      _generateImpl(cls);
-      out();
-      _generateMixin(cls);
-      out();
+      if (!cls.isDeprecated) {
+        _generateReader(cls);
+        out();
+        _generateImpl(cls);
+        out();
+        _generateMixin(cls);
+        out();
+      }
     }
   }
 
@@ -529,8 +530,9 @@
     String builderName = name + 'Builder';
     String mixinName = '_${name}Mixin';
     List<String> constructorParams = <String>[];
-    out('class $builderName extends Object with $mixinName '
-        'implements ${idlPrefix(name)} {');
+    var implementsClause =
+        cls.isDeprecated ? '' : ' implements ${idlPrefix(name)}';
+    out('class $builderName extends Object with $mixinName$implementsClause {');
     indent(() {
       // Generate fields.
       for (idlModel.FieldDeclaration field in cls.fields) {
@@ -549,7 +551,7 @@
         out();
         out('@override');
         if (field.isDeprecated) {
-          out('$typeStr get $fieldName => $_throwDeprecated;');
+          out('Null get $fieldName => $_throwDeprecated;');
         } else {
           out('$typeStr get $fieldName => _$fieldName$defSuffix;');
           out();
@@ -842,7 +844,7 @@
         out('@override');
         String returnType = dartType(type);
         if (field.isDeprecated) {
-          out('$returnType get $fieldName => $_throwDeprecated;');
+          out('Null get $fieldName => $_throwDeprecated;');
         } else {
           out('$returnType get $fieldName {');
           indent(() {
diff --git a/pkg/analyzer/tool/summary/idl_model.dart b/pkg/analyzer/tool/summary/idl_model.dart
index 375dcb2..79bae0e 100644
--- a/pkg/analyzer/tool/summary/idl_model.dart
+++ b/pkg/analyzer/tool/summary/idl_model.dart
@@ -29,8 +29,13 @@
    */
   final String fileIdentifier;
 
-  ClassDeclaration(
-      String documentation, String name, this.isTopLevel, this.fileIdentifier)
+  /**
+   * Indicates whether the class has the `deprecated` annotation.
+   */
+  final bool isDeprecated;
+
+  ClassDeclaration(String documentation, String name, this.isTopLevel,
+      this.fileIdentifier, this.isDeprecated)
       : super(documentation, name);
 
   /**
diff --git a/pkg/analyzer/tool/summary/mini_ast.dart b/pkg/analyzer/tool/summary/mini_ast.dart
index 4c4eb38..518a6c4 100644
--- a/pkg/analyzer/tool/summary/mini_ast.dart
+++ b/pkg/analyzer/tool/summary/mini_ast.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.
 
-import 'package:front_end/src/fasta/messages.dart' show Message;
+import 'package:front_end/src/fasta/messages.dart' show LocatedMessage, Message;
 import 'package:front_end/src/fasta/parser.dart';
 import 'package:front_end/src/fasta/problems.dart'
     show internalProblem, unsupported;
@@ -147,8 +147,9 @@
   Uri get uri => null;
 
   @override
-  void addCompileTimeError(Message message, int offset, int length) {
-    internalProblem(message, offset, uri);
+  void addProblem(Message message, int charOffset, int length,
+      {bool wasHandled: false, List<LocatedMessage> context}) {
+    internalProblem(message, charOffset, uri);
   }
 
   @override
@@ -240,13 +241,8 @@
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     debugEvent("FormalParameter");
     pop(); // Name
     pop(); // Type
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index ac0e2f1..729ce0d 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -321,12 +321,8 @@
       UnlinkedUnit getUnit(String absoluteUri) =>
           summaryDataStore.unlinkedMap[absoluteUri] ?? uriToUnit[absoluteUri];
 
-      Map<String, LinkedLibraryBuilder> linkResult = link(
-          libraryUris,
-          getDependency,
-          getUnit,
-          analysisDriver.declaredVariables.get,
-          options.strongMode);
+      Map<String, LinkedLibraryBuilder> linkResult = link(libraryUris,
+          getDependency, getUnit, analysisDriver.declaredVariables.get);
       linkResult.forEach(assembler.addLinkedLibrary);
     });
   }
@@ -404,7 +400,7 @@
             createAnalysisOptionsForCommandLineOptions(options, rootPath);
         dartSdk.useSummary = !options.buildSummaryOnly;
         sdk = dartSdk;
-        sdkBundle = dartSdk.getSummarySdkBundle(true);
+        sdkBundle = dartSdk.getSummarySdkBundle();
       }
 
       // Include SDK bundle to avoid parsing SDK sources.
diff --git a/pkg/analyzer_cli/lib/src/context_cache.dart b/pkg/analyzer_cli/lib/src/context_cache.dart
index 6cec179..0e875ce 100644
--- a/pkg/analyzer_cli/lib/src/context_cache.dart
+++ b/pkg/analyzer_cli/lib/src/context_cache.dart
@@ -97,10 +97,6 @@
     contextOptions.generateSdkErrors = clOptions.showSdkWarnings;
     contextOptions.previewDart2 = clOptions.previewDart2;
     contextOptions.useFastaParser = clOptions.useFastaParser;
-    if (clOptions.useCFE) {
-      contextOptions.useFastaParser = true;
-      contextOptions.useCFE = true;
-    }
     return contextOptions;
   }
 
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index bf39031..db9192d 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -617,12 +617,6 @@
     PerformanceLog log = new PerformanceLog(null);
     AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(log);
 
-    file_system.Folder kernelPlatformBinariesFolder;
-    if (options.useCFE && options.dartSdkPlatformBinariesPath != null) {
-      kernelPlatformBinariesFolder =
-          resourceProvider.getFolder(options.dartSdkPlatformBinariesPath);
-    }
-
     analysisDriver = new AnalysisDriver(
         scheduler,
         log,
@@ -631,9 +625,7 @@
         new FileContentOverlay(),
         null,
         sourceFactory,
-        analysisOptions,
-        useCFE: options.useCFE,
-        kernelPlatformFolder: kernelPlatformBinariesFolder);
+        analysisOptions);
     analysisDriver.results.listen((_) {});
     analysisDriver.exceptions.listen((_) {});
     scheduler.start();
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 9b5fd17..7667945 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -107,9 +107,6 @@
   /// (Or null if not enabled.)
   final String perfReport;
 
-  /// Whether to enable the Dart 2.0 Common Front End.
-  final bool useCFE;
-
   /// Whether to enable parsing via the Fasta parser.
   final bool useFastaParser;
 
@@ -189,7 +186,6 @@
         log = cast(args['log']),
         machineFormat = args['format'] == 'machine',
         perfReport = cast(args['x-perf-report']),
-        useCFE = cast(args['use-cfe']),
         useFastaParser = cast(args['use-fasta-parser']),
         batchMode = cast(args['batch']),
         showPackageWarnings = cast(args['show-package-warnings']) ||
@@ -506,14 +502,9 @@
               'of "libraryUri".',
           splitCommas: false,
           hide: hide)
-      ..addFlag('use-cfe',
-          help:
-              'Enable the Dart 2.0 Common Front End implementation (experimental).',
-          defaultsTo: false,
-          hide: hide)
       ..addFlag('use-fasta-parser',
           help: 'Whether to enable parsing via the Fasta parser.',
-          defaultsTo: false,
+          defaultsTo: true,
           hide: hide)
       ..addFlag('preview-dart-2',
           help: 'Enable the Dart 2.0 preview.',
diff --git a/pkg/analyzer_cli/pubspec.yaml b/pkg/analyzer_cli/pubspec.yaml
index 513c1ce..bfa2b84 100644
--- a/pkg/analyzer_cli/pubspec.yaml
+++ b/pkg/analyzer_cli/pubspec.yaml
@@ -9,7 +9,7 @@
   linter: ^0.1.16
   package_config: '>=0.1.5 <2.0.0'
   plugin: '>=0.1.0 <0.3.0'
-  protobuf: ^0.8.0
+  protobuf: ^0.9.0
   telemetry: ^0.0.1
   yaml: ^2.1.2
 dev_dependencies:
diff --git a/pkg/analyzer_cli/test/data/file_with_warning.dart b/pkg/analyzer_cli/test/data/file_with_warning.dart
deleted file mode 100644
index 97dfd3f..0000000
--- a/pkg/analyzer_cli/test/data/file_with_warning.dart
+++ /dev/null
@@ -1,3 +0,0 @@
-main() {
-  final String foo;
-}
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 26b682b..1f57ac0 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -28,14 +28,11 @@
     defineReflectiveTests(BuildModeTest);
     defineReflectiveTests(ExitCodesTest);
     defineReflectiveTests(ExitCodesTest_PreviewDart2);
-    defineReflectiveTests(ExitCodesTest_UseCFE);
     defineReflectiveTests(LinterTest);
     defineReflectiveTests(LinterTest_PreviewDart2);
-    defineReflectiveTests(LinterTest_UseCFE);
     defineReflectiveTests(NonDartFilesTest);
     defineReflectiveTests(OptionsTest);
     defineReflectiveTests(OptionsTest_PreviewDart2);
-    defineReflectiveTests(OptionsTest_UseCFE);
   }, name: 'Driver');
 }
 
@@ -79,8 +76,6 @@
 
   AnalysisOptions get analysisOptions => driver.analysisDriver.analysisOptions;
 
-  bool get useCFE => false;
-
   bool get usePreviewDart2 => false;
 
   /// Normalize text with bullets.
@@ -116,9 +111,6 @@
     if (usePreviewDart2) {
       cmd.insert(0, '--preview-dart-2');
     }
-    if (useCFE) {
-      cmd.insert(0, '--use-cfe');
-    }
 
     await driver.start(cmd);
   }
@@ -535,7 +527,7 @@
     Set<String> triedDirectories = new Set<String>();
     bool isSuitable(String sdkDir) {
       triedDirectories.add(sdkDir);
-      return new File(path.join(sdkDir, 'lib', '_internal', 'spec.sum'))
+      return new File(path.join(sdkDir, 'lib', '_internal', 'strong.sum'))
           .existsSync();
     }
 
@@ -625,11 +617,6 @@
     expect(exitCode, 1);
   }
 
-  test_fatalWarnings() async {
-    await drive('data/file_with_warning.dart', args: ['--fatal-warnings']);
-    expect(exitCode, 2);
-  }
-
   test_missingDartFile() async {
     await drive('data/NO_DART_FILE_HERE.dart');
     expect(exitCode, 3);
@@ -645,11 +632,6 @@
     expect(exitCode, 0);
   }
 
-  test_notFatalWarnings() async {
-    await drive('data/file_with_warning.dart');
-    expect(exitCode, 0);
-  }
-
   test_partFile() async {
     await driveMany([
       path.join(testDirectory, 'data/library_and_parts/lib.dart'),
@@ -689,12 +671,6 @@
 }
 
 @reflectiveTest
-class ExitCodesTest_UseCFE extends ExitCodesTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class LinterTest extends BaseTest {
   String get optionsFileName => AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
 
@@ -797,12 +773,6 @@
 }
 
 @reflectiveTest
-class LinterTest_UseCFE extends LinterTest {
-  @override
-  bool get useCFE => true;
-}
-
-@reflectiveTest
 class NonDartFilesTest extends BaseTest {
   test_analysisOptionsYaml() async {
     await withTempDirAsync((tempDir) async {
@@ -932,26 +902,11 @@
     expect(outSink.toString(), contains('Avoid empty else statements'));
   }
 
-  test_previewDart2() async {
-    await drive('data/options_tests_project/test_file.dart',
-        args: ['--preview-dart-2']);
-    expect(analysisOptions.useFastaParser, isFalse);
-  }
-
   test_todo() async {
     await drive('data/file_with_todo.dart');
     expect(outSink.toString().contains('[info]'), isFalse);
   }
 
-  @failingTest
-  test_useCFE() async {
-    // Disabled until integration with the CFE has been restarted.
-    fail('Times out when run on a VM with --preview-dart-2 enabled');
-//    await drive('data/options_tests_project/test_file.dart',
-//        args: ['--use-cfe']);
-//    expect(driver.context.analysisOptions.useFastaParser, isTrue);
-  }
-
   test_withFlags_overrideFatalWarning() async {
     await drive('data/options_tests_project/test_file.dart',
         args: ['--fatal-warnings'],
@@ -993,46 +948,6 @@
   bool get usePreviewDart2 => true;
 }
 
-@reflectiveTest
-class OptionsTest_UseCFE extends OptionsTest {
-  @override
-  bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_analysisOptions_excludes() =>
-      callFailingTest(super.test_analysisOptions_excludes);
-
-  @override
-  @failingTest
-  test_analysisOptions_excludesRelativeToAnalysisOptions_explicit() =>
-      callFailingTest(super
-          .test_analysisOptions_excludesRelativeToAnalysisOptions_explicit);
-
-  @override
-  @failingTest
-  test_analysisOptions_excludesRelativeToAnalysisOptions_inferred() =>
-      callFailingTest(super
-          .test_analysisOptions_excludesRelativeToAnalysisOptions_inferred);
-
-  @override
-  @failingTest
-  test_basic_filters() => callFailingTest(super.test_basic_filters);
-
-  @override
-  @failingTest
-  test_includeDirective() => callFailingTest(super.test_includeDirective);
-
-  @override
-  @failingTest
-  test_previewDart2() => callFailingTest(super.test_previewDart2);
-
-  @override
-  @failingTest
-  test_withFlags_overrideFatalWarning() =>
-      callFailingTest(super.test_withFlags_overrideFatalWarning);
-}
-
 class TestSource implements Source {
   TestSource();
 
diff --git a/pkg/analyzer_cli/test/options_test.dart b/pkg/analyzer_cli/test/options_test.dart
index 621cefb..7b88142 100644
--- a/pkg/analyzer_cli/test/options_test.dart
+++ b/pkg/analyzer_cli/test/options_test.dart
@@ -73,7 +73,6 @@
         expect(options.warningsAreFatal, isFalse);
         expect(options.strongMode, isTrue);
         expect(options.lintsAreFatal, isFalse);
-        expect(options.useCFE, isFalse);
         expect(options.previewDart2, isTrue);
       });
 
@@ -84,33 +83,33 @@
       });
 
       test('defined variables', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '-Dfoo=bar', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '-Dfoo=bar', 'foo.dart']);
         expect(options.definedVariables['foo'], equals('bar'));
         expect(options.definedVariables['bar'], isNull);
       });
 
       test('disable cache flushing', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--disable-cache-flushing', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--disable-cache-flushing', 'foo.dart']);
         expect(options.disableCacheFlushing, isTrue);
       });
 
       test('enable super mixins', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--supermixin', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--supermixin', 'foo.dart']);
         expect(options.enableSuperMixins, isTrue);
       });
 
       test('hintsAreFatal', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--fatal-hints', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--fatal-hints', 'foo.dart']);
         expect(options.infosAreFatal, isTrue);
       });
 
       test('infosAreFatal', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--fatal-infos', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--fatal-infos', 'foo.dart']);
         expect(options.infosAreFatal, isTrue);
       });
 
@@ -121,14 +120,14 @@
       });
 
       test('machine format', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--format=machine', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--format=machine', 'foo.dart']);
         expect(options.machineFormat, isTrue);
       });
 
       test('no-hints', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--no-hints', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--no-hints', 'foo.dart']);
         expect(options.disableHints, isTrue);
       });
 
@@ -139,26 +138,26 @@
       });
 
       test('lints', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--lints', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--lints', 'foo.dart']);
         expect(options.lints, isTrue);
       });
 
       test('package root', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--package-root', 'bar', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--package-root', 'bar', 'foo.dart']);
         expect(options.packageRootPath, equals('bar'));
       });
 
       test('package warnings', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--package-warnings', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--package-warnings', 'foo.dart']);
         expect(options.showPackageWarnings, isTrue);
       });
 
       test('sdk warnings', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--sdk-warnings', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--sdk-warnings', 'foo.dart']);
         expect(options.showSdkWarnings, isTrue);
       });
 
@@ -170,8 +169,8 @@
       });
 
       test('warningsAreFatal', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--fatal-warnings', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--fatal-warnings', 'foo.dart']);
         expect(options.warningsAreFatal, isTrue);
       });
 
@@ -189,8 +188,8 @@
       });
 
       test('hintsAreFatal', () {
-        CommandLineOptions options = CommandLineOptions
-            .parse(['--dart-sdk', '.', '--fatal-lints', 'foo.dart']);
+        CommandLineOptions options = CommandLineOptions.parse(
+            ['--dart-sdk', '.', '--fatal-lints', 'foo.dart']);
         expect(options.lintsAreFatal, isTrue);
       });
 
@@ -232,23 +231,12 @@
         });
       }
 
-      test('--use-cfe', () {
-        CommandLineOptions options =
-            CommandLineOptions.parse(['--use-cfe', 'foo.dart']);
-        expect(options.useCFE, isTrue);
-      });
-
       test('--use-fasta-parser', () {
         CommandLineOptions options =
             CommandLineOptions.parse(['--use-fasta-parser', 'foo.dart']);
         expect(options.useFastaParser, isTrue);
       });
 
-      test('--no-use-fasta-parser', () {
-        CommandLineOptions options = CommandLineOptions.parse(['', 'foo.dart']);
-        expect(options.useFastaParser, isFalse);
-      });
-
       test('--preview-dart-2', () {
         CommandLineOptions options =
             CommandLineOptions.parse(['--preview-dart-2', 'foo.dart']);
diff --git a/pkg/analyzer_fe_comparison/lib/comparison.dart b/pkg/analyzer_fe_comparison/lib/comparison.dart
new file mode 100644
index 0000000..03138b7
--- /dev/null
+++ b/pkg/analyzer_fe_comparison/lib/comparison.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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:analyzer_fe_comparison/src/analyzer.dart';
+import 'package:analyzer_fe_comparison/src/comparison_node.dart';
+import 'package:analyzer_fe_comparison/src/kernel.dart';
+
+/// Compares the analyzer and kernel representations of a project, and prints
+/// the resulting diff.
+void compare(
+    String platformPath, String projectLibPath, String packagesFilePath) async {
+  ComparisonNode analyzerNode = await driveAnalyzer(projectLibPath);
+  var packagesFileUri = Uri.file(packagesFilePath);
+  var inputs = <Uri>[];
+  for (var library in analyzerNode.children) {
+    inputs.add(Uri.parse(library.text));
+  }
+  var platformUri = Uri.file(platformPath);
+  ComparisonNode kernelNode =
+      await driveKernel(inputs, packagesFileUri, platformUri);
+  print(ComparisonNode.diff(kernelNode, analyzerNode));
+}
diff --git a/pkg/analyzer_fe_comparison/lib/src/analyzer.dart b/pkg/analyzer_fe_comparison/lib/src/analyzer.dart
new file mode 100644
index 0000000..207ede3
--- /dev/null
+++ b/pkg/analyzer_fe_comparison/lib/src/analyzer.dart
@@ -0,0 +1,266 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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:analyzer/dart/analysis/analysis_context_collection.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' show SourceKind;
+import 'package:analyzer_fe_comparison/src/comparison_node.dart';
+
+/// Analyzes the project located at [libPath] using the analyzer, and returns a
+/// [ComparisonNode] representing it.
+Future<ComparisonNode> driveAnalyzer(String libPath) async {
+  var contextCollection = AnalysisContextCollection(includedPaths: [libPath]);
+  var contexts = contextCollection.contexts;
+  if (contexts.length != 1) {
+    throw new StateError('Expected exactly one context');
+  }
+  var context = contexts[0];
+  var session = context.currentSession;
+  var typeProvider = await session.typeProvider;
+  var uriConverter = session.uriConverter;
+  var contextRoot = context.contextRoot;
+  var libraryNodes = <ComparisonNode>[];
+  for (var filePath in contextRoot.analyzedFiles()) {
+    var kind = await session.getSourceKind(filePath);
+    if (kind == SourceKind.LIBRARY) {
+      var importUri = uriConverter.pathToUri(filePath);
+      var libraryElement = await session.getLibraryByUri(importUri.toString());
+      var childNodes = <ComparisonNode>[];
+      if (libraryElement.name.isNotEmpty) {
+        childNodes.add(ComparisonNode('name=${libraryElement.name}'));
+      }
+      for (var compilationUnit in libraryElement.units) {
+        var unitResult =
+            await session.getResolvedAst(compilationUnit.source.fullName);
+        _AnalyzerVisitor(typeProvider, childNodes)
+            ._visitList(unitResult.unit.declarations);
+      }
+      libraryNodes.add(ComparisonNode.sorted(importUri.toString(), childNodes));
+    }
+  }
+  return ComparisonNode.sorted('Component', libraryNodes);
+}
+
+/// Visitor for serializing the contents of an analyzer AST into
+/// ComparisonNodes.
+///
+/// Results are accumulated into [_resultNodes].
+class _AnalyzerVisitor extends UnifyingAstVisitor<void> {
+  final TypeProvider _typeProvider;
+
+  final List<ComparisonNode> _resultNodes;
+
+  _AnalyzerVisitor(this._typeProvider, this._resultNodes);
+
+  @override
+  void visitClassDeclaration(ClassDeclaration node) {
+    var children = <ComparisonNode>[];
+    var visitor = _AnalyzerVisitor(_typeProvider, children);
+    visitor._visitTypeParameters(node.declaredElement.typeParameters);
+    if (node.declaredElement.supertype != null) {
+      children.add(_translateType('Extends: ', node.declaredElement.supertype));
+    }
+    for (int i = 0; i < node.declaredElement.mixins.length; i++) {
+      children
+          .add(_translateType('Mixin $i: ', node.declaredElement.mixins[i]));
+    }
+    for (int i = 0; i < node.declaredElement.interfaces.length; i++) {
+      children.add(_translateType(
+          'Implements $i: ', node.declaredElement.interfaces[i]));
+    }
+    visitor._visitList(node.members);
+    _resultNodes
+        .add(ComparisonNode.sorted('Class ${node.name.name}', children));
+  }
+
+  @override
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
+    var children = <ComparisonNode>[];
+    var visitor = _AnalyzerVisitor(_typeProvider, children);
+    visitor._visitParameters(node.parameters);
+    _resultNodes.add(ComparisonNode.sorted(
+        'Constructor ${node.name?.name ?? '(unnamed)'}', children));
+  }
+
+  @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    var children = <ComparisonNode>[];
+    for (var enumValue in node.constants) {
+      children.add(ComparisonNode('EnumValue ${enumValue.name.name}'));
+    }
+    _resultNodes.add(ComparisonNode.sorted('Enum ${node.name.name}', children));
+  }
+
+  @override
+  void visitFieldDeclaration(FieldDeclaration node) {
+    node.fields.accept(this);
+  }
+
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    String kind;
+    if (node.isGetter) {
+      kind = 'Getter';
+    } else if (node.isSetter) {
+      kind = 'Setter';
+    } else {
+      // Kernel calls top level functions "methods".
+      kind = 'Method';
+    }
+    var children = <ComparisonNode>[];
+    var visitor = _AnalyzerVisitor(_typeProvider, children);
+    visitor._visitTypeParameters(node.declaredElement.typeParameters);
+    visitor._visitParameters(node.functionExpression.parameters);
+    children
+        .add(_translateType('Return type: ', node.declaredElement.returnType));
+    _resultNodes
+        .add(ComparisonNode.sorted('$kind ${node.name.name}', children));
+  }
+
+  @override
+  void visitFunctionTypeAlias(FunctionTypeAlias node) {
+    _visitTypedef(node);
+  }
+
+  @override
+  void visitGenericTypeAlias(GenericTypeAlias node) {
+    _visitTypedef(node);
+  }
+
+  @override
+  void visitMethodDeclaration(MethodDeclaration node) {
+    String kind;
+    if (node.isGetter) {
+      kind = 'Getter';
+    } else if (node.isSetter) {
+      kind = 'Setter';
+    } else if (node.isOperator) {
+      kind = 'Operator';
+    } else {
+      kind = 'Method';
+    }
+    var children = <ComparisonNode>[];
+    var visitor = _AnalyzerVisitor(_typeProvider, children);
+    visitor._visitTypeParameters(node.declaredElement.typeParameters);
+    visitor._visitParameters(node.parameters);
+    children
+        .add(_translateType('Return type: ', node.declaredElement.returnType));
+    _resultNodes
+        .add(ComparisonNode.sorted('$kind ${node.name.name}', children));
+  }
+
+  @override
+  Null visitNode(AstNode node) {
+    throw new UnimplementedError('AnalyzerVisitor: ${node.runtimeType}');
+  }
+
+  @override
+  void visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
+    node.variables.accept(this);
+  }
+
+  @override
+  void visitVariableDeclarationList(VariableDeclarationList node) {
+    for (var variableDeclaration in node.variables) {
+      var children = <ComparisonNode>[];
+      children.add(
+          _translateType('Type: ', variableDeclaration.declaredElement.type));
+      // Kernel calls both fields and top level variable declarations "fields".
+      _resultNodes.add(ComparisonNode.sorted(
+          'Field ${variableDeclaration.name.name}', children));
+    }
+  }
+
+  /// Converts the analyzer representation of a type into a ComparisonNode.
+  ComparisonNode _translateType(String prefix, DartType type) {
+    if (type is InterfaceType) {
+      var children = <ComparisonNode>[];
+      children
+          .add(ComparisonNode('Library: ${type.element.librarySource.uri}'));
+      for (int i = 0; i < type.typeArguments.length; i++) {
+        children.add(_translateType('Type arg $i: ', type.typeArguments[i]));
+      }
+      return ComparisonNode('${prefix}InterfaceType ${type.name}', children);
+    }
+    if (type is TypeParameterType) {
+      // TODO(paulberry): disambiguate if needed.
+      return ComparisonNode('${prefix}TypeParameterType: ${type.name}');
+    }
+    if (type.isDynamic) {
+      return ComparisonNode('${prefix}Dynamic');
+    }
+    if (type.isVoid) {
+      return ComparisonNode('${prefix}Void');
+    }
+    if (type is FunctionType) {
+      var children = <ComparisonNode>[];
+      var visitor = _AnalyzerVisitor(_typeProvider, children);
+      visitor._visitTypeParameters(type.typeFormals);
+      int positionalParameterIndex = 0;
+      for (var parameterElement in type.parameters) {
+        var kind = parameterElement.isNotOptional
+            ? 'Required'
+            : parameterElement.isOptionalPositional ? 'Optional' : 'Named';
+        var name = parameterElement.isNamed
+            ? parameterElement.name
+            : '${positionalParameterIndex++}';
+        children.add(
+            _translateType('$kind parameter $name: ', parameterElement.type));
+      }
+      return ComparisonNode.sorted('${prefix}FunctionType', children);
+    }
+    throw new UnimplementedError('_translateType: ${type.runtimeType}');
+  }
+
+  /// Visits all the nodes in [nodes].
+  void _visitList(List<AstNode> nodes) {
+    for (var astNode in nodes) {
+      astNode.accept(this);
+    }
+  }
+
+  void _visitParameters(FormalParameterList parameters) {
+    var children = <ComparisonNode>[];
+    // Note: parameters == null for getters
+    if (parameters != null) {
+      for (var parameter in parameters.parameters) {
+        var element = parameter.declaredElement;
+        var kind = element.isNotOptional
+            ? 'Required'
+            : element.isOptionalPositional ? 'Optional' : 'Named';
+        var parameterChildren = <ComparisonNode>[];
+        parameterChildren.add(_translateType('Type: ', element.type));
+        children.add(
+            ComparisonNode.sorted('$kind: ${element.name}', parameterChildren));
+      }
+    }
+    _resultNodes.add(ComparisonNode('Parameters', children));
+  }
+
+  void _visitTypedef(TypeAlias node) {
+    var children = <ComparisonNode>[];
+    var visitor = _AnalyzerVisitor(_typeProvider, children);
+    GenericTypeAliasElement element = node.declaredElement;
+    visitor._visitTypeParameters(element.typeParameters);
+    children.add(_translateType('Type: ', element.function.type));
+    _resultNodes
+        .add(ComparisonNode.sorted('Typedef ${node.name.name}', children));
+  }
+
+  void _visitTypeParameters(List<TypeParameterElement> typeParameters) {
+    for (int i = 0; i < typeParameters.length; i++) {
+      _resultNodes.add(ComparisonNode(
+          'Type parameter $i: ${typeParameters[i].name}', [
+        _translateType(
+            'Bound: ', typeParameters[i].bound ?? _typeProvider.objectType)
+      ]));
+    }
+  }
+}
diff --git a/pkg/analyzer_fe_comparison/lib/src/comparison_node.dart b/pkg/analyzer_fe_comparison/lib/src/comparison_node.dart
new file mode 100644
index 0000000..50e1441c
--- /dev/null
+++ b/pkg/analyzer_fe_comparison/lib/src/comparison_node.dart
@@ -0,0 +1,133 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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:math';
+
+/// [ComparisonNode] defines a simple tree structure that can be used to compare
+/// two representations of Dart code.
+///
+/// Each node contains a textual string and a list of child nodes.
+class ComparisonNode {
+  final String text;
+  final List<ComparisonNode> children;
+
+  ComparisonNode(this.text, [List<ComparisonNode> children])
+      : children = children ?? <ComparisonNode>[];
+
+  factory ComparisonNode.sorted(
+          String text, Iterable<ComparisonNode> children) =>
+      ComparisonNode(text, sortList(children));
+
+  @override
+  bool operator ==(Object other) {
+    if (other is ComparisonNode) {
+      if (text != other.text) return false;
+      if (children.length != other.children.length) return false;
+      for (int i = 0; i < children.length; i++) {
+        if (children[i] != other.children[i]) return false;
+      }
+      return true;
+    }
+    return false;
+  }
+
+  String toString({String newline: '\n'}) {
+    var lines = ['$text'];
+    var indentedNewline = '$newline  ';
+    for (var child in children) {
+      lines.add(child.toString(newline: indentedNewline));
+    }
+    return lines.join(indentedNewline);
+  }
+
+  static ComparisonNode diff(ComparisonNode a, ComparisonNode b) {
+    String diffText;
+    if (a.text == b.text) {
+      diffText = '= ${a.text}';
+    } else {
+      diffText = 'x ${a.text} -> ${b.text}';
+    }
+    return ComparisonNode(diffText, diffLists(a.children, b.children));
+  }
+
+  static List<ComparisonNode> diffLists(
+      List<ComparisonNode> a, List<ComparisonNode> b) {
+    // Note: this is an O(n) "poor man's" diff algorithm; it produces optimal
+    // results if the incoming results are sorted by text or if there is just
+    // one contiguous hunk of differences.  Otherwise it may not find the
+    // shortest diff.  This should be sufficient for our purposes, since we are
+    // not expecting many diffs.
+
+    // We'll exclude common nodes at the beginning of both lists
+    var shorterLength = min(a.length, b.length);
+    var commonInitialNodes = 0;
+    while (commonInitialNodes < shorterLength &&
+        a[commonInitialNodes] == b[commonInitialNodes]) {
+      commonInitialNodes++;
+    }
+
+    // Fast exit if a == b
+    if (commonInitialNodes == a.length && a.length == b.length) {
+      return [];
+    }
+
+    // We'll exclude common nodes at the end of both lists (note: we don't want
+    // to overcount by re-testing the common nodes identified above)
+    var commonFinalNodes = 0;
+    while (commonInitialNodes + commonFinalNodes < shorterLength &&
+        a[a.length - commonFinalNodes - 1] ==
+            b[b.length - commonFinalNodes - 1]) {
+      commonFinalNodes++;
+    }
+
+    // Walk the remaining nodes starting at the first node that's different,
+    // matching up nodes by their text.
+    var aIndex = commonInitialNodes;
+    var bIndex = commonInitialNodes;
+    var aEnd = a.length - commonFinalNodes;
+    var bEnd = b.length - commonFinalNodes;
+    var result = <ComparisonNode>[];
+    while (aIndex < aEnd && bIndex < bEnd) {
+      var comparisonResult = a[aIndex].text.compareTo(b[bIndex].text);
+      if (comparisonResult < 0) {
+        // a[aIndex].text sorts before b[bIndex].text.  Assume that this means
+        // a[aIndex] was removed.
+        result.add(diff(a[aIndex++], ComparisonNode('(removed)')));
+      } else if (comparisonResult > 0) {
+        // b[bIndex].text sorts before a[aIndex].text.  Assume that this means
+        // b[bIndex] was added.
+        result.add(diff(ComparisonNode('(added)'), b[bIndex++]));
+      } else {
+        // a[aIndex].text matches b[bIndex].text, so diff the nodes.
+        var difference = diff(a[aIndex++], b[bIndex++]);
+        if (difference.text.startsWith('=') && difference.children.isEmpty) {
+          // Nodes are identical, so don't add anything
+        } else {
+          result.add(difference);
+        }
+      }
+    }
+
+    // Deal with any nodes left over.
+    while (aIndex < aEnd) {
+      result.add(diff(a[aIndex++], ComparisonNode('(removed)')));
+    }
+    while (bIndex < bEnd) {
+      result.add(diff(ComparisonNode('(added)'), b[bIndex++]));
+    }
+
+    // If we get here and we haven't added any nodes, something has gone wrong.
+    if (result.isEmpty) {
+      throw StateError('Diff produced empty diff for non-matching lists');
+    }
+
+    return result;
+  }
+
+  static List<ComparisonNode> sortList(Iterable<ComparisonNode> nodes) {
+    var result = nodes.toList();
+    result.sort((a, b) => a.text.compareTo(b.text));
+    return result;
+  }
+}
diff --git a/pkg/analyzer_fe_comparison/lib/src/kernel.dart b/pkg/analyzer_fe_comparison/lib/src/kernel.dart
new file mode 100644
index 0000000..935dd2c
--- /dev/null
+++ b/pkg/analyzer_fe_comparison/lib/src/kernel.dart
@@ -0,0 +1,277 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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:analyzer_fe_comparison/src/comparison_node.dart';
+import 'package:front_end/src/api_prototype/compiler_options.dart';
+import 'package:front_end/src/api_prototype/kernel_generator.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
+import 'package:kernel/ast.dart';
+import 'package:kernel/target/targets.dart';
+
+/// Compiles the given [inputs] to kernel using the front_end, and returns a
+/// [ComparisonNode] representing them.
+Future<ComparisonNode> driveKernel(
+    List<Uri> inputs, Uri packagesFileUri, Uri platformUri) async {
+  var targetFlags = TargetFlags(strongMode: true, syncAsync: true);
+  var target = NoneTarget(targetFlags);
+  var fileSystem = StandardFileSystem.instance;
+
+  var compilerOptions = CompilerOptions()
+    ..fileSystem = fileSystem
+    ..packagesFileUri = packagesFileUri
+    ..sdkSummary = platformUri
+    ..strongMode = true
+    ..target = target
+    ..throwOnErrorsForDebugging = true
+    ..embedSourceText = false;
+
+  var component = await kernelForComponent(inputs, compilerOptions);
+  var libraryNodes = <ComparisonNode>[];
+  var visitor = _KernelVisitor(libraryNodes);
+  for (var library in component.libraries) {
+    if (inputs.contains(library.importUri)) {
+      library.accept(visitor);
+    }
+  }
+  return ComparisonNode.sorted('Component', libraryNodes);
+}
+
+/// Visitor for serializing a kernel representation of a program into
+/// ComparisonNodes.
+///
+/// Results are accumulated into [_resultNodes].
+class _KernelVisitor extends TreeVisitor<void> {
+  final List<ComparisonNode> _resultNodes;
+
+  _KernelVisitor(this._resultNodes);
+
+  @override
+  void defaultTreeNode(TreeNode node) {
+    throw new UnimplementedError('KernelVisitor: ${node.runtimeType}');
+  }
+
+  @override
+  void visitClass(Class class_) {
+    if (class_.isAnonymousMixin) return null;
+    var kind = class_.isEnum ? 'Enum' : 'Class';
+    var children = <ComparisonNode>[];
+    var visitor = _KernelVisitor(children);
+    if (class_.isEnum) {
+      for (var field in class_.fields) {
+        if (!field.isStatic) continue;
+        if (field.name.name == 'values') continue;
+        // TODO(paulberry): handle index
+        children.add(ComparisonNode('EnumValue ${field.name.name}'));
+      }
+    } else {
+      visitor._visitTypeParameters(class_.typeParameters);
+      if (class_.supertype != null) {
+        var declaredSupertype = class_.supertype.asInterfaceType;
+        var mixedInTypes = <DartType>[];
+        while (declaredSupertype.classNode.isAnonymousMixin) {
+          // Since we're walking from the class to its declared supertype, we
+          // encounter the mixins in the reverse order that they were declared,
+          // so we have to use [List.insert] to add them to [mixedInTypes].
+          mixedInTypes.insert(
+              0, declaredSupertype.classNode.mixedInType.asInterfaceType);
+          declaredSupertype =
+              declaredSupertype.classNode.supertype.asInterfaceType;
+        }
+        children.add(_TypeVisitor.translate('Extends: ', declaredSupertype));
+        for (int i = 0; i < mixedInTypes.length; i++) {
+          children.add(_TypeVisitor.translate('Mixin $i: ', mixedInTypes[i]));
+        }
+      }
+      for (int i = 0; i < class_.implementedTypes.length; i++) {
+        children.add(_TypeVisitor.translate(
+            'Implements $i: ', class_.implementedTypes[i].asInterfaceType));
+      }
+      visitor._visitList(class_.fields);
+      visitor._visitList(class_.constructors);
+      visitor._visitList(class_.procedures);
+    }
+    // TODO(paulberry): handle more fields from Class
+    _resultNodes.add(ComparisonNode.sorted('$kind ${class_.name}', children));
+  }
+
+  @override
+  void visitConstructor(Constructor constructor) {
+    if (constructor.isSynthetic) return null;
+    var name = constructor.name.name;
+    if (name.isEmpty) {
+      name = '(unnamed)';
+    }
+    var children = <ComparisonNode>[];
+    var visitor = _KernelVisitor(children);
+    constructor.function.accept(visitor);
+    // TODO(paulberry): handle more fields from Constructor
+    _resultNodes.add(ComparisonNode.sorted('Constructor $name', children));
+  }
+
+  @override
+  void visitField(Field field) {
+    if (field.name.name == '_redirecting#') return null;
+    var children = <ComparisonNode>[];
+    children.add(_TypeVisitor.translate('Type: ', field.type));
+    // TODO(paulberry): handle more fields from Field
+    _resultNodes
+        .add(ComparisonNode.sorted('Field ${field.name.name}', children));
+  }
+
+  @override
+  void visitFunctionNode(FunctionNode node) {
+    var parent = node.parent;
+    if (!(parent is Constructor || parent is Procedure && parent.isFactory)) {
+      _visitTypeParameters(node.typeParameters);
+      _resultNodes
+          .add(_TypeVisitor.translate('Return type: ', node.returnType));
+    }
+    var parameterChildren = <ComparisonNode>[];
+    var parameterVisitor = _KernelVisitor(parameterChildren);
+    for (int i = 0; i < node.positionalParameters.length; i++) {
+      parameterVisitor._visitParameter(node.positionalParameters[i],
+          i < node.requiredParameterCount ? 'Required' : 'Optional');
+    }
+    for (int i = 0; i < node.namedParameters.length; i++) {
+      parameterVisitor._visitParameter(node.namedParameters[i], 'Named');
+    }
+    _resultNodes.add(ComparisonNode('Parameters', parameterChildren));
+    // TODO(paulberry): handle more fields from FunctionNode
+  }
+
+  @override
+  void visitLibrary(Library library) {
+    var children = <ComparisonNode>[];
+    if (library.name != null) {
+      children.add(ComparisonNode('name=${library.name}'));
+    }
+    var visitor = _KernelVisitor(children);
+    visitor._visitList(library.typedefs);
+    visitor._visitList(library.classes);
+    visitor._visitList(library.procedures);
+    visitor._visitList(library.fields);
+    // TODO(paulberry): handle more fields from Library
+    _resultNodes
+        .add(ComparisonNode.sorted(library.importUri.toString(), children));
+  }
+
+  @override
+  void visitProcedure(Procedure procedure) {
+    if (procedure.isForwardingStub) return null;
+    // TODO(paulberry): add an annotation to the ComparisonNode when the
+    // procedure is a factory.
+    var kind = procedure.isFactory
+        ? 'Constructor'
+        : procedure.kind.toString().replaceAll('ProcedureKind.', '');
+    var name = procedure.name.name;
+    if (name.isEmpty) {
+      name = '(unnamed)';
+    }
+    var children = <ComparisonNode>[];
+    var visitor = _KernelVisitor(children);
+    procedure.function.accept(visitor);
+    // TODO(paulberry): handle more fields from Procedure
+    _resultNodes.add(ComparisonNode.sorted('$kind $name', children));
+  }
+
+  @override
+  void visitTypedef(Typedef typedef) {
+    var children = <ComparisonNode>[];
+    var visitor = _KernelVisitor(children);
+    visitor._visitTypeParameters(typedef.typeParameters);
+    children.add(_TypeVisitor.translate('Type: ', typedef.type));
+    // TODO(paulberry): handle more fields from Typedef
+    _resultNodes
+        .add(ComparisonNode.sorted('Typedef ${typedef.name}', children));
+  }
+
+  /// Visits all the nodes in [nodes].
+  void _visitList(List<TreeNode> nodes) {
+    for (var node in nodes) {
+      node.accept(this);
+    }
+  }
+
+  void _visitParameter(VariableDeclaration parameter, String kind) {
+    var children = <ComparisonNode>[];
+    children.add(_TypeVisitor.translate('Type: ', parameter.type));
+    // TODO(paulberry): handle more fields from VariableDeclaration
+    _resultNodes
+        .add(ComparisonNode.sorted('$kind: ${parameter.name}', children));
+  }
+
+  void _visitTypeParameters(List<TypeParameter> typeParameters) {
+    for (int i = 0; i < typeParameters.length; i++) {
+      _resultNodes.add(ComparisonNode(
+          'Type parameter $i: ${typeParameters[i].name}',
+          [_TypeVisitor.translate('Bound: ', typeParameters[i].bound)]));
+    }
+  }
+}
+
+/// Visitor for serializing a kernel representation of a type into
+/// ComparisonNodes.
+class _TypeVisitor extends DartTypeVisitor<ComparisonNode> {
+  /// Text to prepend to the node text.
+  String _prefix;
+
+  _TypeVisitor(this._prefix);
+
+  @override
+  ComparisonNode defaultDartType(DartType node) {
+    throw new UnimplementedError('_TypeVisitor: ${node.runtimeType}');
+  }
+
+  @override
+  ComparisonNode visitDynamicType(DynamicType node) {
+    return ComparisonNode('${_prefix}Dynamic');
+  }
+
+  @override
+  ComparisonNode visitFunctionType(FunctionType node) {
+    var children = <ComparisonNode>[];
+    var visitor = _KernelVisitor(children);
+    visitor._visitTypeParameters(node.typeParameters);
+    for (int i = 0; i < node.positionalParameters.length; i++) {
+      var kind = i < node.requiredParameterCount ? 'Required' : 'Optional';
+      children
+          .add(translate('$kind parameter $i: ', node.positionalParameters[i]));
+    }
+    for (var namedType in node.namedParameters) {
+      children
+          .add(translate('Named parameter ${namedType.name}', namedType.type));
+    }
+    return ComparisonNode.sorted('${_prefix}FunctionType', children);
+  }
+
+  @override
+  ComparisonNode visitInterfaceType(InterfaceType node) {
+    var children = <ComparisonNode>[];
+    children.add(ComparisonNode(
+        'Library: ${node.classNode.enclosingLibrary.importUri}'));
+    for (int i = 0; i < node.typeArguments.length; i++) {
+      children.add(translate('Type arg $i: ', node.typeArguments[i]));
+    }
+    return ComparisonNode(
+        '${_prefix}InterfaceType ${node.classNode.name}', children);
+  }
+
+  @override
+  ComparisonNode visitTypeParameterType(TypeParameterType node) {
+    // TODO(paulberry): disambiguate if needed.
+    return ComparisonNode(
+        '${_prefix}TypeParameterType: ${node.parameter.name}');
+  }
+
+  @override
+  ComparisonNode visitVoidType(VoidType node) {
+    return ComparisonNode('${_prefix}Void');
+  }
+
+  static ComparisonNode translate(String prefix, DartType type) {
+    return type.accept(new _TypeVisitor(prefix));
+  }
+}
diff --git a/pkg/analyzer_fe_comparison/pubspec.yaml b/pkg/analyzer_fe_comparison/pubspec.yaml
new file mode 100644
index 0000000..94e9893
--- /dev/null
+++ b/pkg/analyzer_fe_comparison/pubspec.yaml
@@ -0,0 +1,9 @@
+name: analyzer_fe_comparison
+version: 1.0.0
+author: Dart Team <misc@dartlang.org>
+description: Tool for comparing the behavior of the analyzer and the front end.
+homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_fe_comparison
+environment:
+  sdk: '>=2.0.0-dev-48.0 <3.0.0'
+dependencies:
+  kernel: ^0.3.4
diff --git a/pkg/analyzer_fe_comparison/tool/compare_packages.dart b/pkg/analyzer_fe_comparison/tool/compare_packages.dart
new file mode 100644
index 0000000..efb0efe
--- /dev/null
+++ b/pkg/analyzer_fe_comparison/tool/compare_packages.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.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:analyzer_fe_comparison/comparison.dart';
+import 'package:path/path.dart' as path;
+
+/// Compares the analyzer and front_end behavior when compiling a package.
+///
+/// Currently hardcoded to use the package "analyzer".
+main() async {
+  var scriptPath = Platform.script.toFilePath();
+  var sdkRepoPath =
+      path.normalize(path.join(path.dirname(scriptPath), '..', '..', '..'));
+  var buildPath = await _findBuildDir(sdkRepoPath, 'ReleaseX64');
+  var dillPath = path.join(buildPath, 'vm_platform_strong.dill');
+  var analyzerLibPath = path.join(sdkRepoPath, 'pkg', 'analyzer', 'lib');
+  var packagesFilePath = path.join(sdkRepoPath, '.packages');
+  compare(dillPath, analyzerLibPath, packagesFilePath);
+}
+
+Future<String> _findBuildDir(String sdkRepoPath, String targetName) async {
+  for (var subdirName in ['out', 'xcodebuild']) {
+    var candidatePath = path.join(sdkRepoPath, subdirName, targetName);
+    if (await new Directory(candidatePath).exists()) {
+      return candidatePath;
+    }
+  }
+  throw new StateError('Cannot find build directory');
+}
diff --git a/pkg/analyzer_plugin/doc/api.html b/pkg/analyzer_plugin/doc/api.html
index dfe6470..6ab809c 100644
--- a/pkg/analyzer_plugin/doc/api.html
+++ b/pkg/analyzer_plugin/doc/api.html
@@ -1265,7 +1265,7 @@
       An enumeration of the kinds of elements.
     </p>
     
-  <dl><dt class="value">CLASS</dt><dt class="value">CLASS_TYPE_ALIAS</dt><dt class="value">COMPILATION_UNIT</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">CONSTRUCTOR_INVOCATION</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FILE</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_INVOCATION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">PARAMETER</dt><dt class="value">PREFIX</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
+  <dl><dt class="value">CLASS</dt><dt class="value">CLASS_TYPE_ALIAS</dt><dt class="value">COMPILATION_UNIT</dt><dt class="value">CONSTRUCTOR</dt><dt class="value">CONSTRUCTOR_INVOCATION</dt><dt class="value">ENUM</dt><dt class="value">ENUM_CONSTANT</dt><dt class="value">FIELD</dt><dt class="value">FILE</dt><dt class="value">FUNCTION</dt><dt class="value">FUNCTION_INVOCATION</dt><dt class="value">FUNCTION_TYPE_ALIAS</dt><dt class="value">GETTER</dt><dt class="value">LABEL</dt><dt class="value">LIBRARY</dt><dt class="value">LOCAL_VARIABLE</dt><dt class="value">METHOD</dt><dt class="value">MIXIN</dt><dt class="value">PARAMETER</dt><dt class="value">PREFIX</dt><dt class="value">SETTER</dt><dt class="value">TOP_LEVEL_VARIABLE</dt><dt class="value">TYPE_PARAMETER</dt><dt class="value">UNIT_TEST_GROUP</dt><dt class="value">UNIT_TEST_TEST</dt><dt class="value">UNKNOWN</dt></dl></dd><dt class="typeDefinition"><a name="type_FilePath">FilePath: String</a></dt><dd>
     
     <p>
       The absolute, normalized path of a file.
diff --git a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
index f696947..6d8ea9c 100644
--- a/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
+++ b/pkg/analyzer_plugin/lib/protocol/protocol_common.dart
@@ -1776,6 +1776,7 @@
  *   LIBRARY
  *   LOCAL_VARIABLE
  *   METHOD
+ *   MIXIN
  *   PARAMETER
  *   PREFIX
  *   SETTER
@@ -1829,6 +1830,8 @@
 
   static const ElementKind METHOD = const ElementKind._("METHOD");
 
+  static const ElementKind MIXIN = const ElementKind._("MIXIN");
+
   static const ElementKind PARAMETER = const ElementKind._("PARAMETER");
 
   static const ElementKind PREFIX = const ElementKind._("PREFIX");
@@ -1870,6 +1873,7 @@
     LIBRARY,
     LOCAL_VARIABLE,
     METHOD,
+    MIXIN,
     PARAMETER,
     PREFIX,
     SETTER,
@@ -1921,6 +1925,8 @@
         return LOCAL_VARIABLE;
       case "METHOD":
         return METHOD;
+      case "MIXIN":
+        return MIXIN;
       case "PARAMETER":
         return PARAMETER;
       case "PREFIX":
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index ce39f06..991fe82 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1142,9 +1142,14 @@
       throw new ArgumentError(
           'The function must have a synchronous, non-generator body.');
     }
-    addInsertion(body.offset, (EditBuilder builder) {
-      builder.write('async ');
-    });
+    if (body is! EmptyFunctionBody) {
+      addInsertion(body.offset, (EditBuilder builder) {
+        if (_isFusedWithPreviousToken(body.beginToken)) {
+          builder.write(' ');
+        }
+        builder.write('async ');
+      });
+    }
     _replaceReturnTypeWithFuture(body, typeProvider);
   }
 
@@ -1449,6 +1454,10 @@
       }
     }
   }
+
+  static bool _isFusedWithPreviousToken(Token token) {
+    return token.previous.end == token.offset;
+  }
 }
 
 /**
diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml
index 829c396..d310999 100644
--- a/pkg/analyzer_plugin/pubspec.yaml
+++ b/pkg/analyzer_plugin/pubspec.yaml
@@ -8,7 +8,7 @@
   sdk: '>=1.8.0 <3.0.0'
 
 dependencies:
-  analyzer: '>=0.31.2-alpha.1 <0.33.0'
+  analyzer: '^0.32.5'
   charcode: '^1.1.0'
   html: '^0.13.1'
   meta: ^1.0.2
diff --git a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
index 2d6df20..e28e408 100644
--- a/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
+++ b/pkg/analyzer_plugin/test/integration/support/protocol_matchers.dart
@@ -268,6 +268,7 @@
  *   LIBRARY
  *   LOCAL_VARIABLE
  *   METHOD
+ *   MIXIN
  *   PARAMETER
  *   PREFIX
  *   SETTER
@@ -296,6 +297,7 @@
   "LIBRARY",
   "LOCAL_VARIABLE",
   "METHOD",
+  "MIXIN",
   "PARAMETER",
   "PREFIX",
   "SETTER",
diff --git a/pkg/analyzer_plugin/test/support/mock_sdk.dart b/pkg/analyzer_plugin/test/support/mock_sdk.dart
index bedead0..1b78cca 100644
--- a/pkg/analyzer_plugin/test/support/mock_sdk.dart
+++ b/pkg/analyzer_plugin/test/support/mock_sdk.dart
@@ -288,8 +288,6 @@
     if (generateSummaryFiles) {
       List<int> bytes = _computeLinkedBundleBytes();
       provider.newFileWithBytes(
-          provider.convertPath('/lib/_internal/spec.sum'), bytes);
-      provider.newFileWithBytes(
           provider.convertPath('/lib/_internal/strong.sum'), bytes);
     }
   }
@@ -356,7 +354,7 @@
   PackageBundle getLinkedBundle() {
     if (_bundle == null) {
       resource.File summaryFile =
-          provider.getFile(provider.convertPath('/lib/_internal/spec.sum'));
+          provider.getFile(provider.convertPath('/lib/_internal/strong.sum'));
       List<int> bytes;
       if (summaryFile.exists) {
         bytes = summaryFile.readAsBytesSync();
@@ -407,7 +405,7 @@
     List<Source> librarySources = sdkLibraries
         .map((SdkLibrary library) => mapDartUri(library.shortName))
         .toList();
-    return new SummaryBuilder(librarySources, context, true).build();
+    return new SummaryBuilder(librarySources, context).build();
   }
 }
 
diff --git a/pkg/analyzer_plugin/tool/spec/common_types_spec.html b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
index ba70882..ed8daca 100644
--- a/pkg/analyzer_plugin/tool/spec/common_types_spec.html
+++ b/pkg/analyzer_plugin/tool/spec/common_types_spec.html
@@ -6,7 +6,7 @@
 </head>
 <body>
 <h1>Common Types</h1>
-<version>1.0.3</version>
+<version>1.1.0</version>
 <p>
   This document contains a specification of the types that are common between
   the analysis server wire protocol and the analysis server plugin wire
@@ -507,6 +507,7 @@
       <value><code>LIBRARY</code></value>
       <value><code>LOCAL_VARIABLE</code></value>
       <value><code>METHOD</code></value>
+      <value><code>MIXIN</code></value>
       <value><code>PARAMETER</code></value>
       <value><code>PREFIX</code></value>
       <value><code>SETTER</code></value>
diff --git a/pkg/compiler/analysis_options.yaml b/pkg/compiler/analysis_options.yaml
index cb84090..050bbb3 100644
--- a/pkg/compiler/analysis_options.yaml
+++ b/pkg/compiler/analysis_options.yaml
@@ -3,7 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 analyzer:
-  strong-mode: true
   language:
     enableSuperMixins: false
   errors:
diff --git a/pkg/compiler/analysis_options_dart.yaml b/pkg/compiler/analysis_options_dart.yaml
deleted file mode 100644
index 532b8b5..0000000
--- a/pkg/compiler/analysis_options_dart.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-analyzer:
-  strong-mode: false
-  language:
-    enableSuperMixins: false
-  errors:
-    todo: ignore
-
-    deprecated_member_use: ignore
diff --git a/pkg/compiler/lib/src/backend_strategy.dart b/pkg/compiler/lib/src/backend_strategy.dart
index cced759..d7d5d0d 100644
--- a/pkg/compiler/lib/src/backend_strategy.dart
+++ b/pkg/compiler/lib/src/backend_strategy.dart
@@ -58,6 +58,5 @@
 
   /// Creates the [TypesInferrer] used by this strategy.
   TypesInferrer createTypesInferrer(
-      JClosedWorld closedWorld, InferredDataBuilder inferredDataBuilder,
-      {bool disableTypeInference: false});
+      JClosedWorld closedWorld, InferredDataBuilder inferredDataBuilder);
 }
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index b022af7..64423bf 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -22,10 +22,7 @@
 import 'js_backend/js_backend.dart' show JavaScriptBackend;
 import 'types/abstract_value_domain.dart';
 import 'types/types.dart'
-    show
-        GlobalTypeInferenceElementResult,
-        GlobalTypeInferenceMemberResult,
-        GlobalTypeInferenceResults;
+    show GlobalTypeInferenceMemberResult, GlobalTypeInferenceResults;
 import 'universe/world_builder.dart' show CodegenWorldBuilder;
 import 'universe/world_impact.dart'
     show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl;
@@ -112,7 +109,7 @@
   GlobalTypeInferenceMemberResult _resultOfMember(MemberEntity e) =>
       _globalInferenceResults.resultOfMember(e);
 
-  GlobalTypeInferenceElementResult _resultOfParameter(Local e) =>
+  AbstractValue _resultOfParameter(Local e) =>
       _globalInferenceResults.resultOfParameter(e);
 
   FieldInfo visitField(FieldEntity field, {ClassEntity containingClass}) {
@@ -280,7 +277,7 @@
     List<ParameterInfo> parameters = <ParameterInfo>[];
     List<String> inferredParameterTypes = <String>[];
     codegenWorldBuilder.forEachParameterAsLocal(function, (parameter) {
-      inferredParameterTypes.add('${_resultOfParameter(parameter).type}');
+      inferredParameterTypes.add('${_resultOfParameter(parameter)}');
     });
     int parameterIndex = 0;
     codegenWorldBuilder.forEachParameter(function, (type, name, _) {
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index 777d861..a25c9fc 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -121,8 +121,6 @@
   // TODO(johnniwinther): Make this private again.
   GlobalTypeInferenceElementData dataOfMember(MemberEntity element);
 
-  GlobalTypeInferenceElementData lookupDataOfMember(MemberEntity element);
-
   bool checkIfExposesThis(ConstructorEntity element);
 
   void recordExposesThis(ConstructorEntity element, bool exposesThis);
@@ -225,6 +223,8 @@
 
   bool returnsMapValueType(Selector selector, AbstractValue mask);
 
+  void close();
+
   void clear();
 
   /// Returns true if global optimizations such as type inferencing can apply to
@@ -280,8 +280,6 @@
   final Map<ir.Node, TypeInformation> concreteTypes =
       new Map<ir.Node, TypeInformation>();
 
-  final Map<ir.Node, TypeInformation> concreteKernelTypes =
-      new Map<ir.Node, TypeInformation>();
   final Set<ConstructorEntity> generativeConstructorsExposingThis =
       new Set<ConstructorEntity>();
 
@@ -329,9 +327,6 @@
   GlobalTypeInferenceElementData dataOfMember(MemberEntity element) =>
       _memberData[element] ??= new KernelGlobalTypeInferenceElementData();
 
-  GlobalTypeInferenceElementData lookupDataOfMember(MemberEntity element) =>
-      _memberData[element];
-
   /**
    * Update [sideEffects] with the side effects of [callee] being
    * called with [selector].
@@ -1167,11 +1162,18 @@
     return info;
   }
 
+  void close() {
+    for (MemberTypeInformation typeInformation
+        in types.memberTypeInformations.values) {
+      typeInformation.computeIsCalledOnce();
+    }
+  }
+
   void clear() {
+    if (retainDataForTesting) return;
+
     void cleanup(TypeInformation info) {
-      if (!retainDataForTesting) {
-        info.cleanup();
-      }
+      info.cleanup();
     }
 
     types.allocatedCalls.forEach(cleanup);
@@ -1195,6 +1197,8 @@
 
     types.allocatedMaps.values.forEach(cleanup);
     types.allocatedLists.values.forEach(cleanup);
+
+    _memberData.clear();
   }
 
   Iterable<MemberEntity> getCallersOfForTesting(MemberEntity element) {
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index 72fad8b..4319b27 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -11,11 +11,11 @@
 import '../compiler.dart';
 import '../elements/entities.dart';
 import '../js_backend/inferred_data.dart';
+import '../js_model/elements.dart' show JClosureCallMethod;
 import '../js_model/locals.dart';
 import '../kernel/element_map.dart';
 import '../types/abstract_value_domain.dart';
 import '../types/types.dart';
-import '../universe/selector.dart' show Selector;
 import '../world.dart';
 import 'inferrer_engine.dart';
 import 'type_graph_nodes.dart';
@@ -53,7 +53,6 @@
 
 class TypeGraphInferrer implements TypesInferrer {
   InferrerEngine inferrer;
-  final bool _disableTypeInference;
   final JClosedWorld closedWorld;
 
   final Compiler _compiler;
@@ -63,21 +62,17 @@
   final InferredDataBuilder _inferredDataBuilder;
 
   TypeGraphInferrer(this._compiler, this._elementMap, this._globalLocalsMap,
-      this._closureDataLookup, this.closedWorld, this._inferredDataBuilder,
-      {bool disableTypeInference: false})
-      : this._disableTypeInference = disableTypeInference;
+      this._closureDataLookup, this.closedWorld, this._inferredDataBuilder);
 
   String get name => 'Graph inferrer';
 
   AbstractValueDomain get abstractValueDomain =>
       closedWorld.abstractValueDomain;
 
-  AbstractValue get _dynamicType => abstractValueDomain.dynamicType;
-
-  void analyzeMain(FunctionEntity main) {
+  GlobalTypeInferenceResults analyzeMain(FunctionEntity main) {
     inferrer = createInferrerEngineFor(main);
-    if (_disableTypeInference) return;
     inferrer.runOverAllElements();
+    return buildResults();
   }
 
   InferrerEngine createInferrerEngineFor(FunctionEntity main) {
@@ -96,90 +91,95 @@
         _inferredDataBuilder);
   }
 
-  AbstractValue getReturnTypeOfMember(MemberEntity element) {
-    if (_disableTypeInference) return _dynamicType;
-    // Currently, closure calls return dynamic.
-    if (element is! FunctionEntity) return _dynamicType;
-    return inferrer.types.getInferredTypeOfMember(element).type;
-  }
-
-  AbstractValue getReturnTypeOfParameter(Local element) {
-    if (_disableTypeInference) return _dynamicType;
-    return _dynamicType;
-  }
-
-  AbstractValue getTypeOfMember(MemberEntity element) {
-    if (_disableTypeInference) return _dynamicType;
-    // The inferrer stores the return type for a function, so we have to
-    // be careful to not return it here.
-    if (element is FunctionEntity) return abstractValueDomain.functionType;
-    return inferrer.types.getInferredTypeOfMember(element).type;
-  }
-
-  AbstractValue getTypeOfParameter(Local element) {
-    if (_disableTypeInference) return _dynamicType;
-    // The inferrer stores the return type for a function, so we have to
-    // be careful to not return it here.
-    return inferrer.types.getInferredTypeOfParameter(element).type;
-  }
-
-  AbstractValue getTypeForNewList(ir.Node node) {
-    if (_disableTypeInference) return _dynamicType;
-    return inferrer.types.allocatedLists[node].type;
-  }
-
-  bool isFixedArrayCheckedForGrowable(ir.Node node) {
-    if (_disableTypeInference) return true;
-    ListTypeInformation info = inferrer.types.allocatedLists[node];
-    return info.checksGrowable;
-  }
-
-  AbstractValue getTypeOfSelector(Selector selector, AbstractValue receiver) {
-    if (_disableTypeInference) return _dynamicType;
-    // Bailout for closure calls. We're not tracking types of
-    // closures.
-    if (selector.isClosureCall) return _dynamicType;
-    if (selector.isSetter || selector.isIndexSet) {
-      return _dynamicType;
-    }
-    if (inferrer.returnsListElementType(selector, receiver)) {
-      return abstractValueDomain.getContainerElementType(receiver);
-    }
-    if (inferrer.returnsMapValueType(selector, receiver)) {
-      return abstractValueDomain.getMapValueType(receiver);
-    }
-
-    if (inferrer.closedWorld.includesClosureCall(selector, receiver)) {
-      return abstractValueDomain.dynamicType;
-    } else {
-      Iterable<MemberEntity> elements =
-          inferrer.closedWorld.locateMembers(selector, receiver);
-      List<AbstractValue> types = <AbstractValue>[];
-      for (MemberEntity element in elements) {
-        AbstractValue type =
-            inferrer.typeOfMemberWithSelector(element, selector).type;
-        types.add(type);
-      }
-      return abstractValueDomain.unionOfMany(types);
-    }
-  }
-
   Iterable<MemberEntity> getCallersOfForTesting(MemberEntity element) {
-    if (_disableTypeInference) {
-      throw new UnsupportedError(
-          "Cannot query the type inferrer when type inference is disabled.");
-    }
     return inferrer.getCallersOfForTesting(element);
   }
 
-  bool isMemberCalledOnce(MemberEntity element) {
-    if (_disableTypeInference) return false;
-    MemberTypeInformation info =
-        inferrer.types.getInferredTypeOfMember(element);
-    return info.isCalledOnce();
-  }
+  GlobalTypeInferenceResults buildResults() {
+    inferrer.close();
 
-  void clear() {
+    Map<ir.Node, AbstractValue> allocatedLists = <ir.Node, AbstractValue>{};
+    Set<ir.Node> checkedForGrowableLists = new Set<ir.Node>();
+    inferrer.types.allocatedLists
+        .forEach((ir.Node node, ListTypeInformation typeInformation) {
+      ListTypeInformation info = inferrer.types.allocatedLists[node];
+      if (info.checksGrowable) {
+        checkedForGrowableLists.add(node);
+      }
+      allocatedLists[node] = typeInformation.type;
+    });
+
+    Map<MemberEntity, GlobalTypeInferenceMemberResult> memberResults =
+        <MemberEntity, GlobalTypeInferenceMemberResult>{};
+    Map<Local, AbstractValue> parameterResults = <Local, AbstractValue>{};
+
+    void createMemberResults(
+        MemberEntity member, MemberTypeInformation typeInformation) {
+      GlobalTypeInferenceElementData data = inferrer.dataOfMember(member);
+      bool isJsInterop = closedWorld.nativeData.isJsInteropMember(member);
+
+      AbstractValue returnType;
+      AbstractValue type;
+
+      if (isJsInterop) {
+        returnType = type = abstractValueDomain.dynamicType;
+      } else if (member is FunctionEntity) {
+        returnType = typeInformation.type;
+        type = abstractValueDomain.functionType;
+      } else {
+        returnType = abstractValueDomain.dynamicType;
+        type = typeInformation.type;
+      }
+
+      bool throwsAlways =
+          // Always throws if the return type was inferred to be non-null empty.
+          returnType != null && abstractValueDomain.isEmpty(returnType);
+
+      bool isCalledOnce =
+          typeInformation.isCalledOnce(); //isMemberCalledOnce(member);
+
+      memberResults[member] = new GlobalTypeInferenceMemberResultImpl(
+          data, allocatedLists, returnType, type,
+          throwsAlways: throwsAlways, isCalledOnce: isCalledOnce);
+    }
+
+    Set<FieldEntity> freeVariables = new Set<FieldEntity>();
+    inferrer.types.forEachMemberType(
+        (MemberEntity member, MemberTypeInformation typeInformation) {
+      createMemberResults(member, typeInformation);
+      if (member is JClosureCallMethod) {
+        ClosureRepresentationInfo info =
+            _closureDataLookup.getScopeInfo(member);
+        info.forEachFreeVariable((Local from, FieldEntity to) {
+          freeVariables.add(to);
+        });
+      }
+    });
+    for (FieldEntity field in freeVariables) {
+      if (!memberResults.containsKey(field)) {
+        MemberTypeInformation typeInformation =
+            inferrer.types.getInferredTypeOfMember(field);
+        typeInformation.computeIsCalledOnce();
+        createMemberResults(field, typeInformation);
+      }
+    }
+
+    inferrer.types.forEachParameterType(
+        (Local parameter, ParameterTypeInformation typeInformation) {
+      AbstractValue type = typeInformation.type;
+      parameterResults[parameter] = type;
+    });
+
+    GlobalTypeInferenceResults results = new GlobalTypeInferenceResultsImpl(
+        closedWorld,
+        _inferredDataBuilder.close(closedWorld),
+        memberResults,
+        parameterResults,
+        checkedForGrowableLists,
+        inferrer.returnsListElementTypeSet);
+
     inferrer.clear();
+
+    return results;
   }
 }
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index d89a8a8..4b5d61e 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -445,6 +445,11 @@
     return count == 1;
   }
 
+  void computeIsCalledOnce() {
+    assert(_isCalledOnce == null, "isCalledOnce has already been computed.");
+    _isCalledOnce = _computeIsCalledOnce();
+  }
+
   bool get isClosurized => closurizedCount > 0;
 
   // Closurized methods never become stable to ensure that the information in
@@ -501,9 +506,6 @@
   }
 
   void cleanup() {
-    // This node is on multiple lists so cleanup() can be called twice.
-    if (_isCalledOnce != null) return;
-    _isCalledOnce = _computeIsCalledOnce();
     _callers = null;
     super.cleanup();
   }
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index 75e4ee3..2fb026d 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -55,16 +55,16 @@
   final List<TypeInformation> _orderedTypeInformations = <TypeInformation>[];
 
   /// [ParameterTypeInformation]s for parameters.
-  final Map<Local, TypeInformation> parameterTypeInformations =
-      new Map<Local, TypeInformation>();
+  final Map<Local, ParameterTypeInformation> parameterTypeInformations =
+      new Map<Local, ParameterTypeInformation>();
 
   /// [MemberTypeInformation]s for members.
-  final Map<MemberEntity, TypeInformation> memberTypeInformations =
-      new Map<MemberEntity, TypeInformation>();
+  final Map<MemberEntity, MemberTypeInformation> memberTypeInformations =
+      new Map<MemberEntity, MemberTypeInformation>();
 
   /// [ListTypeInformation] for allocated lists.
-  final Map<ir.Node, TypeInformation> allocatedLists =
-      new Map<ir.Node, TypeInformation>();
+  final Map<ir.Node, ListTypeInformation> allocatedLists =
+      new Map<ir.Node, ListTypeInformation>();
 
   /// [MapTypeInformation] for allocated Maps.
   final Map<ir.Node, TypeInformation> allocatedMaps =
@@ -398,12 +398,22 @@
     });
   }
 
+  void forEachParameterType(
+      void f(Local parameter, ParameterTypeInformation typeInformation)) {
+    parameterTypeInformations.forEach(f);
+  }
+
   MemberTypeInformation getInferredTypeOfMember(MemberEntity member) {
     assert(!member.isAbstract,
         failedAt(member, "Unexpected abstract member $member."));
     return memberTypeInformations[member] ??= _getInferredTypeOfMember(member);
   }
 
+  void forEachMemberType(
+      void f(MemberEntity member, MemberTypeInformation typeInformation)) {
+    memberTypeInformations.forEach(f);
+  }
+
   MemberTypeInformation _getInferredTypeOfMember(MemberEntity member) {
     MemberTypeInformation typeInformation =
         strategy.createMemberTypeInformation(_abstractValueDomain, member);
diff --git a/pkg/compiler/lib/src/js_backend/inferred_data.dart b/pkg/compiler/lib/src/js_backend/inferred_data.dart
index 1f5de05..9ae9b5f 100644
--- a/pkg/compiler/lib/src/js_backend/inferred_data.dart
+++ b/pkg/compiler/lib/src/js_backend/inferred_data.dart
@@ -243,3 +243,27 @@
     return _functionsThatMightBePassedToApply.contains(element);
   }
 }
+
+class TrivialInferredData implements InferredData {
+  final SideEffects _allSideEffects = new SideEffects();
+
+  @override
+  SideEffects getSideEffectsOfElement(FunctionEntity element) {
+    return _allSideEffects;
+  }
+
+  @override
+  bool getMightBePassedToApply(FunctionEntity element) => true;
+
+  @override
+  bool isCalledInLoop(MemberEntity element) => true;
+
+  @override
+  bool getCannotThrow(FunctionEntity element) => false;
+
+  @override
+  SideEffects getSideEffectsOfSelector(
+      Selector selector, AbstractValue receiver) {
+    return _allSideEffects;
+  }
+}
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index 095117e..e2889cd 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -221,11 +221,9 @@
 
   @override
   TypesInferrer createTypesInferrer(
-      JClosedWorld closedWorld, InferredDataBuilder inferredDataBuilder,
-      {bool disableTypeInference: false}) {
+      JClosedWorld closedWorld, InferredDataBuilder inferredDataBuilder) {
     return new TypeGraphInferrer(_compiler, _elementMap, _globalLocalsMap,
-        _closureDataLookup, closedWorld, inferredDataBuilder,
-        disableTypeInference: disableTypeInference);
+        _closureDataLookup, closedWorld, inferredDataBuilder);
   }
 }
 
diff --git a/pkg/compiler/lib/src/kernel/front_end_adapter.dart b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
index 808404d..9d0b6a9 100644
--- a/pkg/compiler/lib/src/kernel/front_end_adapter.dart
+++ b/pkg/compiler/lib/src/kernel/front_end_adapter.dart
@@ -78,7 +78,6 @@
 /// [DiagnosticReporter].
 void reportFrontEndMessage(
     DiagnosticReporter reporter, fe.CompilationMessage message) {
-  // TODO(sigmund): translate message kinds using message.dart2jsCode
   MessageKind kind = MessageKind.GENERIC;
   Spannable span;
   if (message.span != null) {
diff --git a/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
index 7753d69..9b4dae7 100644
--- a/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_backend_strategy.dart
@@ -121,14 +121,14 @@
 
 class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap {
   final GlobalTypeInferenceResults _globalInferenceResults;
-  GlobalTypeInferenceElementResult _targetResults;
+  GlobalTypeInferenceMemberResult _targetResults;
 
   KernelToTypeInferenceMapImpl(
       MemberEntity target, this._globalInferenceResults) {
     _targetResults = _resultOf(target);
   }
 
-  GlobalTypeInferenceElementResult _resultOf(MemberEntity e) =>
+  GlobalTypeInferenceMemberResult _resultOf(MemberEntity e) =>
       _globalInferenceResults
           .resultOfMember(e is ConstructorBodyEntity ? e.constructor : e);
 
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index d70f774..a628953 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -8,6 +8,7 @@
 import 'package:front_end/src/fasta/util/link.dart' show Link;
 
 import '../common.dart';
+import '../common/names.dart';
 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
 import '../common/tasks.dart' show CompilerTask;
 import '../constants/constant_system.dart';
@@ -1859,7 +1860,13 @@
     // we need to register that fact that we may be calling a closure
     // with the same arguments.
     MemberEntity target = node.element;
-    if (target == null || target.isGetter) {
+    if ((target == null || target.isGetter) &&
+        // TODO(johnniwinther): Remove this when kernel adds an `isFunctionCall`
+        // flag to [ir.MethodInvocation]. Currently we can't tell the difference
+        // between a dynamic call and a function call, but we at least know that
+        // toString is not a getter (a potential function call should otherwise
+        // have been register for string concatenation).
+        selector != Selectors.toString_) {
       // 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.
diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart
index 0542e2a..f55d302 100644
--- a/pkg/compiler/lib/src/ssa/kernel_impact.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart
@@ -585,6 +585,11 @@
       // we need to track the type arguments.
       impactBuilder.registerStaticUse(new StaticUse.closureCall(
           localFunction, selector.callStructure, typeArguments));
+      // TODO(johnniwinther): Yet, alas, we need the dynamic use for now. Remove
+      // this when kernel adds an `isFunctionCall` flag to
+      // [ir.MethodInvocation].
+      impactBuilder.registerDynamicUse(
+          new ConstrainedDynamicUse(selector, null, typeArguments));
     } else {
       visitNode(node.receiver);
       Object constraint;
diff --git a/pkg/compiler/lib/src/ssa/types.dart b/pkg/compiler/lib/src/ssa/types.dart
index f9b3752..c7dd084 100644
--- a/pkg/compiler/lib/src/ssa/types.dart
+++ b/pkg/compiler/lib/src/ssa/types.dart
@@ -25,7 +25,7 @@
 
   static AbstractValue inferredTypeForParameter(
       Local element, GlobalTypeInferenceResults results) {
-    return results.resultOfParameter(element).type ??
+    return results.resultOfParameter(element) ??
         results.closedWorld.abstractValueDomain.dynamicType;
   }
 
diff --git a/pkg/compiler/lib/src/types/types.dart b/pkg/compiler/lib/src/types/types.dart
index 89c5b8c..83c2bee 100644
--- a/pkg/compiler/lib/src/types/types.dart
+++ b/pkg/compiler/lib/src/types/types.dart
@@ -6,6 +6,7 @@
 
 import 'package:kernel/ast.dart' as ir;
 import '../common.dart' show failedAt;
+import '../common/names.dart';
 import '../common/tasks.dart' show CompilerTask;
 import '../compiler.dart' show Compiler;
 import '../elements/entities.dart';
@@ -26,12 +27,19 @@
 /// guarantees) and the `subclass of Object or null` type mask for the type
 /// based queries (the runtime value could be anything).
 abstract class GlobalTypeInferenceElementResult {
-  /// Whether the method element associated with this result always throws.
-  bool get throwsAlways;
-
   /// The inferred type when this result belongs to a parameter or field
   /// element, null otherwise.
   AbstractValue get type;
+}
+
+abstract class GlobalTypeInferenceMemberResult
+    extends GlobalTypeInferenceElementResult {
+  /// Whether the member associated with this result is only called once in one
+  /// location in the entire program.
+  bool get isCalledOnce;
+
+  /// Whether the method element associated with this result always throws.
+  bool get throwsAlways;
 
   /// The inferred return type when this result belongs to a function element.
   AbstractValue get returnType;
@@ -60,91 +68,6 @@
   AbstractValue typeOfIteratorCurrent(ir.Node node);
 }
 
-abstract class GlobalTypeInferenceMemberResult
-    extends GlobalTypeInferenceElementResult {
-  /// Whether the member associated with this result is only called once in one
-  /// location in the entire program.
-  bool get isCalledOnce;
-}
-
-abstract class GlobalTypeInferenceParameterResult
-    extends GlobalTypeInferenceElementResult {}
-
-abstract class GlobalTypeInferenceElementResultImpl
-    implements GlobalTypeInferenceElementResult {
-  // TODO(sigmund): split - stop using _data after inference is done.
-  final GlobalTypeInferenceElementData _data;
-
-  // TODO(sigmund): store relevant data & drop reference to inference engine.
-  final TypesInferrer _inferrer;
-  final bool _isJsInterop;
-
-  GlobalTypeInferenceElementResultImpl(
-      this._data, this._inferrer, this._isJsInterop);
-
-  bool get throwsAlways {
-    AbstractValue mask = this.returnType;
-    // Always throws if the return type was inferred to be non-null empty.
-    return mask != null && _inferrer.abstractValueDomain.isEmpty(mask);
-  }
-
-  AbstractValue typeOfNewList(ir.Node node) =>
-      _inferrer.getTypeForNewList(node);
-
-  AbstractValue typeOfListLiteral(ir.Node node) =>
-      _inferrer.getTypeForNewList(node);
-
-  AbstractValue typeOfSend(ir.Node node) => _data?.typeOfSend(node);
-  AbstractValue typeOfGetter(ir.Node node) => _data?.typeOfGetter(node);
-  AbstractValue typeOfIterator(ir.Node node) => _data?.typeOfIterator(node);
-  AbstractValue typeOfIteratorMoveNext(ir.Node node) =>
-      _data?.typeOfIteratorMoveNext(node);
-  AbstractValue typeOfIteratorCurrent(ir.Node node) =>
-      _data?.typeOfIteratorCurrent(node);
-}
-
-class GlobalTypeInferenceMemberResultImpl
-    extends GlobalTypeInferenceElementResultImpl
-    implements GlobalTypeInferenceMemberResult {
-  // TODO(sigmund): delete, store data directly here.
-  final MemberEntity _owner;
-
-  GlobalTypeInferenceMemberResultImpl(
-      this._owner,
-      GlobalTypeInferenceElementData data,
-      TypesInferrer inferrer,
-      bool isJsInterop)
-      : super(data, inferrer, isJsInterop);
-
-  bool get isCalledOnce => _inferrer.isMemberCalledOnce(_owner);
-
-  AbstractValue get returnType => _isJsInterop
-      ? _inferrer.abstractValueDomain.dynamicType
-      : _inferrer.getReturnTypeOfMember(_owner);
-
-  AbstractValue get type => _isJsInterop
-      ? _inferrer.abstractValueDomain.dynamicType
-      : _inferrer.getTypeOfMember(_owner);
-}
-
-class GlobalTypeInferenceParameterResultImpl
-    extends GlobalTypeInferenceElementResultImpl
-    implements GlobalTypeInferenceParameterResult {
-  // TODO(sigmund): delete, store data directly here.
-  final Local _owner;
-
-  GlobalTypeInferenceParameterResultImpl(this._owner, TypesInferrer inferrer)
-      : super(null, inferrer, false);
-
-  AbstractValue get returnType => _isJsInterop
-      ? _inferrer.abstractValueDomain.dynamicType
-      : _inferrer.getReturnTypeOfParameter(_owner);
-
-  AbstractValue get type => _isJsInterop
-      ? _inferrer.abstractValueDomain.dynamicType
-      : _inferrer.getTypeOfParameter(_owner);
-}
-
 /// Internal data used during type-inference to store intermediate results about
 /// a single element.
 abstract class GlobalTypeInferenceElementData {
@@ -169,17 +92,7 @@
 
 /// API to interact with the global type-inference engine.
 abstract class TypesInferrer {
-  AbstractValueDomain get abstractValueDomain;
-  void analyzeMain(FunctionEntity element);
-  AbstractValue getReturnTypeOfMember(MemberEntity element);
-  AbstractValue getReturnTypeOfParameter(Local element);
-  AbstractValue getTypeOfMember(MemberEntity element);
-  AbstractValue getTypeOfParameter(Local element);
-  AbstractValue getTypeForNewList(ir.Node node);
-  AbstractValue getTypeOfSelector(Selector selector, AbstractValue receiver);
-  void clear();
-  bool isMemberCalledOnce(MemberEntity element);
-  bool isFixedArrayCheckedForGrowable(ir.Node node);
+  GlobalTypeInferenceResults analyzeMain(FunctionEntity element);
 }
 
 /// Results produced by the global type-inference algorithm.
@@ -195,7 +108,7 @@
 
   GlobalTypeInferenceMemberResult resultOfMember(MemberEntity member);
 
-  GlobalTypeInferenceElementResult resultOfParameter(Local parameter);
+  AbstractValue resultOfParameter(Local parameter);
 
   /// Returns the type of a [selector] when applied to a receiver with the given
   /// type [mask].
@@ -227,17 +140,15 @@
   GlobalTypeInferenceResults runGlobalTypeInference(FunctionEntity mainElement,
       JClosedWorld closedWorld, InferredDataBuilder inferredDataBuilder) {
     return measure(() {
-      typesInferrerInternal ??= compiler.backendStrategy.createTypesInferrer(
-          closedWorld, inferredDataBuilder,
-          disableTypeInference: compiler.disableTypeInference);
-      typesInferrerInternal.analyzeMain(mainElement);
-      typesInferrerInternal.clear();
-
-      GlobalTypeInferenceResultsImpl results =
-          new GlobalTypeInferenceResultsImpl(
-              typesInferrerInternal, closedWorld);
+      GlobalTypeInferenceResults results;
+      if (compiler.disableTypeInference) {
+        results = new TrivialGlobalTypeInferenceResults(closedWorld);
+      } else {
+        typesInferrerInternal ??= compiler.backendStrategy
+            .createTypesInferrer(closedWorld, inferredDataBuilder);
+        results = typesInferrerInternal.analyzeMain(mainElement);
+      }
       closedWorld.noSuchMethodData.categorizeComplexImplementations(results);
-      results.inferredData = inferredDataBuilder.close(closedWorld);
       resultsForTesting = results;
       return results;
     });
@@ -246,35 +157,29 @@
 
 class GlobalTypeInferenceResultsImpl implements GlobalTypeInferenceResults {
   final JClosedWorld closedWorld;
-  InferredData inferredData;
-  final TypeGraphInferrer _inferrer;
-  // TODO(sigmund): store relevant data & drop reference to inference engine.
-  final Map<MemberEntity, GlobalTypeInferenceMemberResult> _memberResults =
-      <MemberEntity, GlobalTypeInferenceMemberResult>{};
-  final Map<Local, GlobalTypeInferenceParameterResult> _parameterResults =
-      <Local, GlobalTypeInferenceParameterResult>{};
+  final InferredData inferredData;
+  final GlobalTypeInferenceMemberResult _deadFieldResult;
+  final GlobalTypeInferenceMemberResult _deadMethodResult;
+  final AbstractValue _trivialParameterResult;
 
-  GlobalTypeInferenceResultsImpl(this._inferrer, this.closedWorld);
+  final Map<MemberEntity, GlobalTypeInferenceMemberResult> memberResults;
+  final Map<Local, AbstractValue> parameterResults;
+  final Set<ir.Node> checkedForGrowableLists;
+  final Set<Selector> returnsListElementTypeSet;
 
-  GlobalTypeInferenceMemberResult _createMemberResult(
-      TypeGraphInferrer inferrer, MemberEntity member,
-      {bool isJsInterop: false}) {
-    return new GlobalTypeInferenceMemberResultImpl(
-        member,
-        // We store data in the context of the enclosing method, even
-        // for closure elements.
-        inferrer.inferrer.lookupDataOfMember(member),
-        inferrer,
-        isJsInterop);
-  }
+  GlobalTypeInferenceResultsImpl(
+      this.closedWorld,
+      this.inferredData,
+      this.memberResults,
+      this.parameterResults,
+      this.checkedForGrowableLists,
+      this.returnsListElementTypeSet)
+      : _deadFieldResult = new DeadFieldGlobalTypeInferenceResult(
+            closedWorld.abstractValueDomain),
+        _deadMethodResult = new DeadMethodGlobalTypeInferenceResult(
+            closedWorld.abstractValueDomain),
+        _trivialParameterResult = closedWorld.abstractValueDomain.dynamicType;
 
-  GlobalTypeInferenceParameterResult _createParameterResult(
-      TypeGraphInferrer inferrer, Local parameter) {
-    return new GlobalTypeInferenceParameterResultImpl(parameter, inferrer);
-  }
-
-  // TODO(sigmund,johnniwinther): compute result objects eagerly and make it an
-  // error to query for results that don't exist.
   @override
   GlobalTypeInferenceMemberResult resultOfMember(MemberEntity member) {
     assert(
@@ -283,25 +188,93 @@
             member,
             "unexpected input: ConstructorBodyElements are created"
             " after global type inference, no data is avaiable for them."));
-
-    bool isJsInterop = closedWorld.nativeData.isJsInteropMember(member);
-    return _memberResults.putIfAbsent(member,
-        () => _createMemberResult(_inferrer, member, isJsInterop: isJsInterop));
+    // TODO(sigmund,johnniwinther): Make it an error to query for results that
+    // don't exist..
+    /*assert(memberResults.containsKey(member) || member is JSignatureMethod,
+        "No inference result for member $member");*/
+    return memberResults[member] ??
+        (member is FunctionEntity ? _deadMethodResult : _deadFieldResult);
   }
 
-  // TODO(sigmund,johnniwinther): compute result objects eagerly and make it an
-  // error to query for results that don't exist.
   @override
-  GlobalTypeInferenceElementResult resultOfParameter(Local parameter) {
-    return _parameterResults.putIfAbsent(
-        parameter, () => _createParameterResult(_inferrer, parameter));
+  AbstractValue resultOfParameter(Local parameter) {
+    // TODO(sigmund,johnniwinther): Make it an error to query for results that
+    // don't exist.
+    /*assert(parameterResults.containsKey(parameter),
+        "No inference result for parameter $parameter");*/
+    return parameterResults[parameter] ?? _trivialParameterResult;
   }
 
   /// Returns the type of a [selector] when applied to a receiver with the given
-  /// type [mask].
+  /// [receiver] type.
   @override
-  AbstractValue typeOfSelector(Selector selector, AbstractValue mask) =>
-      _inferrer.getTypeOfSelector(selector, mask);
+  AbstractValue typeOfSelector(Selector selector, AbstractValue receiver) {
+    // Bailout for closure calls. We're not tracking types of
+    // closures.
+    if (selector.isClosureCall)
+      return closedWorld.abstractValueDomain.dynamicType;
+    if (selector.isSetter || selector.isIndexSet) {
+      return closedWorld.abstractValueDomain.dynamicType;
+    }
+    if (returnsListElementType(selector, receiver)) {
+      return closedWorld.abstractValueDomain.getContainerElementType(receiver);
+    }
+    if (returnsMapValueType(selector, receiver)) {
+      return closedWorld.abstractValueDomain.getMapValueType(receiver);
+    }
+
+    if (closedWorld.includesClosureCall(selector, receiver)) {
+      return closedWorld.abstractValueDomain.dynamicType;
+    } else {
+      Iterable<MemberEntity> elements =
+          closedWorld.locateMembers(selector, receiver);
+      List<AbstractValue> types = <AbstractValue>[];
+      for (MemberEntity element in elements) {
+        AbstractValue type = typeOfMemberWithSelector(element, selector);
+        types.add(type);
+      }
+      return closedWorld.abstractValueDomain.unionOfMany(types);
+    }
+  }
+
+  bool returnsListElementType(Selector selector, AbstractValue mask) {
+    return mask != null &&
+        closedWorld.abstractValueDomain.isContainer(mask) &&
+        returnsListElementTypeSet.contains(selector);
+  }
+
+  bool returnsMapValueType(Selector selector, AbstractValue mask) {
+    return mask != null &&
+        closedWorld.abstractValueDomain.isMap(mask) &&
+        selector.isIndex;
+  }
+
+  AbstractValue typeOfMemberWithSelector(
+      MemberEntity element, Selector selector) {
+    if (element.name == Identifiers.noSuchMethod_ &&
+        selector.name != element.name) {
+      // An invocation can resolve to a [noSuchMethod], in which case
+      // we get the return type of [noSuchMethod].
+      return resultOfMember(element).returnType;
+    } else if (selector.isGetter) {
+      if (element.isFunction) {
+        // [functionType] is null if the inferrer did not run.
+        return closedWorld.abstractValueDomain.functionType;
+      } else if (element.isField) {
+        return resultOfMember(element).type;
+      } else if (element.isGetter) {
+        return resultOfMember(element).returnType;
+      } else {
+        assert(false, failedAt(element, "Unexpected member $element"));
+        return closedWorld.abstractValueDomain.dynamicType;
+      }
+    } else if (element.isGetter || element.isField) {
+      assert(selector.isCall || selector.isSetter);
+      return closedWorld.abstractValueDomain.dynamicType;
+    } else {
+      return resultOfMember(element).returnType;
+    }
+  }
 
   /// Returns whether a fixed-length constructor call goes through a growable
   /// check.
@@ -309,5 +282,187 @@
   // constructor call.
   @override
   bool isFixedArrayCheckedForGrowable(ir.Node ctorCall) =>
-      _inferrer.isFixedArrayCheckedForGrowable(ctorCall);
+      checkedForGrowableLists.contains(ctorCall);
+}
+
+class GlobalTypeInferenceMemberResultImpl
+    implements GlobalTypeInferenceMemberResult {
+  final GlobalTypeInferenceElementData _data;
+  final Map<ir.Node, AbstractValue> _allocatedLists;
+  final AbstractValue returnType;
+  final AbstractValue type;
+  final bool throwsAlways;
+  final bool isCalledOnce;
+
+  GlobalTypeInferenceMemberResultImpl(
+      this._data, this._allocatedLists, this.returnType, this.type,
+      {this.throwsAlways, this.isCalledOnce});
+
+  AbstractValue typeOfSend(ir.Node node) => _data?.typeOfSend(node);
+  AbstractValue typeOfGetter(ir.Node node) => _data?.typeOfGetter(node);
+  AbstractValue typeOfIterator(ir.Node node) => _data?.typeOfIterator(node);
+  AbstractValue typeOfIteratorMoveNext(ir.Node node) =>
+      _data?.typeOfIteratorMoveNext(node);
+  AbstractValue typeOfIteratorCurrent(ir.Node node) =>
+      _data?.typeOfIteratorCurrent(node);
+
+  AbstractValue typeOfNewList(ir.Node node) => _allocatedLists[node];
+
+  AbstractValue typeOfListLiteral(ir.Node node) => _allocatedLists[node];
+}
+
+class TrivialGlobalTypeInferenceResults implements GlobalTypeInferenceResults {
+  final JClosedWorld closedWorld;
+  final TrivialGlobalTypeInferenceMemberResult _trivialMemberResult;
+  final AbstractValue _trivialParameterResult;
+  final InferredData inferredData = new TrivialInferredData();
+
+  TrivialGlobalTypeInferenceResults(this.closedWorld)
+      : _trivialMemberResult = new TrivialGlobalTypeInferenceMemberResult(
+            closedWorld.abstractValueDomain.dynamicType),
+        _trivialParameterResult = closedWorld.abstractValueDomain.dynamicType;
+
+  @override
+  bool isFixedArrayCheckedForGrowable(ir.Node node) => false;
+
+  @override
+  AbstractValue typeOfSelector(Selector selector, AbstractValue mask) {
+    return closedWorld.abstractValueDomain.dynamicType;
+  }
+
+  @override
+  AbstractValue resultOfParameter(Local parameter) {
+    return _trivialParameterResult;
+  }
+
+  @override
+  GlobalTypeInferenceMemberResult resultOfMember(MemberEntity member) {
+    return _trivialMemberResult;
+  }
+}
+
+class TrivialGlobalTypeInferenceMemberResult
+    implements GlobalTypeInferenceMemberResult {
+  final AbstractValue dynamicType;
+
+  TrivialGlobalTypeInferenceMemberResult(this.dynamicType);
+
+  @override
+  AbstractValue get type => dynamicType;
+
+  @override
+  AbstractValue get returnType => dynamicType;
+
+  @override
+  bool get throwsAlways => false;
+
+  @override
+  AbstractValue typeOfIteratorCurrent(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfIteratorMoveNext(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfIterator(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfGetter(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfSend(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfListLiteral(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfNewList(ir.Node node) => null;
+
+  @override
+  bool get isCalledOnce => false;
+}
+
+class DeadFieldGlobalTypeInferenceResult
+    implements GlobalTypeInferenceMemberResult {
+  final AbstractValue dynamicType;
+  final AbstractValue emptyType;
+
+  DeadFieldGlobalTypeInferenceResult(AbstractValueDomain domain)
+      : this.dynamicType = domain.dynamicType,
+        this.emptyType = domain.emptyType;
+
+  @override
+  AbstractValue get type => emptyType;
+
+  @override
+  AbstractValue get returnType => dynamicType;
+
+  @override
+  bool get throwsAlways => false;
+
+  @override
+  AbstractValue typeOfIteratorCurrent(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfIteratorMoveNext(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfIterator(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfGetter(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfSend(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfListLiteral(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfNewList(ir.Node node) => null;
+
+  @override
+  bool get isCalledOnce => false;
+}
+
+class DeadMethodGlobalTypeInferenceResult
+    implements GlobalTypeInferenceMemberResult {
+  final AbstractValue emptyType;
+  final AbstractValue functionType;
+
+  DeadMethodGlobalTypeInferenceResult(AbstractValueDomain domain)
+      : this.functionType = domain.functionType,
+        this.emptyType = domain.emptyType;
+
+  @override
+  AbstractValue get type => functionType;
+
+  @override
+  AbstractValue get returnType => emptyType;
+
+  @override
+  bool get throwsAlways => false;
+
+  @override
+  AbstractValue typeOfIteratorCurrent(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfIteratorMoveNext(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfIterator(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfGetter(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfSend(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfListLiteral(ir.Node node) => null;
+
+  @override
+  AbstractValue typeOfNewList(ir.Node node) => null;
+
+  @override
+  bool get isCalledOnce => false;
 }
diff --git a/pkg/compiler/testing_dart.json b/pkg/compiler/testing_dart.json
deleted file mode 100644
index 1b68d8b..0000000
--- a/pkg/compiler/testing_dart.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-"":"Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file",
-"":"for details. All rights reserved. Use of this source code is governed by a",
-"":"BSD-style license that can be found in the LICENSE.md file.",
-
-  "packages": "../../.packages",
-
-  "analyze": {
-    "options": "analysis_options_dart.yaml",
-
-    "uris": [
-      ".",
-      "../../tests/compiler/dart2js/"
-    ],
-
-    "exclude": [
-      "^tests/compiler/dart2js/codegen_helper\\.dart",
-      "^tests/compiler/dart2js/codegen/type_inference8_test\\.dart",
-      "^tests/compiler/dart2js/deferred/inline_restrictions_test\\.dart",
-      "^tests/compiler/dart2js/deferred/load_graph_segmentation2_test\\.dart",
-      "^tests/compiler/dart2js/deferred/load_graph_segmentation_test\\.dart",
-      "^tests/compiler/dart2js/deferred/not_in_main_test\\.dart",
-      "^tests/compiler/dart2js/in_user_code_test\\.dart",
-      "^tests/compiler/dart2js/inference/data/call_site\\.dart",
-      "^tests/compiler/dart2js/inference/data/general\\.dart",
-      "^tests/compiler/dart2js/inference/data/no_such_method\\.dart",
-      "^tests/compiler/dart2js/inference/data/no_such_method2\\.dart",
-      "^tests/compiler/dart2js/inference/data/postfix_prefix\\.dart",
-      "^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
-      "^tests/compiler/dart2js/inference/simple_inferrer_closure_test\\.dart",
-      "^tests/compiler/dart2js/inference/simple_inferrer_const_closure2_test\\.dart",
-      "^tests/compiler/dart2js/inference/simple_inferrer_const_closure_test\\.dart",
-      "^tests/compiler/dart2js/inference/simple_inferrer_global_field_closure_test\\.dart",
-      "^tests/compiler/dart2js/inference/simple_inferrer_test\\.dart",
-      "^tests/compiler/dart2js/inference/type_mask2_test\\.dart",
-      "^tests/compiler/dart2js/jsinterop/world_test\\.dart",
-      "^tests/compiler/dart2js/kernel/class_hierarchy_test\\.dart",
-      "^tests/compiler/dart2js/kernel/closed_world_test\\.dart",
-      "^tests/compiler/dart2js/kernel/visitor_test\\.dart",
-      "^tests/compiler/dart2js/memory_compiler\\.dart",
-      "^tests/compiler/dart2js/mixin_typevariable_test\\.dart",
-      "^tests/compiler/dart2js/model/constant_expression_evaluate_test\\.dart",
-      "^tests/compiler/dart2js/model/constant_expression_test\\.dart",
-      "^tests/compiler/dart2js/needs_no_such_method_test\\.dart",
-      "^tests/compiler/dart2js/no_such_method_enabled_test\\.dart",
-      "^tests/compiler/dart2js/output_collector\\.dart",
-      "^tests/compiler/dart2js/rti/data/future_or_future_or_generic_strong\\.dart",
-      "^tests/compiler/dart2js/rti/data/future_or_future_or_strong\\.dart",
-      "^tests/compiler/dart2js/rti/data/future_or_generic2_strong\\.dart",
-      "^tests/compiler/dart2js/rti/data/future_or_generic_strong\\.dart",
-      "^tests/compiler/dart2js/rti/data/future_or_strong\\.dart",
-      "^tests/compiler/dart2js/rti/emission/future_or_future_or_generic_strong\\.dart",
-      "^tests/compiler/dart2js/rti/emission/future_or_future_or_strong\\.dart",
-      "^tests/compiler/dart2js/rti/emission/future_or_generic2_strong\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/diff_view\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/html_parts\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/lax_json\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/mapping_test\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/nomapping_test\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/output_structure\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/save\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/tools/source_mapping_test_viewer\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/helpers/sourcemap_helper\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_helper\\.dart",
-      "^tests/compiler/dart2js/sourcemaps/stacktrace_test\\.dart",
-      "^tests/compiler/dart2js/token_naming_test\\.dart",
-      "^tests/compiler/dart2js/type_representation_test\\.dart",
-      "^tests/compiler/dart2js/type_variable_occurrence_test\\.dart",
-      "^tests/compiler/dart2js/unused_empty_map_test\\.dart"
-    ]
-  }
-}
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 202d2c9..7226e5a 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -309,7 +309,7 @@
           null,
           sdk is SummaryBasedDartSdk
               ? sdk.bundle
-              : (sdk as FolderBasedDartSdk).getSummarySdkBundle(true));
+              : (sdk as FolderBasedDartSdk).getSummarySdkBundle());
     }
 
     var assembler = PackageBundleAssembler();
@@ -327,8 +327,7 @@
             uriToUnit.keys.toSet(),
             (uri) => summaryData.linkedMap[uri],
             (uri) => summaryData.unlinkedMap[uri] ?? uriToUnit[uri],
-            context.declaredVariables.get,
-            true)
+            context.declaredVariables.get)
         .forEach(assembler.addLinkedLibrary);
 
     var bundle = assembler.assemble();
@@ -1813,14 +1812,14 @@
   /// (alternatively, a setter), then there is an implicit override of the
   /// setter (alternatively, the getter) that does nothing.
   JS.Method _emitSuperAccessorWrapper(
-      MethodDeclaration method, InterfaceType type) {
-    var methodElement = method.declaredElement as PropertyAccessorElement;
-    var field = methodElement.variable;
-    if (!field.isSynthetic) return null;
+      MethodDeclaration member, InterfaceType type) {
+    var accessorElement = member.declaredElement as PropertyAccessorElement;
+    var field = accessorElement.variable;
+    if (!field.isSynthetic || accessorElement.isAbstract) return null;
 
     // Generate a corresponding virtual getter / setter.
-    var name = _declareMemberName(methodElement);
-    if (method.isGetter) {
+    var name = _declareMemberName(accessorElement);
+    if (member.isGetter) {
       var setter = field.setter;
       if ((setter == null || setter.isAbstract) &&
           _classProperties.inheritedSetters.contains(field.name)) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
index 9c6e71e..819be91 100644
--- a/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/module_compiler.dart
@@ -6,7 +6,8 @@
 import 'dart:convert' show json;
 import 'dart:io' show File;
 
-import 'package:analyzer/analyzer.dart' show AnalysisError, CompilationUnit;
+import 'package:analyzer/analyzer.dart'
+    show AnalysisError, CompilationUnit, StaticWarningCode;
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/dart/element/element.dart'
     show LibraryElement, UriReferencedElement;
@@ -188,11 +189,15 @@
 
       var tree = context.resolveCompilationUnit(library.source, library);
       trees.add(tree);
-      errors.addAll(context.computeErrors(library.source));
+
+      var unitErrors = context.computeErrors(library.source);
+      errors.addAll(_filterJsErrors(library, unitErrors));
 
       for (var part in library.parts) {
         trees.add(context.resolveCompilationUnit(part.source, library));
-        errors.addAll(context.computeErrors(part.source));
+
+        var unitErrors = context.computeErrors(part.source);
+        errors.addAll(_filterJsErrors(library, unitErrors));
       }
     }
 
@@ -200,6 +205,24 @@
         CodeGenerator(context, summaryData, options, _extensionTypes, errors);
     return codeGenerator.compile(unit, trees);
   }
+
+  Iterable<AnalysisError> _filterJsErrors(
+      LibraryElement library, Iterable<AnalysisError> errors) {
+    var libraryUriStr = library.source.uri.toString();
+    if (libraryUriStr == 'dart:html' ||
+        libraryUriStr == 'dart:svg' ||
+        libraryUriStr == 'dart:_interceptors') {
+      return errors.where((error) {
+        return error.errorCode !=
+                StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 &&
+            error.errorCode !=
+                StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 &&
+            error.errorCode !=
+                StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS;
+      });
+    }
+    return errors;
+  }
 }
 
 UriReferencedElement _getDartMirrorsImport(LibraryElement library) {
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_command.dart b/pkg/dev_compiler/lib/src/compiler/shared_command.dart
index ba5b5c7..225d6aa 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_command.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_command.dart
@@ -212,7 +212,17 @@
 /// Convert a [source] string to a Uri, where the source may be a
 /// dart/file/package URI or a local win/mac/linux path.
 Uri sourcePathToUri(String source, {bool windows}) {
-  windows ??= Platform.isWindows;
+  if (windows == null) {
+    // Running on the web the Platform check will fail, and we can't use
+    // fromEnvironment because internally it's set to true for dart.library.io.
+    // So just catch the exception and if it fails then we're definitely not on
+    // Windows.
+    try {
+      windows = Platform.isWindows;
+    } catch (e) {
+      windows = false;
+    }
+  }
   if (windows) {
     source = source.replaceAll("\\", "/");
   }
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 0d008cc..f9ce5c8 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1852,11 +1852,13 @@
   /// This is needed because in ES6, if you only override a getter
   /// (alternatively, a setter), then there is an implicit override of the
   /// setter (alternatively, the getter) that does nothing.
-  JS.Method _emitSuperAccessorWrapper(Procedure method,
+  JS.Method _emitSuperAccessorWrapper(Procedure member,
       Map<String, Procedure> getters, Map<String, Procedure> setters) {
-    var name = method.name.name;
-    var memberName = _declareMemberName(method);
-    if (method.isGetter) {
+    if (member.isAbstract) return null;
+
+    var name = member.name.name;
+    var memberName = _declareMemberName(member);
+    if (member.isGetter) {
       if (!setters.containsKey(name) &&
           _classProperties.inheritedSetters.contains(name)) {
         // Generate a setter that forwards to super.
@@ -1864,7 +1866,7 @@
         return JS.Method(memberName, fn, isSetter: true);
       }
     } else {
-      assert(method.isSetter);
+      assert(member.isSetter);
       if (!getters.containsKey(name) &&
           _classProperties.inheritedGetters.contains(name)) {
         // Generate a getter that forwards to super.
@@ -2496,9 +2498,37 @@
       typeParts = [addTypeFormalsAsParameters(typeParts)];
 
       helperCall = 'gFnType(#)';
+
+      /// Whether the type parameter [t] has an explicit bound, like
+      /// `<T extends C>`, `<T extends Object>` or `<T extends dynamic>`.
+      ///
+      /// In contrast, a type parameter like `<T>` has an implicit bound.
+      /// Implicit bounds are a bit unusual, in that `Object` is used as the
+      /// bound for checking, but `dynamic` is filled in as the default value.
+      ///
+      /// Kernel represents `<T>` as `<T extends Object = dynamic>`. We can find
+      /// explicit bounds by looking for anything *except* that.
+      typeParameterHasExplicitBound(TypeParameter t) =>
+          t.bound != types.objectType || t.defaultType != const DynamicType();
+
       // If any explicit bounds were passed, emit them.
-      if (typeFormals.any((t) => t.bound != null)) {
-        var bounds = typeFormals.map((t) => _emitType(t.bound)).toList();
+      if (typeFormals.any(typeParameterHasExplicitBound)) {
+        /// Emits the bound of the type parameter [t] for use in runtime
+        /// checking and the default value (e.g. for dynamic class).
+        ///
+        /// For most type parameters we can use [TypeParameter.bound]. However,
+        /// for *implicit* bounds such as `<T>` (represented in Kernel as
+        /// `<T extends Object = dynamic>`) we need to emit `dynamic` so we use
+        /// the correct default value at runtime.
+        ///
+        /// Because `dynamic` and `Object` are both top types, they'll behave
+        /// identically for the purposes of type checks.
+        emitTypeParameterBound(TypeParameter t) =>
+            typeParameterHasExplicitBound(t)
+                ? _emitType(t.bound)
+                : visitDynamicType(const DynamicType());
+
+        var bounds = typeFormals.map(emitTypeParameterBound).toList();
         typeParts.add(addTypeFormalsAsParameters(bounds));
       }
     } else {
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 c74a95b..7d4ab70 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
@@ -55,7 +55,8 @@
 class TypeRep implements Type {
   String get name => this.toString();
 
-  // TODO(jmesserly): these should never be reached.
+  // TODO(jmesserly): these should never be reached, can be make them abstract?
+  @notNull
   @JSExportName('is')
   bool is_T(object) => instanceOf(object, this);
 
@@ -79,40 +80,62 @@
   check_T(object) => object;
 }
 
+@notNull
 bool _isJsObject(obj) => JS('!', '# === #', getReifiedType(obj), jsobject);
 
+/// The Dart type that represents a JavaScript class(/constructor) type.
+///
+/// The JavaScript type may not exist, either because it's not loaded yet, or
+/// because it's not available (such as with mocks). To handle this gracefully,
+/// we disable type checks for in these cases, and allow any JS object to work
+/// as if it were an instance of this JS type.
 class LazyJSType extends TypeRep {
-  final Function() _rawJSType;
+  Function() _getRawJSTypeFn;
+  @notNull
   final String _dartName;
+  Object _rawJSType;
 
-  LazyJSType(this._rawJSType, this._dartName);
+  LazyJSType(this._getRawJSTypeFn, this._dartName);
 
-  toString() => typeName(_rawJSType());
+  toString() {
+    var raw = _getRawJSType();
+    return raw != null ? typeName(raw) : "JSObject<$_dartName>";
+  }
 
-  _raw() {
-    var raw = _rawJSType();
+  Object _getRawJSType() {
+    var raw = _rawJSType;
+    if (raw != null) return raw;
+
+    // Try to evaluate the JS type. If this fails for any reason, we'll try
+    // again next time.
+    // TODO(jmesserly): is it worth trying again? It may create unnecessary
+    // overhead, especially if exceptions are being thrown. Also it means the
+    // behavior of a given type check can change later on.
+    try {
+      raw = _getRawJSTypeFn();
+    } catch (e) {}
+
     if (raw == null) {
       _warn('Cannot find native JavaScript type ($_dartName) for type check');
+    } else {
+      _rawJSType = raw;
+      _getRawJSTypeFn = null; // Free the function that computes the JS type.
     }
     return raw;
   }
 
-  rawJSTypeForCheck() {
-    var raw = _raw();
-    if (raw != null) return raw;
-    // Treat as anonymous: return true for any JS object.
-    return jsobject;
-  }
+  Object rawJSTypeForCheck() => _getRawJSType() ?? jsobject;
 
-  bool isRawType(obj) {
-    var raw = _raw();
+  @notNull
+  bool isRawJSType(obj) {
+    var raw = _getRawJSType();
     if (raw != null) return JS('!', '# instanceof #', obj, raw);
-    // Treat as anonymous: return true for any JS object.
     return _isJsObject(obj);
   }
 
+  @notNull
   @JSExportName('is')
-  bool is_T(obj) => isRawType(obj) || instanceOf(obj, this);
+  bool is_T(obj) => isRawJSType(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
   as_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, false);
diff --git a/pkg/front_end/lib/src/api_prototype/compilation_message.dart b/pkg/front_end/lib/src/api_prototype/compilation_message.dart
index 87cc67d..0b4f6fe 100644
--- a/pkg/front_end/lib/src/api_prototype/compilation_message.dart
+++ b/pkg/front_end/lib/src/api_prototype/compilation_message.dart
@@ -34,8 +34,4 @@
   /// The corresponding analyzer error code, or null if there is no
   /// corresponding message in analyzer.
   String get analyzerCode;
-
-  /// The corresponding dart2js error code, or null if there is no corresponding
-  /// message in dart2js.
-  String get dart2jsCode;
 }
diff --git a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index 8d4e803..eef20ee 100644
--- a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -25,6 +25,13 @@
         initializeFromDillUri);
   }
 
+  factory IncrementalKernelGenerator.fromComponent(
+      CompilerOptions options, Uri entryPoint, Component component) {
+    return new IncrementalCompiler.fromComponent(
+        new CompilerContext(new ProcessedOptions(options, [entryPoint])),
+        component);
+  }
+
   /// Returns a component whose libraries are the recompiled libraries,
   /// or - in the case of [fullComponent] - a full Component.
   Future<Component> computeDelta({Uri entryPoint, bool fullComponent});
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 0b25e2f..5c81b7b 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -571,7 +571,7 @@
       // Infer based on the sdkRoot, but only when `compileSdk` is false,
       // otherwise the default intent was to compile the sdk from sources and
       // not to load an sdk summary file.
-      _sdkSummary = root?.resolve("vm_platform.dill");
+      _sdkSummary = root?.resolve("vm_platform_strong.dill");
     }
 
     if (_raw.librariesSpecificationUri != null) {
@@ -689,19 +689,13 @@
 
   String get analyzerCode => _original.code.analyzerCode;
 
-  String get dart2jsCode => _original.code.dart2jsCode;
-
   SourceSpan get span {
-    var uri = _original.uri;
-    var offset = _original.charOffset;
-    if (offset == -1) {
-      if (uri == null) return null;
-      return new SourceLocation(0, sourceUrl: uri).pointSpan();
+    if (_original.charOffset == -1) {
+      if (_original.uri == null) return null;
+      return new SourceLocation(0, sourceUrl: _original.uri).pointSpan();
     }
-    return new SourceSpan(
-        new SourceLocation(offset, sourceUrl: uri),
-        new SourceLocation(offset + _original.length, sourceUrl: uri),
-        'X' * _original.length);
+    return new SourceLocation(_original.charOffset, sourceUrl: _original.uri)
+        .pointSpan();
   }
 
   _CompilationMessage(this._original, this.severity);
diff --git a/pkg/front_end/lib/src/fasta/builder/builder.dart b/pkg/front_end/lib/src/fasta/builder/builder.dart
index 914ee9e..2efbcb9 100644
--- a/pkg/front_end/lib/src/fasta/builder/builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/builder.dart
@@ -4,6 +4,14 @@
 
 library fasta.builder;
 
+export '../identifiers.dart'
+    show
+        Identifier,
+        InitializedIdentifier,
+        QualifiedName,
+        deprecated_extractToken,
+        flattenName;
+
 export '../scope.dart' show AccessErrorBuilder, Scope, ScopeBuilder;
 
 export 'builtin_type_builder.dart' show BuiltinTypeBuilder;
@@ -44,8 +52,6 @@
 
 export 'procedure_builder.dart' show ProcedureBuilder;
 
-export 'qualified_name.dart' show QualifiedName;
-
 export 'type_builder.dart' show TypeBuilder;
 
 export 'type_declaration_builder.dart' show TypeDeclarationBuilder;
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index b6bad03..d2b9c0f 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -63,9 +63,6 @@
 
   String get debugName => "ClassBuilder";
 
-  @override
-  bool get buildsArguments => true;
-
   /// Returns true if this class is the result of applying a mixin to its
   /// superclass.
   bool get isMixinApplication => mixedInType != null;
@@ -236,15 +233,10 @@
             null);
   }
 
-  void addCompileTimeError(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
-    library.addCompileTimeError(message, charOffset, length, fileUri,
-        context: context);
-  }
-
   void addProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
-    library.addProblem(message, charOffset, length, fileUri, context: context);
+      {bool wasHandled: false, List<LocatedMessage> context}) {
+    library.addProblem(message, charOffset, length, fileUri,
+        wasHandled: wasHandled, context: context);
   }
 
   void prepareTopLevelInference() {}
diff --git a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
index bc7a3cb..d3f8d63 100644
--- a/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/constructor_reference_builder.dart
@@ -14,7 +14,8 @@
         PrefixBuilder,
         QualifiedName,
         Scope,
-        TypeBuilder;
+        TypeBuilder,
+        flattenName;
 
 class ConstructorReferenceBuilder {
   final int charOffset;
@@ -34,14 +35,17 @@
       Declaration parent, this.charOffset)
       : fileUri = parent.fileUri;
 
-  String get fullNameForErrors => "$name${suffix == null ? '' : '.$suffix'}";
+  String get fullNameForErrors {
+    return "${flattenName(name, charOffset, fileUri)}"
+        "${suffix == null ? '' : '.$suffix'}";
+  }
 
   void resolveIn(Scope scope, LibraryBuilder accessingLibrary) {
     final name = this.name;
     Declaration declaration;
     if (name is QualifiedName) {
-      String prefix = name.prefix;
-      String middle = name.suffix;
+      String prefix = name.qualifier;
+      String middle = name.name;
       declaration = scope.lookup(prefix, charOffset, fileUri);
       if (declaration is PrefixBuilder) {
         PrefixBuilder prefix = declaration;
diff --git a/pkg/front_end/lib/src/fasta/builder/declaration.dart b/pkg/front_end/lib/src/fasta/builder/declaration.dart
index bc3f76b..d340033 100644
--- a/pkg/front_end/lib/src/fasta/builder/declaration.dart
+++ b/pkg/front_end/lib/src/fasta/builder/declaration.dart
@@ -26,12 +26,8 @@
 
   String get fullNameForErrors;
 
-  bool get buildsArguments => false;
-
   bool get hasProblem => false;
 
-  bool get hasTarget => false;
-
   bool get isConst => false;
 
   bool get isConstructor => false;
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart
index 5cd87e1..7abb3f3 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart
@@ -24,9 +24,6 @@
 
   String get debugName => "FunctionTypeAliasBuilder";
 
-  @override
-  bool get buildsArguments => true;
-
   LibraryBuilder get parent => super.parent;
 
   int get typeVariablesCount;
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 5b43657..2f29995 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -20,6 +20,8 @@
         templateInternalProblemNotFoundIn,
         templateInternalProblemPrivateConstructorAccess;
 
+import '../severity.dart' show Severity;
+
 import 'builder.dart'
     show
         ClassBuilder,
@@ -78,23 +80,19 @@
     exporters.add(new Export(exporter, this, combinators, charOffset));
   }
 
-  /// See `Loader.addCompileTimeError` for an explanation of the
-  /// arguments passed to this method.
+  /// Add a problem with a severity determined by the severity of the message.
   ///
   /// If [fileUri] is null, it defaults to `this.fileUri`.
-  void addCompileTimeError(
-      Message message, int charOffset, int length, Uri fileUri,
-      {bool wasHandled: false, List<LocatedMessage> context}) {
-    fileUri ??= this.fileUri;
-    loader.addCompileTimeError(message, charOffset, length, fileUri,
-        wasHandled: wasHandled, context: context);
-  }
-
-  /// Add a problem with a severity determined by the severity of the message.
+  ///
+  /// See `Loader.addMessage` for an explanation of the
+  /// arguments passed to this method.
   void addProblem(Message message, int charOffset, int length, Uri fileUri,
-      {List<LocatedMessage> context}) {
+      {bool wasHandled: false,
+      List<LocatedMessage> context,
+      Severity severity}) {
     fileUri ??= this.fileUri;
-    loader.addProblem(message, charOffset, length, fileUri, context: context);
+    loader.addProblem(message, charOffset, length, fileUri,
+        wasHandled: wasHandled, context: context, severity: severity);
   }
 
   /// Returns true if the export scope was modified.
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 759c0f9..827fe5f 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -17,9 +17,6 @@
 
   MemberBuilder(this.parent, int charOffset) : super(parent, charOffset);
 
-  @override
-  bool get hasTarget => true;
-
   bool get isInstanceMember => isClassMember && !isStatic;
 
   bool get isClassMember => parent is ClassBuilder;
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 08b77d8..1a263f0 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -6,41 +6,38 @@
 
 import '../fasta_codes.dart'
     show
-        Message,
+        LocatedMessage,
+        noLength,
         templateMissingExplicitTypeArguments,
-        templateTypeArgumentMismatch;
+        templateTypeArgumentMismatch,
+        templateTypeNotFound;
 
-import '../source/outline_listener.dart';
+import '../problems.dart' show unhandled;
 
 import 'builder.dart'
     show
         Declaration,
+        Identifier,
         InvalidTypeBuilder,
         LibraryBuilder,
         PrefixBuilder,
         QualifiedName,
         Scope,
         TypeBuilder,
-        TypeDeclarationBuilder;
+        TypeDeclarationBuilder,
+        flattenName;
 
 abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
-  final OutlineListener outlineListener;
   final Object name;
 
   List<T> arguments;
 
   TypeDeclarationBuilder<T, R> declaration;
 
-  /// If the number of [arguments] does not correspond to the number of
-  /// type parameters in the [declaration], semantically we should replace
-  /// [declaration] with [InvalidTypeBuilder]. But we still need to store
-  /// the original declaration into [outlineListener].
-  TypeDeclarationBuilder<T, R> actualDeclaration;
+  NamedTypeBuilder(this.name, this.arguments);
 
-  NamedTypeBuilder(this.outlineListener, this.name, this.arguments);
-
-  InvalidTypeBuilder<T, R> buildInvalidType(int charOffset, Uri fileUri,
-      [Message message]);
+  @override
+  InvalidTypeBuilder<T, R> buildInvalidType(LocatedMessage message);
 
   @override
   void bind(TypeDeclarationBuilder declaration) {
@@ -54,40 +51,50 @@
     final name = this.name;
     Declaration member;
     if (name is QualifiedName) {
-      Declaration prefix = scope.lookup(name.prefix, charOffset, fileUri);
+      Object qualifier = name.qualifier;
+      String prefixName = flattenName(qualifier, charOffset, fileUri);
+      Declaration prefix = scope.lookup(prefixName, charOffset, fileUri);
       if (prefix is PrefixBuilder) {
-        outlineListener?.store(charOffset, false,
-            importIndex: prefix.importIndex);
-        member = prefix.lookup(name.suffix, name.charOffset, fileUri);
+        member = prefix.lookup(name.name, name.charOffset, fileUri);
       }
-    } else {
+    } else if (name is String) {
       member = scope.lookup(name, charOffset, fileUri);
+    } else {
+      unhandled("${name.runtimeType}", "resolveIn", charOffset, fileUri);
     }
     if (member is TypeDeclarationBuilder) {
       declaration = member.origin;
       if (arguments == null && declaration.typeVariablesCount != 0) {
+        String typeName;
+        int typeNameOffset;
+        if (name is Identifier) {
+          typeName = name.name;
+          typeNameOffset = name.charOffset;
+        } else {
+          typeName = name;
+          typeNameOffset = charOffset;
+        }
         library.addProblem(
             templateMissingExplicitTypeArguments
                 .withArguments(declaration.typeVariablesCount),
-            charOffset,
-            "$name".length,
+            typeNameOffset,
+            typeName.length,
             fileUri);
       }
       return;
     }
-    declaration = buildInvalidType(charOffset, fileUri);
+    declaration = buildInvalidType(templateTypeNotFound
+        .withArguments(flattenName(name, charOffset, fileUri))
+        .withLocation(fileUri, charOffset, noLength));
   }
 
   @override
   void check(int charOffset, Uri fileUri) {
     if (arguments != null &&
         arguments.length != declaration.typeVariablesCount) {
-      actualDeclaration = declaration;
-      declaration = buildInvalidType(
-          charOffset,
-          fileUri,
-          templateTypeArgumentMismatch.withArguments(
-              name, declaration.typeVariablesCount));
+      declaration = buildInvalidType(templateTypeArgumentMismatch
+          .withArguments(declaration.typeVariablesCount)
+          .withLocation(fileUri, charOffset, noLength));
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/qualified_name.dart b/pkg/front_end/lib/src/fasta/builder/qualified_name.dart
deleted file mode 100644
index e879e46..0000000
--- a/pkg/front_end/lib/src/fasta/builder/qualified_name.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library fasta.qualified_name;
-
-class QualifiedName {
-  final prefix;
-  final String suffix;
-  final int charOffset;
-
-  QualifiedName(this.prefix, this.suffix, this.charOffset);
-
-  toString() => "$prefix.$suffix";
-}
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index ee13b6f..6f3fad2 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -4,6 +4,8 @@
 
 library fasta.type_builder;
 
+import '../fasta_codes.dart' show LocatedMessage;
+
 import 'builder.dart'
     show LibraryBuilder, Scope, TypeDeclarationBuilder, TypeVariableBuilder;
 
@@ -40,7 +42,7 @@
 
   build(LibraryBuilder library);
 
-  buildInvalidType(int charOffset, Uri fileUri);
+  buildInvalidType(LocatedMessage message);
 
   String get fullNameForErrors => "${printOn(new StringBuffer())}";
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index c853c15..4f3acc7 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -16,9 +16,6 @@
       String name, this.bound, LibraryBuilder compilationUnit, int charOffset)
       : super(null, null, name, compilationUnit, charOffset);
 
-  @override
-  bool get hasTarget => true;
-
   bool get isTypeVariable => true;
 
   String get debugName => "TypeVariableBuilder";
diff --git a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
index 7c5004a..c716335 100644
--- a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
+++ b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart
@@ -22,4 +22,6 @@
 
   /// Normalizes the type arguments in accordance with Dart 1 semantics.
   void normalizeType() => builder.normalize(charOffset, fileUri);
+
+  String toString() => "UnresolvedType(@$charOffset, $builder)";
 }
diff --git a/pkg/front_end/lib/src/fasta/combinator.dart b/pkg/front_end/lib/src/fasta/combinator.dart
index 5dfcf91..9f97607 100644
--- a/pkg/front_end/lib/src/fasta/combinator.dart
+++ b/pkg/front_end/lib/src/fasta/combinator.dart
@@ -7,30 +7,15 @@
 class Combinator {
   final bool isShow;
 
-  final List<CombinatorIdentifier> identifiers;
-
   final Set<String> names;
 
-  Combinator(
-      this.isShow, this.identifiers, this.names, int charOffset, Uri fileUri);
+  Combinator(this.isShow, this.names, int charOffset, Uri fileUri);
 
-  Combinator.hide(List<CombinatorIdentifier> identifiers,
-      Iterable<String> names, int charOffset, Uri fileUri)
-      : this(false, identifiers, new Set<String>.from(names), charOffset,
-            fileUri);
+  Combinator.show(Iterable<String> names, int charOffset, Uri fileUri)
+      : this(true, new Set<String>.from(names), charOffset, fileUri);
 
-  Combinator.show(List<CombinatorIdentifier> identifiers,
-      Iterable<String> names, int charOffset, Uri fileUri)
-      : this(true, identifiers, new Set<String>.from(names), charOffset,
-            fileUri);
+  Combinator.hide(Iterable<String> names, int charOffset, Uri fileUri)
+      : this(false, new Set<String>.from(names), charOffset, fileUri);
 
   bool get isHide => !isShow;
 }
-
-class CombinatorIdentifier {
-  final int offset;
-  final String name;
-  final bool isSynthetic;
-
-  CombinatorIdentifier(this.offset, this.name, this.isSynthetic);
-}
diff --git a/pkg/front_end/lib/src/fasta/deprecated_problems.dart b/pkg/front_end/lib/src/fasta/deprecated_problems.dart
index 1d0c9fa..86067fb7 100644
--- a/pkg/front_end/lib/src/fasta/deprecated_problems.dart
+++ b/pkg/front_end/lib/src/fasta/deprecated_problems.dart
@@ -25,7 +25,7 @@
 /// Used to report an error in input.
 ///
 /// Avoid using this for reporting compile-time errors, instead use
-/// `LibraryBuilder.addCompileTimeError` for those.
+/// `LibraryBuilder.addProblem` for those.
 ///
 /// An input error is any error that isn't an internal error. We use the term
 /// "input error" in favor of "user error". This way, if an input error isn't
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index c440b0b..ba16545 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -19,7 +19,12 @@
         StringLiteral,
         Typedef;
 
-import '../fasta_codes.dart' show templateUnspecified;
+import '../fasta_codes.dart'
+    show
+        Message,
+        templateDuplicatedDefinition,
+        templateTypeNotFound,
+        templateUnspecified;
 
 import '../problems.dart' show internalProblem, unhandled, unimplemented;
 
@@ -65,9 +70,6 @@
   String get name => library.name;
 
   @override
-  bool get hasTarget => true;
-
-  @override
   Library get target => library;
 
   void becomeCoreLibrary(dynamicType) {
@@ -151,7 +153,11 @@
     // mapping `k` to `d` is added to the exported namespace of `L` unless a
     // top-level declaration with the name `k` exists in `L`.
     if (builder.parent == this) return builder;
-    return new KernelInvalidTypeBuilder(name, charOffset, fileUri);
+    return new KernelInvalidTypeBuilder(
+        name,
+        templateDuplicatedDefinition
+            .withArguments(name)
+            .withLocation(fileUri, charOffset, name.length));
   }
 
   @override
@@ -160,7 +166,7 @@
   }
 
   void finalizeExports() {
-    unserializableExports?.forEach((String name, String message) {
+    unserializableExports?.forEach((String name, String messageText) {
       Declaration declaration;
       switch (name) {
         case "dynamic":
@@ -171,13 +177,11 @@
           break;
 
         default:
-          declaration = new KernelInvalidTypeBuilder(
-              name,
-              -1,
-              null,
-              message == null
-                  ? null
-                  : templateUnspecified.withArguments(message));
+          Message message = messageText == null
+              ? templateTypeNotFound.withArguments(name)
+              : templateUnspecified.withArguments(messageText);
+          declaration =
+              new KernelInvalidTypeBuilder(name, message.withoutLocation());
       }
       exportScopeBuilder.addMember(name, declaration);
     });
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index b7b8496..7b54cd3 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -30,9 +30,6 @@
 
   String get debugName => "DillMemberBuilder";
 
-  @override
-  bool get hasTarget => true;
-
   Member get target => member;
 
   String get name => member.name.name;
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes.dart b/pkg/front_end/lib/src/fasta/fasta_codes.dart
index 05f3cde..f5c2da1 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes.dart
@@ -25,12 +25,10 @@
 
   final String analyzerCode;
 
-  final String dart2jsCode;
-
   final Severity severity;
 
   const Code(this.name, this.template,
-      {this.analyzerCode, this.dart2jsCode, this.severity});
+      {this.analyzerCode, this.severity: Severity.error});
 
   String toString() => name;
 }
@@ -62,14 +60,10 @@
 
   const MessageCode(String name,
       {String analyzerCode,
-      String dart2jsCode,
-      Severity severity,
+      Severity severity: Severity.error,
       this.message,
       this.tip})
-      : super(name, null,
-            analyzerCode: analyzerCode,
-            dart2jsCode: dart2jsCode,
-            severity: severity);
+      : super(name, null, analyzerCode: analyzerCode, severity: severity);
 
   Map<String, dynamic> get arguments => const <String, dynamic>{};
 
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 a695393..4934ff9 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -22,7 +22,6 @@
     const Code<Message Function(String name)>(
         "AbstractClassInstantiation", templateAbstractClassInstantiation,
         analyzerCode: "NEW_WITH_ABSTRACT_CLASS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -39,7 +38,6 @@
 const MessageCode messageAbstractClassMember = const MessageCode(
     "AbstractClassMember",
     analyzerCode: "ABSTRACT_CLASS_MEMBER",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Members of classes can't be declared to be 'abstract'.""",
     tip:
         r"""Try removing the 'abstract' keyword. You can add the 'abstract' keyword before the class declaration.""");
@@ -50,7 +48,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAbstractNotSync = const MessageCode("AbstractNotSync",
     analyzerCode: "NON_SYNC_ABSTRACT_METHOD",
-    dart2jsCode: "*ignored*",
     message: r"""Abstract methods can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -70,7 +67,6 @@
         "AbstractRedirectedClassInstantiation",
         templateAbstractRedirectedClassInstantiation,
         analyzerCode: "FACTORY_REDIRECTS_TO_ABSTRACT_CLASS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -113,15 +109,14 @@
     codeAmbiguousSupertypes =
     const Code<Message Function(String name, DartType _type, DartType _type2)>(
         "AmbiguousSupertypes", templateAmbiguousSupertypes,
-        analyzerCode: "AMBIGUOUS_SUPERTYPES",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "AMBIGUOUS_SUPERTYPES");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsAmbiguousSupertypes(
     String name, DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -153,13 +148,14 @@
     codeArgumentTypeNotAssignable =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "ArgumentTypeNotAssignable", templateArgumentTypeNotAssignable,
-        analyzerCode: "ARGUMENT_TYPE_NOT_ASSIGNABLE", dart2jsCode: "*ignored*");
+        analyzerCode: "ARGUMENT_TYPE_NOT_ASSIGNABLE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsArgumentTypeNotAssignable(
     DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -188,7 +184,7 @@
 const Code<Message Function(int codePoint)> codeAsciiControlCharacter =
     const Code<Message Function(int codePoint)>(
         "AsciiControlCharacter", templateAsciiControlCharacter,
-        analyzerCode: "ILLEGAL_CHARACTER", dart2jsCode: "BAD_INPUT_CHARACTER");
+        analyzerCode: "ILLEGAL_CHARACTER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsAsciiControlCharacter(int codePoint) {
@@ -206,7 +202,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAssertAsExpression = const MessageCode(
     "AssertAsExpression",
-    dart2jsCode: "*fatal*",
     message: r"""`assert` can't be used as an expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -215,7 +210,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAssertExtraneousArgument = const MessageCode(
     "AssertExtraneousArgument",
-    dart2jsCode: "*fatal*",
     message: r"""`assert` can't have more than two arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -225,7 +219,6 @@
 const MessageCode messageAsyncAsIdentifier = const MessageCode(
     "AsyncAsIdentifier",
     analyzerCode: "ASYNC_KEYWORD_USED_AS_IDENTIFIER",
-    dart2jsCode: "GENERIC",
     message:
         r"""'async' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.""");
 
@@ -236,7 +229,6 @@
 const MessageCode messageAwaitAsIdentifier = const MessageCode(
     "AwaitAsIdentifier",
     analyzerCode: "ASYNC_KEYWORD_USED_AS_IDENTIFIER",
-    dart2jsCode: "*ignored*",
     message:
         r"""'await' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.""");
 
@@ -247,7 +239,6 @@
 const MessageCode messageAwaitForNotAsync = const MessageCode(
     "AwaitForNotAsync",
     analyzerCode: "ASYNC_FOR_IN_WRONG_CONTEXT",
-    dart2jsCode: "*ignored*",
     message:
         r"""The asynchronous for-in can only be used in functions marked with 'async' or 'async*'.""",
     tip:
@@ -259,7 +250,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageAwaitNotAsync = const MessageCode("AwaitNotAsync",
     analyzerCode: "AWAIT_IN_WRONG_CONTEXT",
-    dart2jsCode: "*ignored*",
     message: r"""'await' can only be used in 'async' or 'async*' methods.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -282,9 +272,7 @@
     const Code<Message Function(String name, String name2)>(
         "BoundIssueViaCycleNonSimplicity",
         templateBoundIssueViaCycleNonSimplicity,
-        analyzerCode: "NOT_INSTANTIATED_BOUND",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "NOT_INSTANTIATED_BOUND");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsBoundIssueViaCycleNonSimplicity(
@@ -311,9 +299,7 @@
 const Code<Message Function(String name)> codeBoundIssueViaLoopNonSimplicity =
     const Code<Message Function(String name)>("BoundIssueViaLoopNonSimplicity",
         templateBoundIssueViaLoopNonSimplicity,
-        analyzerCode: "NOT_INSTANTIATED_BOUND",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "NOT_INSTANTIATED_BOUND");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsBoundIssueViaLoopNonSimplicity(String name) {
@@ -339,9 +325,7 @@
     const Code<Message Function(String name)>(
         "BoundIssueViaRawTypeWithNonSimpleBounds",
         templateBoundIssueViaRawTypeWithNonSimpleBounds,
-        analyzerCode: "NOT_INSTANTIATED_BOUND",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "NOT_INSTANTIATED_BOUND");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsBoundIssueViaRawTypeWithNonSimpleBounds(String name) {
@@ -359,7 +343,6 @@
 const MessageCode messageBreakOutsideOfLoop = const MessageCode(
     "BreakOutsideOfLoop",
     analyzerCode: "BREAK_OUTSIDE_OF_LOOP",
-    dart2jsCode: "*ignored*",
     message:
         r"""A break statement can't be used outside of a loop or switch statement.""",
     tip: r"""Try removing the break statement.""");
@@ -375,7 +358,7 @@
 const Code<Message Function(String name)> codeBreakTargetOutsideFunction =
     const Code<Message Function(String name)>(
         "BreakTargetOutsideFunction", templateBreakTargetOutsideFunction,
-        analyzerCode: "LABEL_IN_OUTER_SCOPE", dart2jsCode: "*fatal*");
+        analyzerCode: "LABEL_IN_OUTER_SCOPE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsBreakTargetOutsideFunction(String name) {
@@ -396,8 +379,7 @@
 const Code<Message Function(Token token)> codeBuiltInIdentifierAsType =
     const Code<Message Function(Token token)>(
         "BuiltInIdentifierAsType", templateBuiltInIdentifierAsType,
-        analyzerCode: "BUILT_IN_IDENTIFIER_AS_TYPE",
-        dart2jsCode: "EXTRANEOUS_MODIFIER");
+        analyzerCode: "BUILT_IN_IDENTIFIER_AS_TYPE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsBuiltInIdentifierAsType(Token token) {
@@ -420,8 +402,7 @@
 const Code<Message Function(Token token)> codeBuiltInIdentifierInDeclaration =
     const Code<Message Function(Token token)>("BuiltInIdentifierInDeclaration",
         templateBuiltInIdentifierInDeclaration,
-        analyzerCode: "BUILT_IN_IDENTIFIER_IN_DECLARATION",
-        dart2jsCode: "GENERIC");
+        analyzerCode: "BUILT_IN_IDENTIFIER_IN_DECLARATION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsBuiltInIdentifierInDeclaration(Token token) {
@@ -471,7 +452,6 @@
 const MessageCode messageCannotAssignToParenthesizedExpression =
     const MessageCode("CannotAssignToParenthesizedExpression",
         analyzerCode: "ASSIGNMENT_TO_PARENTHESIZED_EXPRESSION",
-        dart2jsCode: "*fatal*",
         message: r"""Can't assign to a parenthesized expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -481,7 +461,6 @@
 const MessageCode messageCannotAssignToSuper = const MessageCode(
     "CannotAssignToSuper",
     analyzerCode: "NOT_AN_LVALUE",
-    dart2jsCode: "*fatal*",
     message: r"""Can't assign to super.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -563,8 +542,7 @@
 const Code<Message Function(String string)> codeCantInferTypeDueToCircularity =
     const Code<Message Function(String string)>(
         "CantInferTypeDueToCircularity", templateCantInferTypeDueToCircularity,
-        analyzerCode: "RECURSIVE_COMPILE_TIME_CONSTANT",
-        severity: Severity.error);
+        analyzerCode: "RECURSIVE_COMPILE_TIME_CONSTANT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCantInferTypeDueToCircularity(String string) {
@@ -590,9 +568,7 @@
     const Code<Message Function(String string)>(
         "CantInferTypeDueToInconsistentOverrides",
         templateCantInferTypeDueToInconsistentOverrides,
-        analyzerCode: "INVALID_METHOD_OVERRIDE",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "INVALID_METHOD_OVERRIDE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCantInferTypeDueToInconsistentOverrides(String string) {
@@ -620,9 +596,7 @@
 const Code<Message Function(Token token)> codeCantUseDeferredPrefixAsConstant =
     const Code<Message Function(Token token)>("CantUseDeferredPrefixAsConstant",
         templateCantUseDeferredPrefixAsConstant,
-        analyzerCode: "CONST_DEFERRED_CLASS",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "CONST_DEFERRED_CLASS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCantUseDeferredPrefixAsConstant(Token token) {
@@ -643,8 +617,6 @@
 const MessageCode messageCantUsePrefixAsExpression = const MessageCode(
     "CantUsePrefixAsExpression",
     analyzerCode: "PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""A prefix can't be used as an expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -655,8 +627,6 @@
 const MessageCode messageCantUsePrefixWithNullAware = const MessageCode(
     "CantUsePrefixWithNullAware",
     analyzerCode: "PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""A prefix can't be used with null-aware operators.""",
     tip: r"""It should be safe to remove the '?' as a prefix is never null.""");
 
@@ -675,15 +645,16 @@
 const Code<Message Function(DartType _type)>
     codeCantUseSuperBoundedTypeForInstanceCreation =
     const Code<Message Function(DartType _type)>(
-        "CantUseSuperBoundedTypeForInstanceCreation",
-        templateCantUseSuperBoundedTypeForInstanceCreation,
-        severity: Severity.error);
+  "CantUseSuperBoundedTypeForInstanceCreation",
+  templateCantUseSuperBoundedTypeForInstanceCreation,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCantUseSuperBoundedTypeForInstanceCreation(
     DartType _type) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -700,7 +671,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCatchSyntax = const MessageCode("CatchSyntax",
     analyzerCode: "CATCH_SYNTAX",
-    dart2jsCode: "*ignored*",
     message:
         r"""'catch' must be followed by '(identifier)' or '(identifier, identifier)'.""",
     tip:
@@ -712,7 +682,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageClassInClass = const MessageCode("ClassInClass",
     analyzerCode: "CLASS_IN_CLASS",
-    dart2jsCode: "*fatal*",
     message: r"""Classes can't be declared inside other classes.""",
     tip: r"""Try moving the class to the top-level.""");
 
@@ -723,7 +692,6 @@
 const MessageCode messageColonInPlaceOfIn = const MessageCode(
     "ColonInPlaceOfIn",
     analyzerCode: "COLON_IN_PLACE_OF_IN",
-    dart2jsCode: "*fatal*",
     message: r"""For-in loops use 'in' rather than a colon.""",
     tip: r"""Try replacing the colon with the keyword 'in'.""");
 
@@ -737,9 +705,7 @@
 const Code<Message Function(String name)> codeConflictsWithConstructor =
     const Code<Message Function(String name)>(
         "ConflictsWithConstructor", templateConflictsWithConstructor,
-        analyzerCode: "CONFLICTS_WITH_CONSTRUCTOR",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "CONFLICTS_WITH_CONSTRUCTOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithConstructor(String name) {
@@ -757,8 +723,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeConflictsWithFactory =
     const Code<Message Function(String name)>(
-        "ConflictsWithFactory", templateConflictsWithFactory,
-        severity: Severity.error);
+  "ConflictsWithFactory",
+  templateConflictsWithFactory,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithFactory(String name) {
@@ -777,9 +744,7 @@
 const Code<Message Function(String name)> codeConflictsWithMember =
     const Code<Message Function(String name)>(
         "ConflictsWithMember", templateConflictsWithMember,
-        analyzerCode: "CONFLICTS_WITH_MEMBER",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "CONFLICTS_WITH_MEMBER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithMember(String name) {
@@ -800,7 +765,6 @@
     const Code<Message Function(String name)>(
         "ConflictsWithMemberWarning", templateConflictsWithMemberWarning,
         analyzerCode: "CONFLICTS_WITH_MEMBER",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -820,9 +784,7 @@
 const Code<Message Function(String name)> codeConflictsWithSetter =
     const Code<Message Function(String name)>(
         "ConflictsWithSetter", templateConflictsWithSetter,
-        analyzerCode: "CONFLICTS_WITH_MEMBER",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "CONFLICTS_WITH_MEMBER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithSetter(String name) {
@@ -843,7 +805,6 @@
     const Code<Message Function(String name)>(
         "ConflictsWithSetterWarning", templateConflictsWithSetterWarning,
         analyzerCode: "CONFLICTS_WITH_MEMBER",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -864,9 +825,7 @@
 const Code<Message Function(String name)> codeConflictsWithTypeVariable =
     const Code<Message Function(String name)>(
         "ConflictsWithTypeVariable", templateConflictsWithTypeVariable,
-        analyzerCode: "CONFLICTING_TYPE_VARIABLE_AND_MEMBER",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "CONFLICTING_TYPE_VARIABLE_AND_MEMBER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConflictsWithTypeVariable(String name) {
@@ -892,7 +851,6 @@
 const MessageCode messageConstAfterFactory = const MessageCode(
     "ConstAfterFactory",
     analyzerCode: "CONST_AFTER_FACTORY",
-    dart2jsCode: "*ignored*",
     message:
         r"""The modifier 'const' should be before the modifier 'factory'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -904,7 +862,6 @@
 const MessageCode messageConstAndCovariant = const MessageCode(
     "ConstAndCovariant",
     analyzerCode: "CONST_AND_COVARIANT",
-    dart2jsCode: "*ignored*",
     message:
         r"""Members can't be declared to be both 'const' and 'covariant'.""",
     tip: r"""Try removing either the 'const' or 'covariant' keyword.""");
@@ -915,7 +872,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstAndFinal = const MessageCode("ConstAndFinal",
     analyzerCode: "CONST_AND_FINAL",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Members can't be declared to be both 'const' and 'final'.""",
     tip: r"""Try removing either the 'const' or 'final' keyword.""");
 
@@ -925,7 +881,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstAndVar = const MessageCode("ConstAndVar",
     analyzerCode: "CONST_AND_VAR",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Members can't be declared to be both 'const' and 'var'.""",
     tip: r"""Try removing either the 'const' or 'var' keyword.""");
 
@@ -935,7 +890,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstClass = const MessageCode("ConstClass",
     analyzerCode: "CONST_CLASS",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Classes can't be declared to be 'const'.""",
     tip:
         r"""Try removing the 'const' keyword. If you're trying to indicate that instances of the class can be constants, place the 'const' keyword on  the class' constructor(s).""");
@@ -948,8 +902,6 @@
 const MessageCode messageConstConstructorInSubclassOfMixinApplication =
     const MessageCode("ConstConstructorInSubclassOfMixinApplication",
         analyzerCode: "CONST_CONSTRUCTOR_IN_SUBCLASS_OF_MIXIN_APPLICATION",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error,
         message: r"""Can't extend a mixin application and be 'const'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -960,7 +912,6 @@
 const MessageCode messageConstConstructorNonFinalField = const MessageCode(
     "ConstConstructorNonFinalField",
     analyzerCode: "CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD",
-    dart2jsCode: "*fatal*",
     message: r"""Constructor is marked 'const' so all fields must be final.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -980,8 +931,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstConstructorRedirectionToNonConst =
     const MessageCode("ConstConstructorRedirectionToNonConst",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error,
         message:
             r"""A constant constructor can't call a non-constant constructor.""");
 
@@ -992,7 +941,6 @@
 const MessageCode messageConstConstructorWithBody = const MessageCode(
     "ConstConstructorWithBody",
     analyzerCode: "CONST_CONSTRUCTOR_WITH_BODY",
-    dart2jsCode: "*fatal*",
     message: r"""A const constructor can't have a body.""",
     tip: r"""Try removing either the 'const' keyword or the body.""");
 
@@ -1004,7 +952,6 @@
 const MessageCode messageConstConstructorWithNonConstSuper = const MessageCode(
     "ConstConstructorWithNonConstSuper",
     analyzerCode: "CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER",
-    dart2jsCode: "*fatal*",
     message:
         r"""Constant constructor can't call non-constant super constructors.""");
 
@@ -1019,24 +966,30 @@
 const Template<
     Message Function(
         Constant
-            constant)> templateConstEvalDuplicateKey = const Template<
-        Message Function(Constant constant)>(
+            _constant)> templateConstEvalDuplicateKey = const Template<
+        Message Function(Constant _constant)>(
     messageTemplate:
         r"""The key '#constant' conflicts with another existing key in the map.""",
     withArguments: _withArgumentsConstEvalDuplicateKey);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(Constant constant)> codeConstEvalDuplicateKey =
-    const Code<Message Function(Constant constant)>(
+const Code<Message Function(Constant _constant)> codeConstEvalDuplicateKey =
+    const Code<Message Function(Constant _constant)>(
         "ConstEvalDuplicateKey", templateConstEvalDuplicateKey,
         analyzerCode: "EQUAL_KEYS_IN_MAP");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsConstEvalDuplicateKey(Constant constant) {
+Message _withArgumentsConstEvalDuplicateKey(Constant _constant) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
+  String constant = '$buffer';
+
   return new Message(codeConstEvalDuplicateKey,
       message:
           """The key '${constant}' conflicts with another existing key in the map.""",
-      arguments: {'constant': constant});
+      arguments: {'constant': _constant});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1074,11 +1027,11 @@
 const Template<
     Message Function(
         String string,
-        Constant constant,
+        Constant _constant,
         DartType _type,
         DartType
             _type2)> templateConstEvalInvalidBinaryOperandType = const Template<
-        Message Function(String string, Constant constant, DartType _type,
+        Message Function(String string, Constant _constant, DartType _type,
             DartType _type2)>(
     messageTemplate:
         r"""Binary operator '#string' on '#constant' requires operand of type '#type', but was of type '#type2'.""",
@@ -1086,20 +1039,24 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<
-        Message Function(
-            String string, Constant constant, DartType _type, DartType _type2)>
-    codeConstEvalInvalidBinaryOperandType = const Code<
-        Message Function(
-            String string, Constant constant, DartType _type, DartType _type2)>(
+    Message Function(String string, Constant _constant, DartType _type,
+        DartType _type2)> codeConstEvalInvalidBinaryOperandType = const Code<
+    Message Function(
+        String string, Constant _constant, DartType _type, DartType _type2)>(
   "ConstEvalInvalidBinaryOperandType",
   templateConstEvalInvalidBinaryOperandType,
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstEvalInvalidBinaryOperandType(
-    String string, Constant constant, DartType _type, DartType _type2) {
+    String string, Constant _constant, DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
+  String constant = '$buffer';
+
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -1112,7 +1069,7 @@
           """Binary operator '${string}' on '${constant}' requires operand of type '${type}', but was of type '${type2}'.""",
       arguments: {
         'string': string,
-        'constant': constant,
+        'constant': _constant,
         'type': _type,
         'type2': _type2
       });
@@ -1123,27 +1080,33 @@
     Message Function(
         String string,
         Constant
-            constant)> templateConstEvalInvalidMethodInvocation = const Template<
-        Message Function(String string, Constant constant)>(
+            _constant)> templateConstEvalInvalidMethodInvocation = const Template<
+        Message Function(String string, Constant _constant)>(
     messageTemplate:
         r"""The method '#string' can't be invoked on '#constant' within a const context.""",
     withArguments: _withArgumentsConstEvalInvalidMethodInvocation);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String string, Constant constant)>
+const Code<Message Function(String string, Constant _constant)>
     codeConstEvalInvalidMethodInvocation =
-    const Code<Message Function(String string, Constant constant)>(
+    const Code<Message Function(String string, Constant _constant)>(
         "ConstEvalInvalidMethodInvocation",
         templateConstEvalInvalidMethodInvocation,
         analyzerCode: "UNDEFINED_OPERATOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstEvalInvalidMethodInvocation(
-    String string, Constant constant) {
+    String string, Constant _constant) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
+  String constant = '$buffer';
+
   return new Message(codeConstEvalInvalidMethodInvocation,
       message:
           """The method '${string}' can't be invoked on '${constant}' within a const context.""",
-      arguments: {'string': string, 'constant': constant});
+      arguments: {'string': string, 'constant': _constant});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1172,56 +1135,68 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(Constant constant)>
+const Template<Message Function(Constant _constant)>
     templateConstEvalInvalidStringInterpolationOperand =
-    const Template<Message Function(Constant constant)>(
+    const Template<Message Function(Constant _constant)>(
         messageTemplate:
             r"""The '#constant' can't be used as part of a string interpolation within a const context, only values of type 'null', 'bool', 'int', 'double', or 'String' can be used.""",
         withArguments:
             _withArgumentsConstEvalInvalidStringInterpolationOperand);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(Constant constant)>
+const Code<Message Function(Constant _constant)>
     codeConstEvalInvalidStringInterpolationOperand =
-    const Code<Message Function(Constant constant)>(
+    const Code<Message Function(Constant _constant)>(
         "ConstEvalInvalidStringInterpolationOperand",
         templateConstEvalInvalidStringInterpolationOperand,
         analyzerCode: "CONST_EVAL_TYPE_BOOL_NUM_STRING");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstEvalInvalidStringInterpolationOperand(
-    Constant constant) {
+    Constant _constant) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
+  String constant = '$buffer';
+
   return new Message(codeConstEvalInvalidStringInterpolationOperand,
       message:
           """The '${constant}' can't be used as part of a string interpolation within a const context, only values of type 'null', 'bool', 'int', 'double', or 'String' can be used.""",
-      arguments: {'constant': constant});
+      arguments: {'constant': _constant});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
-        Constant constant,
+        Constant _constant,
         DartType _type,
         DartType
             _type2)> templateConstEvalInvalidType = const Template<
-        Message Function(Constant constant, DartType _type, DartType _type2)>(
+        Message Function(Constant _constant, DartType _type, DartType _type2)>(
     messageTemplate:
         r"""Expected constant '#constant' to be of type '#type', but was of type '#type2'.""",
     withArguments: _withArgumentsConstEvalInvalidType);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(Constant constant, DartType _type, DartType _type2)>
+const Code<
+        Message Function(Constant _constant, DartType _type, DartType _type2)>
     codeConstEvalInvalidType = const Code<
-        Message Function(Constant constant, DartType _type, DartType _type2)>(
+        Message Function(Constant _constant, DartType _type, DartType _type2)>(
   "ConstEvalInvalidType",
   templateConstEvalInvalidType,
 );
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstEvalInvalidType(
-    Constant constant, DartType _type, DartType _type2) {
+    Constant _constant, DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
+  String constant = '$buffer';
+
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -1232,7 +1207,7 @@
   return new Message(codeConstEvalInvalidType,
       message:
           """Expected constant '${constant}' to be of type '${type}', but was of type '${type2}'.""",
-      arguments: {'constant': constant, 'type': _type, 'type2': _type2});
+      arguments: {'constant': _constant, 'type': _type, 'type2': _type2});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1251,8 +1226,9 @@
 const Code<Message Function(String string, String string2, String string3)>
     codeConstEvalNegativeShift =
     const Code<Message Function(String string, String string2, String string3)>(
-        "ConstEvalNegativeShift", templateConstEvalNegativeShift,
-        dart2jsCode: "INVALID_CONSTANT_SHIFT");
+  "ConstEvalNegativeShift",
+  templateConstEvalNegativeShift,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstEvalNegativeShift(
@@ -1329,8 +1305,7 @@
     codeConstEvalZeroDivisor =
     const Code<Message Function(String string, String string2)>(
         "ConstEvalZeroDivisor", templateConstEvalZeroDivisor,
-        analyzerCode: "CONST_EVAL_THROWS_IDBZE",
-        dart2jsCode: "INVALID_CONSTANT_DIV");
+        analyzerCode: "CONST_EVAL_THROWS_IDBZE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstEvalZeroDivisor(String string, String string2) {
@@ -1346,13 +1321,25 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstFactory = const MessageCode("ConstFactory",
     analyzerCode: "CONST_FACTORY",
-    dart2jsCode: "*ignored*",
     message:
         r"""Only redirecting factory constructors can be declared to be 'const'.""",
     tip:
         r"""Try removing the 'const' keyword, or replacing the body with '=' followed by a valid target.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstFactoryRedirectionToNonConst =
+    messageConstFactoryRedirectionToNonConst;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstFactoryRedirectionToNonConst = const MessageCode(
+    "ConstFactoryRedirectionToNonConst",
+    analyzerCode: "REDIRECT_TO_NON_CONST_CONSTRUCTOR",
+    message:
+        r"""Constant factory constructor can't delegate to a non-constant constructor.""",
+    tip:
+        r"""Try redirecting to a different constructor or marking the target constructor 'const'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String
@@ -1367,7 +1354,7 @@
 const Code<Message Function(String name)> codeConstFieldWithoutInitializer =
     const Code<Message Function(String name)>(
         "ConstFieldWithoutInitializer", templateConstFieldWithoutInitializer,
-        analyzerCode: "CONST_NOT_INITIALIZED", dart2jsCode: "*ignored*");
+        analyzerCode: "CONST_NOT_INITIALIZED");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsConstFieldWithoutInitializer(String name) {
@@ -1379,12 +1366,22 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstInstanceField = messageConstInstanceField;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstInstanceField = const MessageCode(
+    "ConstInstanceField",
+    analyzerCode: "CONST_INSTANCE_FIELD",
+    message: r"""Only static fields can be declared as const.""",
+    tip:
+        r"""Try using 'final' instead of 'const', or adding the keyword 'static'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstMethod = messageConstMethod;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageConstMethod = const MessageCode("ConstMethod",
     analyzerCode: "CONST_METHOD",
-    dart2jsCode: "*fatal*",
     message:
         r"""Getters, setters and methods can't be declared to be 'const'.""",
     tip: r"""Try removing the 'const' keyword.""");
@@ -1396,8 +1393,6 @@
 const MessageCode messageConstructorCyclic = const MessageCode(
     "ConstructorCyclic",
     analyzerCode: "RECURSIVE_CONSTRUCTOR_REDIRECT",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Redirecting constructers can't be cyclic.""",
     tip:
         r"""Try to have all constructors eventually redirect to a non-redirecting constructor.""");
@@ -1413,7 +1408,6 @@
     const Code<Message Function(String name)>(
         "ConstructorNotFound", templateConstructorNotFound,
         analyzerCode: "CONSTRUCTOR_NOT_FOUND",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1430,7 +1424,6 @@
 const MessageCode messageConstructorNotSync = const MessageCode(
     "ConstructorNotSync",
     analyzerCode: "NON_SYNC_CONSTRUCTOR",
-    dart2jsCode: "*ignored*",
     message:
         r"""Constructor bodies can't use 'async', 'async*', or 'sync*'.""");
 
@@ -1442,11 +1435,22 @@
 const MessageCode messageConstructorWithReturnType = const MessageCode(
     "ConstructorWithReturnType",
     analyzerCode: "CONSTRUCTOR_WITH_RETURN_TYPE",
-    dart2jsCode: "*fatal*",
     message: r"""Constructors can't have a return type.""",
     tip: r"""Try removing the return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstructorWithTypeArguments =
+    messageConstructorWithTypeArguments;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstructorWithTypeArguments = const MessageCode(
+    "ConstructorWithTypeArguments",
+    analyzerCode: "UNDEFINED_CLASS",
+    message:
+        r"""A constructor invocation can't have type arguments on the constructor name.""",
+    tip: r"""Try to place the type arguments on the class name.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstructorWithTypeParameters =
     messageConstructorWithTypeParameters;
 
@@ -1454,8 +1458,6 @@
 const MessageCode messageConstructorWithTypeParameters = const MessageCode(
     "ConstructorWithTypeParameters",
     analyzerCode: "TYPE_PARAMETER_ON_CONSTRUCTOR",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Constructors can't have type parameters.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1465,8 +1467,6 @@
 const MessageCode messageConstructorWithWrongName = const MessageCode(
     "ConstructorWithWrongName",
     analyzerCode: "INVALID_CONSTRUCTOR_NAME",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""The name of a constructor must match the name of the enclosing class.""");
 
@@ -1497,7 +1497,6 @@
 const MessageCode messageContinueLabelNotTarget = const MessageCode(
     "ContinueLabelNotTarget",
     analyzerCode: "LABEL_UNDEFINED",
-    dart2jsCode: "*fatal*",
     message: r"""Target of continue must be a label.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -1507,7 +1506,6 @@
 const MessageCode messageContinueOutsideOfLoop = const MessageCode(
     "ContinueOutsideOfLoop",
     analyzerCode: "CONTINUE_OUTSIDE_OF_LOOP",
-    dart2jsCode: "*ignored*",
     message:
         r"""A continue statement can't be used outside of a loop or switch statement.""",
     tip: r"""Try removing the continue statement.""");
@@ -1524,7 +1522,7 @@
 const Code<Message Function(String name)> codeContinueTargetOutsideFunction =
     const Code<Message Function(String name)>(
         "ContinueTargetOutsideFunction", templateContinueTargetOutsideFunction,
-        analyzerCode: "LABEL_IN_OUTER_SCOPE", dart2jsCode: "*fatal*");
+        analyzerCode: "LABEL_IN_OUTER_SCOPE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsContinueTargetOutsideFunction(String name) {
@@ -1541,7 +1539,6 @@
 const MessageCode messageContinueWithoutLabelInCase = const MessageCode(
     "ContinueWithoutLabelInCase",
     analyzerCode: "CONTINUE_WITHOUT_LABEL_IN_CASE",
-    dart2jsCode: "*ignored*",
     message:
         r"""A continue statement in a switch statement must have a label as a target.""",
     tip:
@@ -1576,7 +1573,6 @@
 const MessageCode messageCovariantAfterFinal = const MessageCode(
     "CovariantAfterFinal",
     analyzerCode: "COVARIANT_AFTER_FINAL",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""The modifier 'covariant' should be before the modifier 'final'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -1588,7 +1584,6 @@
 const MessageCode messageCovariantAfterVar = const MessageCode(
     "CovariantAfterVar",
     analyzerCode: "COVARIANT_AFTER_VAR",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""The modifier 'covariant' should be before the modifier 'var'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -1600,7 +1595,6 @@
 const MessageCode messageCovariantAndStatic = const MessageCode(
     "CovariantAndStatic",
     analyzerCode: "COVARIANT_AND_STATIC",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""Members can't be declared to be both 'covariant' and 'static'.""",
     tip: r"""Try removing either the 'covariant' or 'static' keyword.""");
@@ -1611,12 +1605,39 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageCovariantMember = const MessageCode("CovariantMember",
     analyzerCode: "COVARIANT_MEMBER",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""Getters, setters and methods can't be declared to be 'covariant'.""",
     tip: r"""Try removing the 'covariant' keyword.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String name,
+        String
+            string)> templateCycleInTypeVariables = const Template<
+        Message Function(String name, String string)>(
+    messageTemplate: r"""Type '#name' is a bound of itself via '#string'.""",
+    tipTemplate:
+        r"""Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
+    withArguments: _withArgumentsCycleInTypeVariables);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, String string)>
+    codeCycleInTypeVariables =
+    const Code<Message Function(String name, String string)>(
+        "CycleInTypeVariables", templateCycleInTypeVariables,
+        analyzerCode: "TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsCycleInTypeVariables(String name, String string) {
+  return new Message(codeCycleInTypeVariables,
+      message: """Type '${name}' is a bound of itself via '${string}'.""",
+      tip:
+          """Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.""",
+      arguments: {'name': name, 'string': string});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name, String string)>
     templateCyclicClassHierarchy =
     const Template<Message Function(String name, String string)>(
@@ -1628,9 +1649,7 @@
     codeCyclicClassHierarchy =
     const Code<Message Function(String name, String string)>(
         "CyclicClassHierarchy", templateCyclicClassHierarchy,
-        analyzerCode: "RECURSIVE_INTERFACE_INHERITANCE",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "RECURSIVE_INTERFACE_INHERITANCE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCyclicClassHierarchy(String name, String string) {
@@ -1652,9 +1671,7 @@
     const Code<Message Function(String name)>(
         "CyclicRedirectingFactoryConstructors",
         templateCyclicRedirectingFactoryConstructors,
-        analyzerCode: "RECURSIVE_FACTORY_REDIRECT",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "RECURSIVE_FACTORY_REDIRECT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCyclicRedirectingFactoryConstructors(String name) {
@@ -1673,8 +1690,7 @@
 const Code<Message Function(String name)> codeCyclicTypedef =
     const Code<Message Function(String name)>(
         "CyclicTypedef", templateCyclicTypedef,
-        analyzerCode: "TYPE_ALIAS_CANNOT_REFERENCE_ITSELF",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "TYPE_ALIAS_CANNOT_REFERENCE_ITSELF");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsCyclicTypedef(String name) {
@@ -1691,7 +1707,6 @@
 const MessageCode messageDeclaredMemberConflictsWithInheritedMember =
     const MessageCode("DeclaredMemberConflictsWithInheritedMember",
         analyzerCode: "DECLARED_MEMBER_CONFLICTS_WITH_INHERITED",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning,
         message:
             r"""Can't declare a member that conflicts with an inherited one.""");
@@ -1707,13 +1722,39 @@
         message: r"""This is the inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateDefaultValueInRedirectingFactoryConstructor =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Can't have a default value here because any default values of '#name' would be used instead.""",
+        tipTemplate: r"""Try removing the default value.""",
+        withArguments:
+            _withArgumentsDefaultValueInRedirectingFactoryConstructor);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeDefaultValueInRedirectingFactoryConstructor =
+    const Code<Message Function(String name)>(
+        "DefaultValueInRedirectingFactoryConstructor",
+        templateDefaultValueInRedirectingFactoryConstructor,
+        analyzerCode: "DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsDefaultValueInRedirectingFactoryConstructor(String name) {
+  return new Message(codeDefaultValueInRedirectingFactoryConstructor,
+      message:
+          """Can't have a default value here because any default values of '${name}' would be used instead.""",
+      tip: """Try removing the default value.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDeferredAfterPrefix = messageDeferredAfterPrefix;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageDeferredAfterPrefix = const MessageCode(
     "DeferredAfterPrefix",
     analyzerCode: "DEFERRED_AFTER_PREFIX",
-    dart2jsCode: "*fatal*",
     message:
         r"""The deferred keyword should come immediately before the prefix ('as' clause).""",
     tip: r"""Try moving the deferred keyword before the prefix.""");
@@ -1732,7 +1773,7 @@
 const Code<Message Function(String name)> codeDeferredPrefixDuplicated =
     const Code<Message Function(String name)>(
         "DeferredPrefixDuplicated", templateDeferredPrefixDuplicated,
-        analyzerCode: "SHARED_DEFERRED_PREFIX", dart2jsCode: "*fatal*");
+        analyzerCode: "SHARED_DEFERRED_PREFIX");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDeferredPrefixDuplicated(String name) {
@@ -1780,13 +1821,13 @@
     const Code<Message Function(DartType _type, String name)>(
         "DeferredTypeAnnotation", templateDeferredTypeAnnotation,
         analyzerCode: "TYPE_ANNOTATION_DEFERRED_CLASS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDeferredTypeAnnotation(DartType _type, String name) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -1847,7 +1888,6 @@
 const MessageCode messageDirectiveAfterDeclaration = const MessageCode(
     "DirectiveAfterDeclaration",
     analyzerCode: "DIRECTIVE_AFTER_DECLARATION",
-    dart2jsCode: "*ignored*",
     message: r"""Directives must appear before any declarations.""",
     tip: r"""Try moving the directive before any declarations.""");
 
@@ -1858,7 +1898,6 @@
 const MessageCode messageDuplicateDeferred = const MessageCode(
     "DuplicateDeferred",
     analyzerCode: "DUPLICATE_DEFERRED",
-    dart2jsCode: "*fatal*",
     message: r"""An import directive can only have one 'deferred' keyword.""",
     tip: r"""Try removing all but one 'deferred' keyword.""");
 
@@ -1875,8 +1914,7 @@
 const Code<Message Function(String name)> codeDuplicateLabelInSwitchStatement =
     const Code<Message Function(String name)>("DuplicateLabelInSwitchStatement",
         templateDuplicateLabelInSwitchStatement,
-        analyzerCode: "DUPLICATE_LABEL_IN_SWITCH_STATEMENT",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "DUPLICATE_LABEL_IN_SWITCH_STATEMENT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicateLabelInSwitchStatement(String name) {
@@ -1893,7 +1931,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageDuplicatePrefix = const MessageCode("DuplicatePrefix",
     analyzerCode: "DUPLICATE_PREFIX",
-    dart2jsCode: "*fatal*",
     message: r"""An import directive can only have one prefix ('as' clause).""",
     tip: r"""Try removing all but one prefix.""");
 
@@ -1930,9 +1967,7 @@
     codeDuplicatedExport =
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
         "DuplicatedExport", templateDuplicatedExport,
-        analyzerCode: "AMBIGUOUS_EXPORT",
-        dart2jsCode: "*ignored*",
-        severity: Severity.ignored);
+        analyzerCode: "AMBIGUOUS_EXPORT", severity: Severity.ignored);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedExport(String name, Uri uri_, Uri uri2_) {
@@ -2005,7 +2040,6 @@
     const Code<Message Function(String name, Uri uri_, Uri uri2_)>(
         "DuplicatedImportInType", templateDuplicatedImportInType,
         analyzerCode: "AMBIGUOUS_IMPORT",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2028,8 +2062,7 @@
 const Code<Message Function(Token token)> codeDuplicatedModifier =
     const Code<Message Function(Token token)>(
         "DuplicatedModifier", templateDuplicatedModifier,
-        analyzerCode: "DUPLICATED_MODIFIER",
-        dart2jsCode: "EXTRANEOUS_MODIFIER");
+        analyzerCode: "DUPLICATED_MODIFIER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedModifier(Token token) {
@@ -2050,9 +2083,7 @@
 const Code<Message Function(String name)> codeDuplicatedName =
     const Code<Message Function(String name)>(
         "DuplicatedName", templateDuplicatedName,
-        analyzerCode: "DUPLICATE_DEFINITION",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "DUPLICATE_DEFINITION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedName(String name) {
@@ -2094,9 +2125,7 @@
 const Code<Message Function(String name)> codeDuplicatedNamePreviouslyUsed =
     const Code<Message Function(String name)>(
         "DuplicatedNamePreviouslyUsed", templateDuplicatedNamePreviouslyUsed,
-        analyzerCode: "REFERENCED_BEFORE_DECLARATION",
-        dart2jsCode: "*ignored*",
-        severity: Severity.error);
+        analyzerCode: "REFERENCED_BEFORE_DECLARATION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedNamePreviouslyUsed(String name) {
@@ -2137,9 +2166,7 @@
 const Code<Message Function(String name)> codeDuplicatedNamedArgument =
     const Code<Message Function(String name)>(
         "DuplicatedNamedArgument", templateDuplicatedNamedArgument,
-        analyzerCode: "DUPLICATE_NAMED_ARGUMENT",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "DUPLICATE_NAMED_ARGUMENT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedNamedArgument(String name) {
@@ -2158,9 +2185,7 @@
 const Code<Message Function(String name)> codeDuplicatedParameterName =
     const Code<Message Function(String name)>(
         "DuplicatedParameterName", templateDuplicatedParameterName,
-        analyzerCode: "DUPLICATE_DEFINITION",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "DUPLICATE_DEFINITION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsDuplicatedParameterName(String name) {
@@ -2196,7 +2221,6 @@
 const MessageCode messageEmptyNamedParameterList = const MessageCode(
     "EmptyNamedParameterList",
     analyzerCode: "MISSING_IDENTIFIER",
-    dart2jsCode: "EMPTY_NAMED_PARAMETER_LIST",
     message: r"""Named parameter lists cannot be empty.""",
     tip: r"""Try adding a named parameter to the list.""");
 
@@ -2208,7 +2232,6 @@
 const MessageCode messageEmptyOptionalParameterList = const MessageCode(
     "EmptyOptionalParameterList",
     analyzerCode: "MISSING_IDENTIFIER",
-    dart2jsCode: "EMPTY_OPTIONAL_PARAMETER_LIST",
     message: r"""Optional parameter lists cannot be empty.""",
     tip: r"""Try adding an optional parameter to the list.""");
 
@@ -2217,7 +2240,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageEncoding = const MessageCode("Encoding",
-    dart2jsCode: "*fatal*", message: r"""Unable to decode bytes as UTF-8.""");
+    message: r"""Unable to decode bytes as UTF-8.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
@@ -2233,7 +2256,7 @@
 const Code<Message Function(String name)> codeEnumConstantSameNameAsEnclosing =
     const Code<Message Function(String name)>("EnumConstantSameNameAsEnclosing",
         templateEnumConstantSameNameAsEnclosing,
-        analyzerCode: "ENUM_CONSTANT_WITH_ENUM_NAME", dart2jsCode: "*fatal*");
+        analyzerCode: "ENUM_CONSTANT_WITH_ENUM_NAME");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsEnumConstantSameNameAsEnclosing(String name) {
@@ -2250,7 +2273,6 @@
 const MessageCode messageEnumDeclarationEmpty = const MessageCode(
     "EnumDeclarationEmpty",
     analyzerCode: "EMPTY_ENUM_BODY",
-    dart2jsCode: "*ignored*",
     message: r"""An enum declaration can't be empty.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2259,7 +2281,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageEnumInClass = const MessageCode("EnumInClass",
     analyzerCode: "ENUM_IN_CLASS",
-    dart2jsCode: "*fatal*",
     message: r"""Enums can't be declared inside classes.""",
     tip: r"""Try moving the enum to the top-level.""");
 
@@ -2270,8 +2291,6 @@
 const MessageCode messageEnumInstantiation = const MessageCode(
     "EnumInstantiation",
     analyzerCode: "INSTANTIATE_ENUM",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Enums can't be instantiated.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2282,7 +2301,6 @@
 const MessageCode messageEqualityCannotBeEqualityOperand = const MessageCode(
     "EqualityCannotBeEqualityOperand",
     analyzerCode: "EQUALITY_CANNOT_BE_EQUALITY_OPERAND",
-    dart2jsCode: "*fatal*",
     message:
         r"""An equality expression can't be an operand of another equality expression.""",
     tip: r"""Try re-writing the expression.""");
@@ -2297,8 +2315,7 @@
 const Code<Message Function(String string)> codeExpectedAfterButGot =
     const Code<Message Function(String string)>(
         "ExpectedAfterButGot", templateExpectedAfterButGot,
-        analyzerCode: "EXPECTED_TOKEN",
-        dart2jsCode: "MISSING_TOKEN_AFTER_THIS");
+        analyzerCode: "EXPECTED_TOKEN");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedAfterButGot(String string) {
@@ -2314,7 +2331,6 @@
 const MessageCode messageExpectedAnInitializer = const MessageCode(
     "ExpectedAnInitializer",
     analyzerCode: "MISSING_INITIALIZER",
-    dart2jsCode: "*fatal*",
     message: r"""Expected an initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2323,7 +2339,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedBlock = const MessageCode("ExpectedBlock",
     analyzerCode: "EXPECTED_TOKEN",
-    dart2jsCode: "*fatal*",
     message: r"""Expected a block.""",
     tip: r"""Try adding {}.""");
 
@@ -2334,7 +2349,6 @@
 const MessageCode messageExpectedBlockToSkip = const MessageCode(
     "ExpectedBlockToSkip",
     analyzerCode: "MISSING_FUNCTION_BODY",
-    dart2jsCode: "NATIVE_OR_BODY_EXPECTED",
     message: r"""Expected a function body or '=>'.""",
     tip: r"""Try adding {}.""");
 
@@ -2344,7 +2358,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedBody = const MessageCode("ExpectedBody",
     analyzerCode: "MISSING_FUNCTION_BODY",
-    dart2jsCode: "BODY_EXPECTED",
     message: r"""Expected a function body or '=>'.""",
     tip: r"""Try adding {}.""");
 
@@ -2358,8 +2371,7 @@
 const Code<Message Function(String string)> codeExpectedButGot =
     const Code<Message Function(String string)>(
         "ExpectedButGot", templateExpectedButGot,
-        analyzerCode: "EXPECTED_TOKEN",
-        dart2jsCode: "MISSING_TOKEN_BEFORE_THIS");
+        analyzerCode: "EXPECTED_TOKEN");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedButGot(String string) {
@@ -2379,7 +2391,7 @@
 const Code<Message Function(Token token)> codeExpectedClassBodyToSkip =
     const Code<Message Function(Token token)>(
         "ExpectedClassBodyToSkip", templateExpectedClassBodyToSkip,
-        analyzerCode: "MISSING_CLASS_BODY", dart2jsCode: "*fatal*");
+        analyzerCode: "MISSING_CLASS_BODY");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedClassBodyToSkip(Token token) {
@@ -2399,7 +2411,7 @@
 const Code<Message Function(Token token)> codeExpectedClassMember =
     const Code<Message Function(Token token)>(
         "ExpectedClassMember", templateExpectedClassMember,
-        analyzerCode: "EXPECTED_CLASS_MEMBER", dart2jsCode: "*fatal*");
+        analyzerCode: "EXPECTED_CLASS_MEMBER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedClassMember(Token token) {
@@ -2420,7 +2432,7 @@
 const Code<Message Function(Token token)> codeExpectedClassOrMixinBody =
     const Code<Message Function(Token token)>(
         "ExpectedClassOrMixinBody", templateExpectedClassOrMixinBody,
-        analyzerCode: "MISSING_CLASS_BODY", dart2jsCode: "*fatal*");
+        analyzerCode: "MISSING_CLASS_BODY");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedClassOrMixinBody(Token token) {
@@ -2440,7 +2452,7 @@
 const Code<Message Function(Token token)> codeExpectedDeclaration =
     const Code<Message Function(Token token)>(
         "ExpectedDeclaration", templateExpectedDeclaration,
-        analyzerCode: "EXPECTED_EXECUTABLE", dart2jsCode: "*fatal*");
+        analyzerCode: "EXPECTED_EXECUTABLE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedDeclaration(Token token) {
@@ -2463,7 +2475,7 @@
 const Code<Message Function(Token token)> codeExpectedEnumBody =
     const Code<Message Function(Token token)>(
         "ExpectedEnumBody", templateExpectedEnumBody,
-        analyzerCode: "MISSING_ENUM_BODY", dart2jsCode: "*fatal*");
+        analyzerCode: "MISSING_ENUM_BODY");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedEnumBody(Token token) {
@@ -2485,7 +2497,7 @@
 const Code<Message Function(Token token)> codeExpectedFunctionBody =
     const Code<Message Function(Token token)>(
         "ExpectedFunctionBody", templateExpectedFunctionBody,
-        analyzerCode: "MISSING_FUNCTION_BODY", dart2jsCode: "NATIVE_OR_FATAL");
+        analyzerCode: "MISSING_FUNCTION_BODY");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedFunctionBody(Token token) {
@@ -2502,7 +2514,6 @@
 const MessageCode messageExpectedHexDigit = const MessageCode(
     "ExpectedHexDigit",
     analyzerCode: "MISSING_HEX_DIGIT",
-    dart2jsCode: "HEX_DIGIT_EXPECTED",
     message: r"""A hex digit (0-9 or A-F) must follow '0x'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2515,9 +2526,7 @@
 const Code<Message Function(Token token)> codeExpectedIdentifier =
     const Code<Message Function(Token token)>(
         "ExpectedIdentifier", templateExpectedIdentifier,
-        analyzerCode: "MISSING_IDENTIFIER",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "MISSING_IDENTIFIER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedIdentifier(Token token) {
@@ -2534,7 +2543,6 @@
 const MessageCode messageExpectedNamedArgument = const MessageCode(
     "ExpectedNamedArgument",
     analyzerCode: "EXTRA_POSITIONAL_ARGUMENTS",
-    dart2jsCode: "*fatal*",
     message: r"""Expected named argument.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2543,17 +2551,14 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExpectedOneExpression = const MessageCode(
     "ExpectedOneExpression",
-    severity: Severity.error,
     message: r"""Expected one expression, but found additional input.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedOpenParens = messageExpectedOpenParens;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageExpectedOpenParens = const MessageCode(
-    "ExpectedOpenParens",
-    dart2jsCode: "GENERIC",
-    message: r"""Expected '('.""");
+const MessageCode messageExpectedOpenParens =
+    const MessageCode("ExpectedOpenParens", message: r"""Expected '('.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeExpectedStatement = messageExpectedStatement;
@@ -2562,7 +2567,6 @@
 const MessageCode messageExpectedStatement = const MessageCode(
     "ExpectedStatement",
     analyzerCode: "MISSING_STATEMENT",
-    dart2jsCode: "*fatal*",
     message: r"""Expected a statement.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2575,7 +2579,7 @@
 const Code<Message Function(Token token)> codeExpectedString =
     const Code<Message Function(Token token)>(
         "ExpectedString", templateExpectedString,
-        analyzerCode: "EXPECTED_STRING_LITERAL", dart2jsCode: "*fatal*");
+        analyzerCode: "EXPECTED_STRING_LITERAL");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedString(Token token) {
@@ -2595,7 +2599,7 @@
 const Code<Message Function(String string)> codeExpectedToken =
     const Code<Message Function(String string)>(
         "ExpectedToken", templateExpectedToken,
-        analyzerCode: "EXPECTED_TOKEN", dart2jsCode: "*fatal*");
+        analyzerCode: "EXPECTED_TOKEN");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedToken(String string) {
@@ -2614,9 +2618,7 @@
 const Code<Message Function(Token token)> codeExpectedType =
     const Code<Message Function(Token token)>(
         "ExpectedType", templateExpectedType,
-        analyzerCode: "EXPECTED_TYPE_NAME",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "EXPECTED_TYPE_NAME");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExpectedType(Token token) {
@@ -2639,7 +2641,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExportAfterPart = const MessageCode("ExportAfterPart",
     analyzerCode: "EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE",
-    dart2jsCode: "*ignored*",
     message: r"""Export directives must preceed part directives.""",
     tip: r"""Try moving the export directives before the part directives.""");
 
@@ -2688,9 +2689,7 @@
 const Code<Message Function(String name)> codeExtendingEnum =
     const Code<Message Function(String name)>(
         "ExtendingEnum", templateExtendingEnum,
-        analyzerCode: "EXTENDS_ENUM",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "EXTENDS_ENUM");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExtendingEnum(String name) {
@@ -2710,7 +2709,7 @@
 const Code<Message Function(String name)> codeExtendingRestricted =
     const Code<Message Function(String name)>(
         "ExtendingRestricted", templateExtendingRestricted,
-        analyzerCode: "EXTENDS_DISALLOWED_CLASS", dart2jsCode: "*ignored*");
+        analyzerCode: "EXTENDS_DISALLOWED_CLASS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExtendingRestricted(String name) {
@@ -2727,7 +2726,6 @@
 const MessageCode messageExternalAfterConst = const MessageCode(
     "ExternalAfterConst",
     analyzerCode: "EXTERNAL_AFTER_CONST",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""The modifier 'external' should be before the modifier 'const'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -2739,7 +2737,6 @@
 const MessageCode messageExternalAfterFactory = const MessageCode(
     "ExternalAfterFactory",
     analyzerCode: "EXTERNAL_AFTER_FACTORY",
-    dart2jsCode: "*ignored*",
     message:
         r"""The modifier 'external' should be before the modifier 'factory'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -2751,7 +2748,6 @@
 const MessageCode messageExternalAfterStatic = const MessageCode(
     "ExternalAfterStatic",
     analyzerCode: "EXTERNAL_AFTER_STATIC",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""The modifier 'external' should be before the modifier 'static'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -2762,7 +2758,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalClass = const MessageCode("ExternalClass",
     analyzerCode: "EXTERNAL_CLASS",
-    dart2jsCode: "*ignored*",
     message: r"""Classes can't be declared to be 'external'.""",
     tip: r"""Try removing the keyword 'external'.""");
 
@@ -2774,7 +2769,6 @@
 const MessageCode messageExternalConstructorWithBody = const MessageCode(
     "ExternalConstructorWithBody",
     analyzerCode: "EXTERNAL_CONSTRUCTOR_WITH_BODY",
-    dart2jsCode: "*ignored*",
     message: r"""External constructors can't have a body.""",
     tip:
         r"""Try removing the body of the constructor, or removing the keyword 'external'.""");
@@ -2787,7 +2781,6 @@
 const MessageCode messageExternalConstructorWithFieldInitializers =
     const MessageCode("ExternalConstructorWithFieldInitializers",
         analyzerCode: "EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS",
-        dart2jsCode: "*fatal*",
         message: r"""An external constructor can't initialize fields.""",
         tip:
             r"""Try removing the field initializers, or removing the keyword 'external'.""");
@@ -2798,7 +2791,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalEnum = const MessageCode("ExternalEnum",
     analyzerCode: "EXTERNAL_ENUM",
-    dart2jsCode: "*ignored*",
     message: r"""Enums can't be declared to be 'external'.""",
     tip: r"""Try removing the keyword 'external'.""");
 
@@ -2810,7 +2802,6 @@
 const MessageCode messageExternalFactoryRedirection = const MessageCode(
     "ExternalFactoryRedirection",
     analyzerCode: "EXTERNAL_CONSTRUCTOR_WITH_BODY",
-    dart2jsCode: "*ignored*",
     message: r"""A redirecting factory can't be external.""",
     tip: r"""Try removing the 'external' modifier.""");
 
@@ -2821,7 +2812,6 @@
 const MessageCode messageExternalFactoryWithBody = const MessageCode(
     "ExternalFactoryWithBody",
     analyzerCode: "EXTERNAL_CONSTRUCTOR_WITH_BODY",
-    dart2jsCode: "*ignored*",
     message: r"""External factories can't have a body.""",
     tip:
         r"""Try removing the body of the factory, or removing the keyword 'external'.""");
@@ -2832,7 +2822,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalField = const MessageCode("ExternalField",
     analyzerCode: "EXTERNAL_FIELD",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Fields can't be declared to be 'external'.""",
     tip: r"""Try removing the keyword 'external'.""");
 
@@ -2843,7 +2832,6 @@
 const MessageCode messageExternalMethodWithBody = const MessageCode(
     "ExternalMethodWithBody",
     analyzerCode: "EXTERNAL_METHOD_WITH_BODY",
-    dart2jsCode: "*ignored*",
     message: r"""An external or native method can't have a body.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2852,7 +2840,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageExternalTypedef = const MessageCode("ExternalTypedef",
     analyzerCode: "EXTERNAL_TYPEDEF",
-    dart2jsCode: "*ignored*",
     message: r"""Typedefs can't be declared to be 'external'.""",
     tip: r"""Try removing the keyword 'external'.""");
 
@@ -2867,8 +2854,7 @@
 const Code<Message Function(Token token)> codeExtraneousModifier =
     const Code<Message Function(Token token)>(
         "ExtraneousModifier", templateExtraneousModifier,
-        analyzerCode: "EXTRANEOUS_MODIFIER",
-        dart2jsCode: "EXTRANEOUS_MODIFIER");
+        analyzerCode: "EXTRANEOUS_MODIFIER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsExtraneousModifier(Token token) {
@@ -2885,7 +2871,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFactoryNotSync = const MessageCode("FactoryNotSync",
     analyzerCode: "NON_SYNC_FACTORY",
-    dart2jsCode: "*ignored*",
     message: r"""Factory bodies can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -2896,7 +2881,6 @@
 const MessageCode messageFactoryTopLevelDeclaration = const MessageCode(
     "FactoryTopLevelDeclaration",
     analyzerCode: "FACTORY_TOP_LEVEL_DECLARATION",
-    dart2jsCode: "*fatal*",
     message: r"""Top-level declarations can't be declared to be 'factory'.""",
     tip: r"""Try removing the keyword 'factory'.""");
 
@@ -2997,7 +2981,6 @@
 const MessageCode messageFieldInitializerOutsideConstructor = const MessageCode(
     "FieldInitializerOutsideConstructor",
     analyzerCode: "FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR",
-    dart2jsCode: "*fatal*",
     message: r"""Field formal parameters can only be used in a constructor.""",
     tip: r"""Try removing 'this.'.""");
 
@@ -3008,7 +2991,6 @@
 const MessageCode messageFinalAndCovariant = const MessageCode(
     "FinalAndCovariant",
     analyzerCode: "FINAL_AND_COVARIANT",
-    dart2jsCode: "*ignored*",
     message:
         r"""Members can't be declared to be both 'final' and 'covariant'.""",
     tip: r"""Try removing either the 'final' or 'covariant' keyword.""");
@@ -3019,7 +3001,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFinalAndVar = const MessageCode("FinalAndVar",
     analyzerCode: "FINAL_AND_VAR",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Members can't be declared to be both 'final' and 'var'.""",
     tip: r"""Try removing the keyword 'var'.""");
 
@@ -3038,9 +3019,7 @@
 const Code<Message Function(String name)> codeFinalFieldNotInitialized =
     const Code<Message Function(String name)>(
         "FinalFieldNotInitialized", templateFinalFieldNotInitialized,
-        analyzerCode: "FINAL_NOT_INITIALIZED",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "FINAL_NOT_INITIALIZED");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsFinalFieldNotInitialized(String name) {
@@ -3069,9 +3048,7 @@
     const Code<Message Function(String name)>(
         "FinalFieldNotInitializedByConstructor",
         templateFinalFieldNotInitializedByConstructor,
-        analyzerCode: "FINAL_NOT_INITIALIZED_CONSTRUCTOR_1",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "FINAL_NOT_INITIALIZED_CONSTRUCTOR_1");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsFinalFieldNotInitializedByConstructor(String name) {
@@ -3098,7 +3075,7 @@
 const Code<Message Function(String name)> codeFinalFieldWithoutInitializer =
     const Code<Message Function(String name)>(
         "FinalFieldWithoutInitializer", templateFinalFieldWithoutInitializer,
-        analyzerCode: "FINAL_NOT_INITIALIZED", dart2jsCode: "*ignored*");
+        analyzerCode: "FINAL_NOT_INITIALIZED");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsFinalFieldWithoutInitializer(String name) {
@@ -3124,7 +3101,6 @@
         "FinalInstanceVariableAlreadyInitialized",
         templateFinalInstanceVariableAlreadyInitialized,
         analyzerCode: "FINAL_INITIALIZED_MULTIPLE_TIMES",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3177,14 +3153,14 @@
     const Code<Message Function(DartType _type, DartType _type2)>(
         "ForInLoopElementTypeNotAssignable",
         templateForInLoopElementTypeNotAssignable,
-        analyzerCode: "FOR_IN_OF_INVALID_ELEMENT_TYPE",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "FOR_IN_OF_INVALID_ELEMENT_TYPE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsForInLoopElementTypeNotAssignable(
     DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -3206,7 +3182,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageForInLoopExactlyOneVariable = const MessageCode(
     "ForInLoopExactlyOneVariable",
-    severity: Severity.error,
     message: r"""A for-in loop can't have more than one loop variable.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3215,7 +3190,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageForInLoopNotAssignable = const MessageCode(
     "ForInLoopNotAssignable",
-    severity: Severity.error,
     message:
         r"""Can't assign to this, so it can't be used in a for-in loop.""");
 
@@ -3235,13 +3209,14 @@
     codeForInLoopTypeNotIterable =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "ForInLoopTypeNotIterable", templateForInLoopTypeNotIterable,
-        analyzerCode: "FOR_IN_OF_INVALID_TYPE", dart2jsCode: "*fatal*");
+        analyzerCode: "FOR_IN_OF_INVALID_TYPE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsForInLoopTypeNotIterable(
     DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -3263,7 +3238,6 @@
 const MessageCode messageForInLoopWithConstVariable = const MessageCode(
     "ForInLoopWithConstVariable",
     analyzerCode: "FOR_IN_WITH_CONST_VARIABLE",
-    dart2jsCode: "*fatal*",
     message: r"""A for-in loop-variable can't be 'const'.""",
     tip: r"""Try removing the 'const' modifier.""");
 
@@ -3274,7 +3248,6 @@
 const MessageCode messageFunctionTypeDefaultValue = const MessageCode(
     "FunctionTypeDefaultValue",
     analyzerCode: "DEFAULT_VALUE_IN_FUNCTION_TYPE",
-    dart2jsCode: "*ignored*",
     message: r"""Can't have a default value in a function type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3285,7 +3258,6 @@
 const MessageCode messageFunctionTypedParameterVar = const MessageCode(
     "FunctionTypedParameterVar",
     analyzerCode: "FUNCTION_TYPED_PARAMETER_VAR",
-    dart2jsCode: "*fatal*",
     message:
         r"""Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type.""",
     tip: r"""Try replacing the keyword with a return type.""");
@@ -3297,7 +3269,6 @@
 const MessageCode messageGeneratorReturnsValue = const MessageCode(
     "GeneratorReturnsValue",
     analyzerCode: "RETURN_IN_GENERATOR",
-    dart2jsCode: "*ignored*",
     message: r"""'sync*' and 'async*' can't return a value.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3308,8 +3279,6 @@
 const MessageCode messageGenericFunctionTypeInBound = const MessageCode(
     "GenericFunctionTypeInBound",
     analyzerCode: "GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""Type variables can't have generic function types in their bounds.""");
 
@@ -3339,7 +3308,6 @@
 const MessageCode messageGetterWithFormals = const MessageCode(
     "GetterWithFormals",
     analyzerCode: "GETTER_WITH_PARAMETERS",
-    dart2jsCode: "*ignored*",
     message: r"""A getter can't have formal parameters.""",
     tip: r"""Try removing '(...)'.""");
 
@@ -3351,7 +3319,6 @@
 const MessageCode messageIllegalAssignmentToNonAssignable = const MessageCode(
     "IllegalAssignmentToNonAssignable",
     analyzerCode: "ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE",
-    dart2jsCode: "*fatal*",
     message: r"""Illegal assignment to non-assignable expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3362,8 +3329,6 @@
 const MessageCode messageIllegalAsyncGeneratorReturnType = const MessageCode(
     "IllegalAsyncGeneratorReturnType",
     analyzerCode: "ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""Functions marked 'async*' must have a return type assignable to 'Stream'.""");
 
@@ -3374,8 +3339,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageIllegalAsyncGeneratorVoidReturnType =
     const MessageCode("IllegalAsyncGeneratorVoidReturnType",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error,
         message:
             r"""Functions marked 'async*' can't have return type 'void'.""");
 
@@ -3386,8 +3349,6 @@
 const MessageCode messageIllegalAsyncReturnType = const MessageCode(
     "IllegalAsyncReturnType",
     analyzerCode: "ILLEGAL_ASYNC_RETURN_TYPE",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""Functions marked 'async' must have a return type assignable to 'Future'.""");
 
@@ -3401,7 +3362,7 @@
 const Code<Message Function(String name)> codeIllegalMixin =
     const Code<Message Function(String name)>(
         "IllegalMixin", templateIllegalMixin,
-        analyzerCode: "ILLEGAL_MIXIN", dart2jsCode: "*fatal*");
+        analyzerCode: "ILLEGAL_MIXIN");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsIllegalMixin(String name) {
@@ -3422,7 +3383,7 @@
 const Code<Message Function(String name)> codeIllegalMixinDueToConstructors =
     const Code<Message Function(String name)>(
         "IllegalMixinDueToConstructors", templateIllegalMixinDueToConstructors,
-        analyzerCode: "MIXIN_DECLARES_CONSTRUCTOR", dart2jsCode: "*fatal*");
+        analyzerCode: "MIXIN_DECLARES_CONSTRUCTOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsIllegalMixinDueToConstructors(String name) {
@@ -3463,8 +3424,6 @@
 const MessageCode messageIllegalSyncGeneratorReturnType = const MessageCode(
     "IllegalSyncGeneratorReturnType",
     analyzerCode: "ILLEGAL_SYNC_GENERATOR_RETURN_TYPE",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""Functions marked 'sync*' must have a return type assignable to 'Iterable'.""");
 
@@ -3475,8 +3434,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageIllegalSyncGeneratorVoidReturnType = const MessageCode(
     "IllegalSyncGeneratorVoidReturnType",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Functions marked 'sync*' can't have return type 'void'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3486,18 +3443,26 @@
 const MessageCode messageImplementsBeforeExtends = const MessageCode(
     "ImplementsBeforeExtends",
     analyzerCode: "IMPLEMENTS_BEFORE_EXTENDS",
-    dart2jsCode: "*ignored*",
     message: r"""The extends clause must be before the implements clause.""",
     tip: r"""Try moving the extends clause before the implements clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeImplementsBeforeOn = messageImplementsBeforeOn;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageImplementsBeforeOn = const MessageCode(
+    "ImplementsBeforeOn",
+    analyzerCode: "IMPLEMENTS_BEFORE_ON",
+    message: r"""The on clause must be before the implements clause.""",
+    tip: r"""Try moving the on clause before the implements clause.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementsBeforeWith = messageImplementsBeforeWith;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImplementsBeforeWith = const MessageCode(
     "ImplementsBeforeWith",
     analyzerCode: "IMPLEMENTS_BEFORE_WITH",
-    dart2jsCode: "*ignored*",
     message: r"""The with clause must be before the implements clause.""",
     tip: r"""Try moving the with clause before the implements clause.""");
 
@@ -3507,8 +3472,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImplementsFutureOr = const MessageCode(
     "ImplementsFutureOr",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""'FutureOr' can't be used in an 'implements' clause.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3523,7 +3486,7 @@
 const Code<Message Function(String name, int count)> codeImplementsRepeated =
     const Code<Message Function(String name, int count)>(
         "ImplementsRepeated", templateImplementsRepeated,
-        analyzerCode: "IMPLEMENTS_REPEATED", dart2jsCode: "*fatal*");
+        analyzerCode: "IMPLEMENTS_REPEATED");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsImplementsRepeated(String name, int count) {
@@ -3548,7 +3511,7 @@
 const Code<Message Function(String name)> codeImplementsSuperClass =
     const Code<Message Function(String name)>(
         "ImplementsSuperClass", templateImplementsSuperClass,
-        analyzerCode: "IMPLEMENTS_SUPER_CLASS", dart2jsCode: "*fatal*");
+        analyzerCode: "IMPLEMENTS_SUPER_CLASS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsImplementsSuperClass(String name) {
@@ -3575,14 +3538,13 @@
 const Code<Message Function(DartType _type)> codeImplicitCallOfNonMethod =
     const Code<Message Function(DartType _type)>(
         "ImplicitCallOfNonMethod", templateImplicitCallOfNonMethod,
-        analyzerCode: "IMPLICIT_CALL_OF_NON_METHOD",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "IMPLICIT_CALL_OF_NON_METHOD");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsImplicitCallOfNonMethod(DartType _type) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -3599,7 +3561,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageImportAfterPart = const MessageCode("ImportAfterPart",
     analyzerCode: "IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE",
-    dart2jsCode: "*ignored*",
     message: r"""Import directives must preceed part directives.""",
     tip: r"""Try moving the import directives before the part directives.""");
 
@@ -3635,7 +3596,6 @@
 const MessageCode messageInheritedMembersConflict = const MessageCode(
     "InheritedMembersConflict",
     analyzerCode: "CONFLICTS_WITH_INHERITED_MEMBER",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""Can't inherit members that conflict with each other.""");
 
@@ -3721,7 +3681,6 @@
 const MessageCode messageInitializedVariableInForEach = const MessageCode(
     "InitializedVariableInForEach",
     analyzerCode: "INITIALIZED_VARIABLE_IN_FOR_EACH",
-    dart2jsCode: "*fatal*",
     message: r"""The loop variable in a for-each loop can't be initialized.""",
     tip:
         r"""Try removing the initializer, or using a different kind of loop.""");
@@ -3737,7 +3696,7 @@
 const Code<Message Function(String name)> codeInitializerForStaticField =
     const Code<Message Function(String name)>(
         "InitializerForStaticField", templateInitializerForStaticField,
-        analyzerCode: "INITIALIZER_FOR_STATIC_FIELD", dart2jsCode: "*fatal*");
+        analyzerCode: "INITIALIZER_FOR_STATIC_FIELD");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInitializerForStaticField(String name) {
@@ -3760,8 +3719,7 @@
 const Code<Message Function(String name)> codeInitializerOutsideConstructor =
     const Code<Message Function(String name)>(
         "InitializerOutsideConstructor", templateInitializerOutsideConstructor,
-        analyzerCode: "INITIALIZER_OUTSIDE_CONSTRUCTOR",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "INITIALIZER_OUTSIDE_CONSTRUCTOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInitializerOutsideConstructor(String name) {
@@ -3792,14 +3750,14 @@
         "InitializingFormalTypeMismatch",
         templateInitializingFormalTypeMismatch,
         analyzerCode: "INVALID_PARAMETER_DECLARATION",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInitializingFormalTypeMismatch(
     String name, DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -3860,7 +3818,7 @@
 const Code<Message Function(Token token)> codeIntegerLiteralIsOutOfRange =
     const Code<Message Function(Token token)>(
         "IntegerLiteralIsOutOfRange", templateIntegerLiteralIsOutOfRange,
-        analyzerCode: "INTEGER_LITERAL_OUT_OF_RANGE", dart2jsCode: "*fatal*");
+        analyzerCode: "INTEGER_LITERAL_OUT_OF_RANGE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsIntegerLiteralIsOutOfRange(Token token) {
@@ -3983,27 +3941,6 @@
         r"""Are calls to the compiler wrapped in CompilerContext.runInContext?""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String string)>
-    templateInternalProblemMissingSeverity =
-    const Template<Message Function(String string)>(
-        messageTemplate: r"""Message code missing severity: #string""",
-        withArguments: _withArgumentsInternalProblemMissingSeverity);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String string)> codeInternalProblemMissingSeverity =
-    const Code<Message Function(String string)>(
-        "InternalProblemMissingSeverity",
-        templateInternalProblemMissingSeverity,
-        severity: Severity.internalProblem);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsInternalProblemMissingSeverity(String string) {
-  return new Message(codeInternalProblemMissingSeverity,
-      message: """Message code missing severity: ${string}""",
-      arguments: {'string': string});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateInternalProblemNotFound =
     const Template<Message Function(String name)>(
         messageTemplate: r"""Couldn't find '#name'.""",
@@ -4258,7 +4195,6 @@
 const MessageCode messageInterpolationInUri = const MessageCode(
     "InterpolationInUri",
     analyzerCode: "INVALID_LITERAL_IN_CONFIGURATION",
-    dart2jsCode: "*fatal*",
     message: r"""Can't use string interpolation in a URI.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4279,12 +4215,13 @@
     codeInvalidAssignment =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidAssignment", templateInvalidAssignment,
-        analyzerCode: "INVALID_ASSIGNMENT", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_ASSIGNMENT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidAssignment(DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4305,7 +4242,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidAwaitFor = const MessageCode("InvalidAwaitFor",
     analyzerCode: "INVALID_AWAIT_IN_FOR",
-    dart2jsCode: "INVALID_AWAIT_FOR",
     message:
         r"""The keyword 'await' isn't allowed for a normal 'for' statement.""",
     tip: r"""Try removing the keyword, or use a for-each statement.""");
@@ -4319,8 +4255,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeInvalidBreakTarget =
     const Code<Message Function(String name)>(
-        "InvalidBreakTarget", templateInvalidBreakTarget,
-        dart2jsCode: "*fatal*");
+  "InvalidBreakTarget",
+  templateInvalidBreakTarget,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidBreakTarget(String name) {
@@ -4346,12 +4283,13 @@
     codeInvalidCastFunctionExpr =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastFunctionExpr", templateInvalidCastFunctionExpr,
-        analyzerCode: "INVALID_CAST_FUNCTION_EXPR", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_FUNCTION_EXPR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastFunctionExpr(DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4384,12 +4322,13 @@
     codeInvalidCastLiteralList =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastLiteralList", templateInvalidCastLiteralList,
-        analyzerCode: "INVALID_CAST_LITERAL_LIST", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_LITERAL_LIST");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastLiteralList(DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4422,12 +4361,13 @@
     codeInvalidCastLiteralMap =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastLiteralMap", templateInvalidCastLiteralMap,
-        analyzerCode: "INVALID_CAST_LITERAL_MAP", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_LITERAL_MAP");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastLiteralMap(DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4460,13 +4400,14 @@
     codeInvalidCastLocalFunction =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastLocalFunction", templateInvalidCastLocalFunction,
-        analyzerCode: "INVALID_CAST_FUNCTION", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_FUNCTION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastLocalFunction(
     DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4499,12 +4440,13 @@
     codeInvalidCastNewExpr =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastNewExpr", templateInvalidCastNewExpr,
-        analyzerCode: "INVALID_CAST_NEW_EXPR", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_NEW_EXPR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastNewExpr(DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4537,12 +4479,13 @@
     codeInvalidCastStaticMethod =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastStaticMethod", templateInvalidCastStaticMethod,
-        analyzerCode: "INVALID_CAST_METHOD", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_METHOD");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastStaticMethod(DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4575,13 +4518,14 @@
     codeInvalidCastTopLevelFunction =
     const Code<Message Function(DartType _type, DartType _type2)>(
         "InvalidCastTopLevelFunction", templateInvalidCastTopLevelFunction,
-        analyzerCode: "INVALID_CAST_FUNCTION", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_CAST_FUNCTION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidCastTopLevelFunction(
     DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -4603,7 +4547,6 @@
 const MessageCode messageInvalidCatchArguments = const MessageCode(
     "InvalidCatchArguments",
     analyzerCode: "INVALID_CATCH_ARGUMENTS",
-    dart2jsCode: "*fatal*",
     message: r"""Invalid catch arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4613,7 +4556,6 @@
 const MessageCode messageInvalidCodePoint = const MessageCode(
     "InvalidCodePoint",
     analyzerCode: "INVALID_CODE_POINT",
-    dart2jsCode: "*fatal*",
     message:
         r"""The escape sequence starting with '\u' isn't a valid code point.""");
 
@@ -4626,8 +4568,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeInvalidContinueTarget =
     const Code<Message Function(String name)>(
-        "InvalidContinueTarget", templateInvalidContinueTarget,
-        dart2jsCode: "*fatal*");
+  "InvalidContinueTarget",
+  templateInvalidContinueTarget,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidContinueTarget(String name) {
@@ -4642,7 +4585,6 @@
 const MessageCode messageInvalidHexEscape = const MessageCode(
     "InvalidHexEscape",
     analyzerCode: "INVALID_HEX_ESCAPE",
-    dart2jsCode: "*fatal*",
     message:
         r"""An escape sequence starting with '\x' must be followed by 2 hexidecimal digits.""");
 
@@ -4653,8 +4595,6 @@
 const MessageCode messageInvalidInitializer = const MessageCode(
     "InvalidInitializer",
     analyzerCode: "INVALID_INITIALIZER",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Not a valid initializer.""",
     tip: r"""To initialize a field, use the syntax 'name = value'.""");
 
@@ -4665,7 +4605,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidInlineFunctionType = const MessageCode(
     "InvalidInlineFunctionType",
-    dart2jsCode: "INVALID_INLINE_FUNCTION_TYPE",
     message: r"""Invalid inline function type.""",
     tip:
         r"""Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f').""");
@@ -4681,7 +4620,7 @@
 const Code<Message Function(Token token)> codeInvalidOperator =
     const Code<Message Function(Token token)>(
         "InvalidOperator", templateInvalidOperator,
-        analyzerCode: "INVALID_OPERATOR", dart2jsCode: "*fatal*");
+        analyzerCode: "INVALID_OPERATOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsInvalidOperator(Token token) {
@@ -4720,7 +4659,6 @@
 const MessageCode messageInvalidSyncModifier = const MessageCode(
     "InvalidSyncModifier",
     analyzerCode: "MISSING_STAR_AFTER_SYNC",
-    dart2jsCode: "INVALID_SYNC_MODIFIER",
     message: r"""Invalid modifier 'sync'.""",
     tip: r"""Try replacing 'sync' with 'sync*'.""");
 
@@ -4731,7 +4669,6 @@
 const MessageCode messageInvalidUnicodeEscape = const MessageCode(
     "InvalidUnicodeEscape",
     analyzerCode: "INVALID_UNICODE_ESCAPE",
-    dart2jsCode: "*fatal*",
     message:
         r"""An escape sequence starting with '\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'.""");
 
@@ -4743,7 +4680,6 @@
 const MessageCode messageInvalidUseOfNullAwareAccess = const MessageCode(
     "InvalidUseOfNullAwareAccess",
     analyzerCode: "INVALID_USE_OF_NULL_AWARE_ACCESS",
-    dart2jsCode: "*fatal*",
     message: r"""Cannot use '?.' here.""",
     tip: r"""Try using '.'.""");
 
@@ -4753,14 +4689,32 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageInvalidVoid = const MessageCode("InvalidVoid",
     analyzerCode: "INVALID_USE_OF_VOID",
-    dart2jsCode: "VOID_NOT_ALLOWED",
-    severity: Severity.error,
     message:
         r"""Type 'void' can't be used here because it isn't a return type.""",
     tip:
         r"""Try removing 'void' keyword or replace it with 'var', 'final', or a type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)> templateInvokeNonFunction =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""'#name' isn't a function or method and can't be invoked.""",
+        withArguments: _withArgumentsInvokeNonFunction);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeInvokeNonFunction =
+    const Code<Message Function(String name)>(
+        "InvokeNonFunction", templateInvokeNonFunction,
+        analyzerCode: "INVOCATION_OF_NON_FUNCTION");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsInvokeNonFunction(String name) {
+  return new Message(codeInvokeNonFunction,
+      message: """'${name}' isn't a function or method and can't be invoked.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(String name)> templateLabelNotFound = const Template<
         Message Function(String name)>(
@@ -4773,7 +4727,7 @@
 const Code<Message Function(String name)> codeLabelNotFound =
     const Code<Message Function(String name)>(
         "LabelNotFound", templateLabelNotFound,
-        analyzerCode: "LABEL_UNDEFINED", dart2jsCode: "*fatal*");
+        analyzerCode: "LABEL_UNDEFINED");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsLabelNotFound(String name) {
@@ -4791,7 +4745,6 @@
 const MessageCode messageLibraryDirectiveNotFirst = const MessageCode(
     "LibraryDirectiveNotFirst",
     analyzerCode: "LIBRARY_DIRECTIVE_NOT_FIRST",
-    dart2jsCode: "*ignored*",
     message:
         r"""The library directive must appear before all other directives.""",
     tip: r"""Try moving the library directive before any other directives.""");
@@ -4804,7 +4757,6 @@
 const MessageCode messageListLiteralTooManyTypeArguments = const MessageCode(
     "ListLiteralTooManyTypeArguments",
     analyzerCode: "EXPECTED_ONE_LIST_TYPE_ARGUMENTS",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""List literal requires exactly one type argument.""");
 
@@ -4841,7 +4793,6 @@
 const MessageCode messageLoadLibraryTakesNoArguments = const MessageCode(
     "LoadLibraryTakesNoArguments",
     analyzerCode: "LOAD_LIBRARY_TAKES_NO_ARGUMENTS",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""'loadLibrary' takes no arguments.""");
 
@@ -4899,7 +4850,6 @@
 const MessageCode messageMapLiteralTypeArgumentMismatch = const MessageCode(
     "MapLiteralTypeArgumentMismatch",
     analyzerCode: "EXPECTED_TWO_MAP_TYPE_ARGUMENTS",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""Map literal requires exactly two type arguments.""");
 
@@ -4920,7 +4870,6 @@
 const MessageCode messageMetadataTypeArguments = const MessageCode(
     "MetadataTypeArguments",
     analyzerCode: "ANNOTATION_WITH_TYPE_ARGUMENTS",
-    dart2jsCode: "*ignored*",
     message: r"""An annotation (metadata) can't use type arguments.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4948,7 +4897,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingArgumentList = const MessageCode(
     "MissingArgumentList",
-    severity: Severity.error,
     message: r"""Constructor invocations must have an argument list.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -4959,7 +4907,6 @@
 const MessageCode messageMissingAssignableSelector = const MessageCode(
     "MissingAssignableSelector",
     analyzerCode: "MISSING_ASSIGNABLE_SELECTOR",
-    dart2jsCode: "*fatal*",
     message: r"""Missing selector such as '.<identifier>' or '[0]'.""",
     tip: r"""Try adding a selector.""");
 
@@ -4971,7 +4918,6 @@
 const MessageCode messageMissingAssignmentInInitializer = const MessageCode(
     "MissingAssignmentInInitializer",
     analyzerCode: "MISSING_ASSIGNMENT_IN_INITIALIZER",
-    dart2jsCode: "*fatal*",
     message: r"""Expected an assignment after the field name.""",
     tip: r"""To initialize a field, use the syntax 'name = value'.""");
 
@@ -4983,7 +4929,6 @@
 const MessageCode messageMissingConstFinalVarOrType = const MessageCode(
     "MissingConstFinalVarOrType",
     analyzerCode: "MISSING_CONST_FINAL_VAR_OR_TYPE",
-    dart2jsCode: "*fatal*",
     message:
         r"""Variables must be declared using the keywords 'const', 'final', 'var' or a type name.""",
     tip:
@@ -5015,7 +4960,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingExponent = const MessageCode("MissingExponent",
     analyzerCode: "MISSING_DIGIT",
-    dart2jsCode: "EXPONENT_MISSING",
     message:
         r"""Numbers in exponential notation should always contain an exponent (an integer number with an optional sign).""",
     tip:
@@ -5028,7 +4972,6 @@
 const MessageCode messageMissingExpressionInThrow = const MessageCode(
     "MissingExpressionInThrow",
     analyzerCode: "MISSING_EXPRESSION_IN_THROW",
-    dart2jsCode: "*fatal*",
     message: r"""Missing expression after 'throw'.""",
     tip:
         r"""Add an expression after 'throw' or use 'rethrow' to throw a caught exception""");
@@ -5041,7 +4984,6 @@
 const MessageCode messageMissingFunctionParameters = const MessageCode(
     "MissingFunctionParameters",
     analyzerCode: "MISSING_FUNCTION_PARAMETERS",
-    dart2jsCode: "*fatal*",
     message:
         r"""A function declaration needs an explicit list of parameters.""",
     tip: r"""Try adding a parameter list to the function declaration.""");
@@ -5090,7 +5032,6 @@
         "MissingImplementationNotAbstract",
         templateMissingImplementationNotAbstract,
         analyzerCode: "CONCRETE_CLASS_WITH_ABSTRACT_MEMBER",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5121,7 +5062,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMissingMain = const MessageCode("MissingMain",
-    dart2jsCode: "MISSING_MAIN",
     message: r"""No 'main' method found.""",
     tip: r"""Try adding a method named 'main' to your program.""");
 
@@ -5132,7 +5072,6 @@
 const MessageCode messageMissingMethodParameters = const MessageCode(
     "MissingMethodParameters",
     analyzerCode: "MISSING_METHOD_PARAMETERS",
-    dart2jsCode: "*fatal*",
     message: r"""A method declaration needs an explicit list of parameters.""",
     tip: r"""Try adding a parameter list to the method declaration.""");
 
@@ -5143,7 +5082,6 @@
 const MessageCode messageMissingOperatorKeyword = const MessageCode(
     "MissingOperatorKeyword",
     analyzerCode: "MISSING_KEYWORD_OPERATOR",
-    dart2jsCode: "*fatal*",
     message:
         r"""Operator declarations must be preceeded by the keyword 'operator'.""",
     tip: r"""Try adding the keyword 'operator'.""");
@@ -5179,7 +5117,6 @@
 const MessageCode messageMissingPrefixInDeferredImport = const MessageCode(
     "MissingPrefixInDeferredImport",
     analyzerCode: "MISSING_PREFIX_IN_DEFERRED_IMPORT",
-    dart2jsCode: "*fatal*",
     message: r"""Deferred imports should have a prefix.""",
     tip: r"""Try adding a prefix to the import.""");
 
@@ -5190,7 +5127,6 @@
 const MessageCode messageMissingTypedefParameters = const MessageCode(
     "MissingTypedefParameters",
     analyzerCode: "MISSING_TYPEDEF_PARAMETERS",
-    dart2jsCode: "*fatal*",
     message: r"""A typedef needs an explicit list of parameters.""",
     tip: r"""Try adding a parameter list to the typedef.""");
 
@@ -5211,15 +5147,14 @@
     codeMixinInferenceNoMatchingClass =
     const Code<Message Function(String name, String name2, DartType _type)>(
         "MixinInferenceNoMatchingClass", templateMixinInferenceNoMatchingClass,
-        analyzerCode: "MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsMixinInferenceNoMatchingClass(
     String name, String name2, DartType _type) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -5237,8 +5172,6 @@
 const MessageCode messageMoreThanOneSuperOrThisInitializer = const MessageCode(
     "MoreThanOneSuperOrThisInitializer",
     analyzerCode: "SUPER_IN_REDIRECTING_CONSTRUCTOR",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Can't have more than one 'super' or 'this' initializer.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5247,7 +5180,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMultipleExtends = const MessageCode("MultipleExtends",
     analyzerCode: "MULTIPLE_EXTENDS_CLAUSES",
-    dart2jsCode: "*ignored*",
     message: r"""Each class definition can have at most one extends clause.""",
     tip:
         r"""Try choosing one superclass and define your class to implement (or mix in) the others.""");
@@ -5259,7 +5191,6 @@
 const MessageCode messageMultipleImplements = const MessageCode(
     "MultipleImplements",
     analyzerCode: "MULTIPLE_IMPLEMENTS_CLAUSES",
-    dart2jsCode: "GENERIC",
     message:
         r"""Each class definition can have at most one implements clause.""",
     tip:
@@ -5273,17 +5204,25 @@
 const MessageCode messageMultipleLibraryDirectives = const MessageCode(
     "MultipleLibraryDirectives",
     analyzerCode: "MULTIPLE_LIBRARY_DIRECTIVES",
-    dart2jsCode: "*ignored*",
     message: r"""Only one library directive may be declared in a file.""",
     tip: r"""Try removing all but one of the library directives.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeMultipleOnClauses = messageMultipleOnClauses;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageMultipleOnClauses = const MessageCode(
+    "MultipleOnClauses",
+    analyzerCode: "MULTIPLE_ON_CLAUSES",
+    message: r"""Each mixin definition can have at most one on clause.""",
+    tip: r"""Try combining all of the on clauses into a single clause.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMultipleWith = messageMultipleWith;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageMultipleWith = const MessageCode("MultipleWith",
     analyzerCode: "MULTIPLE_WITH_CLAUSES",
-    dart2jsCode: "*ignored*",
     message: r"""Each class definition can have at most one with clause.""",
     tip: r"""Try combining all of the with clauses into a single clause.""");
 
@@ -5294,7 +5233,6 @@
 const MessageCode messageNamedFunctionExpression = const MessageCode(
     "NamedFunctionExpression",
     analyzerCode: "NAMED_FUNCTION_EXPRESSION",
-    dart2jsCode: "*ignored*",
     message: r"""A function expression can't have a name.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5305,7 +5243,6 @@
 const MessageCode messageNativeClauseShouldBeAnnotation = const MessageCode(
     "NativeClauseShouldBeAnnotation",
     analyzerCode: "NATIVE_CLAUSE_SHOULD_BE_ANNOTATION",
-    dart2jsCode: "*fatal*",
     message: r"""Native clause in this form is deprecated.""",
     tip:
         r"""Try removing this native clause and adding @native() or @native('native-name') before the declaration.""");
@@ -5322,7 +5259,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(Token token)> codeNoFormals =
     const Code<Message Function(Token token)>("NoFormals", templateNoFormals,
-        analyzerCode: "MISSING_FUNCTION_PARAMETERS", dart2jsCode: "*ignored*");
+        analyzerCode: "MISSING_FUNCTION_PARAMETERS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsNoFormals(Token token) {
@@ -5345,7 +5282,6 @@
     const Code<Message Function(String name)>(
         "NoSuchNamedParameter", templateNoSuchNamedParameter,
         analyzerCode: "UNDEFINED_NAMED_PARAMETER",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5382,7 +5318,7 @@
     codeNonAsciiIdentifier =
     const Code<Message Function(String character, int codePoint)>(
         "NonAsciiIdentifier", templateNonAsciiIdentifier,
-        analyzerCode: "ILLEGAL_CHARACTER", dart2jsCode: "BAD_INPUT_CHARACTER");
+        analyzerCode: "ILLEGAL_CHARACTER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsNonAsciiIdentifier(String character, int codePoint) {
@@ -5409,7 +5345,7 @@
 const Code<Message Function(int codePoint)> codeNonAsciiWhitespace =
     const Code<Message Function(int codePoint)>(
         "NonAsciiWhitespace", templateNonAsciiWhitespace,
-        analyzerCode: "ILLEGAL_CHARACTER", dart2jsCode: "BAD_INPUT_CHARACTER");
+        analyzerCode: "ILLEGAL_CHARACTER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsNonAsciiWhitespace(int codePoint) {
@@ -5428,8 +5364,6 @@
 const MessageCode messageNonConstConstructor = const MessageCode(
     "NonConstConstructor",
     analyzerCode: "NOT_CONSTANT_EXPRESSION",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""Cannot invoke a non-'const' constructor where a const expression is expected.""",
     tip: r"""Try using a constructor or factory that is 'const'.""");
@@ -5440,8 +5374,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNonConstFactory = const MessageCode("NonConstFactory",
     analyzerCode: "NOT_CONSTANT_EXPRESSION",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message:
         r"""Cannot invoke a non-'const' factory where a const expression is expected.""",
     tip: r"""Try using a constructor or factory that is 'const'.""");
@@ -5454,7 +5386,6 @@
 const MessageCode messageNonInstanceTypeVariableUse = const MessageCode(
     "NonInstanceTypeVariableUse",
     analyzerCode: "TYPE_PARAMETER_REFERENCED_BY_STATIC",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""Can only use type variables in instance methods.""");
 
@@ -5465,7 +5396,6 @@
 const MessageCode messageNonPartOfDirectiveInPart = const MessageCode(
     "NonPartOfDirectiveInPart",
     analyzerCode: "NON_PART_OF_DIRECTIVE_IN_PART",
-    dart2jsCode: "*ignored*",
     message: r"""The part-of directive must be the only directive in a part.""",
     tip:
         r"""Try removing the other directives, or moving them to the library for which this is a part.""");
@@ -5522,38 +5452,32 @@
 const MessageCode messageNotAConstantExpression = const MessageCode(
     "NotAConstantExpression",
     analyzerCode: "NOT_CONSTANT_EXPRESSION",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Not a constant expression.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
-        Token token,
-        Token
-            token2)> templateNotAPrefixInTypeAnnotation = const Template<
-        Message Function(Token token, Token token2)>(
+        String name,
+        String
+            name2)> templateNotAPrefixInTypeAnnotation = const Template<
+        Message Function(String name, String name2)>(
     messageTemplate:
-        r"""'#lexeme.#lexeme2' can't be used as a type because '#lexeme' doesn't refer to an import prefix.""",
+        r"""'#name.#name2' can't be used as a type because '#name' doesn't refer to an import prefix.""",
     withArguments: _withArgumentsNotAPrefixInTypeAnnotation);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(Token token, Token token2)>
+const Code<Message Function(String name, String name2)>
     codeNotAPrefixInTypeAnnotation =
-    const Code<Message Function(Token token, Token token2)>(
+    const Code<Message Function(String name, String name2)>(
         "NotAPrefixInTypeAnnotation", templateNotAPrefixInTypeAnnotation,
-        analyzerCode: "NOT_A_TYPE",
-        dart2jsCode: "*ignored*",
-        severity: Severity.errorLegacyWarning);
+        analyzerCode: "NOT_A_TYPE", severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNotAPrefixInTypeAnnotation(Token token, Token token2) {
-  String lexeme = token.lexeme;
-  String lexeme2 = token2.lexeme;
+Message _withArgumentsNotAPrefixInTypeAnnotation(String name, String name2) {
   return new Message(codeNotAPrefixInTypeAnnotation,
       message:
-          """'${lexeme}.${lexeme2}' can't be used as a type because '${lexeme}' doesn't refer to an import prefix.""",
-      arguments: {'token': token, 'token2': token2});
+          """'${name}.${name2}' can't be used as a type because '${name}' doesn't refer to an import prefix.""",
+      arguments: {'name': name, 'name2': name2});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5565,9 +5489,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String name)> codeNotAType =
     const Code<Message Function(String name)>("NotAType", templateNotAType,
-        analyzerCode: "NOT_A_TYPE",
-        dart2jsCode: "*ignored*",
-        severity: Severity.errorLegacyWarning);
+        analyzerCode: "NOT_A_TYPE", severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsNotAType(String name) {
@@ -5580,9 +5502,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageNotAnLvalue = const MessageCode("NotAnLvalue",
-    analyzerCode: "NOT_AN_LVALUE",
-    dart2jsCode: "*fatal*",
-    message: r"""Can't assign to this.""");
+    analyzerCode: "NOT_AN_LVALUE", message: r"""Can't assign to this.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String string)> templateNotConstantExpression =
@@ -5594,7 +5514,7 @@
 const Code<Message Function(String string)> codeNotConstantExpression =
     const Code<Message Function(String string)>(
         "NotConstantExpression", templateNotConstantExpression,
-        analyzerCode: "NOT_CONSTANT_EXPRESSION", dart2jsCode: "*fatal*");
+        analyzerCode: "NOT_CONSTANT_EXPRESSION");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsNotConstantExpression(String string) {
@@ -5609,7 +5529,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageOnlyTry = const MessageCode("OnlyTry",
     analyzerCode: "MISSING_CATCH_OR_FINALLY",
-    dart2jsCode: "*ignored*",
     message:
         r"""Try block should be followed by 'on', 'catch', or 'finally' block.""",
     tip: r"""Did you forget to add a 'finally' block?""");
@@ -5629,8 +5548,7 @@
 const Code<Message Function(String name)> codeOperatorMinusParameterMismatch =
     const Code<Message Function(String name)>("OperatorMinusParameterMismatch",
         templateOperatorMinusParameterMismatch,
-        analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOperatorMinusParameterMismatch(String name) {
@@ -5674,8 +5592,7 @@
 const Code<Message Function(String name)> codeOperatorParameterMismatch1 =
     const Code<Message Function(String name)>(
         "OperatorParameterMismatch1", templateOperatorParameterMismatch1,
-        analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOperatorParameterMismatch1(String name) {
@@ -5696,8 +5613,7 @@
 const Code<Message Function(String name)> codeOperatorParameterMismatch2 =
     const Code<Message Function(String name)>(
         "OperatorParameterMismatch2", templateOperatorParameterMismatch2,
-        analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOperatorParameterMismatch2(String name) {
@@ -5751,7 +5667,6 @@
     const Code<Message Function(String name, String name2)>(
         "OverrideFewerNamedArguments", templateOverrideFewerNamedArguments,
         analyzerCode: "INVALID_OVERRIDE_NAMED",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5780,7 +5695,6 @@
         "OverrideFewerPositionalArguments",
         templateOverrideFewerPositionalArguments,
         analyzerCode: "INVALID_OVERRIDE_POSITIONAL",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5811,7 +5725,6 @@
         "OverrideMismatchNamedParameter",
         templateOverrideMismatchNamedParameter,
         analyzerCode: "INVALID_OVERRIDE_NAMED",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5840,7 +5753,6 @@
     const Code<Message Function(String name, String name2)>(
         "OverrideMoreRequiredArguments", templateOverrideMoreRequiredArguments,
         analyzerCode: "INVALID_OVERRIDE_REQUIRED",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5875,13 +5787,14 @@
             Message Function(
                 String name, String name2, DartType _type, DartType _type2)>(
         "OverrideTypeMismatchParameter", templateOverrideTypeMismatchParameter,
-        analyzerCode: "INVALID_METHOD_OVERRIDE", dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_METHOD_OVERRIDE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideTypeMismatchParameter(
     String name, String name2, DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -5920,14 +5833,14 @@
     const Code<Message Function(String name, DartType _type, DartType _type2)>(
         "OverrideTypeMismatchReturnType",
         templateOverrideTypeMismatchReturnType,
-        analyzerCode: "INVALID_METHOD_OVERRIDE",
-        dart2jsCode: "*ignored*");
+        analyzerCode: "INVALID_METHOD_OVERRIDE");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsOverrideTypeMismatchReturnType(
     String name, DartType _type, DartType _type2) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -5959,7 +5872,6 @@
     const Code<Message Function(String name, String name2)>(
         "OverrideTypeVariablesMismatch", templateOverrideTypeVariablesMismatch,
         analyzerCode: "INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5995,6 +5907,33 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
+    Message Function(Uri uri_)> templatePartOfInLibrary = const Template<
+        Message Function(Uri uri_)>(
+    messageTemplate:
+        r"""Can't import '#uri', because it has a 'part of' declaration.""",
+    tipTemplate:
+        r"""Try removing the 'part of' declaration, or using '#uri' as a part.""",
+    withArguments: _withArgumentsPartOfInLibrary);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(Uri uri_)> codePartOfInLibrary =
+    const Code<Message Function(Uri uri_)>(
+        "PartOfInLibrary", templatePartOfInLibrary,
+        analyzerCode: "IMPORT_OF_NON_LIBRARY");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsPartOfInLibrary(Uri uri_) {
+  String uri = relativizeUri(uri_);
+  return new Message(codePartOfInLibrary,
+      message:
+          """Can't import '${uri}', because it has a 'part of' declaration.""",
+      tip:
+          """Try removing the 'part of' declaration, or using '${uri}' as a part.""",
+      arguments: {'uri': uri_});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
     Message Function(
         Uri uri_,
         String name,
@@ -6037,7 +5976,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartOfTwice = const MessageCode("PartOfTwice",
     analyzerCode: "MULTIPLE_PART_OF_DIRECTIVES",
-    dart2jsCode: "*ignored*",
     message: r"""Only one part-of directive may be declared in a file.""",
     tip: r"""Try removing all but one of the part-of directives.""");
 
@@ -6048,8 +5986,6 @@
 const MessageCode messagePartOfTwoLibraries = const MessageCode(
     "PartOfTwoLibraries",
     analyzerCode: "PART_OF_DIFFERENT_LIBRARY",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""A file can't be part of more than one library.""",
     tip:
         r"""Try moving the shared declarations into the libraries, or into a new library.""");
@@ -6225,7 +6161,6 @@
 const MessageCode messagePlatformPrivateLibraryAccess = const MessageCode(
     "PlatformPrivateLibraryAccess",
     analyzerCode: "IMPORT_INTERNAL_LIBRARY",
-    dart2jsCode: "*fatal*",
     message: r"""Can't access platform private library.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6236,7 +6171,6 @@
 const MessageCode messagePositionalAfterNamedArgument = const MessageCode(
     "PositionalAfterNamedArgument",
     analyzerCode: "POSITIONAL_AFTER_NAMED_ARGUMENT",
-    dart2jsCode: "*ignored*",
     message: r"""Place positional arguments before named arguments.""",
     tip:
         r"""Try moving the positional argument before the named arguments, or add a name to the argument.""");
@@ -6249,7 +6183,6 @@
 const MessageCode messagePositionalParameterWithEquals = const MessageCode(
     "PositionalParameterWithEquals",
     analyzerCode: "WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER",
-    dart2jsCode: "POSITIONAL_PARAMETER_WITH_EQUALS",
     message:
         r"""Positional optional parameters can't use ':' to specify a default value.""",
     tip: r"""Try replacing ':' with '='.""");
@@ -6261,7 +6194,6 @@
 const MessageCode messagePrefixAfterCombinator = const MessageCode(
     "PrefixAfterCombinator",
     analyzerCode: "PREFIX_AFTER_COMBINATOR",
-    dart2jsCode: "*fatal*",
     message:
         r"""The prefix ('as' clause) should come before any show/hide combinators.""",
     tip: r"""Try moving the prefix before the combinators.""");
@@ -6273,7 +6205,6 @@
 const MessageCode messagePrivateNamedParameter = const MessageCode(
     "PrivateNamedParameter",
     analyzerCode: "PRIVATE_OPTIONAL_PARAMETER",
-    dart2jsCode: "*ignored*",
     message: r"""An optional named parameter can't start with '_'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6284,7 +6215,6 @@
 const MessageCode messageRedirectingConstructorWithBody = const MessageCode(
     "RedirectingConstructorWithBody",
     analyzerCode: "REDIRECTING_CONSTRUCTOR_WITH_BODY",
-    dart2jsCode: "*fatal*",
     message: r"""Redirecting constructors can't have a body.""",
     tip:
         r"""Try removing the body, or not making this a redirecting constructor.""");
@@ -6296,7 +6226,6 @@
 const MessageCode messageRedirectionInNonFactory = const MessageCode(
     "RedirectionInNonFactory",
     analyzerCode: "REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR",
-    dart2jsCode: "*fatal*",
     message: r"""Only factory constructor can specify '=' redirection.""",
     tip:
         r"""Try making this a factory constructor, or remove the redirection.""");
@@ -6314,7 +6243,6 @@
     const Code<Message Function(String name)>(
         "RedirectionTargetNotFound", templateRedirectionTargetNotFound,
         analyzerCode: "REDIRECT_TO_MISSING_CONSTRUCTOR",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6332,7 +6260,6 @@
 const MessageCode messageRequiredParameterWithDefault = const MessageCode(
     "RequiredParameterWithDefault",
     analyzerCode: "NAMED_PARAMETER_OUTSIDE_GROUP",
-    dart2jsCode: "REQUIRED_PARAMETER_WITH_DEFAULT",
     message: r"""Non-optional parameters can't have a default value.""",
     tip:
         r"""Try removing the default value or making the parameter optional.""");
@@ -6343,7 +6270,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageRethrowNotCatch = const MessageCode("RethrowNotCatch",
     analyzerCode: "RETHROW_OUTSIDE_CATCH",
-    dart2jsCode: "*fatal*",
     message: r"""'rethrow' can only be used in catch clauses.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6353,8 +6279,6 @@
 const MessageCode messageReturnFromVoidFunction = const MessageCode(
     "ReturnFromVoidFunction",
     analyzerCode: "RETURN_OF_INVALID_TYPE",
-    dart2jsCode: "*fatal*",
-    severity: Severity.warning,
     message: r"""Can't return a value from a void function.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6364,11 +6288,20 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageReturnTypeFunctionExpression = const MessageCode(
     "ReturnTypeFunctionExpression",
-    dart2jsCode: "*ignored*",
     severity: Severity.errorLegacyWarning,
     message: r"""A function expression can't have a return type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeReturnWithoutExpression = messageReturnWithoutExpression;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageReturnWithoutExpression = const MessageCode(
+    "ReturnWithoutExpression",
+    analyzerCode: "RETURN_WITHOUT_VALUE",
+    severity: Severity.warning,
+    message: r"""Must explicitly return a value from a non-void function.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templateSdkRootNotFound =
     const Template<Message Function(Uri uri_)>(
         messageTemplate: r"""SDK root directory not found: #uri.""",
@@ -6462,7 +6395,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSetterNotSync = const MessageCode("SetterNotSync",
     analyzerCode: "INVALID_MODIFIER_ON_SETTER",
-    dart2jsCode: "*ignored*",
     message: r"""Setters can't use 'async', 'async*', or 'sync*'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6473,7 +6405,6 @@
 const MessageCode messageSetterWithWrongNumberOfFormals = const MessageCode(
     "SetterWithWrongNumberOfFormals",
     analyzerCode: "WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER",
-    dart2jsCode: "*ignored*",
     message: r"""A setter should have exactly one formal parameter.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6573,9 +6504,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStackOverflow = const MessageCode("StackOverflow",
-    analyzerCode: "STACK_OVERFLOW",
-    dart2jsCode: "GENERIC",
-    message: r"""Stack overflow.""");
+    analyzerCode: "STACK_OVERFLOW", message: r"""Stack overflow.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeStaticAfterConst = messageStaticAfterConst;
@@ -6584,7 +6513,6 @@
 const MessageCode messageStaticAfterConst = const MessageCode(
     "StaticAfterConst",
     analyzerCode: "STATIC_AFTER_CONST",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""The modifier 'static' should be before the modifier 'const'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -6596,7 +6524,6 @@
 const MessageCode messageStaticAfterFinal = const MessageCode(
     "StaticAfterFinal",
     analyzerCode: "STATIC_AFTER_FINAL",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message:
         r"""The modifier 'static' should be before the modifier 'final'.""",
     tip: r"""Try re-ordering the modifiers.""");
@@ -6607,7 +6534,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStaticAfterVar = const MessageCode("StaticAfterVar",
     analyzerCode: "STATIC_AFTER_VAR",
-    dart2jsCode: "*ignored*",
     message: r"""The modifier 'static' should be before the modifier 'var'.""",
     tip: r"""Try re-ordering the modifiers.""");
 
@@ -6618,7 +6544,6 @@
 const MessageCode messageStaticConstructor = const MessageCode(
     "StaticConstructor",
     analyzerCode: "STATIC_CONSTRUCTOR",
-    dart2jsCode: "*fatal*",
     message: r"""Constructors can't be static.""",
     tip: r"""Try removing the keyword 'static'.""");
 
@@ -6628,7 +6553,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageStaticOperator = const MessageCode("StaticOperator",
     analyzerCode: "STATIC_OPERATOR",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Operators can't be static.""",
     tip: r"""Try removing the keyword 'static'.""");
 
@@ -6639,7 +6563,6 @@
 const MessageCode messageSuperAsExpression = const MessageCode(
     "SuperAsExpression",
     analyzerCode: "SUPER_AS_EXPRESSION",
-    dart2jsCode: "*fatal*",
     message: r"""Can't use 'super' as an expression.""",
     tip:
         r"""To delegate a constructor to a super constructor, put the super call as an initializer.""");
@@ -6651,7 +6574,6 @@
 const MessageCode messageSuperAsIdentifier = const MessageCode(
     "SuperAsIdentifier",
     analyzerCode: "SUPER_AS_EXPRESSION",
-    dart2jsCode: "*fatal*",
     message: r"""Expected identifier, but got 'super'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6661,8 +6583,6 @@
 const MessageCode messageSuperInitializerNotLast = const MessageCode(
     "SuperInitializerNotLast",
     analyzerCode: "INVALID_SUPER_INVOCATION",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Can't have initializers after 'super'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6671,7 +6591,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageSuperNullAware = const MessageCode("SuperNullAware",
     analyzerCode: "INVALID_OPERATOR_FOR_SUPER",
-    dart2jsCode: "*ignored*",
     message: r"""'super' can't be null.""",
     tip: r"""Try replacing '?.' with '.'""");
 
@@ -6691,8 +6610,7 @@
     const Code<Message Function(String name)>(
         "SuperclassHasNoDefaultConstructor",
         templateSuperclassHasNoDefaultConstructor,
-        analyzerCode: "NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT",
-        dart2jsCode: "*ignored*");
+        analyzerCode: "NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSuperclassHasNoDefaultConstructor(String name) {
@@ -6733,7 +6651,6 @@
     const Code<Message Function(String name)>(
         "SuperclassHasNoMethod", templateSuperclassHasNoMethod,
         analyzerCode: "UNDEFINED_SUPER_METHOD",
-        dart2jsCode: "*ignored*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6806,9 +6723,7 @@
 const Code<Message Function(String name)> codeSupertypeIsIllegal =
     const Code<Message Function(String name)>(
         "SupertypeIsIllegal", templateSupertypeIsIllegal,
-        analyzerCode: "EXTENDS_NON_CLASS",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "EXTENDS_NON_CLASS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSupertypeIsIllegal(String name) {
@@ -6828,9 +6743,7 @@
 const Code<Message Function(String name)> codeSupertypeIsTypeVariable =
     const Code<Message Function(String name)>(
         "SupertypeIsTypeVariable", templateSupertypeIsTypeVariable,
-        analyzerCode: "EXTENDS_NON_CLASS",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+        analyzerCode: "EXTENDS_NON_CLASS");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsSupertypeIsTypeVariable(String name) {
@@ -6846,11 +6759,57 @@
 const MessageCode messageSwitchCaseFallThrough = const MessageCode(
     "SwitchCaseFallThrough",
     analyzerCode: "CASE_BLOCK_NOT_TERMINATED",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""Switch case may fall through to the next case.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        DartType _type,
+        DartType
+            _type2)> templateSwitchExpressionNotAssignable = const Template<
+        Message Function(DartType _type, DartType _type2)>(
+    messageTemplate:
+        r"""Type '#type' of the switch expression isn't assignable to the type '#type2' of this case expression.""",
+    withArguments: _withArgumentsSwitchExpressionNotAssignable);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(DartType _type, DartType _type2)>
+    codeSwitchExpressionNotAssignable =
+    const Code<Message Function(DartType _type, DartType _type2)>(
+        "SwitchExpressionNotAssignable", templateSwitchExpressionNotAssignable,
+        analyzerCode: "SWITCH_EXPRESSION_NOT_ASSIGNABLE");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsSwitchExpressionNotAssignable(
+    DartType _type, DartType _type2) {
+  NameSystem nameSystem = new NameSystem();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
+  String type = '$buffer';
+
+  buffer = new StringBuffer();
+  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
+  String type2 = '$buffer';
+
+  return new Message(codeSwitchExpressionNotAssignable,
+      message:
+          """Type '${type}' of the switch expression isn't assignable to the type '${type2}' of this case expression.""",
+      arguments: {'type': _type, 'type2': _type2});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeSwitchExpressionNotAssignableCause =
+    messageSwitchExpressionNotAssignableCause;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageSwitchExpressionNotAssignableCause = const MessageCode(
+    "SwitchExpressionNotAssignableCause",
+    severity: Severity.context,
+    message: r"""The switch expression is here.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeSwitchHasCaseAfterDefault =
     messageSwitchHasCaseAfterDefault;
 
@@ -6858,7 +6817,6 @@
 const MessageCode messageSwitchHasCaseAfterDefault = const MessageCode(
     "SwitchHasCaseAfterDefault",
     analyzerCode: "SWITCH_HAS_CASE_AFTER_DEFAULT_CASE",
-    dart2jsCode: "*fatal*",
     message:
         r"""The default case should be the last case in a switch statement.""",
     tip: r"""Try moving the default case after the other case clauses.""");
@@ -6871,7 +6829,6 @@
 const MessageCode messageSwitchHasMultipleDefaults = const MessageCode(
     "SwitchHasMultipleDefaults",
     analyzerCode: "SWITCH_HAS_MULTIPLE_DEFAULT_CASES",
-    dart2jsCode: "*fatal*",
     message: r"""The 'default' case can only be declared once.""",
     tip: r"""Try removing all but one default case.""");
 
@@ -6887,7 +6844,7 @@
 const Code<Message Function(String name)> codeThisAccessInFieldInitializer =
     const Code<Message Function(String name)>(
         "ThisAccessInFieldInitializer", templateThisAccessInFieldInitializer,
-        analyzerCode: "THIS_ACCESS_FROM_INITIALIZER", dart2jsCode: "*fatal*");
+        analyzerCode: "THIS_ACCESS_FROM_INITIALIZER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsThisAccessInFieldInitializer(String name) {
@@ -6904,8 +6861,6 @@
 const MessageCode messageThisAsIdentifier = const MessageCode(
     "ThisAsIdentifier",
     analyzerCode: "INVALID_REFERENCE_TO_THIS",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Expected identifier, but got 'this'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6915,8 +6870,6 @@
 const MessageCode messageThisInitializerNotAlone = const MessageCode(
     "ThisInitializerNotAlone",
     analyzerCode: "FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR",
-    dart2jsCode: "*fatal*",
-    severity: Severity.error,
     message: r"""Can't have other initializers together with 'this'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6932,8 +6885,7 @@
     const Code<Message Function(String string)>(
         "ThisOrSuperAccessInFieldInitializer",
         templateThisOrSuperAccessInFieldInitializer,
-        analyzerCode: "THIS_ACCESS_FROM_INITIALIZER",
-        dart2jsCode: "*fatal*");
+        analyzerCode: "THIS_ACCESS_FROM_INITIALIZER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsThisOrSuperAccessInFieldInitializer(String string) {
@@ -6958,7 +6910,6 @@
     const Code<Message Function(int count, int count2)>(
         "TooFewArguments", templateTooFewArguments,
         analyzerCode: "NOT_ENOUGH_REQUIRED_ARGUMENTS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6986,7 +6937,6 @@
     const Code<Message Function(int count, int count2)>(
         "TooManyArguments", templateTooManyArguments,
         analyzerCode: "EXTRA_POSITIONAL_ARGUMENTS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6999,44 +6949,12 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        int count,
-        int
-            count2)> templateTooManyArgumentsCouldBeNamed = const Template<
-        Message Function(int count, int count2)>(
-    messageTemplate:
-        r"""Too many positional arguments: #count allowed, but #count2 found.""",
-    tipTemplate:
-        r"""Try removing the extra positional arguments or specifying the name for named arguments.""",
-    withArguments: _withArgumentsTooManyArgumentsCouldBeNamed);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(int count, int count2)>
-    codeTooManyArgumentsCouldBeNamed =
-    const Code<Message Function(int count, int count2)>(
-        "TooManyArgumentsCouldBeNamed", templateTooManyArgumentsCouldBeNamed,
-        analyzerCode: "EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED",
-        dart2jsCode: "*fatal*",
-        severity: Severity.errorLegacyWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsTooManyArgumentsCouldBeNamed(int count, int count2) {
-  return new Message(codeTooManyArgumentsCouldBeNamed,
-      message:
-          """Too many positional arguments: ${count} allowed, but ${count2} found.""",
-      tip: """Try removing the extra positional arguments or specifying the name for named arguments.""",
-      arguments: {'count': count, 'count2': count2});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTopLevelOperator = messageTopLevelOperator;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTopLevelOperator = const MessageCode(
     "TopLevelOperator",
     analyzerCode: "TOP_LEVEL_OPERATOR",
-    dart2jsCode: "*fatal*",
     message: r"""Operators must be declared within a class.""",
     tip:
         r"""Try removing the operator, moving it to a class, or converting it to be a function.""");
@@ -7047,30 +6965,27 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypeAfterVar = const MessageCode("TypeAfterVar",
     analyzerCode: "VAR_AND_TYPE",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""Can't have both a type and 'var'.""",
     tip: r"""Try removing 'var.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name, int count)>
-    templateTypeArgumentMismatch =
-    const Template<Message Function(String name, int count)>(
-        messageTemplate: r"""'#name' expects #count type arguments.""",
+const Template<Message Function(int count)> templateTypeArgumentMismatch =
+    const Template<Message Function(int count)>(
+        messageTemplate: r"""Expected #count type arguments.""",
         withArguments: _withArgumentsTypeArgumentMismatch);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name, int count)> codeTypeArgumentMismatch =
-    const Code<Message Function(String name, int count)>(
+const Code<Message Function(int count)> codeTypeArgumentMismatch =
+    const Code<Message Function(int count)>(
         "TypeArgumentMismatch", templateTypeArgumentMismatch,
         analyzerCode: "WRONG_NUMBER_OF_TYPE_ARGUMENTS",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsTypeArgumentMismatch(String name, int count) {
+Message _withArgumentsTypeArgumentMismatch(int count) {
   return new Message(codeTypeArgumentMismatch,
-      message: """'${name}' expects ${count} type arguments.""",
-      arguments: {'name': name, 'count': count});
+      message: """Expected ${count} type arguments.""",
+      arguments: {'count': count});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7087,7 +7002,6 @@
     const Code<Message Function(String name)>(
         "TypeArgumentsOnTypeVariable", templateTypeArgumentsOnTypeVariable,
         analyzerCode: "TYPE_ARGUMENTS_ON_TYPE_VARIABLE",
-        dart2jsCode: "*fatal*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7108,9 +7022,7 @@
 const Code<Message Function(String name)> codeTypeNotFound =
     const Code<Message Function(String name)>(
         "TypeNotFound", templateTypeNotFound,
-        analyzerCode: "UNDEFINED_CLASS",
-        dart2jsCode: "*fatal*",
-        severity: Severity.errorLegacyWarning);
+        analyzerCode: "UNDEFINED_CLASS", severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsTypeNotFound(String name) {
@@ -7126,7 +7038,6 @@
 const MessageCode messageTypeVariableDuplicatedName = const MessageCode(
     "TypeVariableDuplicatedName",
     analyzerCode: "DUPLICATE_DEFINITION",
-    dart2jsCode: "*fatal*",
     message: r"""A type variable can't have the same name as another.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7150,38 +7061,14 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        String name,
-        DartType
-            _type)> templateTypeVariableInConstExpression = const Template<
-        Message Function(String name, DartType _type)>(
-    messageTemplate:
-        r"""Type variable '#name' can't be used as a constant expression '#type'.""",
-    withArguments: _withArgumentsTypeVariableInConstExpression);
+const Code<Null> codeTypeVariableInConstantContext =
+    messageTypeVariableInConstantContext;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name, DartType _type)>
-    codeTypeVariableInConstExpression =
-    const Code<Message Function(String name, DartType _type)>(
-        "TypeVariableInConstExpression", templateTypeVariableInConstExpression,
-        analyzerCode: "TYPE_PARAMETER_IN_CONST_EXPRESSION",
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsTypeVariableInConstExpression(
-    String name, DartType _type) {
-  NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
-  new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
-  String type = '$buffer';
-
-  return new Message(codeTypeVariableInConstExpression,
-      message:
-          """Type variable '${name}' can't be used as a constant expression '${type}'.""",
-      arguments: {'name': name, 'type': _type});
-}
+const MessageCode messageTypeVariableInConstantContext = const MessageCode(
+    "TypeVariableInConstantContext",
+    analyzerCode: "TYPE_PARAMETER_IN_CONST_EXPRESSION",
+    message: r"""Type variables can't be used as constants.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTypeVariableInStaticContext =
@@ -7191,7 +7078,6 @@
 const MessageCode messageTypeVariableInStaticContext = const MessageCode(
     "TypeVariableInStaticContext",
     analyzerCode: "TYPE_PARAMETER_REFERENCED_BY_STATIC",
-    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""Type variables can't be used in static members.""");
 
@@ -7203,7 +7089,6 @@
 const MessageCode messageTypeVariableSameNameAsEnclosing = const MessageCode(
     "TypeVariableSameNameAsEnclosing",
     analyzerCode: "CONFLICTING_TYPE_VARIABLE_AND_CLASS",
-    dart2jsCode: "*fatal*",
     message:
         r"""A type variable can't have the same name as its enclosing declaration.""");
 
@@ -7213,7 +7098,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageTypedefInClass = const MessageCode("TypedefInClass",
     analyzerCode: "TYPEDEF_IN_CLASS",
-    dart2jsCode: "*fatal*",
     message: r"""Typedefs can't be declared inside classes.""",
     tip: r"""Try moving the typedef to the top-level.""");
 
@@ -7224,7 +7108,6 @@
 const MessageCode messageTypedefNotFunction = const MessageCode(
     "TypedefNotFunction",
     analyzerCode: "INVALID_GENERIC_FUNCTION_TYPE",
-    dart2jsCode: "*fatal*",
     message: r"""Can't create typedef from non-function type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7244,12 +7127,13 @@
 const Code<Message Function(String name, DartType _type)> codeUndefinedGetter =
     const Code<Message Function(String name, DartType _type)>(
         "UndefinedGetter", templateUndefinedGetter,
-        analyzerCode: "UNDEFINED_GETTER", dart2jsCode: "*ignored*");
+        analyzerCode: "UNDEFINED_GETTER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUndefinedGetter(String name, DartType _type) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -7278,12 +7162,13 @@
 const Code<Message Function(String name, DartType _type)> codeUndefinedMethod =
     const Code<Message Function(String name, DartType _type)>(
         "UndefinedMethod", templateUndefinedMethod,
-        analyzerCode: "UNDEFINED_METHOD", dart2jsCode: "*ignored*");
+        analyzerCode: "UNDEFINED_METHOD");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUndefinedMethod(String name, DartType _type) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -7312,12 +7197,13 @@
 const Code<Message Function(String name, DartType _type)> codeUndefinedSetter =
     const Code<Message Function(String name, DartType _type)>(
         "UndefinedSetter", templateUndefinedSetter,
-        analyzerCode: "UNDEFINED_SETTER", dart2jsCode: "*ignored*");
+        analyzerCode: "UNDEFINED_SETTER");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUndefinedSetter(String name, DartType _type) {
   NameSystem nameSystem = new NameSystem();
-  StringBuffer buffer = new StringBuffer();
+  StringBuffer buffer;
+  buffer = new StringBuffer();
   new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
   String type = '$buffer';
 
@@ -7336,7 +7222,6 @@
 const MessageCode messageUnexpectedDollarInString = const MessageCode(
     "UnexpectedDollarInString",
     analyzerCode: "UNEXPECTED_DOLLAR_IN_STRING",
-    dart2jsCode: "MALFORMED_STRING_LITERAL",
     message:
         r"""A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).""",
     tip: r"""Try adding a backslash (\) to escape the '$'.""");
@@ -7351,7 +7236,7 @@
 const Code<Message Function(Token token)> codeUnexpectedToken =
     const Code<Message Function(Token token)>(
         "UnexpectedToken", templateUnexpectedToken,
-        analyzerCode: "UNEXPECTED_TOKEN", dart2jsCode: "*fatal*");
+        analyzerCode: "UNEXPECTED_TOKEN");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUnexpectedToken(Token token) {
@@ -7372,7 +7257,7 @@
 const Code<Message Function(String string, Token token)> codeUnmatchedToken =
     const Code<Message Function(String string, Token token)>(
         "UnmatchedToken", templateUnmatchedToken,
-        analyzerCode: "EXPECTED_TOKEN", dart2jsCode: "UNMATCHED_TOKEN");
+        analyzerCode: "EXPECTED_TOKEN");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUnmatchedToken(String string, Token token) {
@@ -7385,33 +7270,30 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
-        Token token,
-        Token
-            token2)> templateUnresolvedPrefixInTypeAnnotation = const Template<
-        Message Function(Token token, Token token2)>(
+        String name,
+        String
+            name2)> templateUnresolvedPrefixInTypeAnnotation = const Template<
+        Message Function(String name, String name2)>(
     messageTemplate:
-        r"""'#lexeme.#lexeme2' can't be used as a type because '#lexeme' isn't defined.""",
+        r"""'#name.#name2' can't be used as a type because '#name' isn't defined.""",
     withArguments: _withArgumentsUnresolvedPrefixInTypeAnnotation);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(Token token, Token token2)>
+const Code<Message Function(String name, String name2)>
     codeUnresolvedPrefixInTypeAnnotation =
-    const Code<Message Function(Token token, Token token2)>(
+    const Code<Message Function(String name, String name2)>(
         "UnresolvedPrefixInTypeAnnotation",
         templateUnresolvedPrefixInTypeAnnotation,
         analyzerCode: "NOT_A_TYPE",
-        dart2jsCode: "*ignored*",
         severity: Severity.errorLegacyWarning);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUnresolvedPrefixInTypeAnnotation(
-    Token token, Token token2) {
-  String lexeme = token.lexeme;
-  String lexeme2 = token2.lexeme;
+    String name, String name2) {
   return new Message(codeUnresolvedPrefixInTypeAnnotation,
       message:
-          """'${lexeme}.${lexeme2}' can't be used as a type because '${lexeme}' isn't defined.""",
-      arguments: {'token': token, 'token2': token2});
+          """'${name}.${name2}' can't be used as a type because '${name}' isn't defined.""",
+      arguments: {'name': name, 'name2': name2});
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7423,8 +7305,9 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Message Function(String string)> codeUnspecified =
     const Code<Message Function(String string)>(
-        "Unspecified", templateUnspecified,
-        dart2jsCode: "GENERIC");
+  "Unspecified",
+  templateUnspecified,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUnspecified(String string) {
@@ -7442,7 +7325,7 @@
 const Code<Message Function(Token token)> codeUnsupportedOperator =
     const Code<Message Function(Token token)>(
         "UnsupportedOperator", templateUnsupportedOperator,
-        analyzerCode: "UNSUPPORTED_OPERATOR", dart2jsCode: "*ignored*");
+        analyzerCode: "UNSUPPORTED_OPERATOR");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUnsupportedOperator(Token token) {
@@ -7459,7 +7342,6 @@
 const MessageCode messageUnsupportedPrefixPlus = const MessageCode(
     "UnsupportedPrefixPlus",
     analyzerCode: "MISSING_IDENTIFIER",
-    dart2jsCode: "UNSUPPORTED_PREFIX_PLUS",
     message: r"""'+' is not a prefix operator.""",
     tip: r"""Try removing '+'.""");
 
@@ -7470,7 +7352,6 @@
 const MessageCode messageUnterminatedComment = const MessageCode(
     "UnterminatedComment",
     analyzerCode: "UNTERMINATED_MULTI_LINE_COMMENT",
-    dart2jsCode: "UNTERMINATED_COMMENT",
     message: r"""Comment starting with '/*' must end with '*/'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7486,8 +7367,7 @@
     codeUnterminatedString =
     const Code<Message Function(String string, String string2)>(
         "UnterminatedString", templateUnterminatedString,
-        analyzerCode: "UNTERMINATED_STRING_LITERAL",
-        dart2jsCode: "UNTERMINATED_STRING");
+        analyzerCode: "UNTERMINATED_STRING_LITERAL");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsUnterminatedString(String string, String string2) {
@@ -7500,10 +7380,8 @@
 const Code<Null> codeUnterminatedToken = messageUnterminatedToken;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageUnterminatedToken = const MessageCode(
-    "UnterminatedToken",
-    dart2jsCode: "UNTERMINATED_TOKEN",
-    message: r"""Incomplete token.""");
+const MessageCode messageUnterminatedToken =
+    const MessageCode("UnterminatedToken", message: r"""Incomplete token.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
@@ -7530,7 +7408,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageVarReturnType = const MessageCode("VarReturnType",
     analyzerCode: "VAR_RETURN_TYPE",
-    dart2jsCode: "EXTRANEOUS_MODIFIER",
     message: r"""The return type can't be 'var'.""",
     tip:
         r"""Try removing the keyword 'var', or replacing it with the name of the return type.""");
@@ -7541,8 +7418,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageVoidExpression = const MessageCode("VoidExpression",
     analyzerCode: "USE_OF_VOID_RESULT",
-    dart2jsCode: "*fatal*",
-    severity: Severity.warning,
     message: r"""This expression has type 'void' and can't be used.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -7562,10 +7437,9 @@
 const Code<Message Function(String string, String string2)>
     codeWebLiteralCannotBeRepresentedExactly =
     const Code<Message Function(String string, String string2)>(
-        "WebLiteralCannotBeRepresentedExactly",
-        templateWebLiteralCannotBeRepresentedExactly,
-        dart2jsCode: "*fatal*",
-        severity: Severity.error);
+  "WebLiteralCannotBeRepresentedExactly",
+  templateWebLiteralCannotBeRepresentedExactly,
+);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 Message _withArgumentsWebLiteralCannotBeRepresentedExactly(
@@ -7584,7 +7458,6 @@
 const MessageCode messageWithBeforeExtends = const MessageCode(
     "WithBeforeExtends",
     analyzerCode: "WITH_BEFORE_EXTENDS",
-    dart2jsCode: "*ignored*",
     message: r"""The extends clause must be before the with clause.""",
     tip: r"""Try moving the extends clause before the with clause.""");
 
@@ -7595,7 +7468,6 @@
 const MessageCode messageWithWithoutExtends = const MessageCode(
     "WithWithoutExtends",
     analyzerCode: "WITH_WITHOUT_EXTENDS",
-    dart2jsCode: "GENERIC",
     message: r"""The with clause can't be used without an extends clause.""",
     tip: r"""Try adding an extends clause such as 'extends Object'.""");
 
@@ -7606,7 +7478,6 @@
 const MessageCode messageYieldAsIdentifier = const MessageCode(
     "YieldAsIdentifier",
     analyzerCode: "ASYNC_KEYWORD_USED_AS_IDENTIFIER",
-    dart2jsCode: "*fatal*",
     message:
         r"""'yield' can't be used as an identifier in 'async', 'async*', or 'sync*' methods.""");
 
@@ -7617,5 +7488,4 @@
 const MessageCode messageYieldNotGenerator = const MessageCode(
     "YieldNotGenerator",
     analyzerCode: "YIELD_IN_NON_GENERATOR",
-    dart2jsCode: "*ignored*",
     message: r"""'yield' can only be used in 'sync*' or 'async*' methods.""");
diff --git a/pkg/front_end/lib/src/fasta/identifiers.dart b/pkg/front_end/lib/src/fasta/identifiers.dart
new file mode 100644
index 0000000..64af67b
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/identifiers.dart
@@ -0,0 +1,144 @@
+// 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.
+
+library fasta.qualified_name;
+
+import 'package:kernel/ast.dart' show Expression;
+
+import 'problems.dart' show unhandled, unsupported;
+
+import 'scanner.dart' show Token;
+
+class Identifier {
+  final String name;
+  final int charOffset;
+
+  Identifier(Token token)
+      : name = token.lexeme,
+        charOffset = token.charOffset;
+
+  Identifier._(this.name, this.charOffset);
+
+  factory Identifier.preserveToken(Token token) {
+    return new _TokenIdentifier(token);
+  }
+
+  Expression get initializer => null;
+
+  QualifiedName withQualifier(Object qualifier) {
+    return new QualifiedName._(qualifier, name, charOffset);
+  }
+
+  @override
+  String toString() => "identifier($name)";
+}
+
+class _TokenIdentifier implements Identifier {
+  final Token token;
+
+  _TokenIdentifier(this.token);
+
+  @override
+  String get name => token.lexeme;
+
+  @override
+  int get charOffset => token.charOffset;
+
+  @override
+  Expression get initializer => null;
+
+  @override
+  QualifiedName withQualifier(Object qualifier) {
+    return new _TokenQualifiedName(qualifier, token);
+  }
+
+  @override
+  String toString() => "token-identifier($name)";
+}
+
+class InitializedIdentifier extends _TokenIdentifier {
+  @override
+  final Expression initializer;
+
+  InitializedIdentifier(_TokenIdentifier identifier, this.initializer)
+      : super(identifier.token);
+
+  @override
+  QualifiedName withQualifier(Object qualifier) {
+    return unsupported("withQualifier", charOffset, null);
+  }
+
+  @override
+  String toString() => "initialized-identifier($name, $initializer)";
+}
+
+class QualifiedName extends Identifier {
+  final Object qualifier;
+
+  QualifiedName(this.qualifier, Token suffix) : super(suffix);
+
+  QualifiedName._(this.qualifier, String name, int charOffset)
+      : super._(name, charOffset);
+
+  @override
+  QualifiedName withQualifier(Object qualifier) {
+    return unsupported("withQualifier", charOffset, null);
+  }
+
+  @override
+  String toString() => "qualified-name($qualifier, $name)";
+}
+
+class _TokenQualifiedName extends _TokenIdentifier implements QualifiedName {
+  @override
+  final Object qualifier;
+
+  _TokenQualifiedName(this.qualifier, Token suffix)
+      : assert(qualifier is! Identifier || qualifier is _TokenIdentifier),
+        super(suffix);
+
+  @override
+  QualifiedName withQualifier(Object qualifier) {
+    return unsupported("withQualifier", charOffset, null);
+  }
+
+  @override
+  String toString() => "token-qualified-name($qualifier, $name)";
+}
+
+void flattenQualifiedNameOn(
+    QualifiedName name, StringBuffer buffer, int charOffset, Uri fileUri) {
+  final Object qualifier = name.qualifier;
+  if (qualifier is QualifiedName) {
+    flattenQualifiedNameOn(qualifier, buffer, charOffset, fileUri);
+  } else if (qualifier is Identifier) {
+    buffer.write(qualifier.name);
+  } else if (qualifier is String) {
+    buffer.write(qualifier);
+  } else {
+    unhandled("${qualifier.runtimeType}", "flattenQualifiedNameOn", charOffset,
+        fileUri);
+  }
+  buffer.write(".");
+  buffer.write(name.name);
+}
+
+String flattenName(Object name, int charOffset, Uri fileUri) {
+  if (name is String) {
+    return name;
+  } else if (name is QualifiedName) {
+    StringBuffer buffer = new StringBuffer();
+    flattenQualifiedNameOn(name, buffer, charOffset, fileUri);
+    return "$buffer";
+  } else if (name is Identifier) {
+    return name.name;
+  } else {
+    unhandled("${name.runtimeType}", "flattenName", charOffset, fileUri);
+  }
+}
+
+Token deprecated_extractToken(Identifier identifier) {
+  _TokenIdentifier tokenIdentifier = identifier;
+  return tokenIdentifier?.token;
+}
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 399112b..f9a4ca8 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -86,13 +86,20 @@
   List<LibraryBuilder> platformBuilders;
   Map<Uri, LibraryBuilder> userBuilders;
   final Uri initializeFromDillUri;
+  Component componentToInitializeFrom;
   bool initializedFromDill = false;
   bool hasToCheckPackageUris = false;
 
   KernelIncrementalTarget userCode;
 
+  IncrementalCompiler.fromComponent(
+      this.context, Component this.componentToInitializeFrom)
+      : ticker = context.options.ticker,
+        initializeFromDillUri = null;
+
   IncrementalCompiler(this.context, [this.initializeFromDillUri])
-      : ticker = context.options.ticker;
+      : ticker = context.options.ticker,
+        componentToInitializeFrom = null;
 
   @override
   Future<Component> computeDelta(
@@ -142,6 +149,8 @@
                   null);
             }
           }
+        } else if (componentToInitializeFrom != null) {
+          initializeFromComponent(summaryBytes, uriTranslator, c, data);
         }
         appendLibraries(data, bytesLength);
 
@@ -171,9 +180,19 @@
       }
 
       Set<Uri> invalidatedUris = this.invalidatedUris.toSet();
-      if (data.includeUserLoadedLibraries || fullComponent) {
+      if ((data.includeUserLoadedLibraries &&
+              componentToInitializeFrom ==
+                  null) // when loading state from component no need to invalidate anything
+          ||
+          fullComponent) {
         invalidatedUris.add(entryPoint);
       }
+      if (componentToInitializeFrom != null) {
+        // Once compiler was initialized from component, no need to skip logic
+        // above that adds entryPoint to invalidatedUris for successive
+        // [computeDelta] calls.
+        componentToInitializeFrom = null;
+      }
 
       ClassHierarchy hierarchy = userCode?.loader?.hierarchy;
       Set<LibraryBuilder> notReusedLibraries;
@@ -222,6 +241,9 @@
 
       for (LibraryBuilder library in reusedLibraries) {
         userCode.loader.builders[library.uri] = library;
+        if (entryPoint == library.uri) {
+          userCode.loader.first = library;
+        }
         if (library.uri.scheme == "dart" && library.uri.path == "core") {
           userCode.loader.coreLibrary = library;
         }
@@ -411,6 +433,43 @@
     return bytesLength;
   }
 
+  // This procedure will set up compiler from [componentToInitializeFrom].
+  void initializeFromComponent(
+      List<int> summaryBytes,
+      UriTranslator uriTranslator,
+      CompilerContext c,
+      IncrementalCompilerData data) {
+    ticker.logMs("Read initializeFromComponent");
+
+    // [libraries] and [uriToSource] from [componentToInitializeFrom] take
+    // precedence over what was already read into [data.component]. Assumption
+    // is that [data.component] is initialized with standard prebuilt various
+    // platform libraries.
+    List<Library> combinedLibs = <Library>[];
+    Set<Uri> readLibs =
+        componentToInitializeFrom.libraries.map((lib) => lib.fileUri).toSet();
+    combinedLibs.addAll(componentToInitializeFrom.libraries);
+    for (Library lib in data.component.libraries) {
+      if (!readLibs.contains(lib.fileUri)) {
+        combinedLibs.add(lib);
+      }
+    }
+    Map<Uri, Source> combinedMaps = new Map<Uri, Source>();
+    combinedMaps.addAll(componentToInitializeFrom.uriToSource);
+    Set<Uri> uris = combinedMaps.keys.toSet();
+    for (MapEntry<Uri, Source> entry in data.component.uriToSource.entries) {
+      if (!uris.contains(entry.key)) {
+        combinedMaps[entry.key] = entry.value;
+      }
+    }
+
+    data.component =
+        new Component(libraries: combinedLibs, uriToSource: combinedMaps)
+          ..mainMethod = componentToInitializeFrom.mainMethod;
+    data.userLoadedUriMain = data.component.mainMethod;
+    data.includeUserLoadedLibraries = true;
+  }
+
   void appendLibraries(IncrementalCompilerData data, int bytesLength) {
     if (data.component != null) {
       dillLoadedData.loader
@@ -469,10 +528,10 @@
             combinators ??= <Combinator>[];
 
             combinators.add(combinator.isShow
-                ? new Combinator.show(null, combinator.names,
-                    combinator.fileOffset, library.fileUri)
-                : new Combinator.hide(null, combinator.names,
-                    combinator.fileOffset, library.fileUri));
+                ? new Combinator.show(
+                    combinator.names, combinator.fileOffset, library.fileUri)
+                : new Combinator.hide(
+                    combinator.names, combinator.fileOffset, library.fileUri));
           }
 
           debugLibrary.addImport(
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 4be50c6..20d6978 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -114,8 +114,6 @@
 
 import 'kernel_builder.dart';
 
-import 'kernel_expression_generator.dart' show KernelNonLValueGenerator;
-
 import 'type_algorithms.dart' show calculateBounds;
 
 // TODO(ahe): Remove this and ensure all nodes have a location.
@@ -203,9 +201,9 @@
 
   int functionNestingLevel = 0;
 
-  Statement compileTimeErrorInTry;
+  Statement problemInTry;
 
-  Statement compileTimeErrorInLoopOrSwitch;
+  Statement problemInLoopOrSwitch;
 
   Scope switchScope;
 
@@ -304,10 +302,10 @@
     } else if (node is Expression) {
       return node;
     } else if (node is SuperInitializer) {
-      return new SyntheticExpressionJudgment(buildCompileTimeError(
-          fasta.messageSuperAsExpression, node.fileOffset, noLength));
+      return buildProblem(
+          fasta.messageSuperAsExpression, node.fileOffset, noLength);
     } else if (node is ProblemBuilder) {
-      return buildProblemExpression(node, -1, noLength);
+      return buildProblem(node.message, node.charOffset, noLength);
     } else {
       return unhandled("${node.runtimeType}", "toValue", -1, uri);
     }
@@ -364,7 +362,7 @@
           for (Statement statement in target.users) {
             statement.parent.replaceChild(
                 statement,
-                wrapInCompileTimeErrorStatement(statement,
+                wrapInProblemStatement(statement,
                     fasta.templateLabelNotFound.withArguments(name)));
           }
         } else {
@@ -383,19 +381,19 @@
     int offset = variable.fileOffset;
     Message message = template.withArguments(name);
     if (variable.initializer == null) {
-      variable.initializer = new SyntheticExpressionJudgment(
-          buildCompileTimeError(message, offset, name.length, context: context))
-        ..parent = variable;
+      variable.initializer =
+          buildProblem(message, offset, name.length, context: context)
+            ..parent = variable;
     } else {
-      variable.initializer = wrapInLocatedCompileTimeError(
+      variable.initializer = wrapInLocatedProblem(
           variable.initializer, message.withLocation(uri, offset, name.length),
           context: context)
         ..parent = variable;
     }
   }
 
-  void declareVariable(Object variable, Scope scope) {
-    String name = forest.getVariableDeclarationName(variable);
+  void declareVariable(VariableDeclaration variable, Scope scope) {
+    String name = variable.name;
     Declaration existing = scope.local[name];
     if (existing != null) {
       // This reports an error for duplicated declarations in the same scope:
@@ -409,7 +407,7 @@
       return;
     }
     LocatedMessage context = scope.declare(
-        forest.getVariableDeclarationName(variable),
+        variable.name,
         new KernelVariableBuilder(
             variable, member ?? classBuilder ?? library, uri),
         uri);
@@ -440,7 +438,7 @@
   @override
   void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
     debugEvent("Metadata");
-    Object arguments = pop();
+    Arguments arguments = pop();
     pushQualifiedReference(beginToken.next, periodBeforeName);
     if (arguments != null) {
       push(arguments);
@@ -455,7 +453,9 @@
       if (expression is Identifier) {
         Identifier identifier = expression;
         expression = new UnresolvedNameGenerator(
-            this, identifier.token, new Name(identifier.name, library.library));
+            this,
+            deprecated_extractToken(identifier),
+            new Name(identifier.name, library.library));
       }
       if (name?.isNotEmpty ?? false) {
         Token period = periodBeforeName ?? beginToken.next.next;
@@ -469,8 +469,8 @@
 
       ConstantContext savedConstantContext = pop();
       if (expression is! StaticAccessGenerator) {
-        push(wrapInCompileTimeError(
-            toValue(expression), fasta.messageExpressionNotMetadata));
+        push(wrapInProblem(
+            toValue(expression), fasta.messageExpressionNotMetadata, noLength));
       } else {
         push(toValue(expression));
       }
@@ -531,7 +531,7 @@
       }
     }
     pop(); // Type.
-    List<Object> annotations = pop();
+    List<Expression> annotations = pop();
     if (annotations != null) {
       _typeInferrer.inferMetadata(this, annotations);
       Field field = fields.first.target;
@@ -574,10 +574,8 @@
     if (member is KernelConstructorBuilder) {
       if (member.isConst &&
           (classBuilder.cls.superclass?.isMixinApplication ?? false)) {
-        addCompileTimeError(
-            fasta.messageConstConstructorInSubclassOfMixinApplication,
-            member.charOffset,
-            member.name.length);
+        addProblem(fasta.messageConstConstructorInSubclassOfMixinApplication,
+            member.charOffset, member.name.length);
       }
       if (member.formals != null) {
         for (KernelFormalParameterBuilder formal in member.formals) {
@@ -585,10 +583,11 @@
             Initializer initializer;
             if (member.isExternal) {
               initializer = buildInvalidInitializer(
-                  buildCompileTimeError(
-                      fasta.messageExternalConstructorWithFieldInitializers,
-                      formal.charOffset,
-                      formal.name.length),
+                  buildProblem(
+                          fasta.messageExternalConstructorWithFieldInitializers,
+                          formal.charOffset,
+                          formal.name.length)
+                      .desugared,
                   formal.charOffset);
             } else {
               initializer = buildFieldInitializer(true, formal.name,
@@ -644,8 +643,8 @@
     Initializer initializer;
     if (node is Initializer) {
       initializer = node;
-    } else if (node is DelayedAssignment) {
-      initializer = node.buildFieldInitializer();
+    } else if (node is Generator) {
+      initializer = node.buildFieldInitializer(initializedFields);
     } else if (node is ConstructorInvocation) {
       initializer = buildSuperInitializer(
           false, node.target, node.arguments, token.charOffset);
@@ -653,7 +652,7 @@
       Expression value = toValue(node);
       if (node is! Throw) {
         value =
-            wrapInCompileTimeError(value, fasta.messageExpectedAnInitializer);
+            wrapInProblem(value, fasta.messageExpectedAnInitializer, noLength);
       }
       initializer = buildInvalidInitializer(node, token.charOffset);
     }
@@ -661,7 +660,7 @@
     if (member is KernelConstructorBuilder && !member.isExternal) {
       member.addInitializer(initializer, this);
     } else {
-      addCompileTimeError(
+      addProblem(
           fasta.templateInitializerOutsideConstructor
               .withArguments(member.name),
           token.charOffset,
@@ -680,7 +679,7 @@
 
   @override
   void finishFunction(
-      List<Object> annotations,
+      List<Expression> annotations,
       FormalParameters<Expression, Statement, Arguments> formals,
       AsyncMarker asyncModifier,
       Statement body) {
@@ -724,17 +723,14 @@
       // Future<T> <: [returnType] for every T, we rely on Future<Bot> and
       // transitivity of the subtyping relation because Future<Bot> <: Future<T>
       // for every T.
-      bool Function(DartType, DartType) isSubtypeOf = (DartType subtype,
-              DartType supertype) =>
-          _typeInferrer.typeSchemaEnvironment.isSubtypeOf(subtype, supertype);
 
-      // Determine whether there is a problem. We use [problem == null] to
-      // signal success.
+      // We use [problem == null] to signal success.
       Message problem;
       switch (asyncModifier) {
         case AsyncMarker.Async:
           DartType futureBottomType = library.loader.futureOfBottom;
-          if (!isSubtypeOf(futureBottomType, returnType)) {
+          if (!_typeInferrer.typeSchemaEnvironment
+              .isSubtypeOf(futureBottomType, returnType)) {
             problem = fasta.messageIllegalAsyncReturnType;
           }
           break;
@@ -743,7 +739,8 @@
           DartType streamBottomType = library.loader.streamOfBottom;
           if (returnType is VoidType) {
             problem = fasta.messageIllegalAsyncGeneratorVoidReturnType;
-          } else if (!isSubtypeOf(streamBottomType, returnType)) {
+          } else if (!_typeInferrer.typeSchemaEnvironment
+              .isSubtypeOf(streamBottomType, returnType)) {
             problem = fasta.messageIllegalAsyncGeneratorReturnType;
           }
           break;
@@ -752,7 +749,8 @@
           DartType iterableBottomType = library.loader.iterableOfBottom;
           if (returnType is VoidType) {
             problem = fasta.messageIllegalSyncGeneratorVoidReturnType;
-          } else if (!isSubtypeOf(iterableBottomType, returnType)) {
+          } else if (!_typeInferrer.typeSchemaEnvironment
+              .isSubtypeOf(iterableBottomType, returnType)) {
             problem = fasta.messageIllegalSyncGeneratorReturnType;
           }
           break;
@@ -800,7 +798,7 @@
           statements.add(body);
           body = forest.block(null, statements, null)..fileOffset = charOffset;
         }
-        body = wrapInCompileTimeErrorStatement(
+        body = wrapInProblemStatement(
             body, fasta.messageSetterWithWrongNumberOfFormals);
       }
     }
@@ -812,8 +810,8 @@
       builder.body = body;
     } else {
       if (body != null) {
-        builder.body = wrapInCompileTimeErrorStatement(
-            body, fasta.messageExternalMethodWithBody);
+        builder.body =
+            wrapInProblemStatement(body, fasta.messageExternalMethodWithBody);
       }
     }
     Member target = builder.target;
@@ -854,16 +852,16 @@
           name += ".${initialTarget.name.name}";
         }
         // TODO(dmitryas): Report this error earlier.
-        replacementNode = buildCompileTimeError(
-            fasta.templateCyclicRedirectingFactoryConstructors
-                .withArguments(initialTarget.name.name),
-            initialTarget.fileOffset,
-            name.length);
+        replacementNode = buildProblem(
+                fasta.templateCyclicRedirectingFactoryConstructors
+                    .withArguments(initialTarget.name.name),
+                initialTarget.fileOffset,
+                name.length)
+            .desugared;
       } else if (resolvedTarget is Constructor &&
           resolvedTarget.enclosingClass.isAbstract) {
         replacementNode = evaluateArgumentsBefore(
-            forest.arguments(
-                invocation.arguments.positional, noLocation, noLocation,
+            forest.arguments(invocation.arguments.positional, null,
                 types: invocation.arguments.types,
                 named: invocation.arguments.named),
             buildAbstractClassInstantiationError(
@@ -884,8 +882,7 @@
               throwNoSuchMethodError(
                   forest.literalNull(null)..fileOffset = invocation.fileOffset,
                   errorName,
-                  forest.arguments(
-                      invocation.arguments.positional, noLocation, noLocation,
+                  forest.arguments(invocation.arguments.positional, null,
                       types: invocation.arguments.types,
                       named: invocation.arguments.named),
                   initialTarget.fileOffset));
@@ -903,8 +900,7 @@
 
           replacementNode = buildStaticInvocation(
               resolvedTarget,
-              forest.arguments(
-                  invocation.arguments.positional, noLocation, noLocation,
+              forest.arguments(invocation.arguments.positional, null,
                   types: invocation.arguments.types,
                   named: invocation.arguments.named),
               constness: invocation.isConst
@@ -1000,7 +996,7 @@
     Token eof = token.next;
 
     if (!eof.isEof) {
-      expression = wrapInLocatedCompileTimeError(
+      expression = wrapInLocatedProblem(
           expression,
           fasta.messageExpectedOneExpression
               .withLocation(uri, eof.charOffset, eof.length));
@@ -1033,8 +1029,7 @@
       // TODO(ahe): Change this to a null check.
       int offset = builder.body?.fileOffset ?? builder.charOffset;
       constructor.initializers.add(buildInvalidInitializer(
-          buildCompileTimeErrorExpression(
-              fasta.messageConstructorNotSync, offset),
+          buildProblem(fasta.messageConstructorNotSync, offset, noLength),
           offset));
     }
     if (needsImplicitSuperInitializer) {
@@ -1043,7 +1038,7 @@
       /// >unless the enclosing class is class Object.
       Constructor superTarget = lookupConstructor(emptyName, isSuper: true);
       Initializer initializer;
-      Arguments arguments = forest.argumentsEmpty(noLocation, noLocation);
+      Arguments arguments = forest.argumentsEmpty(noLocation);
       if (superTarget == null ||
           checkArgumentsForFunction(superTarget.function, arguments,
                   builder.charOffset, const <TypeParameter>[]) !=
@@ -1054,11 +1049,12 @@
           length = (constructor.parent as Class).name.length;
         }
         initializer = buildInvalidInitializer(
-            buildCompileTimeError(
-                fasta.templateSuperclassHasNoDefaultConstructor
-                    .withArguments(superclass),
-                builder.charOffset,
-                length),
+            buildProblem(
+                    fasta.templateSuperclassHasNoDefaultConstructor
+                        .withArguments(superclass),
+                    builder.charOffset,
+                    length)
+                .desugared,
             builder.charOffset);
       } else {
         initializer = buildSuperInitializer(
@@ -1085,8 +1081,7 @@
   @override
   void endArguments(int count, Token beginToken, Token endToken) {
     debugEvent("Arguments");
-    List<Object> arguments =
-        new List<Object>.filled(count, null, growable: true);
+    List<Object> arguments = new List<Object>(count);
     popList(count, arguments);
     int firstNamedArgumentIndex = arguments.length;
     for (int i = 0; i < arguments.length; i++) {
@@ -1098,14 +1093,11 @@
         Expression argument = toValue(node);
         arguments[i] = argument;
         if (i > firstNamedArgumentIndex) {
-          arguments[i] = new NamedExpressionJudgment(
-              tokensSaver?.namedExpressionTokens(null, null),
-              '#$i',
-              buildCompileTimeErrorExpression(
-                  fasta.messageExpectedNamedArgument,
-                  forest.readOffset(argument)),
-              originalValue: argument)
-            ..fileOffset = offsetForToken(beginToken);
+          arguments[i] = new NamedExpression(
+              "#$i",
+              buildProblem(fasta.messageExpectedNamedArgument,
+                  forest.readOffset(argument), noLength))
+            ..fileOffset = beginToken.charOffset;
         }
       }
     }
@@ -1114,12 +1106,11 @@
           arguments.getRange(0, firstNamedArgumentIndex));
       List<NamedExpression> named = new List<NamedExpression>.from(
           arguments.getRange(firstNamedArgumentIndex, arguments.length));
-      push(forest.arguments(positional, beginToken, endToken, named: named));
+      push(forest.arguments(positional, beginToken, named: named));
     } else {
       // TODO(kmillikin): Find a way to avoid allocating a second list in the
       // case where there were no named arguments, which is a common one.
-      push(forest.arguments(
-          new List<Expression>.from(arguments), beginToken, endToken));
+      push(forest.arguments(new List<Expression>.from(arguments), beginToken));
     }
   }
 
@@ -1139,7 +1130,7 @@
   @override
   void handleSend(Token beginToken, Token endToken) {
     debugEvent("Send");
-    ArgumentsJudgment arguments = pop();
+    Arguments arguments = pop();
     List<DartType> typeArguments = pop();
     Object receiver = pop();
     if (arguments != null && typeArguments != null) {
@@ -1164,7 +1155,7 @@
   }
 
   @override
-  finishSend(Object receiver, ArgumentsJudgment arguments, int charOffset) {
+  finishSend(Object receiver, Arguments arguments, int charOffset) {
     if (receiver is Generator) {
       return receiver.doInvocation(charOffset, arguments);
     } else {
@@ -1255,15 +1246,11 @@
       negate = true;
     }
     if (!isBinaryOperator(operator) && !isMinusOperator(operator)) {
-      return buildCompileTimeErrorExpression(
-          fasta.templateInvalidOperator.withArguments(token), token.charOffset,
-          length: token.length);
+      return buildProblem(fasta.templateInvalidOperator.withArguments(token),
+          token.charOffset, token.length);
     } else {
-      Expression result = buildMethodInvocation(
-          a,
-          new Name(operator),
-          forest.arguments(<Expression>[b], noLocation, noLocation),
-          token.charOffset,
+      Expression result = buildMethodInvocation(a, new Name(operator),
+          forest.arguments(<Expression>[b], noLocation), token.charOffset,
           // This *could* be a constant expression, we can't know without
           // evaluating [a] and [b].
           isConstantExpression: !isSuper,
@@ -1306,9 +1293,8 @@
     } else {
       pop();
       token = token.next;
-      Message message = fasta.templateExpectedIdentifier.withArguments(token);
-      push(new SyntheticExpressionJudgment(buildCompileTimeError(
-          message, offsetForToken(token), lengthForToken(token))));
+      push(buildProblem(fasta.templateExpectedIdentifier.withArguments(token),
+          offsetForToken(token), lengthForToken(token)));
     }
   }
 
@@ -1320,9 +1306,8 @@
     } else {
       pop();
       token = token.next;
-      Message message = fasta.templateExpectedIdentifier.withArguments(token);
-      push(new SyntheticExpressionJudgment(buildCompileTimeError(
-          message, offsetForToken(token), lengthForToken(token))));
+      push(buildProblem(fasta.templateExpectedIdentifier.withArguments(token),
+          offsetForToken(token), lengthForToken(token)));
     }
   }
 
@@ -1386,8 +1371,8 @@
       // TODO(ahe): Use [error] below instead of building a compile-time error,
       // should be:
       //    return library.loader.throwCompileConstantError(error, charOffset);
-      return buildCompileTimeError(message, charOffset, noLength,
-          context: context);
+      return buildProblem(message, charOffset, noLength, context: context)
+          .desugared;
     } else {
       Expression error = library.loader.instantiateNoSuchMethodError(
           receiver, name, forest.castArguments(arguments), charOffset,
@@ -1458,7 +1443,7 @@
   @override
   void warnTypeArgumentsMismatch(String name, int expected, int charOffset) {
     addProblemErrorIfConst(
-        fasta.templateTypeArgumentMismatch.withArguments(name, expected),
+        fasta.templateTypeArgumentMismatch.withArguments(expected),
         charOffset,
         name.length);
   }
@@ -1577,10 +1562,10 @@
       }
     } else if (constantContext != ConstantContext.none &&
         !context.allowedInConstantExpression) {
-      addCompileTimeError(
+      addProblem(
           fasta.messageNotAConstantExpression, token.charOffset, token.length);
     }
-    push(new Identifier(token));
+    push(new Identifier.preserveToken(token));
   }
 
   /// Look up [name] in [scope] using [token] as location information (both to
@@ -1631,7 +1616,7 @@
       if (constantContext != ConstantContext.none &&
           declaration.isTypeVariable &&
           !member.isConstructor) {
-        addCompileTimeError(
+        addProblem(
             fasta.messageNotAConstantExpression, charOffset, token.length);
       }
       return new TypeUseGenerator(this, token, declaration, name);
@@ -1639,7 +1624,7 @@
       if (constantContext != ConstantContext.none &&
           !declaration.isConst &&
           !member.isConstructor) {
-        addCompileTimeError(
+        addProblem(
             fasta.messageNotAConstantExpression, charOffset, token.length);
       }
       // An initializing formal parameter might be final without its
@@ -1667,7 +1652,7 @@
           // semantics, such parameters introduces a new parameter with that
           // name that should be resolved here.
           !member.isConstructor) {
-        addCompileTimeError(
+        addProblem(
             fasta.messageNotAConstantExpression, charOffset, token.length);
       }
       Name n = new Name(name, library.library);
@@ -1708,7 +1693,7 @@
         if (!(readTarget is Field && readTarget.isConst ||
             // Static tear-offs are also compile time constants.
             readTarget is Procedure)) {
-          addCompileTimeError(
+          addProblem(
               fasta.messageNotAConstantExpression, charOffset, token.length);
         }
       }
@@ -1719,9 +1704,9 @@
   @override
   void handleQualified(Token period) {
     debugEvent("Qualified");
-    Identifier name = pop();
-    Object receiver = pop();
-    push([receiver, name]);
+    Identifier identifier = pop();
+    Object qualifier = pop();
+    push(identifier.withQualifier(qualifier));
   }
 
   @override
@@ -1744,9 +1729,8 @@
       String value = unescapeString(token.lexeme, token, this);
       push(forest.literalString(value, token));
     } else {
-      Object count = 1 + interpolationCount * 2;
-      List<Object> parts =
-          popList(count, new List<Object>.filled(count, null, growable: true));
+      int count = 1 + interpolationCount * 2;
+      List<Object> parts = popList(count, new List<Object>(count));
       Token first = parts.first;
       Token last = parts.last;
       Quote quote = analyzeQuote(first.lexeme);
@@ -1849,15 +1833,11 @@
       bool hasExpression, Token beginToken, Token endToken) {
     debugEvent("ReturnStatement");
     Expression expression = hasExpression ? popForValue() : null;
-    var statement = forest.returnStatement(beginToken, expression, endToken);
     if (expression != null && inConstructor) {
-      Expression error = buildCompileTimeError(
-          fasta.messageConstructorWithReturnType,
-          beginToken.charOffset,
-          lengthForToken(beginToken));
-      push(new InvalidStatementJudgment(error, statement));
+      push(buildProblemStatement(
+          fasta.messageConstructorWithReturnType, beginToken.charOffset));
     } else {
-      push(statement);
+      push(forest.returnStatement(beginToken, expression, endToken));
     }
   }
 
@@ -1902,17 +1882,17 @@
       // silent if the next token is `in`. Since a for-in loop can only have
       // one variable it must be followed by `in`.
       if (isConst) {
-        initializer = buildCompileTimeErrorExpression(
+        initializer = buildProblem(
             fasta.templateConstFieldWithoutInitializer
                 .withArguments(token.lexeme),
             token.charOffset,
-            length: token.length);
+            token.length);
       } else if (isFinal) {
-        initializer = buildCompileTimeErrorExpression(
+        initializer = buildProblem(
             fasta.templateFinalFieldWithoutInitializer
                 .withArguments(token.lexeme),
             token.charOffset,
-            length: token.length);
+            token.length);
       }
     }
     pushNewLocalVariable(initializer);
@@ -1925,12 +1905,12 @@
     bool isFinal = (currentLocalVariableModifiers & finalMask) != 0;
     assert(isConst == (constantContext == ConstantContext.inferred));
     push(new VariableDeclarationJudgment(identifier.name, functionNestingLevel,
-        forSyntheticToken: identifier.token.isSynthetic,
+        forSyntheticToken: deprecated_extractToken(identifier).isSynthetic,
         initializer: initializer,
         type: currentLocalVariableType,
         isFinal: isFinal,
         isConst: isConst)
-      ..fileOffset = offsetForToken(identifier.token)
+      ..fileOffset = identifier.charOffset
       ..fileEqualsOffset = offsetForToken(equalsToken));
   }
 
@@ -2042,15 +2022,14 @@
   void handleAssignmentExpression(Token token) {
     debugEvent("AssignmentExpression");
     Expression value = popForValue();
-    Object lhs = pop();
-    Generator generator;
-    if (lhs is Generator) {
-      generator = lhs;
+    Object generator = pop();
+    if (generator is! Generator) {
+      push(buildProblem(fasta.messageNotAnLvalue, offsetForToken(token),
+          lengthForToken(token)));
     } else {
-      generator = new KernelNonLValueGenerator(this, token, lhs);
+      push(new DelayedAssignment(
+          this, token, generator, value, token.stringValue));
     }
-    push(new DelayedAssignment(
-        this, token, generator, value, token.stringValue));
   }
 
   @override
@@ -2066,9 +2045,9 @@
   }
 
   void exitLoopOrSwitch(Statement statement) {
-    if (compileTimeErrorInLoopOrSwitch != null) {
-      push(compileTimeErrorInLoopOrSwitch);
-      compileTimeErrorInLoopOrSwitch = null;
+    if (problemInLoopOrSwitch != null) {
+      push(problemInLoopOrSwitch);
+      problemInLoopOrSwitch = null;
     } else {
       push(statement);
     }
@@ -2169,16 +2148,16 @@
       int count, Token leftBracket, Token constKeyword, Token rightBracket) {
     debugEvent("LiteralList");
     List<Expression> expressions = popListForValue(count);
-    Object typeArguments = pop();
+    List<DartType> typeArguments = pop();
     DartType typeArgument;
     if (typeArguments != null) {
-      if (forest.getTypeCount(typeArguments) > 1) {
+      if (typeArguments.length > 1) {
         addProblem(
             fasta.messageListLiteralTooManyTypeArguments,
             offsetForToken(leftBracket),
             lengthOfSpan(leftBracket, leftBracket.endGroup));
       } else {
-        typeArgument = forest.getTypeAt(typeArguments, 0);
+        typeArgument = typeArguments.single;
         if (library.loader.target.strongMode) {
           typeArgument =
               instantiateToBounds(typeArgument, coreTypes.objectClass);
@@ -2219,20 +2198,21 @@
   void handleLiteralMap(
       int count, Token leftBrace, Token constKeyword, Token rightBrace) {
     debugEvent("LiteralMap");
-    List<Object> entries = forest.mapEntryList(count);
+    List<MapEntry> entries =
+        new List<MapEntry>.filled(count, null, growable: true);
     popList(count, entries);
-    Object typeArguments = pop();
+    List<DartType> typeArguments = pop();
     DartType keyType;
     DartType valueType;
     if (typeArguments != null) {
-      if (forest.getTypeCount(typeArguments) != 2) {
+      if (typeArguments.length != 2) {
         addProblem(
             fasta.messageMapLiteralTypeArgumentMismatch,
             offsetForToken(leftBrace),
             lengthOfSpan(leftBrace, leftBrace.endGroup));
       } else {
-        keyType = forest.getTypeAt(typeArguments, 0);
-        valueType = forest.getTypeAt(typeArguments, 1);
+        keyType = typeArguments[0];
+        valueType = typeArguments[1];
         if (library.loader.target.strongMode) {
           keyType = instantiateToBounds(keyType, coreTypes.objectClass);
           valueType = instantiateToBounds(valueType, coreTypes.objectClass);
@@ -2294,19 +2274,16 @@
     debugEvent("Type");
     List<DartType> arguments = pop();
     Object name = pop();
-    if (name is List<Object>) {
-      List<Object> list = name;
-      if (list.length != 2) {
-        unexpected("${list.length}", "2", beginToken.charOffset, uri);
-      }
-      Object prefix = list[0];
-      Identifier suffix = list[1];
+    if (name is QualifiedName) {
+      QualifiedName qualified = name;
+      Object prefix = qualified.qualifier;
+      Token suffix = deprecated_extractToken(qualified);
       if (prefix is Generator) {
-        name = prefix.prefixedLookup(suffix.token);
+        name = prefix.qualifiedLookup(suffix);
       } else {
-        String displayName = debugName(getNodeName(prefix), suffix.name);
+        String displayName = debugName(getNodeName(prefix), suffix.lexeme);
         addProblem(fasta.templateNotAType.withArguments(displayName),
-            offsetForToken(beginToken), lengthOfSpan(beginToken, suffix.token));
+            offsetForToken(beginToken), lengthOfSpan(beginToken, suffix));
         push(const InvalidType());
         return;
       }
@@ -2327,7 +2304,7 @@
     debugEvent("beginFunctionType");
   }
 
-  void enterFunctionTypeScope(List<Object> typeVariables) {
+  void enterFunctionTypeScope(List<KernelTypeVariableBuilder> typeVariables) {
     debugEvent("enterFunctionTypeScope");
     enterLocalScope(null,
         scope.createNestedScope("function-type scope", isModifiable: true));
@@ -2341,12 +2318,10 @@
         if (existing == null) {
           scopeBuilder.addMember(name, builder);
         } else {
-          addCompileTimeError(fasta.templateDuplicatedName.withArguments(name),
+          addProblem(fasta.templateDuplicatedName.withArguments(name),
               builder.charOffset, name.length);
-          addCompileTimeError(
-              fasta.templateDuplicatedNameCause.withArguments(name),
-              existing.charOffset,
-              name.length);
+          addProblem(fasta.templateDuplicatedNameCause.withArguments(name),
+              existing.charOffset, name.length);
         }
       }
     }
@@ -2377,15 +2352,16 @@
     debugEvent("AsOperator");
     DartType type = pop();
     Expression expression = popForValue();
-    Expression error;
     if (constantContext != ConstantContext.none) {
-      error = buildCompileTimeError(
-          fasta.templateNotConstantExpression.withArguments('As expression'),
-          operator.charOffset,
-          operator.length);
+      push(buildProblem(
+              fasta.templateNotConstantExpression
+                  .withArguments('As expression'),
+              operator.charOffset,
+              operator.length)
+          .desugared);
+    } else {
+      push(forest.asExpression(expression, type, operator));
     }
-    push(
-        forest.asExpression(expression, type, operator, desugaredError: error));
   }
 
   @override
@@ -2401,10 +2377,12 @@
           type, functionNestingLevel);
     }
     if (constantContext != ConstantContext.none) {
-      push(buildCompileTimeError(
-          fasta.templateNotConstantExpression.withArguments('Is expression'),
-          isOperator.charOffset,
-          isOperator.length));
+      push(buildProblem(
+              fasta.templateNotConstantExpression
+                  .withArguments('Is expression'),
+              isOperator.charOffset,
+              isOperator.length)
+          .desugared);
     } else {
       push(isExpression);
     }
@@ -2444,10 +2422,11 @@
 
     Expression error;
     if (constantContext != ConstantContext.none) {
-      error = buildCompileTimeError(
-          fasta.templateNotConstantExpression.withArguments('Throw'),
-          throwToken.offset,
-          throwToken.length);
+      error = buildProblem(
+              fasta.templateNotConstantExpression.withArguments('Throw'),
+              throwToken.offset,
+              throwToken.length)
+          .desugared;
     }
 
     push(new ThrowJudgment(tokensSaver?.throwTokens(throwToken), expression,
@@ -2463,13 +2442,8 @@
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     debugEvent("FormalParameter");
     if (thisKeyword != null) {
       if (!inConstructor) {
@@ -2501,19 +2475,30 @@
             member.fileUri);
       } else {
         variable = formal.build(library);
-        variable.initializer = name.initializer;
+        if (member is KernelRedirectingFactoryBuilder &&
+            name.initializer != null) {
+          KernelRedirectingFactoryBuilder factory = member;
+          addProblem(
+              fasta.templateDefaultValueInRedirectingFactoryConstructor
+                  .withArguments(factory.redirectionTarget.fullNameForErrors),
+              name.initializer.fileOffset,
+              noLength);
+        } else {
+          variable.initializer = name.initializer;
+        }
       }
     } else {
       variable = new VariableDeclarationJudgment(
           name?.name, functionNestingLevel,
-          forSyntheticToken: name?.token?.isSynthetic ?? false,
+          forSyntheticToken:
+              deprecated_extractToken(name)?.isSynthetic ?? false,
           type: type,
           initializer: name?.initializer,
           isFinal: isFinal,
           isConst: isConst);
       if (name != null) {
         // TODO(ahe): Need an offset when name is null.
-        variable.fileOffset = offsetForToken(name.token);
+        variable.fileOffset = name.charOffset;
       }
     }
     if (annotations != null) {
@@ -2534,7 +2519,7 @@
     FormalParameterKind kind = optional("{", beginToken)
         ? FormalParameterKind.optionalNamed
         : FormalParameterKind.optionalPositional;
-    Object variables =
+    List<VariableDeclaration> variables =
         new List<VariableDeclaration>.filled(count, null, growable: true);
     popList(count, variables);
     push(new OptionalFormals(kind, variables));
@@ -2581,7 +2566,7 @@
     debugEvent("ValuedFormalParameter");
     Expression initializer = popForValue();
     Identifier name = pop();
-    push(new InitializedIdentifier(name.token, initializer));
+    push(new InitializedIdentifier(name, initializer));
   }
 
   @override
@@ -2648,22 +2633,22 @@
     }
     FormalParameters<Expression, Statement, Arguments> catchParameters =
         popIfNotNull(catchKeyword);
-    Object type = popIfNotNull(onKeyword);
-    Object exception;
-    Object stackTrace;
+    DartType type = popIfNotNull(onKeyword) ?? const DynamicType();
+    VariableDeclaration exception;
+    VariableDeclaration stackTrace;
     if (catchParameters != null) {
       int requiredCount = catchParameters.required.length;
       if ((requiredCount == 1 || requiredCount == 2) &&
           catchParameters.optional == null) {
         exception = catchParameters.required[0];
-        forest.setParameterType(exception, type);
+        exception.type = type;
         if (requiredCount == 2) {
           stackTrace = catchParameters.required[1];
-          forest.setParameterType(
-              stackTrace, coreTypes.stackTraceClass.rawType);
+          stackTrace.type = coreTypes.stackTraceClass.rawType;
         }
       } else {
-        buildCompileTimeError(fasta.messageInvalidCatchArguments,
+        // TODO(ahe): We're not storing this error in the AST.
+        buildProblem(fasta.messageInvalidCatchArguments,
             catchParameters.charOffset, catchParameters.charLength);
 
         var allFormals = <VariableDeclaration>[];
@@ -2675,12 +2660,11 @@
         var allCount = allFormals.length;
         if (allCount >= 1) {
           exception = allFormals[0];
-          forest.setParameterType(exception, type);
+          exception.type = type;
         }
         if (allCount >= 2) {
           stackTrace = allFormals[1];
-          forest.setParameterType(
-              stackTrace, coreTypes.stackTraceClass.rawType);
+          stackTrace.type = coreTypes.stackTraceClass.rawType;
         }
       }
     }
@@ -2691,15 +2675,15 @@
   @override
   void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
     Statement finallyBlock = popStatementIfNotNull(finallyKeyword);
-    Object catches = popList(
+    List<Catch> catches = popList(
         catchCount, new List<Catch>.filled(catchCount, null, growable: true));
     Statement tryBlock = popStatement();
-    if (compileTimeErrorInTry == null) {
+    if (problemInTry == null) {
       push(forest.tryStatement(
           tryKeyword, tryBlock, catches, finallyKeyword, finallyBlock));
     } else {
-      push(compileTimeErrorInTry);
-      compileTimeErrorInTry = null;
+      push(problemInTry);
+      problemInTry = null;
     }
   }
 
@@ -2719,13 +2703,12 @@
       push(new SuperIndexedAccessGenerator(
           this,
           openSquareBracket,
-          closeSquareBracket,
           index,
           lookupInstanceMember(indexGetName, isSuper: true),
           lookupInstanceMember(indexSetName, isSuper: true)));
     } else {
-      push(IndexedAccessGenerator.make(this, openSquareBracket,
-          closeSquareBracket, toValue(receiver), index, null, null));
+      push(IndexedAccessGenerator.make(
+          this, openSquareBracket, toValue(receiver), index, null, null));
     }
   }
 
@@ -2761,7 +2744,7 @@
         }
       }
       push(buildMethodInvocation(receiverValue, new Name(operator),
-          forest.argumentsEmpty(noLocation, noLocation), token.charOffset,
+          forest.argumentsEmpty(noLocation), token.charOffset,
           // This *could* be a constant expression, we can't know without
           // evaluating [receiver].
           isConstantExpression: !isSuper,
@@ -2778,29 +2761,27 @@
   @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     debugEvent("UnaryPrefixAssignmentExpression");
-    Object target = pop();
-    Generator generator;
-    if (target is Generator) {
-      generator = target;
+    Object generator = pop();
+    if (generator is Generator) {
+      push(generator.buildPrefixIncrement(incrementOperator(token),
+          offset: token.charOffset));
     } else {
-      generator = new KernelNonLValueGenerator(this, token, toValue(target));
+      push(wrapInProblem(
+          toValue(generator), fasta.messageNotAnLvalue, noLength));
     }
-    push(generator.buildPrefixIncrement(incrementOperator(token),
-        offset: token.charOffset));
   }
 
   @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     debugEvent("UnaryPostfixAssignmentExpression");
-    Object target = pop();
-    Generator generator;
-    if (target is Generator) {
-      generator = target;
+    Object generator = pop();
+    if (generator is Generator) {
+      push(new DelayedPostfixIncrement(
+          this, token, generator, incrementOperator(token), null));
     } else {
-      generator = new KernelNonLValueGenerator(this, token, toValue(target));
+      push(wrapInProblem(
+          toValue(generator), fasta.messageNotAnLvalue, noLength));
     }
-    push(new DelayedPostfixIncrement(
-        this, token, generator, incrementOperator(token), null));
   }
 
   @override
@@ -2848,17 +2829,21 @@
     Identifier identifier;
     List<DartType> typeArguments = pop();
     Object type = pop();
-    if (type is List<Object>) {
-      List<Object> list = type;
-      Object prefix = list[0];
-      identifier = list[1];
-      if (prefix is TypeUseGenerator) {
-        type = prefix;
-      } else if (prefix is Generator) {
-        type = prefix.prefixedLookup(identifier.token);
+    if (type is QualifiedName) {
+      identifier = type;
+      QualifiedName qualified = type;
+      Object qualifier = qualified.qualifier;
+      if (qualifier is TypeUseGenerator) {
+        type = qualifier;
+        if (typeArguments != null) {
+          addProblem(fasta.messageConstructorWithTypeArguments,
+              identifier.charOffset, identifier.name.length);
+        }
+      } else if (qualifier is Generator) {
+        type = qualifier.qualifiedLookup(deprecated_extractToken(identifier));
         identifier = null;
       } else {
-        unhandled("${prefix.runtimeType}", "pushQualifiedReference",
+        unhandled("${qualifier.runtimeType}", "pushQualifiedReference",
             start.charOffset, uri);
       }
     }
@@ -2879,7 +2864,7 @@
   }
 
   @override
-  Expression buildStaticInvocation(Member target, ArgumentsJudgment arguments,
+  Expression buildStaticInvocation(Member target, Arguments arguments,
       {Constness constness: Constness.implicit,
       int charOffset: -1,
       int charLength: noLength,
@@ -2921,10 +2906,12 @@
           isConst || constantContext != ConstantContext.none && target.isConst;
       if ((isConst || constantContext == ConstantContext.inferred) &&
           !target.isConst) {
-        var error = buildCompileTimeError(
-            fasta.messageNonConstConstructor, charOffset, charLength);
         return new InvalidConstructorInvocationJudgment(
-            error, target, arguments);
+            buildProblem(
+                    fasta.messageNonConstConstructor, charOffset, charLength)
+                .desugared,
+            target,
+            arguments);
       }
       return new ConstructorInvocationJudgment(
           target, forest.castArguments(arguments),
@@ -2937,10 +2924,11 @@
             constantContext != ConstantContext.none && procedure.isConst;
         if ((isConst || constantContext == ConstantContext.inferred) &&
             !procedure.isConst) {
-          var error = buildCompileTimeError(
-              fasta.messageNonConstFactory, charOffset, charLength);
           return new InvalidConstructorInvocationJudgment(
-              error, target, arguments);
+              buildProblem(fasta.messageNonConstFactory, charOffset, charLength)
+                  .desugared,
+              target,
+              arguments);
         }
         return new FactoryConstructorInvocationJudgment(
             target, forest.castArguments(arguments),
@@ -2956,31 +2944,21 @@
   }
 
   @override
-  LocatedMessage checkArgumentsForFunction(
-      FunctionNode function,
-      ArgumentsJudgment arguments,
-      int offset,
-      List<TypeParameter> typeParameters) {
+  LocatedMessage checkArgumentsForFunction(FunctionNode function,
+      Arguments arguments, int offset, List<TypeParameter> typeParameters) {
     if (forest.argumentsPositional(arguments).length <
         function.requiredParameterCount) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
       return fasta.templateTooFewArguments
           .withArguments(function.requiredParameterCount,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     if (forest.argumentsPositional(arguments).length >
         function.positionalParameters.length) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
-      var template = function.namedParameters.isNotEmpty
-          ? fasta.templateTooManyArgumentsCouldBeNamed
-          : fasta.templateTooManyArguments;
-      return template
+      return fasta.templateTooManyArguments
           .withArguments(function.positionalParameters.length,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     List<Object> named = forest.argumentsNamed(arguments);
     if (named.isNotEmpty) {
@@ -2995,13 +2973,20 @@
       }
     }
 
-    List<Object> types = forest.argumentsTypeArguments(arguments);
+    List<DartType> types = forest.argumentsTypeArguments(arguments);
     if (typeParameters.length != types.length) {
-      // TODO(paulberry): Report error in this case as well,
-      // after https://github.com/dart-lang/sdk/issues/32130 is fixed.
-      types.clear();
-      for (int i = 0; i < typeParameters.length; i++) {
-        types.add(const DynamicType());
+      if (types.length == 0) {
+        // Expected `typeParameters.length` type arguments, but none given,
+        // so we fill in dynamic.
+        for (int i = 0; i < typeParameters.length; i++) {
+          types.add(const DynamicType());
+        }
+      } else {
+        // A wrong (non-zero) amount of type arguments given. That's an error.
+        // TODO(jensj): Position should be on type arguments instead.
+        return fasta.templateTypeArgumentMismatch
+            .withArguments(typeParameters.length)
+            .withLocation(uri, offset, noLength);
       }
     }
 
@@ -3010,27 +2995,20 @@
 
   @override
   LocatedMessage checkArgumentsForType(
-      FunctionType function, ArgumentsJudgment arguments, int offset) {
+      FunctionType function, Arguments arguments, int offset) {
     if (forest.argumentsPositional(arguments).length <
         function.requiredParameterCount) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
       return fasta.templateTooFewArguments
           .withArguments(function.requiredParameterCount,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     if (forest.argumentsPositional(arguments).length >
         function.positionalParameters.length) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
-      var template = function.namedParameters.isNotEmpty
-          ? fasta.templateTooManyArgumentsCouldBeNamed
-          : fasta.templateTooManyArguments;
-      return template
+      return fasta.templateTooManyArguments
           .withArguments(function.positionalParameters.length,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     List<Object> named = forest.argumentsNamed(arguments);
     if (named.isNotEmpty) {
@@ -3044,6 +3022,15 @@
         }
       }
     }
+    List<Object> types = forest.argumentsTypeArguments(arguments);
+    List<TypeParameter> typeParameters = function.typeParameters;
+    if (typeParameters.length != types.length && types.length != 0) {
+      // A wrong (non-zero) amount of type arguments given. That's an error.
+      // TODO(jensj): Position should be on type arguments instead.
+      return fasta.templateTypeArgumentMismatch
+          .withArguments(typeParameters.length)
+          .withLocation(uri, offset, noLength);
+    }
 
     return null;
   }
@@ -3053,7 +3040,7 @@
     debugEvent("beginNewExpression");
     super.push(constantContext);
     if (constantContext != ConstantContext.none) {
-      addCompileTimeError(
+      addProblem(
           fasta.templateNotConstantExpression.withArguments('New expression'),
           token.charOffset,
           token.length);
@@ -3100,7 +3087,8 @@
       Token nameToken, int offset, Constness constness) {
     Arguments arguments = pop();
     Identifier nameLastIdentifier = pop(NullValue.Identifier);
-    Token nameLastToken = nameLastIdentifier?.token ?? nameToken;
+    Token nameLastToken =
+        deprecated_extractToken(nameLastIdentifier) ?? nameToken;
     String name = pop();
     List<DartType> typeArguments = pop();
 
@@ -3138,9 +3126,8 @@
       int charOffset,
       Constness constness) {
     if (arguments == null) {
-      return buildCompileTimeErrorExpression(
-          fasta.messageMissingArgumentList, nameToken.charOffset,
-          length: nameToken.length);
+      return buildProblem(fasta.messageMissingArgumentList,
+          nameToken.charOffset, nameToken.length);
     }
 
     if (typeArguments != null) {
@@ -3151,9 +3138,8 @@
     String errorName;
     if (type is ClassBuilder<TypeBuilder, Object>) {
       if (type is EnumBuilder<TypeBuilder, Object>) {
-        return buildCompileTimeErrorExpression(
-            fasta.messageEnumInstantiation, nameToken.charOffset,
-            length: nameToken.length);
+        return buildProblem(fasta.messageEnumInstantiation,
+            nameToken.charOffset, nameToken.length);
       }
       Declaration b =
           type.findConstructorOrFactory(name, charOffset, uri, library);
@@ -3188,7 +3174,7 @@
               target.function.typeParameters.length !=
                   forest.argumentsTypeArguments(arguments).length) {
             arguments = forest.arguments(
-                forest.argumentsPositional(arguments), noLocation, noLocation,
+                forest.argumentsPositional(arguments), null,
                 named: forest.argumentsNamed(arguments),
                 types: new List<DartType>.filled(
                     target.function.typeParameters.length, const DynamicType(),
@@ -3275,17 +3261,18 @@
     Expression value = popForValue();
     Identifier identifier = pop();
     push(new NamedExpressionJudgment(
-        tokensSaver?.namedExpressionTokens(identifier.token, colon),
-        identifier.token.lexeme,
+        tokensSaver?.namedExpressionTokens(
+            deprecated_extractToken(identifier), colon),
+        identifier.name,
         value)
-      ..fileOffset = offsetForToken(identifier.token));
+      ..fileOffset = identifier.charOffset);
   }
 
   @override
   void endFunctionName(Token beginToken, Token token) {
     debugEvent("FunctionName");
     Identifier name = pop();
-    Token nameToken = name.token;
+    Token nameToken = deprecated_extractToken(name);
     VariableDeclaration variable = new VariableDeclarationJudgment(
         name.name, functionNestingLevel,
         forSyntheticToken: nameToken.isSynthetic,
@@ -3293,10 +3280,8 @@
         isLocalFunction: true)
       ..fileOffset = offsetForToken(nameToken);
     if (scope.local[variable.name] != null) {
-      addCompileTimeError(
-          fasta.templateDuplicatedName.withArguments(variable.name),
-          offsetForToken(nameToken),
-          nameToken.length);
+      addProblem(fasta.templateDuplicatedName.withArguments(variable.name),
+          name.charOffset, nameToken.length);
     }
     push(new FunctionDeclarationJudgment(
         variable,
@@ -3320,7 +3305,7 @@
     functionNestingLevel--;
     inCatchBlock = pop();
     switchScope = pop();
-    List<Object> typeVariables = pop();
+    List<KernelTypeVariableBuilder> typeVariables = pop();
     exitLocalScope();
     push(typeVariables ?? NullValue.TypeVariables);
   }
@@ -3334,7 +3319,7 @@
   @override
   void beginNamedFunctionExpression(Token token) {
     debugEvent("beginNamedFunctionExpression");
-    List<Object> typeVariables = pop();
+    List<KernelTypeVariableBuilder> typeVariables = pop();
     // Create an additional scope in which the named function expression is
     // declared.
     enterLocalScope("named function");
@@ -3354,8 +3339,8 @@
     exitLocalScope();
     FormalParameters<Expression, Statement, Arguments> formals = pop();
     Object declaration = pop();
-    Object returnType = pop();
-    Object hasImplicitReturnType = returnType == null;
+    DartType returnType = pop();
+    bool hasImplicitReturnType = returnType == null;
     returnType ??= const DynamicType();
     exitFunction();
     List<TypeParameter> typeParameters = typeVariableBuildersToKernel(pop());
@@ -3452,9 +3437,8 @@
       ..fileOffset = beginToken.charOffset
       ..fileEndOffset = token.charOffset);
     if (constantContext != ConstantContext.none) {
-      push(buildCompileTimeErrorExpression(
-          fasta.messageNotAConstantExpression, formals.charOffset,
-          length: formals.charLength));
+      push(buildProblem(fasta.messageNotAConstantExpression, formals.charOffset,
+          formals.charLength));
     } else {
       push(new FunctionExpressionJudgment(function)
         ..fileOffset = offsetForToken(beginToken));
@@ -3517,8 +3501,8 @@
       declaresVariable = true;
       variable = lvalue;
       if (variable.isConst) {
-        addCompileTimeError(fasta.messageForInLoopWithConstVariable,
-            variable.fileOffset, variable.name.length);
+        addProblem(fasta.messageForInLoopWithConstVariable, variable.fileOffset,
+            variable.name.length);
       }
     } else if (lvalue is Generator) {
       /// We are in this case, where `lvalue` isn't a [VariableDeclaration]:
@@ -3546,8 +3530,7 @@
           : fasta.messageForInLoopNotAssignable;
       Token token = forToken.next.next;
       variable = new VariableDeclaration.forValue(
-          new SyntheticExpressionJudgment(buildCompileTimeError(
-              message, offsetForToken(token), lengthForToken(token))));
+          buildProblem(message, offsetForToken(token), lengthForToken(token)));
     }
     Statement result = new ForInJudgment(
         tokensSaver?.forInStatementTokens(awaitToken, forToken, leftParenthesis,
@@ -3571,20 +3554,20 @@
   void handleLabel(Token token) {
     debugEvent("Label");
     Identifier identifier = pop();
-    push(forest.label(identifier.token, token));
+    push(new Label(identifier.name, identifier.charOffset));
   }
 
   @override
   void beginLabeledStatement(Token token, int labelCount) {
     debugEvent("beginLabeledStatement");
-    List<Object> labels =
-        new List<Object>.filled(labelCount, null, growable: true);
+    List<Label> labels =
+        new List<Label>.filled(labelCount, null, growable: true);
     popList(labelCount, labels);
     enterLocalScope(null, scope.createNestedLabelScope());
     LabelTarget target =
         new LabelTarget(labels, member, functionNestingLevel, token.charOffset);
-    for (Object label in labels) {
-      scope.declareLabel(forest.getLabelName(label), target);
+    for (Label label in labels) {
+      scope.declareLabel(label.name, target);
     }
     push(target);
   }
@@ -3616,8 +3599,9 @@
     debugEvent("RethrowStatement");
     var error = inCatchBlock
         ? null
-        : buildCompileTimeError(fasta.messageRethrowNotCatch,
-            offsetForToken(rethrowToken), lengthForToken(rethrowToken));
+        : buildProblem(fasta.messageRethrowNotCatch,
+                offsetForToken(rethrowToken), lengthForToken(rethrowToken))
+            .desugared;
     push(new ExpressionStatementJudgment(
         new RethrowJudgment(tokensSaver?.rethrowTokens(rethrowToken), error)
           ..fileOffset = offsetForToken(rethrowToken),
@@ -3680,9 +3664,8 @@
       case Assert.Expression:
         // The parser has already reported an error indicating that assert
         // cannot be used in an expression.
-        push(buildCompileTimeErrorExpression(
-            fasta.messageAssertAsExpression, assertKeyword.offset,
-            length: assertKeyword.length));
+        push(buildProblem(fasta.messageAssertAsExpression, assertKeyword.offset,
+            assertKeyword.length));
         break;
 
       case Assert.Initializer:
@@ -3709,14 +3692,13 @@
   @override
   void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) {
     debugEvent("beginSwitchCase");
-    Object count = labelCount + expressionCount;
-    List<Object> labelsAndExpressions =
-        popList(count, new List<Object>.filled(count, null, growable: true));
-    List<Object> labels = <Object>[];
+    int count = labelCount + expressionCount;
+    List<Object> labelsAndExpressions = popList(count, new List<Object>(count));
+    List<Label> labels = <Label>[];
     List<Expression> expressions = <Expression>[];
     if (labelsAndExpressions != null) {
       for (Object labelOrExpression in labelsAndExpressions) {
-        if (forest.isLabel(labelOrExpression)) {
+        if (labelOrExpression is Label) {
           labels.add(labelOrExpression);
         } else {
           expressions.add(labelOrExpression);
@@ -3724,15 +3706,15 @@
       }
     }
     assert(scope == switchScope);
-    for (Object label in labels) {
-      String labelName = forest.getLabelName(label);
+    for (Label label in labels) {
+      String labelName = label.name;
       if (scope.hasLocalLabel(labelName)) {
         // TODO(ahe): Should validate this is a goto target.
         if (!scope.claimLabel(labelName)) {
-          addCompileTimeError(
+          addProblem(
               fasta.templateDuplicateLabelInSwitchStatement
                   .withArguments(labelName),
-              forest.getLabelOffset(label),
+              label.charOffset,
               labelName.length);
         }
       } else {
@@ -3759,7 +3741,7 @@
     // check this switch case to see if it falls through to the next case.
     Statement block = popBlock(statementCount, firstToken, null);
     exitLocalScope();
-    List<Object> labels = pop();
+    List<Label> labels = pop();
     List<Expression> expressions = pop();
     List<int> expressionOffsets = <int>[];
     for (Expression expression in expressions) {
@@ -3805,10 +3787,10 @@
     List<SwitchCase> cases =
         new List<SwitchCase>.filled(caseCount, null, growable: true);
     for (int i = caseCount - 1; i >= 0; i--) {
-      List<Object> labels = pop();
+      List<Label> labels = pop();
       SwitchCase current = cases[i] = pop();
-      for (Object label in labels) {
-        JumpTarget target = switchScope.lookupLabel(forest.getLabelName(label));
+      for (Label label in labels) {
+        JumpTarget target = switchScope.lookupLabel(label.name);
         if (target != null) {
           target.resolveGotos(forest, current);
         }
@@ -3862,19 +3844,19 @@
       target = scope.lookupLabel(name);
     }
     if (target == null && name == null) {
-      push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+      push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.messageBreakOutsideOfLoop, breakKeyword.charOffset));
     } else if (target == null ||
         target is! JumpTarget ||
         !target.isBreakTarget) {
       Token labelToken = breakKeyword.next;
-      push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+      push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.templateInvalidBreakTarget.withArguments(name),
           labelToken.charOffset,
           length: labelToken.length));
     } else if (target.functionNestingLevel != functionNestingLevel) {
       Token labelToken = breakKeyword.next;
-      push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+      push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.templateBreakTargetOutsideFunction.withArguments(name),
           labelToken.charOffset,
           length: labelToken.length));
@@ -3899,7 +3881,7 @@
       Declaration namedTarget = scope.lookupLabel(identifier.name);
       if (namedTarget != null && namedTarget is! JumpTarget) {
         Token labelToken = continueKeyword.next;
-        push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+        push(problemInLoopOrSwitch = buildProblemStatement(
             fasta.messageContinueLabelNotTarget, labelToken.charOffset,
             length: labelToken.length));
         return;
@@ -3907,13 +3889,13 @@
       target = namedTarget;
       if (target == null) {
         if (switchScope == null) {
-          push(buildCompileTimeErrorStatement(
+          push(buildProblemStatement(
               fasta.templateLabelNotFound.withArguments(name),
               continueKeyword.next.charOffset));
           return;
         }
-        switchScope.forwardDeclareLabel(identifier.name,
-            target = createGotoTarget(offsetForToken(identifier.token)));
+        switchScope.forwardDeclareLabel(
+            identifier.name, target = createGotoTarget(identifier.charOffset));
       }
       if (target.isGotoTarget &&
           target.functionNestingLevel == functionNestingLevel) {
@@ -3928,18 +3910,18 @@
       }
     }
     if (target == null) {
-      push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+      push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.messageContinueWithoutLabelInCase, continueKeyword.charOffset,
           length: continueKeyword.length));
     } else if (!target.isContinueTarget) {
       Token labelToken = continueKeyword.next;
-      push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+      push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.templateInvalidContinueTarget.withArguments(name),
           labelToken.charOffset,
           length: labelToken.length));
     } else if (target.functionNestingLevel != functionNestingLevel) {
       Token labelToken = continueKeyword.next;
-      push(compileTimeErrorInLoopOrSwitch = buildCompileTimeErrorStatement(
+      push(problemInLoopOrSwitch = buildProblemStatement(
           fasta.templateContinueTargetOutsideFunction.withArguments(name),
           labelToken.charOffset,
           length: labelToken.length));
@@ -3966,7 +3948,11 @@
     // See the code that resolves them below.
     new ClassMemberParser(listener)
         .parseTypeVariablesOpt(new Token.eof(-1)..next = token);
-    enterFunctionTypeScope(listener.pop());
+    List<Object> typeVariables = listener.pop();
+    if (typeVariables != null) {
+      typeVariables = new List<KernelTypeVariableBuilder>.from(typeVariables);
+    }
+    enterFunctionTypeScope(typeVariables);
 
     // The invocation of [enterFunctionTypeScope] above has put the type
     // variables into the scope, and now the possibly unresolved types from
@@ -3995,7 +3981,7 @@
       // Something went wrong when pre-parsing the type variables.
       // Assume an error is reported elsewhere.
       variable = new KernelTypeVariableBuilder(
-          name.name, library, offsetForToken(name.token), null);
+          name.name, library, name.charOffset, null);
       variable.binder = _typeInferrer.binderForTypeVariable(
           variable, variable.charOffset, variable.name);
     }
@@ -4072,7 +4058,7 @@
   }
 
   List<TypeParameter> typeVariableBuildersToKernel(
-      List<Object> typeVariableBuilders) {
+      List<KernelTypeVariableBuilder> typeVariableBuilders) {
     if (typeVariableBuilders == null) return null;
     List<TypeParameter> typeParameters = new List<TypeParameter>.filled(
         typeVariableBuilders.length, null,
@@ -4090,77 +4076,55 @@
   @override
   void handleInvalidStatement(Token token, Message message) {
     Statement statement = pop();
-    var error = buildCompileTimeError(message, statement.fileOffset, noLength);
-    push(new InvalidStatementJudgment(error, statement));
+    push(new InvalidStatementJudgment(
+        buildProblem(message, statement.fileOffset, noLength).desugared,
+        statement));
   }
 
   @override
-  Expression buildCompileTimeError(Message message, int charOffset, int length,
+  SyntheticExpressionJudgment buildProblem(
+      Message message, int charOffset, int length,
       {List<LocatedMessage> context}) {
-    library.addCompileTimeError(message, charOffset, length, uri,
-        wasHandled: true, context: context);
-    return library.loader.throwCompileConstantError(
-        library.loader.buildCompileTimeError(message, charOffset, length, uri));
-  }
-
-  @override
-  Expression buildCompileTimeErrorExpression(Message message, int offset,
-      {int length, Expression original}) {
-    return new SyntheticExpressionJudgment(
-        buildCompileTimeError(message, offset, length ?? noLength),
-        original: original);
-  }
-
-  Expression wrapInCompileTimeError(Expression expression, Message message,
-      {List<LocatedMessage> context}) {
-    return wrapInLocatedCompileTimeError(expression,
-        message.withLocation(uri, forest.readOffset(expression), noLength),
-        context: context);
+    addProblem(message, charOffset, length, wasHandled: true, context: context);
+    return new SyntheticExpressionJudgment(library.loader
+        .throwCompileConstantError(
+            library.loader.buildProblem(message, charOffset, length, uri)));
   }
 
   @override
   Expression wrapInProblem(Expression expression, Message message, int length,
       {List<LocatedMessage> context}) {
-    int charOffset = expression.fileOffset;
+    int charOffset = forest.readOffset(expression);
     Severity severity = message.code.severity;
-    if (severity == null) {
-      addCompileTimeError(message, charOffset, length, context: context);
-      internalProblem(
-          fasta.templateInternalProblemMissingSeverity
-              .withArguments(message.code.name),
-          charOffset,
-          uri);
-    } else if (severity == Severity.error ||
+    if (severity == Severity.error ||
         severity == Severity.errorLegacyWarning &&
             library.loader.target.strongMode) {
-      return wrapInCompileTimeError(expression, message, context: context);
+      return wrapInLocatedProblem(
+          expression, message.withLocation(uri, charOffset, length),
+          context: context);
     } else {
       addProblem(message, charOffset, length, context: context);
+      return expression;
     }
-    return expression;
   }
 
   @override
-  Expression wrapInLocatedCompileTimeError(
-      Expression expression, LocatedMessage message,
+  Expression wrapInLocatedProblem(Expression expression, LocatedMessage message,
       {List<LocatedMessage> context}) {
     // TODO(askesc): Produce explicit error expression wrapping the original.
     // See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
-    return new SyntheticExpressionJudgment(
-        new Let(
-            new VariableDeclaration.forValue(new SyntheticExpressionJudgment(
-                buildCompileTimeError(
-                    message.messageObject, message.charOffset, message.length,
-                    context: context)))
-              ..fileOffset = forest.readOffset(expression),
-            new Let(
-                new VariableDeclaration.forValue(expression)
-                  ..fileOffset = forest.readOffset(expression),
-                forest.literalNull(null)
-                  ..fileOffset = forest.readOffset(expression))
-              ..fileOffset = forest.readOffset(expression))
+    return new SyntheticExpressionJudgment(new Let(
+        new VariableDeclaration.forValue(buildProblem(
+            message.messageObject, message.charOffset, message.length,
+            context: context))
           ..fileOffset = forest.readOffset(expression),
-        original: expression);
+        new Let(
+            new VariableDeclaration.forValue(expression)
+              ..fileOffset = forest.readOffset(expression),
+            forest.literalNull(null)
+              ..fileOffset = forest.readOffset(expression))
+          ..fileOffset = forest.readOffset(expression))
+      ..fileOffset = forest.readOffset(expression));
   }
 
   Expression buildFallThroughError(int charOffset) {
@@ -4178,7 +4142,7 @@
           forest.literalString("${location?.file ?? uri}", null)
             ..fileOffset = charOffset,
           forest.literalInt(location?.line ?? 0, null)..fileOffset = charOffset,
-        ], noLocation, noLocation),
+        ], noLocation),
         charOffset: charOffset));
   }
 
@@ -4193,35 +4157,20 @@
         constructor.target,
         forest.arguments(<Expression>[
           forest.literalString(className, null)..fileOffset = charOffset
-        ], noLocation, noLocation)));
+        ], noLocation)));
   }
 
-  Statement buildCompileTimeErrorStatement(Message message, int charOffset,
+  Statement buildProblemStatement(Message message, int charOffset,
       {List<LocatedMessage> context, int length}) {
     return new ExpressionStatementJudgment(
-        new SyntheticExpressionJudgment(buildCompileTimeError(
-            message, charOffset, length ?? noLength,
-            context: context)),
+        buildProblem(message, charOffset, length ?? noLength, context: context),
         null);
   }
 
-  Statement wrapInCompileTimeErrorStatement(
-      Statement statement, Message message) {
+  Statement wrapInProblemStatement(Statement statement, Message message) {
     // TODO(askesc): Produce explicit error statement wrapping the original.
     // See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
-    var error = buildCompileTimeErrorStatement(message, statement.fileOffset);
-    statement.parent = error; // to avoid dangling statement
-    return error;
-  }
-
-  @override
-  Initializer buildInvalidFieldInitializer(int offset, bool isSynthetic,
-      Node target, Expression value, Expression error) {
-    needsImplicitSuperInitializer = false;
-    return new ShadowInvalidFieldInitializer(
-        target, value, new VariableDeclaration.forValue(error))
-      ..fileOffset = offset
-      ..isSynthetic = isSynthetic;
+    return buildProblemStatement(message, statement.fileOffset);
   }
 
   @override
@@ -4244,13 +4193,15 @@
 
   Initializer buildDuplicatedInitializer(Field field, Expression value,
       String name, int offset, int previousInitializerOffset) {
-    var error = buildCompileTimeError(
-        fasta.templateFinalInstanceVariableAlreadyInitialized
-            .withArguments(name),
-        offset,
-        noLength);
     return new ShadowInvalidFieldInitializer(
-        field, value, new VariableDeclaration.forValue(error))
+        field,
+        value,
+        new VariableDeclaration.forValue(buildProblem(
+                fasta.templateFinalInstanceVariableAlreadyInitialized
+                    .withArguments(name),
+                offset,
+                noLength)
+            .desugared))
       ..fileOffset = offset;
   }
 
@@ -4298,7 +4249,7 @@
                 constructor.target,
                 forest.arguments(<Expression>[
                   forest.literalString(name, null)..fileOffset = offset
-                ], noLocation, noLocation),
+                ], noLocation),
                 charOffset: offset))))
           ..fileOffset = offset;
       } else {
@@ -4322,17 +4273,13 @@
           ..isSynthetic = isSynthetic;
       }
     } else {
-      builder ??= classBuilder.scope.setters[name];
-      var error = buildCompileTimeError(
-          fasta.templateInitializerForStaticField.withArguments(name),
-          offset,
-          name.length);
-      return buildInvalidFieldInitializer(
-          offset,
-          isSynthetic,
-          builder != null && builder.hasTarget ? builder.target : null,
-          expression,
-          error);
+      return buildInvalidInitializer(
+          buildProblem(
+                  fasta.templateInitializerForStaticField.withArguments(name),
+                  offset,
+                  name.length)
+              .desugared,
+          offset);
     }
   }
 
@@ -4344,8 +4291,9 @@
       return buildInvalidSuperInitializer(
           constructor,
           forest.castArguments(arguments),
-          buildCompileTimeError(fasta.messageConstConstructorWithNonConstSuper,
-              charOffset, constructor.name.name.length),
+          buildProblem(fasta.messageConstConstructorWithNonConstSuper,
+                  charOffset, constructor.name.name.length)
+              .desugared,
           charOffset);
     }
     needsImplicitSuperInitializer = false;
@@ -4375,13 +4323,6 @@
   }
 
   @override
-  Expression buildProblemExpression(
-      ProblemBuilder builder, int charOffset, int length) {
-    return new SyntheticExpressionJudgment(
-        buildCompileTimeError(builder.message, charOffset, length));
-  }
-
-  @override
   void handleOperator(Token token) {
     debugEvent("Operator");
     push(new Operator(token, token.charOffset));
@@ -4390,7 +4331,7 @@
   @override
   void handleSymbolVoid(Token token) {
     debugEvent("SymbolVoid");
-    push(new Identifier(token));
+    push(new Identifier.preserveToken(token));
   }
 
   @override
@@ -4401,7 +4342,7 @@
       push(forest.block(
           token,
           <Statement>[
-            buildCompileTimeErrorStatement(
+            buildProblemStatement(
                 fasta.templateExpectedFunctionBody.withArguments(token),
                 token.charOffset,
                 length: token.length)
@@ -4417,18 +4358,14 @@
       Message message = fasta.messageTypeVariableInStaticContext;
       int length = type.parameter.name.length;
       if (nonInstanceAccessIsError) {
-        addCompileTimeError(message, offset, length);
+        addProblem(message, offset, length, severity: Severity.error);
       } else {
         addProblemErrorIfConst(message, offset, length);
       }
       return const InvalidType();
     } else if (constantContext != ConstantContext.none) {
-      int length = type.parameter.name.length;
-      addCompileTimeError(
-          fasta.templateTypeVariableInConstExpression
-              .withArguments(type.parameter.name, type),
-          offset,
-          length);
+      addProblem(fasta.messageTypeVariableInConstantContext, offset,
+          type.parameter.name.length);
     }
     return type;
   }
@@ -4463,11 +4400,12 @@
       bool isSuper: false,
       Member interfaceTarget}) {
     if (constantContext != ConstantContext.none && !isConstantExpression) {
-      error = buildCompileTimeError(
-          fasta.templateNotConstantExpression
-              .withArguments('Method invocation'),
-          offset,
-          name.name.length);
+      error = buildProblem(
+              fasta.templateNotConstantExpression
+                  .withArguments('Method invocation'),
+              offset,
+              name.name.length)
+          .desugared;
     }
     if (isSuper) {
       // We can ignore [isNullAware] on super sends.
@@ -4526,29 +4464,26 @@
   }
 
   @override
-  void addCompileTimeError(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
-    library.addCompileTimeError(message, charOffset, length, uri,
-        context: context);
-  }
-
-  @override
   void addProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
-    library.addProblem(message, charOffset, length, uri, context: context);
+      {bool wasHandled: false,
+      List<LocatedMessage> context,
+      Severity severity}) {
+    library.addProblem(message, charOffset, length, uri,
+        wasHandled: wasHandled, context: context, severity: severity);
   }
 
   @override
   void addProblemErrorIfConst(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
+      {bool wasHandled: false, List<LocatedMessage> context}) {
     // TODO(askesc): Instead of deciding on the severity, this method should
     // take two messages: one to use when a constant expression is
     // required and one to use otherwise.
+    Severity severity = message.code.severity;
     if (constantContext != ConstantContext.none) {
-      addCompileTimeError(message, charOffset, length, context: context);
-    } else {
-      library.addProblem(message, charOffset, length, uri, context: context);
+      severity = Severity.error;
     }
+    addProblem(message, charOffset, length,
+        wasHandled: wasHandled, context: context, severity: severity);
   }
 
   @override
@@ -4565,7 +4500,7 @@
   @override
   Expression wrapInDeferredCheck(
       Expression expression, KernelPrefixBuilder prefix, int charOffset) {
-    Object check = new VariableDeclaration.forValue(
+    VariableDeclaration check = new VariableDeclaration.forValue(
         forest.checkLibraryIsLoaded(prefix.dependency))
       ..fileOffset = charOffset;
     return new DeferredCheckJudgment(check, expression);
@@ -4590,7 +4525,7 @@
       } else {
         nearest = '$asDouble';
       }
-      library.addCompileTimeError(
+      library.addProblem(
           fasta.templateWebLiteralCannotBeRepresentedExactly
               .withArguments(token.lexeme, nearest),
           token.charOffset,
@@ -4611,17 +4546,6 @@
   }
 }
 
-class Identifier {
-  final Token token;
-  String get name => token.lexeme;
-
-  Identifier(this.token);
-
-  Expression get initializer => null;
-
-  String toString() => "identifier($name)";
-}
-
 class Operator {
   final Token token;
   String get name => token.stringValue;
@@ -4633,14 +4557,6 @@
   String toString() => "operator($name)";
 }
 
-class InitializedIdentifier extends Identifier {
-  final Expression initializer;
-
-  InitializedIdentifier(Token token, this.initializer) : super(token);
-
-  String toString() => "initialized-identifier($name, $initializer)";
-}
-
 class JumpTarget extends Declaration {
   final List<Statement> users = <Statement>[];
 
@@ -4685,24 +4601,24 @@
 
   void resolveBreaks(Forest forest, Statement target) {
     assert(isBreakTarget);
-    for (Statement user in users) {
-      forest.resolveBreak(target, user);
+    for (BreakStatement user in users) {
+      user.target = target;
     }
     users.clear();
   }
 
   void resolveContinues(Forest forest, Statement target) {
     assert(isContinueTarget);
-    for (Statement user in users) {
-      forest.resolveContinue(target, user);
+    for (BreakStatement user in users) {
+      user.target = target;
     }
     users.clear();
   }
 
-  void resolveGotos(Forest forest, Object target) {
+  void resolveGotos(Forest forest, SwitchCase target) {
     assert(isGotoTarget);
-    for (Statement user in users) {
-      forest.resolveContinueInSwitch(target, user);
+    for (ContinueSwitchStatement user in users) {
+      user.target = target;
     }
     users.clear();
   }
@@ -4712,7 +4628,7 @@
 }
 
 class LabelTarget extends Declaration implements JumpTarget {
-  final List<Object> labels;
+  final List<Label> labels;
 
   @override
   final MemberBuilder parent;
@@ -4768,7 +4684,7 @@
     continueTarget.resolveContinues(forest, target);
   }
 
-  void resolveGotos(Forest forest, Object target) {
+  void resolveGotos(Forest forest, SwitchCase target) {
     unsupported("resolveGotos", charOffset, fileUri);
   }
 
@@ -4902,6 +4818,8 @@
     return node.isSuper ? "super" : "this";
   } else if (node is Generator) {
     return node.plainNameForRead;
+  } else if (node is QualifiedName) {
+    return flattenName(node, node.charOffset, null);
   } else {
     return unhandled("${node.runtimeType}", "getNodeName", -1, null);
   }
@@ -4927,3 +4845,14 @@
         asyncToken.charOffset, null);
   }
 }
+
+/// A data holder used to hold the information about a label that is pushed on
+/// the stack.
+class Label {
+  String name;
+  int charOffset;
+
+  Label(this.name, this.charOffset);
+
+  String toString() => "label($name)";
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index ec87044..d24d7af 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -64,17 +64,14 @@
 import 'kernel_ast_api.dart'
     show
         Arguments,
-        ArgumentsJudgment,
         DartType,
         DynamicType,
         Expression,
-        IllegalAssignmentJudgment,
         Initializer,
         InvalidConstructorInvocationJudgment,
         InvalidType,
         Member,
         Name,
-        Node,
         Procedure,
         StaticInvocationJudgment,
         SyntheticExpressionJudgment,
@@ -120,8 +117,7 @@
   ///
   /// The returned expression evaluates to the assigned value, unless
   /// [voidContext] is true, in which case it may evaluate to anything.
-  Expression buildAssignment(Expression value,
-      {bool voidContext, int offset: -1});
+  Expression buildAssignment(Expression value, {bool voidContext});
 
   /// Returns a [Expression] representing a null-aware assignment (`??=`) with
   /// the generator on the LHS and [value] on the RHS.
@@ -196,16 +192,16 @@
 
   Expression buildForEffect() => buildSimpleRead();
 
-  Node get fieldInitializerTarget => null;
-
-  Expression buildFieldInitializerError() {
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
     int offset = offsetForToken(token);
-    return helper.buildCompileTimeError(
-        messageInvalidInitializer, offset, lengthForToken(token));
+    return helper.buildInvalidInitializer(
+        helper.buildProblem(messageInvalidInitializer, offset,
+            lengthForToken(token)) /* TODO(ahe): Add .desugared here? */,
+        offset);
   }
 
   /* Expression | Generator | Initializer */ doInvocation(
-      int offset, ArgumentsJudgment arguments);
+      int offset, Arguments arguments);
 
   /* Expression | Generator */ buildPropertyAccess(
       IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
@@ -219,7 +215,7 @@
     } else {
       if (helper.constantContext != ConstantContext.none &&
           send.name != lengthName) {
-        helper.addCompileTimeError(
+        helper.addProblem(
             messageNotAConstantExpression, offsetForToken(token), token.length);
       }
       return PropertyAccessGenerator.make(helper, send.token, buildSimpleRead(),
@@ -234,7 +230,7 @@
     return const InvalidType();
   }
 
-  /* Expression | Generator */ Object prefixedLookup(Token name) {
+  /* Expression | Generator */ Object qualifiedLookup(Token name) {
     return new UnexpectedQualifiedUseGenerator(helper, name, this, false);
   }
 
@@ -376,30 +372,28 @@
 abstract class IndexedAccessGenerator implements Generator {
   factory IndexedAccessGenerator.internal(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter) {
-    return helper.forest.indexedAccessGenerator(helper, openSquareBracket,
-        closeSquareBracket, receiver, index, getter, setter);
+    return helper.forest
+        .indexedAccessGenerator(helper, token, receiver, index, getter, setter);
   }
 
   static Generator make(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter) {
     if (helper.forest.isThisExpression(receiver)) {
       return new ThisIndexedAccessGenerator(
-          helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+          helper, token, index, getter, setter);
     } else {
-      return new IndexedAccessGenerator.internal(helper, openSquareBracket,
-          closeSquareBracket, receiver, index, getter, setter);
+      return new IndexedAccessGenerator.internal(
+          helper, token, receiver, index, getter, setter);
     }
   }
 
@@ -416,15 +410,10 @@
 /// Special case of [IndexedAccessGenerator] to avoid creating an indirect
 /// access to 'this'.
 abstract class ThisIndexedAccessGenerator implements Generator {
-  factory ThisIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Procedure getter,
-      Procedure setter) {
-    return helper.forest.thisIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+  factory ThisIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, Expression index, Procedure getter, Procedure setter) {
+    return helper.forest
+        .thisIndexedAccessGenerator(helper, token, index, getter, setter);
   }
 
   @override
@@ -438,15 +427,10 @@
 }
 
 abstract class SuperIndexedAccessGenerator implements Generator {
-  factory SuperIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Member getter,
-      Member setter) {
-    return helper.forest.superIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+  factory SuperIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, Expression index, Member getter, Member setter) {
+    return helper.forest
+        .superIndexedAccessGenerator(helper, token, index, getter, setter);
   }
 
   String get plainNameForRead => "[]";
@@ -730,10 +714,10 @@
   String get debugName => "LargeIntAccessGenerator";
 
   Expression buildError() {
-    return helper.buildCompileTimeError(
-        templateIntegerLiteralIsOutOfRange.withArguments(token),
-        offsetForToken(token),
-        lengthForToken(token));
+    return helper
+        .buildProblem(templateIntegerLiteralIsOutOfRange.withArguments(token),
+            offsetForToken(token), lengthForToken(token))
+        .desugared /* TODO(ahe): Remove `.desugared`? */;
   }
 
   @override
@@ -763,8 +747,9 @@
   withReceiver(Object receiver, int operatorOffset, {bool isNullAware}) => this;
 
   @override
-  Expression buildFieldInitializerError() {
-    return buildError(forest.argumentsEmpty(token, token), isSetter: true);
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
+    return helper.buildInvalidInitializer(new SyntheticExpressionJudgment(
+        buildError(forest.argumentsEmpty(token), isSetter: true)));
   }
 
   @override
@@ -781,10 +766,9 @@
   }
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isSetter: true));
   }
 
@@ -796,7 +780,7 @@
       bool isPreIncDec: false,
       bool isPostIncDec: false}) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isGetter: true));
   }
 
@@ -806,7 +790,6 @@
     var error = buildError(
         forest.arguments(
             <Expression>[forest.literalInt(1, null)..fileOffset = offset],
-            token,
             token),
         isGetter: true);
     return new UnresolvedVariableUnaryJudgment(
@@ -820,7 +803,6 @@
     var error = buildError(
         forest.arguments(
             <Expression>[forest.literalInt(1, null)..fileOffset = offset],
-            token,
             token),
         isGetter: true);
     return new UnresolvedVariableUnaryJudgment(
@@ -833,22 +815,22 @@
       Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isSetter: true));
   }
 
   @override
   Expression buildSimpleRead() => new SyntheticExpressionJudgment(
-      buildError(forest.argumentsEmpty(token, token), isGetter: true));
+      buildError(forest.argumentsEmpty(token), isGetter: true));
 
   @override
   Expression makeInvalidRead() => new SyntheticExpressionJudgment(
-      buildError(forest.argumentsEmpty(token, token), isGetter: true));
+      buildError(forest.argumentsEmpty(token), isGetter: true));
 
   @override
   Expression makeInvalidWrite(Expression value) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isSetter: true));
   }
 
@@ -900,7 +882,7 @@
   }
 
   @override
-  /* Expression | Generator */ Object prefixedLookup(Token name) {
+  /* Expression | Generator */ Object qualifiedLookup(Token name) {
     helper.storeUnresolved(token);
     return new UnexpectedQualifiedUseGenerator(helper, name, this, true);
   }
@@ -941,16 +923,15 @@
   }
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
-    return buildInvalidAssignment(value, offset);
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
+    return makeInvalidWrite(value);
   }
 
   @override
   Expression buildNullAwareAssignment(
       Expression value, DartType type, int offset,
       {bool voidContext: false}) {
-    return buildInvalidAssignment(value, offset);
+    return makeInvalidWrite(value);
   }
 
   @override
@@ -960,34 +941,19 @@
       Procedure interfaceTarget,
       bool isPreIncDec: false,
       bool isPostIncDec: false}) {
-    return buildInvalidAssignment(value, offset);
+    return makeInvalidWrite(value);
   }
 
   @override
   Expression buildPrefixIncrement(Name binaryOperator,
       {int offset: -1, bool voidContext: false, Procedure interfaceTarget}) {
-    return buildInvalidAssignment(
-        forest.literalInt(1, null, isSynthetic: true), offset);
+    return makeInvalidWrite(null);
   }
 
   @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: -1, bool voidContext: false, Procedure interfaceTarget}) {
-    return buildInvalidAssignment(
-        forest.literalInt(1, null, isSynthetic: true), offset);
-  }
-
-  Expression buildInvalidAssignment(Expression value, int offset) {
-    var lhs = buildSimpleRead();
-    // The lhs expression needs to have a parent so that type inference can be
-    // applied to it, but it doesn't matter what the parent is because the
-    // lhs expression won't appear in the tree.  So just give it a quick and
-    // dirty parent.
-    new VariableDeclaration.forValue(lhs);
-
-    return new IllegalAssignmentJudgment(value,
-        assignmentOffset: offset, desugared: makeInvalidWrite(value))
-      ..write = lhs;
+    return makeInvalidWrite(null);
   }
 
   @override
@@ -997,9 +963,8 @@
 
   @override
   Expression makeInvalidWrite(Expression value) {
-    return helper.buildCompileTimeErrorExpression(
-        messageIllegalAssignmentToNonAssignable, offsetForToken(token),
-        length: token?.length);
+    return helper.buildProblem(messageIllegalAssignmentToNonAssignable,
+        offsetForToken(token), lengthForToken(token));
   }
 }
 
@@ -1028,26 +993,12 @@
   }
 
   Expression handleAssignment(bool voidContext) {
-    var assignment = makeAssignmentExpression(voidContext);
     if (helper.constantContext != ConstantContext.none) {
-      // The assignment needs to have a parent so that type inference can be
-      // applied to it, but it doesn't matter what the parent is because the
-      // assignment won't appear in the tree.  So just give it a quick and dirty
-      // parent.
-      new VariableDeclaration.forValue(assignment);
-
-      return helper.buildCompileTimeErrorExpression(
-          messageNotAConstantExpression, offsetForToken(token),
-          length: token.length, original: assignment);
-    } else {
-      return assignment;
+      return helper.buildProblem(
+          messageNotAConstantExpression, offsetForToken(token), token.length);
     }
-  }
-
-  Expression makeAssignmentExpression(bool voidContext) {
     if (identical("=", assignmentOperator)) {
-      return generator.buildAssignment(value,
-          voidContext: voidContext, offset: token.offset);
+      return generator.buildAssignment(value, voidContext: voidContext);
     } else if (identical("+=", assignmentOperator)) {
       return generator.buildCompoundAssignment(plusName, value,
           offset: offsetForToken(token), voidContext: voidContext);
@@ -1091,15 +1042,11 @@
     }
   }
 
-  Initializer buildFieldInitializer() {
+  @override
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
     if (!identical("=", assignmentOperator) ||
         !generator.isThisPropertyAccess) {
-      return helper.buildInvalidFieldInitializer(
-          offsetForToken(token),
-          false,
-          generator.fieldInitializerTarget,
-          value,
-          generator.buildFieldInitializerError());
+      return generator.buildFieldInitializer(initializedFields);
     }
     return helper.buildFieldInitializer(
         false, generator.plainNameForRead, offsetForToken(token), value);
@@ -1163,7 +1110,7 @@
   Expression buildSimpleRead() => makeInvalidRead();
 
   @override
-  /* Expression | Generator */ Object prefixedLookup(Token name) {
+  /* Expression | Generator */ Object qualifiedLookup(Token name) {
     if (helper.constantContext != ConstantContext.none && prefix.deferred) {
       helper.addProblem(
           templateCantUseDeferredPrefixAsConstant.withArguments(token),
@@ -1187,7 +1134,7 @@
   @override
   /* Expression | Generator | Initializer */ doInvocation(
       int offset, Arguments arguments) {
-    var error = helper.wrapInLocatedCompileTimeError(
+    var error = helper.wrapInLocatedProblem(
         helper.evaluateArgumentsBefore(arguments, forest.literalNull(token)),
         messageCantUsePrefixAsExpression.withLocation(
             helper.uri, offsetForToken(token), lengthForToken(token)));
@@ -1202,7 +1149,7 @@
     if (send is IncompleteSendGenerator) {
       assert(send.name.name == send.token.lexeme,
           "'${send.name.name}' != ${send.token.lexeme}");
-      Object result = prefixedLookup(send.token);
+      Object result = qualifiedLookup(send.token);
       if (send is SendAccessGenerator) {
         result = helper.finishSend(
             result,
@@ -1210,7 +1157,7 @@
             offsetForToken(token));
       }
       if (isNullAware) {
-        result = helper.wrapInLocatedCompileTimeError(
+        result = helper.wrapInLocatedProblem(
             helper.toValue(result),
             messageCantUsePrefixWithNullAware.withLocation(
                 helper.uri, offsetForToken(token), lengthForToken(token)));
@@ -1223,10 +1170,8 @@
 
   @override
   Expression makeInvalidRead() {
-    return new SyntheticExpressionJudgment(helper.buildCompileTimeError(
-        messageCantUsePrefixAsExpression,
-        offsetForToken(token),
-        lengthForToken(token)));
+    return helper.buildProblem(messageCantUsePrefixAsExpression,
+        offsetForToken(token), lengthForToken(token));
   }
 
   @override
@@ -1275,11 +1220,11 @@
   @override
   DartType buildTypeWithBuiltArguments(List<DartType> arguments,
       {bool nonInstanceAccessIsError: false, TypeInferrer typeInferrer}) {
-    Template<Message Function(Token, Token)> template = isUnresolved
+    Template<Message Function(String, String)> template = isUnresolved
         ? templateUnresolvedPrefixInTypeAnnotation
         : templateNotAPrefixInTypeAnnotation;
     helper.addProblem(
-        template.withArguments(prefixGenerator.token, token),
+        template.withArguments(prefixGenerator.token.lexeme, token.lexeme),
         offsetForToken(prefixGenerator.token),
         lengthOfSpan(prefixGenerator.token, token));
     prefixGenerator.storeUnexpectedTypePrefix(typeInferrer);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index a1ca4c0..339c43d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -12,7 +12,7 @@
 
 import '../messages.dart' show Message;
 
-import '../scope.dart' show ProblemBuilder, Scope;
+import '../scope.dart' show Scope;
 
 import '../type_inference/inference_helper.dart' show InferenceHelper;
 
@@ -27,12 +27,10 @@
 import 'kernel_ast_api.dart'
     show
         Arguments,
-        ArgumentsJudgment,
         Constructor,
         DartType,
         Expression,
         FunctionNode,
-        FunctionType,
         Initializer,
         Member,
         Name,
@@ -71,21 +69,7 @@
   scopeLookup(Scope scope, String name, Token token,
       {bool isQualified: false, PrefixBuilder prefix});
 
-  finishSend(Object receiver, ArgumentsJudgment arguments, int offset);
-
-  Expression buildCompileTimeError(Message message, int charOffset, int length,
-      {List<LocatedMessage> context});
-
-  Expression buildCompileTimeErrorExpression(Message message, int offset,
-      {int length, Expression original});
-
-  Expression wrapInCompileTimeError(Expression expression, Message message);
-
-  Expression wrapInProblem(Expression expression, Message message, int length,
-      {List<LocatedMessage> context});
-
-  Initializer buildInvalidFieldInitializer(int offset, bool isSynthetic,
-      Node target, Expression value, Expression error);
+  finishSend(Object receiver, Arguments arguments, int offset);
 
   Initializer buildInvalidInitializer(Expression expression, [int offset]);
 
@@ -101,13 +85,9 @@
       Constructor constructor, Arguments arguments,
       [int charOffset = -1]);
 
-  Expression buildStaticInvocation(
-      Procedure target, ArgumentsJudgment arguments,
+  Expression buildStaticInvocation(Procedure target, Arguments arguments,
       {Constness constness, int charOffset, Expression error});
 
-  Expression buildProblemExpression(
-      ProblemBuilder builder, int offset, int length);
-
   Expression throwNoSuchMethodError(
       Expression receiver, String name, Arguments arguments, int offset,
       {Member candidate,
@@ -117,14 +97,8 @@
       bool isStatic,
       LocatedMessage argMessage});
 
-  LocatedMessage checkArgumentsForFunction(
-      FunctionNode function,
-      ArgumentsJudgment arguments,
-      int offset,
-      List<TypeParameter> typeParameters);
-
-  LocatedMessage checkArgumentsForType(
-      FunctionType function, ArgumentsJudgment arguments, int offset);
+  LocatedMessage checkArgumentsForFunction(FunctionNode function,
+      Arguments arguments, int offset, List<TypeParameter> typeParameters);
 
   StaticGet makeStaticGet(Member readTarget, Token token);
 
@@ -155,11 +129,6 @@
   DartType validatedTypeVariableUse(
       TypeParameterType type, int offset, bool nonInstanceAccessIsError);
 
-  void addCompileTimeError(Message message, int charOffset, int length,
-      {List<LocatedMessage> context});
-
-  void addProblem(Message message, int charOffset, int length);
-
   void addProblemErrorIfConst(Message message, int charOffset, int length);
 
   Message warnUnresolvedGet(Name name, int charOffset, {bool isSuper});
@@ -170,8 +139,7 @@
 
   void warnTypeArgumentsMismatch(String name, int expected, int charOffset);
 
-  Expression wrapInLocatedCompileTimeError(
-      Expression expression, LocatedMessage message,
+  Expression wrapInLocatedProblem(Expression expression, LocatedMessage message,
       {List<LocatedMessage> context});
 
   Expression evaluateArgumentsBefore(
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 42e8892..8461648 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -11,16 +11,12 @@
         Arguments,
         AssertInitializer,
         Block,
-        BreakStatement,
         Catch,
-        ContinueSwitchStatement,
         DartType,
-        DynamicType,
         EmptyStatement,
         Expression,
         ExpressionStatement,
         InvalidExpression,
-        LabeledStatement,
         Let,
         LibraryDependency,
         MapEntry,
@@ -29,13 +25,12 @@
         NamedExpression,
         Procedure,
         Statement,
-        SwitchCase,
         ThisExpression,
         TreeNode,
         VariableDeclaration,
         setParents;
 
-import '../parser.dart' show endOffsetForToken, offsetForToken, optional;
+import '../parser.dart' show offsetForToken, optional;
 
 import '../problems.dart' show unsupported;
 
@@ -132,17 +127,15 @@
   Fangorn(this.typeInferenceTokensSaver);
 
   @override
-  ArgumentsJudgment arguments(
-      List<Expression> positional, Token beginToken, Token endToken,
+  ArgumentsJudgment arguments(List<Expression> positional, Token token,
       {List<DartType> types, List<NamedExpression> named}) {
-    return new ArgumentsJudgment(
-        offsetForToken(beginToken), endOffsetForToken(endToken), positional,
-        types: types, named: named);
+    return new ArgumentsJudgment(positional, types: types, named: named)
+      ..fileOffset = offsetForToken(token);
   }
 
   @override
-  ArgumentsJudgment argumentsEmpty(Token beginToken, Token endToken) {
-    return arguments(<Expression>[], beginToken, endToken);
+  ArgumentsJudgment argumentsEmpty(Token token) {
+    return arguments(<Expression>[], token);
   }
 
   @override
@@ -183,11 +176,9 @@
   }
 
   @override
-  IntJudgment literalInt(int value, Token token,
-      {Expression desugaredError, bool isSynthetic: false}) {
+  IntJudgment literalInt(int value, Token token) {
     return new IntJudgment(
-        typeInferenceTokensSaver?.intLiteralTokens(token), value,
-        desugaredError: desugaredError, isSynthetic: isSynthetic)
+        typeInferenceTokensSaver?.intLiteralTokens(token), value)
       ..fileOffset = offsetForToken(token);
   }
 
@@ -267,20 +258,9 @@
   }
 
   @override
-  List<MapEntry> mapEntryList(int length) {
-    return new List<MapEntryJudgment>.filled(length, null, growable: true);
-  }
-
-  @override
   int readOffset(TreeNode node) => node.fileOffset;
 
   @override
-  int getTypeCount(List typeArguments) => typeArguments.length;
-
-  @override
-  DartType getTypeAt(List typeArguments, int index) => typeArguments[index];
-
-  @override
   Expression loadLibrary(LibraryDependency dependency, Arguments arguments) {
     return new LoadLibraryJudgment(dependency, arguments);
   }
@@ -291,11 +271,9 @@
   }
 
   @override
-  Expression asExpression(Expression expression, covariant type, Token token,
-      {Expression desugaredError}) {
+  Expression asExpression(Expression expression, DartType type, Token token) {
     return new AsJudgment(
-        expression, typeInferenceTokensSaver?.asExpressionTokens(token), type,
-        desugaredError: desugaredError)
+        expression, typeInferenceTokensSaver?.asExpressionTokens(token), type)
       ..fileOffset = offsetForToken(token);
   }
 
@@ -401,8 +379,6 @@
       VariableDeclaration stackTraceParameter,
       DartType stackTraceType,
       Statement body) {
-    exceptionType ??= const DynamicType();
-    // TODO(brianwilkerson) Get the left and right parentheses and the comma.
     return new CatchJudgment(
         typeInferenceTokensSaver?.catchStatementTokens(
             onKeyword, catchKeyword, null, null, null),
@@ -496,7 +472,7 @@
 
   @override
   Expression isExpression(
-      Expression operand, isOperator, Token notOperator, covariant type) {
+      Expression operand, isOperator, Token notOperator, DartType type) {
     int offset = offsetForToken(isOperator);
     if (notOperator != null) {
       return new IsNotJudgment(
@@ -513,11 +489,6 @@
   }
 
   @override
-  Label label(Token identifier, Token colon) {
-    return new Label(identifier.lexeme, identifier.charOffset);
-  }
-
-  @override
   Statement labeledStatement(LabelTarget target, Statement statement) =>
       statement;
 
@@ -659,17 +630,6 @@
   }
 
   @override
-  String getLabelName(Label label) => label.name;
-
-  @override
-  int getLabelOffset(Label label) => label.charOffset;
-
-  @override
-  String getVariableDeclarationName(VariableDeclaration declaration) {
-    return declaration.name;
-  }
-
-  @override
   bool isBlock(Object node) => node is Block;
 
   @override
@@ -701,36 +661,12 @@
       statement is ExpressionStatement;
 
   @override
-  bool isLabel(covariant node) => node is Label;
-
-  @override
   bool isThisExpression(Object node) => node is ThisExpression;
 
   @override
   bool isVariablesDeclaration(Object node) => node is _VariablesDeclaration;
 
   @override
-  void resolveBreak(LabeledStatement target, BreakStatement user) {
-    user.target = target;
-  }
-
-  @override
-  void resolveContinue(LabeledStatement target, BreakStatement user) {
-    user.target = target;
-  }
-
-  @override
-  void resolveContinueInSwitch(
-      SwitchCase target, ContinueSwitchStatement user) {
-    user.target = target;
-  }
-
-  @override
-  void setParameterType(VariableDeclaration parameter, DartType type) {
-    parameter.type = type ?? const DynamicType();
-  }
-
-  @override
   KernelVariableUseGenerator variableUseGenerator(
       ExpressionGeneratorHelper helper,
       Token token,
@@ -790,38 +726,35 @@
   @override
   KernelIndexedAccessGenerator indexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter) {
-    return new KernelIndexedAccessGenerator.internal(helper, openSquareBracket,
-        closeSquareBracket, receiver, index, getter, setter);
+    return new KernelIndexedAccessGenerator.internal(
+        helper, token, receiver, index, getter, setter);
   }
 
   @override
   KernelThisIndexedAccessGenerator thisIndexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression index,
       Procedure getter,
       Procedure setter) {
     return new KernelThisIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+        helper, token, index, getter, setter);
   }
 
   @override
   KernelSuperIndexedAccessGenerator superIndexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression index,
       Member getter,
       Member setter) {
     return new KernelSuperIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+        helper, token, index, getter, setter);
   }
 
   @override
@@ -956,14 +889,3 @@
     unsupported("transformChildren", fileOffset, uri);
   }
 }
-
-/// A data holder used to hold the information about a label that is pushed on
-/// the stack.
-class Label {
-  String name;
-  int charOffset;
-
-  Label(this.name, this.charOffset);
-
-  String toString() => "label($name)";
-}
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 2e029e5..86f4e31 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -4,17 +4,25 @@
 
 library fasta.forest;
 
+import 'dart:core' hide MapEntry;
+
 import 'package:kernel/ast.dart'
     show
-        Arguments, // TODO(ahe): Remove this import.
+        Arguments,
+        Catch,
         DartType,
         Expression,
+        LibraryDependency,
+        MapEntry,
         Member,
         Name,
+        NamedExpression,
         Procedure,
-        Statement;
+        Statement,
+        TreeNode,
+        VariableDeclaration;
 
-import 'body_builder.dart' show Identifier, LabelTarget;
+import 'body_builder.dart' show LabelTarget;
 
 import 'expression_generator.dart' show Generator, PrefixUseGenerator;
 
@@ -22,6 +30,7 @@
 
 import 'kernel_builder.dart'
     show
+        Identifier,
         LoadLibraryBuilder,
         PrefixBuilder,
         TypeDeclarationBuilder,
@@ -29,7 +38,7 @@
 
 import '../scanner.dart' show Token;
 
-export 'body_builder.dart' show Identifier, Operator;
+export 'body_builder.dart' show Operator;
 
 export 'constness.dart' show Constness;
 
@@ -39,6 +48,7 @@
 
 export 'kernel_builder.dart'
     show
+        Identifier,
         LoadLibraryBuilder,
         PrefixBuilder,
         TypeDeclarationBuilder,
@@ -48,21 +58,18 @@
 abstract class Forest {
   const Forest();
 
-  /// [beginToken] is the opening `(`.
-  /// [endToken] is the closing `)`.
-  Arguments arguments(
-      List<Expression> positional, Token beginToken, Token endToken,
-      {covariant List types, covariant List named});
+  Arguments arguments(List<Expression> positional, Token location,
+      {List<DartType> types, List<NamedExpression> named});
 
-  Arguments argumentsEmpty(Token beginToken, Token endToken);
+  Arguments argumentsEmpty(Token location);
 
-  List argumentsNamed(Arguments arguments);
+  List<Object> argumentsNamed(Arguments arguments);
 
   List<Expression> argumentsPositional(Arguments arguments);
 
   List argumentsTypeArguments(Arguments arguments);
 
-  void argumentsSetTypeArguments(Arguments arguments, covariant List types);
+  void argumentsSetTypeArguments(Arguments arguments, List<DartType> types);
 
   Expression asLiteralString(Expression value);
 
@@ -76,8 +83,7 @@
 
   /// Return a representation of an integer literal at the given [location]. The
   /// literal has the given [value].
-  Expression literalInt(int value, Token location,
-      {Expression desugaredError, bool isSynthetic: false});
+  Expression literalInt(int value, Token location);
 
   /// Return a representation of a list literal. The [constKeyword] is the
   /// location of the `const` keyword, or `null` if there is no keyword. The
@@ -115,11 +121,11 @@
   Expression literalMap(
       Token constKeyword,
       bool isConst,
-      covariant keyType,
-      covariant valueType,
+      DartType keyType,
+      DartType valueType,
       Object typeArguments,
       Token leftBracket,
-      covariant List entries,
+      List<MapEntry> entries,
       Token rightBracket);
 
   /// Return a representation of a null literal at the given [location].
@@ -140,7 +146,7 @@
   /// [Operator]. The [value] is the string value of the symbol.
   Expression literalSymbolSingluar(String value, Token hash, Object component);
 
-  Expression literalType(covariant type, Token location);
+  Expression literalType(DartType type, Token location);
 
   /// Return a representation of a key/value pair in a literal map. The [key] is
   /// the representation of the expression used to compute the key. The [colon]
@@ -148,26 +154,13 @@
   /// is the representation of the expression used to compute the value.
   Object mapEntry(Expression key, Token colon, Expression value);
 
-  /// Return a list that can hold [length] representations of map entries, as
-  /// returned from [mapEntry].
-  List mapEntryList(int length);
+  int readOffset(TreeNode node);
 
-  int readOffset(covariant node);
+  Expression loadLibrary(LibraryDependency dependency, Arguments arguments);
 
-  /// Given a representation of a list of [typeArguments], return the number of
-  /// type arguments in the list.
-  int getTypeCount(covariant typeArguments);
+  Expression checkLibraryIsLoaded(LibraryDependency dependency);
 
-  /// Given a representation of a list of [typeArguments], return the type
-  /// associated with the argument at the given [index].
-  DartType getTypeAt(covariant typeArguments, int index);
-
-  Expression loadLibrary(covariant dependency, Arguments arguments);
-
-  Expression checkLibraryIsLoaded(covariant dependency);
-
-  Expression asExpression(Expression expression, covariant type, Token location,
-      {Expression desugaredError});
+  Expression asExpression(Expression expression, DartType type, Token location);
 
   /// Return a representation of an assert that appears in a constructor's
   /// initializer list.
@@ -192,11 +185,11 @@
   /// Return a representation of a catch clause.
   Object catchClause(
       Token onKeyword,
-      covariant exceptionType,
+      DartType exceptionType,
       Token catchKeyword,
-      covariant exceptionParameter,
-      covariant stackTraceParameter,
-      covariant stackTraceType,
+      VariableDeclaration exceptionParameter,
+      VariableDeclaration stackTraceParameter,
+      DartType stackTraceType,
       Statement body);
 
   /// Return a representation of a conditional expression. The [condition] is
@@ -213,7 +206,7 @@
 
   /// Return a representation of a do statement.
   Statement doStatement(Token doKeyword, Statement body, Token whileKeyword,
-      covariant Expression condition, Token semicolon);
+      Expression condition, Token semicolon);
 
   /// Return a representation of an expression statement composed from the
   /// [expression] and [semicolon].
@@ -227,8 +220,8 @@
   Statement forStatement(
       Token forKeyword,
       Token leftParenthesis,
-      covariant variableList,
-      covariant initializers,
+      List<VariableDeclaration> variableList,
+      List<Expression> initializers,
       Token leftSeparator,
       Expression condition,
       Statement conditionStatement,
@@ -237,7 +230,7 @@
       Statement body);
 
   /// Return a representation of an `if` statement.
-  Statement ifStatement(Token ifKeyword, covariant Expression condition,
+  Statement ifStatement(Token ifKeyword, Expression condition,
       Statement thenStatement, Token elseKeyword, Statement elseStatement);
 
   /// Return a representation of an `is` expression. The [operand] is the
@@ -245,11 +238,7 @@
   /// The [notOperator] is either the `!` or `null` if the test is not negated.
   /// The [type] is a representation of the type that is the right operand.
   Expression isExpression(
-      Expression operand, Token isOperator, Token notOperator, covariant type);
-
-  /// Return a representation of the label consisting of the given [identifer]
-  /// followed by the given [colon].
-  Object label(Token identifier, Token colon);
+      Expression operand, Token isOperator, Token notOperator, DartType type);
 
   /// Return a representation of a [statement] that has one or more labels (from
   /// the [target]) associated with it.
@@ -299,11 +288,12 @@
   /// might be provided, in which case it could be returned instead of the
   /// representation of the try statement.
   Statement tryStatement(Token tryKeyword, Statement body,
-      covariant catchClauses, Token finallyKeyword, Statement finallyBlock);
+      List<Catch> catchClauses, Token finallyKeyword, Statement finallyBlock);
 
-  Statement variablesDeclaration(covariant List declarations, Uri uri);
+  Statement variablesDeclaration(
+      List<VariableDeclaration> declarations, Uri uri);
 
-  Object variablesDeclarationExtractDeclarations(
+  List<VariableDeclaration> variablesDeclarationExtractDeclarations(
       covariant Statement variablesDeclaration);
 
   Statement wrapVariables(Statement statement);
@@ -311,7 +301,7 @@
   /// Return a representation of a while statement introduced by the
   /// [whileKeyword] and consisting of the given [condition] and [body].
   Statement whileStatement(
-      Token whileKeyword, covariant Expression condition, Statement body);
+      Token whileKeyword, Expression condition, Statement body);
 
   /// Return a representation of a yield statement consisting of the
   /// [yieldKeyword], [star], [expression], and [semicolon]. The [star] is null
@@ -322,15 +312,6 @@
   /// Return the expression from the given expression [statement].
   Expression getExpressionFromExpressionStatement(Statement statement);
 
-  /// Return the name of the given [label].
-  String getLabelName(covariant label);
-
-  /// Return the offset of the given [label].
-  int getLabelOffset(covariant label);
-
-  /// Return the name of the given variable [declaration].
-  String getVariableDeclarationName(covariant declaration);
-
   bool isBlock(Object node);
 
   /// Return `true` if the given [statement] is the representation of an empty
@@ -343,31 +324,12 @@
   /// expression statement.
   bool isExpressionStatement(Statement statement);
 
-  /// Return `true` if the given [node] is a label.
-  bool isLabel(covariant node);
-
   bool isThisExpression(Object node);
 
   bool isVariablesDeclaration(Object node);
 
-  /// Record that the [user] (a break statement) is associated with the [target]
-  /// statement.
-  void resolveBreak(covariant Statement target, covariant Statement user);
-
-  /// Record that the [user] (a continue statement) is associated with the
-  /// [target] statement.
-  void resolveContinue(covariant Statement target, covariant Statement user);
-
-  /// Record that the [user] (a continue statement inside a switch case) is
-  /// associated with the [target] statement.
-  void resolveContinueInSwitch(
-      covariant Object target, covariant Statement user);
-
-  /// Set the type of the [parameter] to the given [type].
-  void setParameterType(covariant parameter, covariant type);
-
   Generator variableUseGenerator(ExpressionGeneratorHelper helper,
-      Token location, covariant variable, DartType promotedType);
+      Token location, VariableDeclaration variable, DartType promotedType);
 
   Generator propertyAccessGenerator(
       ExpressionGeneratorHelper helper,
@@ -394,28 +356,17 @@
 
   Generator indexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token location,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter);
 
-  Generator thisIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Procedure getter,
-      Procedure setter);
+  Generator thisIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token location, Expression index, Procedure getter, Procedure setter);
 
-  Generator superIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Member getter,
-      Member setter);
+  Generator superIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token location, Expression index, Member getter, Member setter);
 
   Generator staticAccessGenerator(ExpressionGeneratorHelper helper,
       Token location, Member getter, Member setter);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
index 1e07bc1..5629444 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_ast_api.dart
@@ -39,6 +39,7 @@
         LibraryPart,
         ListLiteral,
         Location,
+        MapEntry,
         Member,
         MethodInvocation,
         Name,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index d46c89c..e277db1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -116,9 +116,6 @@
 
   Class get cls;
 
-  @override
-  bool get hasTarget => true;
-
   Class get target => cls;
 
   Class get actualCls;
@@ -155,7 +152,7 @@
       // That should be caught and reported as a compile-time error earlier.
       return unhandled(
           templateTypeArgumentMismatch
-              .withArguments(name, typeVariables.length)
+              .withArguments(typeVariables.length)
               .message,
           "buildTypeArguments",
           -1,
@@ -220,13 +217,14 @@
     Set<ClassBuilder> implemented = new Set<ClassBuilder>();
     for (KernelTypeBuilder type in interfaces) {
       if (type is KernelNamedTypeBuilder) {
+        int charOffset = -1; // TODO(ahe): Get offset from type.
         Declaration decl = type.declaration;
         if (decl is ClassBuilder) {
           ClassBuilder interface = decl;
           if (superClass == interface) {
-            addCompileTimeError(
+            addProblem(
                 templateImplementsSuperClass.withArguments(interface.name),
-                type.charOffset,
+                charOffset,
                 noLength);
           } else if (implemented.contains(interface)) {
             // Aggregate repetitions.
@@ -235,9 +233,9 @@
             problems[interface] += 1;
 
             problemsOffsets ??= new Map<ClassBuilder, int>();
-            problemsOffsets[interface] ??= type.charOffset;
+            problemsOffsets[interface] ??= charOffset;
           } else if (interface.target == coreTypes.futureOrClass) {
-            addCompileTimeError(messageImplementsFutureOr, type.charOffset,
+            addProblem(messageImplementsFutureOr, charOffset,
                 interface.target.name.length);
           } else {
             implemented.add(interface);
@@ -247,7 +245,7 @@
     }
     if (problems != null) {
       problems.forEach((ClassBuilder interface, int repetitions) {
-        addCompileTimeError(
+        addProblem(
             templateImplementsRepeated.withArguments(
                 interface.name, repetitions),
             problemsOffsets[interface],
@@ -306,7 +304,7 @@
               var message = templateRedirectionTargetNotFound
                   .withArguments(redirectionTarget.fullNameForErrors);
               if (declaration.isConst) {
-                addCompileTimeError(message, declaration.charOffset, noLength);
+                addProblem(message, declaration.charOffset, noLength);
               } else {
                 addProblem(message, declaration.charOffset, noLength);
               }
@@ -430,19 +428,14 @@
   }
 
   void checkAbstractMembers(CoreTypes coreTypes, ClassHierarchy hierarchy) {
-    if (isAbstract ||
-        hierarchy.getDispatchTarget(cls, noSuchMethodName).enclosingClass !=
-            coreTypes.objectClass) {
+    if (isAbstract) {
       // Unimplemented members allowed
-      // TODO(dmitryas): Call hasUserDefinedNoSuchMethod instead when ready.
       return;
     }
 
     List<LocatedMessage> context = null;
 
     bool mustHaveImplementation(Member member) {
-      // Forwarding stub
-      if (member is Procedure && member.isSyntheticForwarder) return false;
       // Public member
       if (!member.name.isPrivate) return true;
       // Private member in different library
@@ -453,6 +446,63 @@
       return true;
     }
 
+    bool isValidImplementation(Member interfaceMember, Member dispatchTarget,
+        {bool setters}) {
+      // If they're the exact same it's valid.
+      if (interfaceMember == dispatchTarget) return true;
+
+      if (interfaceMember is Procedure && dispatchTarget is Procedure) {
+        // E.g. getter vs method.
+        if (interfaceMember.kind != dispatchTarget.kind) return false;
+
+        if (dispatchTarget.function.positionalParameters.length <
+                interfaceMember.function.requiredParameterCount ||
+            dispatchTarget.function.positionalParameters.length <
+                interfaceMember.function.positionalParameters.length)
+          return false;
+
+        if (interfaceMember.function.requiredParameterCount <
+            dispatchTarget.function.requiredParameterCount) return false;
+
+        if (dispatchTarget.function.namedParameters.length <
+            interfaceMember.function.namedParameters.length) return false;
+
+        // Two Procedures of the same kind with the same number of parameters.
+        return true;
+      }
+
+      if ((interfaceMember is Field || interfaceMember is Procedure) &&
+          (dispatchTarget is Field || dispatchTarget is Procedure)) {
+        if (setters) {
+          bool interfaceMemberHasSetter =
+              (interfaceMember is Field && interfaceMember.hasSetter) ||
+                  interfaceMember is Procedure && interfaceMember.isSetter;
+          bool dispatchTargetHasSetter =
+              (dispatchTarget is Field && dispatchTarget.hasSetter) ||
+                  dispatchTarget is Procedure && dispatchTarget.isSetter;
+          // Combination of (settable) field and/or (procedure) setter is valid.
+          return interfaceMemberHasSetter && dispatchTargetHasSetter;
+        } else {
+          bool interfaceMemberHasGetter = interfaceMember is Field ||
+              interfaceMember is Procedure && interfaceMember.isGetter;
+          bool dispatchTargetHasGetter = dispatchTarget is Field ||
+              dispatchTarget is Procedure && dispatchTarget.isGetter;
+          // Combination of field and/or (procedure) getter is valid.
+          return interfaceMemberHasGetter && dispatchTargetHasGetter;
+        }
+      }
+
+      return unhandled(
+          "${interfaceMember.runtimeType} and ${dispatchTarget.runtimeType}",
+          "isValidImplementation",
+          interfaceMember.fileOffset,
+          interfaceMember.fileUri);
+    }
+
+    bool hasNoSuchMethod =
+        hierarchy.getDispatchTarget(cls, noSuchMethodName).enclosingClass !=
+            coreTypes.objectClass;
+
     void findMissingImplementations({bool setters}) {
       List<Member> dispatchTargets =
           hierarchy.getDispatchTargets(cls, setters: setters);
@@ -466,12 +516,24 @@
                   0) {
             targetIndex++;
           }
-          if (targetIndex >= dispatchTargets.length ||
+          bool foundTarget = targetIndex < dispatchTargets.length &&
               ClassHierarchy.compareMembers(
-                      dispatchTargets[targetIndex], interfaceMember) >
-                  0) {
+                      dispatchTargets[targetIndex], interfaceMember) <=
+                  0;
+          bool hasProblem = true;
+          if (foundTarget &&
+              isValidImplementation(
+                  interfaceMember, dispatchTargets[targetIndex],
+                  setters: setters)) hasProblem = false;
+          if (hasNoSuchMethod && !foundTarget) hasProblem = false;
+          if (hasProblem) {
             Name name = interfaceMember.name;
             String displayName = name.name + (setters ? "=" : "");
+            if (interfaceMember is Procedure &&
+                interfaceMember.isSyntheticForwarder) {
+              Procedure forwarder = interfaceMember;
+              interfaceMember = forwarder.forwardingStubInterfaceTarget;
+            }
             context ??= <LocatedMessage>[];
             context.add(templateMissingImplementationCause
                 .withArguments(displayName)
@@ -815,13 +877,12 @@
             interfaceType);
         fileOffset = declaredParameter.fileOffset;
       }
-      library.addCompileTimeError(message, fileOffset, noLength, fileUri,
-          context: [
-            templateOverriddenMethodCause
-                .withArguments(interfaceMember.name.name)
-                .withLocation(_getMemberUri(interfaceMember),
-                    interfaceMember.fileOffset, noLength)
-          ]);
+      library.addProblem(message, fileOffset, noLength, fileUri, context: [
+        templateOverriddenMethodCause
+            .withArguments(interfaceMember.name.name)
+            .withLocation(_getMemberUri(interfaceMember),
+                interfaceMember.fileOffset, noLength)
+      ]);
       return true;
     }
     return false;
@@ -1067,7 +1128,7 @@
       int originLength = typeVariables?.length ?? 0;
       int patchLength = patch.typeVariables?.length ?? 0;
       if (originLength != patchLength) {
-        patch.addCompileTimeError(messagePatchClassTypeVariablesMismatch,
+        patch.addProblem(messagePatchClassTypeVariablesMismatch,
             patch.charOffset, noLength, context: [
           messagePatchClassOrigin.withLocation(fileUri, charOffset, noLength)
         ]);
@@ -1078,8 +1139,8 @@
         }
       }
     } else {
-      library.addCompileTimeError(messagePatchDeclarationMismatch,
-          patch.charOffset, noLength, patch.fileUri, context: [
+      library.addProblem(messagePatchDeclarationMismatch, patch.charOffset,
+          noLength, patch.fileUri, context: [
         messagePatchDeclarationOrigin.withLocation(
             fileUri, charOffset, noLength)
       ]);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index e098d26..9cdc301 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -99,19 +99,16 @@
     constantNamesAndOffsetsAndDocs ??= const <Object>[];
     // TODO(ahe): These types shouldn't be looked up in scope, they come
     // directly from dart:core.
-    KernelTypeBuilder intType =
-        new KernelNamedTypeBuilder(null, -1, "int", null);
-    KernelTypeBuilder stringType =
-        new KernelNamedTypeBuilder(null, -1, "String", null);
+    KernelTypeBuilder intType = new KernelNamedTypeBuilder("int", null);
+    KernelTypeBuilder stringType = new KernelNamedTypeBuilder("String", null);
     KernelNamedTypeBuilder objectType =
-        new KernelNamedTypeBuilder(null, -1, "Object", null);
+        new KernelNamedTypeBuilder("Object", null);
     ShadowClass cls = new ShadowClass(name: name);
     Map<String, MemberBuilder> members = <String, MemberBuilder>{};
     Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
-    KernelNamedTypeBuilder selfType =
-        new KernelNamedTypeBuilder(null, -1, name, null);
-    KernelTypeBuilder listType = new KernelNamedTypeBuilder(
-        null, -1, "List", <KernelTypeBuilder>[selfType]);
+    KernelNamedTypeBuilder selfType = new KernelNamedTypeBuilder(name, null);
+    KernelTypeBuilder listType =
+        new KernelNamedTypeBuilder("List", <KernelTypeBuilder>[selfType]);
 
     /// metadata class E {
     ///   final int index;
@@ -136,9 +133,9 @@
         null,
         <FormalParameterBuilder>[
           new KernelFormalParameterBuilder(
-              null, 0, intType, "index", true, parent, charOffset, 0, 0),
+              null, 0, intType, "index", true, parent, charOffset),
           new KernelFormalParameterBuilder(
-              null, 0, stringType, "_name", true, parent, charOffset, 0, 0)
+              null, 0, stringType, "_name", true, parent, charOffset)
         ],
         parent,
         charOffset,
@@ -164,24 +161,24 @@
         charEndOffset);
     members["toString"] = toStringBuilder;
     String className = name;
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 5) {
-      List<MetadataBuilder> metadata = constantNamesAndOffsetsAndDocs[i + 1];
-      String name = constantNamesAndOffsetsAndDocs[i + 2];
-      int charOffset = constantNamesAndOffsetsAndDocs[i + 3];
-      String documentationComment = constantNamesAndOffsetsAndDocs[i + 4];
+    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
+      List<MetadataBuilder> metadata = constantNamesAndOffsetsAndDocs[i];
+      String name = constantNamesAndOffsetsAndDocs[i + 1];
+      int charOffset = constantNamesAndOffsetsAndDocs[i + 2];
+      String documentationComment = constantNamesAndOffsetsAndDocs[i + 3];
       if (members.containsKey(name)) {
-        parent.addCompileTimeError(templateDuplicatedName.withArguments(name),
+        parent.addProblem(templateDuplicatedName.withArguments(name),
             charOffset, noLength, parent.fileUri);
-        constantNamesAndOffsetsAndDocs[i + 2] = null;
+        constantNamesAndOffsetsAndDocs[i + 1] = null;
         continue;
       }
       if (name == className) {
-        parent.addCompileTimeError(
+        parent.addProblem(
             templateEnumConstantSameNameAsEnclosing.withArguments(name),
             charOffset,
             noLength,
             parent.fileUri);
-        constantNamesAndOffsetsAndDocs[i + 2] = null;
+        constantNamesAndOffsetsAndDocs[i + 1] = null;
         continue;
       }
       KernelFieldBuilder fieldBuilder = new KernelFieldBuilder(
@@ -253,8 +250,8 @@
     toStringBuilder.body = new ReturnStatement(
         new DirectPropertyGet(new ThisExpression(), nameField));
     List<Expression> values = <Expression>[];
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 5) {
-      String name = constantNamesAndOffsetsAndDocs[i + 2];
+    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
+      String name = constantNamesAndOffsetsAndDocs[i + 1];
       if (name != null) {
         KernelFieldBuilder builder = this[name];
         values.add(new StaticGet(builder.build(libraryBuilder)));
@@ -284,15 +281,15 @@
       // unnamed constructor requires no arguments. But that information isn't
       // always available at this point, and it's not really a situation that
       // can happen unless you start modifying the SDK sources.
-      addCompileTimeError(messageNoUnnamedConstructorInObject, -1, noLength);
+      addProblem(messageNoUnnamedConstructorInObject, -1, noLength);
     } else {
       constructor.initializers.add(
           new SuperInitializer(superConstructor.target, new Arguments.empty())
             ..parent = constructor);
     }
     int index = 0;
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 5) {
-      String constant = constantNamesAndOffsetsAndDocs[i + 2];
+    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
+      String constant = constantNamesAndOffsetsAndDocs[i + 1];
       if (constant != null) {
         KernelFieldBuilder field = this[constant];
         field.build(libraryBuilder);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 004ea06..9ecc44b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -75,7 +75,6 @@
 
 import 'kernel_ast_api.dart'
     show
-        ArgumentsJudgment,
         ComplexAssignmentJudgment,
         Constructor,
         DartType,
@@ -142,8 +141,7 @@
   }
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     var complexAssignment = startComplexAssignment(value);
     return _finish(_makeSimpleWrite(value, voidContext, complexAssignment),
         complexAssignment);
@@ -200,8 +198,8 @@
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
       Procedure interfaceTarget}) {
-    return buildCompoundAssignment(binaryOperator,
-        forest.literalInt(1, null, isSynthetic: true)..fileOffset = offset,
+    return buildCompoundAssignment(
+        binaryOperator, forest.literalInt(1, null)..fileOffset = offset,
         offset: offset,
         voidContext: voidContext,
         interfaceTarget: interfaceTarget,
@@ -214,8 +212,8 @@
       bool voidContext: false,
       Procedure interfaceTarget}) {
     if (voidContext) {
-      return buildCompoundAssignment(binaryOperator,
-          forest.literalInt(1, null, isSynthetic: true)..fileOffset = offset,
+      return buildCompoundAssignment(
+          binaryOperator, forest.literalInt(1, null)..fileOffset = offset,
           offset: offset,
           voidContext: voidContext,
           interfaceTarget: interfaceTarget,
@@ -242,7 +240,7 @@
     return new SyntheticExpressionJudgment(helper.throwNoSuchMethodError(
         forest.literalNull(token),
         plainNameForRead,
-        forest.argumentsEmpty(noLocation, noLocation),
+        forest.argumentsEmpty(noLocation),
         offsetForToken(token),
         isGetter: true));
   }
@@ -252,7 +250,7 @@
     return buildInvalidWriteJudgment(helper.throwNoSuchMethodError(
         forest.literalNull(token),
         plainNameForRead,
-        forest.arguments(<Expression>[value], noLocation, noLocation),
+        forest.arguments(<Expression>[value], noLocation),
         offsetForToken(token),
         isSetter: true));
   }
@@ -502,8 +500,7 @@
 
   @override
   ComplexAssignmentJudgment startComplexAssignment(Expression rhs) =>
-      new PropertyAssignmentJudgment(null, rhs,
-          isSyntheticLhs: token.isSynthetic);
+      new PropertyAssignmentJudgment(null, rhs);
 
   @override
   void printOn(StringSink sink) {
@@ -659,7 +656,7 @@
   Expression doInvocation(int offset, Arguments arguments) {
     if (helper.constantContext != ConstantContext.none) {
       // TODO(brianwilkerson) Fix the length
-      helper.addCompileTimeError(messageNotAConstantExpression, offset, 1);
+      helper.addProblem(messageNotAConstantExpression, offset, 1);
     }
     if (getter == null || isFieldOrGetter(getter)) {
       return helper.buildMethodInvocation(
@@ -693,10 +690,6 @@
 
 class KernelIndexedAccessGenerator extends KernelGenerator
     with IndexedAccessGenerator {
-  final Token openSquareBracket;
-
-  final Token closeSquareBracket;
-
   final Expression receiver;
 
   final Expression index;
@@ -709,15 +702,9 @@
 
   VariableDeclaration indexVariable;
 
-  KernelIndexedAccessGenerator.internal(
-      ExpressionGeneratorHelper helper,
-      this.openSquareBracket,
-      this.closeSquareBracket,
-      this.receiver,
-      this.index,
-      this.getter,
-      this.setter)
-      : super(helper, openSquareBracket);
+  KernelIndexedAccessGenerator.internal(ExpressionGeneratorHelper helper,
+      Token token, this.receiver, this.index, this.getter, this.setter)
+      : super(helper, token);
 
   Expression indexAccess() {
     indexVariable ??= new VariableDeclaration.forValue(index);
@@ -734,11 +721,8 @@
 
   @override
   Expression _makeSimpleRead() {
-    var read = new MethodInvocationJudgment(
-        receiver,
-        indexGetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index], openSquareBracket, closeSquareBracket)),
+    var read = new MethodInvocationJudgment(receiver, indexGetName,
+        forest.castArguments(forest.arguments(<Expression>[index], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
     return read;
@@ -751,8 +735,8 @@
     var write = new MethodInvocationJudgment(
         receiver,
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index, value], openSquareBracket, closeSquareBracket)),
+        forest
+            .castArguments(forest.arguments(<Expression>[index, value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -764,8 +748,8 @@
     var read = new MethodInvocationJudgment(
         receiverAccess(),
         indexGetName,
-        forest.castArguments(forest.arguments(<Expression>[indexAccess()],
-            openSquareBracket, closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess()], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
@@ -779,10 +763,8 @@
     var write = new MethodInvocationJudgment(
         receiverAccess(),
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[indexAccess(), value],
-            openSquareBracket,
-            closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess(), value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -801,8 +783,7 @@
         indexSetName,
         forest.castArguments(forest.arguments(
             <Expression>[indexAccess(), new VariableGet(valueVariable)],
-            openSquareBracket,
-            closeSquareBracket)),
+            token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -854,10 +835,6 @@
 
 class KernelThisIndexedAccessGenerator extends KernelGenerator
     with ThisIndexedAccessGenerator {
-  final Token openSquareBracket;
-
-  final Token closeSquareBracket;
-
   final Expression index;
 
   final Procedure getter;
@@ -866,14 +843,9 @@
 
   VariableDeclaration indexVariable;
 
-  KernelThisIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      this.openSquareBracket,
-      this.closeSquareBracket,
-      this.index,
-      this.getter,
-      this.setter)
-      : super(helper, openSquareBracket);
+  KernelThisIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, this.index, this.getter, this.setter)
+      : super(helper, token);
 
   Expression indexAccess() {
     indexVariable ??= new VariableDeclaration.forValue(index);
@@ -888,8 +860,7 @@
         indexSetName,
         forest.castArguments(forest.arguments(
             <Expression>[indexAccess(), new VariableGet(valueVariable)],
-            openSquareBracket,
-            closeSquareBracket)),
+            token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -903,8 +874,7 @@
     return new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexGetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index], openSquareBracket, closeSquareBracket)),
+        forest.castArguments(forest.arguments(<Expression>[index], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
   }
@@ -916,8 +886,8 @@
     var write = new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index, value], openSquareBracket, closeSquareBracket)),
+        forest
+            .castArguments(forest.arguments(<Expression>[index, value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -929,8 +899,8 @@
     var read = new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexGetName,
-        forest.castArguments(forest.arguments(<Expression>[indexAccess()],
-            openSquareBracket, closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess()], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
@@ -944,10 +914,8 @@
     var write = new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[indexAccess(), value],
-            openSquareBracket,
-            closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess(), value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -987,10 +955,6 @@
 
 class KernelSuperIndexedAccessGenerator extends KernelGenerator
     with SuperIndexedAccessGenerator {
-  final Token openSquareBracket;
-
-  final Token closeSquareBracket;
-
   final Expression index;
 
   final Member getter;
@@ -999,14 +963,9 @@
 
   VariableDeclaration indexVariable;
 
-  KernelSuperIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      this.openSquareBracket,
-      this.closeSquareBracket,
-      this.index,
-      this.getter,
-      this.setter)
-      : super(helper, openSquareBracket);
+  KernelSuperIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, this.index, this.getter, this.setter)
+      : super(helper, token);
 
   Expression indexAccess() {
     indexVariable ??= new VariableDeclaration.forValue(index);
@@ -1024,8 +983,7 @@
         indexSetName,
         forest.castArguments(forest.arguments(
             <Expression>[indexAccess(), new VariableGet(valueVariable)],
-            openSquareBracket,
-            closeSquareBracket)),
+            token)),
         setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -1041,10 +999,8 @@
           isSuper: true);
     }
     // TODO(ahe): Use [DirectMethodInvocation] when possible.
-    return new SuperMethodInvocationJudgment(
-        indexGetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index], openSquareBracket, closeSquareBracket)),
+    return new SuperMethodInvocationJudgment(indexGetName,
+        forest.castArguments(forest.arguments(<Expression>[index], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
   }
@@ -1059,8 +1015,8 @@
     }
     var write = new SuperMethodInvocation(
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index, value], openSquareBracket, closeSquareBracket)),
+        forest
+            .castArguments(forest.arguments(<Expression>[index, value], token)),
         setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -1075,8 +1031,8 @@
     }
     var read = new SuperMethodInvocation(
         indexGetName,
-        forest.castArguments(forest.arguments(<Expression>[indexAccess()],
-            openSquareBracket, closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess()], token)),
         getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
@@ -1093,10 +1049,8 @@
     }
     var write = new SuperMethodInvocation(
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[indexAccess(), value],
-            openSquareBracket,
-            closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess(), value], token)),
         setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -1149,9 +1103,6 @@
         super(helper, token);
 
   @override
-  Node get fieldInitializerTarget => readTarget;
-
-  @override
   String get plainNameForRead => (readTarget ?? writeTarget).name.name;
 
   @override
@@ -1191,14 +1142,16 @@
   }
 
   @override
-  Expression doInvocation(int offset, ArgumentsJudgment arguments) {
+  Expression doInvocation(int offset, Arguments arguments) {
     Expression error;
     if (helper.constantContext != ConstantContext.none &&
         !helper.isIdentical(readTarget)) {
-      error = helper.buildCompileTimeError(
-          templateNotConstantExpression.withArguments('Method invocation'),
-          offset,
-          readTarget?.name?.name?.length ?? 0);
+      error = helper
+          .buildProblem(
+              templateNotConstantExpression.withArguments('Method invocation'),
+              offset,
+              readTarget?.name?.name?.length ?? 0)
+          .desugared /* TODO(ahe): Remove `.desugared`? */;
     }
     if (readTarget == null || isFieldOrGetter(readTarget)) {
       return helper.buildMethodInvocation(buildSimpleRead(), callName,
@@ -1321,51 +1274,32 @@
   @override
   Expression get expression {
     if (super.expression == null) {
-      super.expression = computeExpression();
+      int offset = offsetForToken(token);
+      if (declaration is KernelInvalidTypeBuilder) {
+        KernelInvalidTypeBuilder declaration = this.declaration;
+        helper.addProblemErrorIfConst(
+            declaration.message.messageObject, offset, token.length);
+        super.expression = new SyntheticExpressionJudgment(
+            new Throw(forest.literalString(declaration.message.message, token))
+              ..fileOffset = offset);
+      } else {
+        super.expression = forest.literalType(
+            buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true),
+            token);
+      }
     }
     return super.expression;
   }
 
-  Expression computeExpression({bool silent: false}) {
-    int offset = offsetForToken(token);
-    if (declaration is KernelInvalidTypeBuilder) {
-      KernelInvalidTypeBuilder declaration = this.declaration;
-      if (!silent) {
-        helper.addProblemErrorIfConst(
-            declaration.message.messageObject, offset, token.length);
-      }
-      return new UnresolvedVariableGetJudgment(
-          new Throw(forest.literalString(declaration.message.message, token))
-            ..fileOffset = offset,
-          token.isSynthetic)
-        ..fileOffset = offset;
-    } else {
-      return forest.literalType(
-          buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true),
-          token);
-    }
-  }
-
-  @override
-  Node get fieldInitializerTarget =>
-      declaration.hasTarget ? declaration.target : null;
-
   @override
   Expression makeInvalidWrite(Expression value) {
-    var read = computeExpression(silent: true);
-    // The read needs to have a parent so that type inference can be applied to
-    // it, but it doesn't mater what the parent is because the final read won't
-    // appear in the tree.  So just give it a quick and dirty parent.
-    new VariableDeclaration.forValue(read);
-
-    var throwExpr = helper.throwNoSuchMethodError(
+    return new SyntheticExpressionJudgment(helper.throwNoSuchMethodError(
         forest.literalNull(token),
         plainNameForRead,
-        forest.arguments(<Expression>[value], noLocation, noLocation)
+        forest.arguments(<Expression>[value], null)
           ..fileOffset = value.fileOffset,
         offsetForToken(token),
-        isSetter: true);
-    return new SyntheticExpressionJudgment(throwExpr, original: read);
+        isSetter: true));
   }
 
   @override
@@ -1495,30 +1429,23 @@
       : super(helper, token);
 
   @override
-  Expression _makeSimpleRead() {
-    return _buildErrorIntLiteral();
-  }
+  Expression _makeSimpleRead() => new SyntheticExpressionJudgment(buildError());
 
   @override
   Expression _makeSimpleWrite(Expression value, bool voidContext,
       ComplexAssignmentJudgment complexAssignment) {
-    return _buildErrorIntLiteral();
+    return new SyntheticExpressionJudgment(buildError());
   }
 
   @override
   Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
-    return _buildErrorIntLiteral();
+    return new SyntheticExpressionJudgment(buildError());
   }
 
   @override
   Expression _makeWrite(Expression value, bool voidContext,
       ComplexAssignmentJudgment complexAssignment) {
-    return _buildErrorIntLiteral();
-  }
-
-  Expression _buildErrorIntLiteral() {
-    var error = buildError();
-    return forest.literalInt(0, token, desugaredError: error);
+    return new SyntheticExpressionJudgment(buildError());
   }
 }
 
@@ -1532,8 +1459,7 @@
       : super(helper, token);
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return _buildUnresolvedVariableAssignment(false, value);
   }
 
@@ -1549,8 +1475,7 @@
 
   @override
   Expression buildSimpleRead() {
-    Expression error =
-        buildError(forest.argumentsEmpty(token, token), isGetter: true);
+    Expression error = buildError(forest.argumentsEmpty(token), isGetter: true);
     return new UnresolvedVariableGetJudgment(error, token.isSynthetic)
       ..fileOffset = token.charOffset;
   }
@@ -1574,12 +1499,10 @@
   UnresolvedVariableAssignmentJudgment _buildUnresolvedVariableAssignment(
       bool isCompound, Expression value) {
     return new UnresolvedVariableAssignmentJudgment(
-        buildError(forest.arguments(<Expression>[value], token, token),
-            isSetter: true),
-        isCompound,
-        value,
-        token.isSynthetic)
-      ..fileOffset = token.charOffset;
+      buildError(forest.arguments(<Expression>[value], token), isSetter: true),
+      isCompound,
+      value,
+    )..fileOffset = token.charOffset;
   }
 }
 
@@ -1599,8 +1522,7 @@
         super(helper, token);
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext}) {
     return new PropertySet(receiver, name, value)
       ..fileOffset = offsetForToken(token);
   }
@@ -1705,9 +1627,9 @@
   return new MethodInvocationJudgment(
       left,
       operator,
-      helper.forest.castArguments(
-          helper.forest.arguments(<Expression>[right], noLocation, noLocation))
-        ..fileOffset = offset,
+      helper.forest
+          .castArguments(helper.forest.arguments(<Expression>[right], null))
+            ..fileOffset = offset,
       interfaceTarget: interfaceTarget)
     ..fileOffset = offset;
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
index c9cfbf9..e39f5d42 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
@@ -36,26 +36,29 @@
   Expression buildSimpleRead() {
     if (!isSuper) {
       if (inFieldInitializer) {
-        return buildFieldInitializerError();
+        return buildFieldInitializerError(null);
       } else {
         return forest.thisExpression(token);
       }
     } else {
-      return new SyntheticExpressionJudgment(helper.buildCompileTimeError(
-          messageSuperAsExpression,
-          offsetForToken(token),
-          lengthForToken(token)));
+      return helper.buildProblem(messageSuperAsExpression,
+          offsetForToken(token), lengthForToken(token));
     }
   }
 
-  @override
-  Expression buildFieldInitializerError() {
+  SyntheticExpressionJudgment buildFieldInitializerError(
+      Map<String, int> initializedFields) {
     String keyword = isSuper ? "super" : "this";
-    int offset = offsetForToken(token);
-    return helper.buildCompileTimeErrorExpression(
+    return helper.buildProblem(
         templateThisOrSuperAccessInFieldInitializer.withArguments(keyword),
-        offset,
-        length: keyword.length);
+        offsetForToken(token),
+        keyword.length);
+  }
+
+  @override
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
+    Expression error = buildFieldInitializerError(initializedFields).desugared;
+    return helper.buildInvalidInitializer(error, error.fileOffset);
   }
 
   buildPropertyAccess(
@@ -65,13 +68,13 @@
     int offset = offsetForToken(send.token);
     if (isInitializer && send is SendAccessGenerator) {
       if (isNullAware) {
-        helper.addCompileTimeError(
+        helper.addProblem(
             messageInvalidUseOfNullAwareAccess, operatorOffset, 2);
       }
       return buildConstructorInitializer(offset, name, arguments);
     }
     if (inFieldInitializer && !isInitializer) {
-      return buildFieldInitializerError();
+      return buildFieldInitializerError(null);
     }
     Member getter = helper.lookupInstanceMember(name, isSuper: isSuper);
     if (send is SendAccessGenerator) {
@@ -101,8 +104,7 @@
     if (isInitializer) {
       return buildConstructorInitializer(offset, new Name(""), arguments);
     } else if (isSuper) {
-      return new SyntheticExpressionJudgment(helper.buildCompileTimeError(
-          messageSuperAsExpression, offset, noLength));
+      return helper.buildProblem(messageSuperAsExpression, offset, noLength);
     } else {
       return helper.buildMethodInvocation(
           forest.thisExpression(null), callName, arguments, offset,
@@ -135,8 +137,7 @@
     }
   }
 
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildAssignmentError();
   }
 
@@ -170,10 +171,10 @@
   }
 
   Expression buildAssignmentError() {
-    return helper.buildCompileTimeError(
-        isSuper ? messageCannotAssignToSuper : messageNotAnLvalue,
-        offsetForToken(token),
-        token.length);
+    return helper
+        .buildProblem(isSuper ? messageCannotAssignToSuper : messageNotAnLvalue,
+            offsetForToken(token), token.length)
+        .desugared;
   }
 
   @override
@@ -222,7 +223,7 @@
       offset = offsetForToken(token);
       length = lengthForToken(token);
     }
-    return helper.buildCompileTimeError(message, offset, length);
+    return helper.buildProblem(message, offset, length).desugared;
   }
 
   @override
@@ -230,7 +231,7 @@
 
   @override
   Expression buildSimpleRead() {
-    var error = buildError(forest.argumentsEmpty(token, token), isGetter: true);
+    var error = buildError(forest.argumentsEmpty(token), isGetter: true);
     return new InvalidPropertyGetJudgment(error, member)
       ..fileOffset = offsetForToken(token);
   }
@@ -261,8 +262,7 @@
     return unsupported("buildSimpleRead", offsetForToken(token), uri);
   }
 
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return unsupported("buildAssignment", offsetForToken(token), uri);
   }
 
@@ -333,8 +333,7 @@
     return unsupported("buildSimpleRead", offsetForToken(token), uri);
   }
 
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return unsupported("buildAssignment", offsetForToken(token), uri);
   }
 
@@ -379,26 +378,6 @@
   }
 }
 
-class KernelNonLValueGenerator extends KernelReadOnlyAccessGenerator {
-  KernelNonLValueGenerator(
-      ExpressionGeneratorHelper helper, Token token, Expression expression)
-      : super(helper, token, expression, null);
-
-  String get debugName => "KernelNonLValueGenerator";
-
-  @override
-  ComplexAssignmentJudgment startComplexAssignment(Expression rhs) {
-    return new IllegalAssignmentJudgment(rhs,
-        assignmentOffset: offsetForToken(token));
-  }
-
-  Expression makeInvalidWrite(Expression value) {
-    var error = helper.buildCompileTimeError(
-        messageNotAnLvalue, offsetForToken(token), lengthForToken(token));
-    return new InvalidWriteJudgment(error, expression);
-  }
-}
-
 class ParenthesizedExpressionGenerator extends KernelReadOnlyAccessGenerator {
   ParenthesizedExpressionGenerator(
       ExpressionGeneratorHelper helper, Token token, Expression expression)
@@ -413,10 +392,11 @@
   }
 
   Expression makeInvalidWrite(Expression value) {
-    var error = helper.buildCompileTimeError(
-        messageCannotAssignToParenthesizedExpression,
-        offsetForToken(token),
-        lengthForToken(token));
-    return new InvalidWriteJudgment(error, expression);
+    return new InvalidWriteJudgment(
+        helper
+            .buildProblem(messageCannotAssignToParenthesizedExpression,
+                offsetForToken(token), lengthForToken(token))
+            .desugared,
+        expression);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index 516bb9b..e2b769e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -85,9 +85,6 @@
     return field;
   }
 
-  @override
-  bool get hasTarget => true;
-
   Field get target => field;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
index 28731e1..b41180a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
@@ -4,7 +4,7 @@
 
 library fasta.kernel_formal_parameter_builder;
 
-import 'kernel_shadow_ast.dart' show VariableDeclarationJudgment;
+import 'package:kernel/ast.dart' show VariableDeclaration;
 
 import '../modifier.dart' show finalMask;
 
@@ -15,14 +15,11 @@
         KernelTypeBuilder,
         MetadataBuilder;
 
-import '../source/source_library_builder.dart' show SourceLibraryBuilder;
+import 'kernel_shadow_ast.dart' show VariableDeclarationJudgment;
 
 class KernelFormalParameterBuilder
     extends FormalParameterBuilder<KernelTypeBuilder> {
-  VariableDeclarationJudgment declaration;
-  final int charOffset;
-  final int codeStartOffset;
-  final int codeEndOffset;
+  VariableDeclaration declaration;
 
   KernelFormalParameterBuilder(
       List<MetadataBuilder> metadata,
@@ -31,18 +28,13 @@
       String name,
       bool hasThis,
       KernelLibraryBuilder compilationUnit,
-      this.charOffset,
-      this.codeStartOffset,
-      this.codeEndOffset)
+      int charOffset)
       : super(metadata, modifiers, type, name, hasThis, compilationUnit,
             charOffset);
 
-  @override
-  bool get hasTarget => true;
+  VariableDeclaration get target => declaration;
 
-  VariableDeclarationJudgment get target => declaration;
-
-  VariableDeclarationJudgment build(SourceLibraryBuilder library) {
+  VariableDeclaration build(KernelLibraryBuilder library) {
     if (declaration == null) {
       declaration = new VariableDeclarationJudgment(name, 0,
           type: type?.build(library),
@@ -51,8 +43,6 @@
           isFieldFormal: hasThis,
           isCovariant: isCovariant)
         ..fileOffset = charOffset;
-      library.loader.target.metadataCollector
-          ?.setCodeStartEnd(declaration, codeStartOffset, codeEndOffset);
     }
     return declaration;
   }
@@ -62,16 +52,8 @@
     assert(declaration != null);
     return !hasThis
         ? this
-        : (new KernelFormalParameterBuilder(
-            metadata,
-            modifiers | finalMask,
-            type,
-            name,
-            hasThis,
-            parent,
-            charOffset,
-            codeStartOffset,
-            codeEndOffset)
+        : (new KernelFormalParameterBuilder(metadata, modifiers | finalMask,
+            type, name, hasThis, parent, charOffset)
           ..declaration = declaration);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
index 437b729..b36a54e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
@@ -35,7 +35,6 @@
 
 class KernelFunctionTypeAliasBuilder
     extends FunctionTypeAliasBuilder<KernelFunctionTypeBuilder, DartType> {
-  final bool hasTarget = true;
   final Typedef target;
 
   DartType thisType;
@@ -71,7 +70,6 @@
       if (type.formals != null) {
         for (KernelFormalParameterBuilder formal in type.formals) {
           VariableDeclaration parameter = formal.build(libraryBuilder);
-          parameter.parent = target;
           parameter.type = freshTypeParameters.substitute(parameter.type);
           if (formal.isNamed) {
             target.namedParameters.add(parameter);
@@ -88,7 +86,7 @@
   DartType buildThisType(LibraryBuilder library) {
     if (thisType != null) {
       if (const InvalidType() == thisType) {
-        library.addCompileTimeError(templateCyclicTypedef.withArguments(name),
+        library.addProblem(templateCyclicTypedef.withArguments(name),
             charOffset, noLength, fileUri);
         return const DynamicType();
       }
@@ -144,7 +142,7 @@
       // That should be caught and reported as a compile-time error earlier.
       return unhandled(
           templateTypeArgumentMismatch
-              .withArguments(name, typeVariables.length)
+              .withArguments(typeVariables.length)
               .message,
           "buildTypeArguments",
           -1,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
index 9a86218..b6ad44c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
@@ -13,12 +13,11 @@
         Supertype,
         TypeParameter;
 
-import '../fasta_codes.dart' show messageSupertypeIsFunction, noLength;
+import '../fasta_codes.dart'
+    show LocatedMessage, messageSupertypeIsFunction, noLength;
 
 import '../problems.dart' show unsupported;
 
-import '../source/outline_listener.dart';
-
 import 'kernel_builder.dart'
     show
         FormalParameterBuilder,
@@ -32,12 +31,7 @@
 
 class KernelFunctionTypeBuilder extends FunctionTypeBuilder
     implements KernelTypeBuilder {
-  final OutlineListener outlineListener;
-  final int charOffset;
-
   KernelFunctionTypeBuilder(
-      this.outlineListener,
-      this.charOffset,
       KernelTypeBuilder returnType,
       List<TypeVariableBuilder> typeVariables,
       List<FormalParameterBuilder> formals)
@@ -71,17 +65,15 @@
         typeParameters.add(t.parameter);
       }
     }
-    var type = new FunctionType(positionalParameters, builtReturnType,
+    return new FunctionType(positionalParameters, builtReturnType,
         namedParameters: namedParameters ?? const <NamedType>[],
         typeParameters: typeParameters ?? const <TypeParameter>[],
         requiredParameterCount: requiredParameterCount);
-    outlineListener?.store(charOffset, false, type: type);
-    return type;
   }
 
   Supertype buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
-    library.addCompileTimeError(
+    library.addProblem(
         messageSupertypeIsFunction, charOffset, noLength, fileUri);
     return null;
   }
@@ -92,8 +84,8 @@
   }
 
   @override
-  buildInvalidType(int charOffset, Uri fileUri) {
-    return unsupported("buildInvalidType", charOffset, fileUri);
+  buildInvalidType(LocatedMessage message) {
+    return unsupported("buildInvalidType", message.charOffset, message.uri);
   }
 
   KernelFunctionTypeBuilder clone(List<TypeBuilder> newTypes) {
@@ -108,11 +100,7 @@
       clonedFormals[i] = formals[i].clone(newTypes);
     }
     KernelFunctionTypeBuilder newType = new KernelFunctionTypeBuilder(
-        outlineListener,
-        charOffset,
-        returnType.clone(newTypes),
-        clonedTypeVariables,
-        clonedFormals);
+        returnType.clone(newTypes), clonedTypeVariables, clonedFormals);
     newTypes.add(newType);
     return newType;
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
index f2297e5..a515299 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
@@ -6,8 +6,7 @@
 
 import 'package:kernel/ast.dart' show DartType, InvalidType;
 
-import '../fasta_codes.dart'
-    show LocatedMessage, Message, noLength, templateTypeNotFound;
+import '../fasta_codes.dart' show LocatedMessage;
 
 import 'kernel_builder.dart'
     show InvalidTypeBuilder, KernelTypeBuilder, LibraryBuilder;
@@ -17,11 +16,11 @@
   @override
   final LocatedMessage message;
 
-  KernelInvalidTypeBuilder(String name, int charOffset, Uri fileUri,
-      [Message message])
-      : message = (message ?? templateTypeNotFound.withArguments(name))
-            .withLocation(fileUri, charOffset, noLength),
-        super(name, charOffset, fileUri);
+  final bool suppressMessage;
+
+  KernelInvalidTypeBuilder(String name, this.message,
+      [this.suppressMessage = false])
+      : super(name, message.charOffset, message.uri);
 
   @override
   InvalidType get target => const InvalidType();
@@ -34,8 +33,10 @@
   /// [Arguments] have already been built.
   DartType buildTypesWithBuiltArguments(
       LibraryBuilder library, List<DartType> arguments) {
-    library.addProblem(
-        message.messageObject, message.charOffset, message.length, message.uri);
+    if (!suppressMessage) {
+      library.addProblem(message.messageObject, message.charOffset,
+          message.length, message.uri);
+    }
     return const InvalidType();
   }
 }
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 5d79c08..e666eb4 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
@@ -158,9 +158,6 @@
   KernelLibraryBuilder get origin => actualOrigin ?? this;
 
   @override
-  bool get hasTarget => true;
-
-  @override
   Library get target => library;
 
   Uri get uri => library.importUri;
@@ -177,10 +174,7 @@
 
   KernelTypeBuilder addNamedType(
       Object name, List<KernelTypeBuilder> arguments, int charOffset) {
-    return addType(
-        new KernelNamedTypeBuilder(
-            outlineListener, charOffset, name, arguments),
-        charOffset);
+    return addType(new KernelNamedTypeBuilder(name, arguments), charOffset);
   }
 
   KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype,
@@ -206,9 +200,7 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      int supertypeOffset,
-      int codeStartOffset,
-      int codeEndOffset) {
+      int supertypeOffset) {
     // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
     var declaration = endNestedDeclaration(className)
       ..resolveTypes(typeVariables, this);
@@ -242,8 +234,6 @@
         charEndOffset);
     loader.target.metadataCollector
         ?.setDocumentationComment(cls.target, documentationComment);
-    loader.target.metadataCollector
-        ?.setCodeStartEnd(cls.target, codeStartOffset, codeEndOffset);
 
     constructorReferences.clear();
     Map<String, TypeVariableBuilder> typeVariablesByName =
@@ -259,10 +249,8 @@
       if (typeVariablesByName != null) {
         TypeVariableBuilder tv = typeVariablesByName[name];
         if (tv != null) {
-          cls.addCompileTimeError(
-              templateConflictsWithTypeVariable.withArguments(name),
-              member.charOffset,
-              name.length,
+          cls.addProblem(templateConflictsWithTypeVariable.withArguments(name),
+              member.charOffset, name.length,
               context: [
                 messageConflictsWithTypeVariableCause.withLocation(
                     tv.fileUri, tv.charOffset, name.length)
@@ -286,7 +274,7 @@
     for (TypeVariableBuilder tv in typeVariables) {
       TypeVariableBuilder existing = typeVariablesByName[tv.name];
       if (existing != null) {
-        addCompileTimeError(messageTypeVariableDuplicatedName, tv.charOffset,
+        addProblem(messageTypeVariableDuplicatedName, tv.charOffset,
             tv.name.length, fileUri,
             context: [
               templateTypeVariableDuplicatedNameCause
@@ -300,8 +288,8 @@
           // Only classes and type variables can't have the same name. See
           // [#29555](https://github.com/dart-lang/sdk/issues/29555).
           if (tv.name == owner.name) {
-            addCompileTimeError(messageTypeVariableSameNameAsEnclosing,
-                tv.charOffset, tv.name.length, fileUri);
+            addProblem(messageTypeVariableSameNameAsEnclosing, tv.charOffset,
+                tv.name.length, fileUri);
           }
         }
       }
@@ -316,9 +304,7 @@
       String name,
       List<TypeVariableBuilder> typeVariables,
       int modifiers,
-      List<KernelTypeBuilder> interfaces,
-      int codeStartOffset,
-      int codeEndOffset}) {
+      List<KernelTypeBuilder> interfaces}) {
     if (name == null) {
       // The following parameters should only be used when building a named
       // mixin application.
@@ -333,14 +319,6 @@
       }
     }
     if (type is KernelMixinApplicationBuilder) {
-      String extractName(name) {
-        if (name is QualifiedName) {
-          return name.suffix;
-        } else {
-          return name;
-        }
-      }
-
       // Documentation below assumes the given mixin application is in one of
       // these forms:
       //
@@ -498,8 +476,6 @@
         if (isNamedMixinApplication) {
           loader.target.metadataCollector?.setDocumentationComment(
               application.target, documentationComment);
-          loader.target.metadataCollector?.setCodeStartEnd(
-              application.target, codeStartOffset, codeEndOffset);
         }
         // TODO(ahe, kmillikin): Should always be true?
         // pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart can't
@@ -523,9 +499,7 @@
       int modifiers,
       KernelTypeBuilder mixinApplication,
       List<KernelTypeBuilder> interfaces,
-      int charOffset,
-      int codeStartOffset,
-      int codeEndOffset) {
+      int charOffset) {
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(name).resolveTypes(typeVariables, this);
     KernelNamedTypeBuilder supertype = applyMixins(
@@ -535,9 +509,7 @@
         name: name,
         typeVariables: typeVariables,
         modifiers: modifiers,
-        interfaces: interfaces,
-        codeStartOffset: codeStartOffset,
-        codeEndOffset: codeEndOffset);
+        interfaces: interfaces);
     checkTypeVariables(typeVariables, supertype.declaration);
   }
 
@@ -549,19 +521,13 @@
       KernelTypeBuilder type,
       String name,
       int charOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       Token initializerTokenForInference,
       bool hasInitializer) {
     var builder = new KernelFieldBuilder(metadata, type, name, modifiers, this,
         charOffset, initializerTokenForInference, hasInitializer);
     addBuilder(name, builder, charOffset);
-
-    var metadataCollector = loader.target.metadataCollector;
-    metadataCollector?.setDocumentationComment(
-        builder.target, documentationComment);
-    metadataCollector?.setCodeStartEnd(
-        builder.target, codeStartOffset, codeEndOffset);
+    loader.target.metadataCollector
+        ?.setDocumentationComment(builder.target, documentationComment);
   }
 
   void addConstructor(
@@ -577,8 +543,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName) {
     MetadataCollector metadataCollector = loader.target.metadataCollector;
     ProcedureBuilder procedure = new KernelConstructorBuilder(
@@ -597,8 +561,6 @@
     metadataCollector?.setDocumentationComment(
         procedure.target, documentationComment);
     metadataCollector?.setConstructorNameOffset(procedure.target, name);
-    metadataCollector?.setCodeStartEnd(
-        procedure.target, codeStartOffset, codeEndOffset);
     checkTypeVariables(typeVariables, procedure);
     addBuilder(constructorName, procedure, charOffset);
     if (nativeMethodName != null) {
@@ -620,8 +582,6 @@
       int charOpenParenOffset,
       int charEndOffset,
       String nativeMethodName,
-      int codeStartOffset,
-      int codeEndOffset,
       {bool isTopLevel}) {
     MetadataCollector metadataCollector = loader.target.metadataCollector;
     ProcedureBuilder procedure = new KernelProcedureBuilder(
@@ -640,8 +600,6 @@
         nativeMethodName);
     metadataCollector?.setDocumentationComment(
         procedure.target, documentationComment);
-    metadataCollector?.setCodeStartEnd(
-        procedure.target, codeStartOffset, codeEndOffset);
     checkTypeVariables(typeVariables, procedure);
     addBuilder(name, procedure, charOffset);
     if (nativeMethodName != null) {
@@ -660,8 +618,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName) {
     KernelTypeBuilder returnType = addNamedType(
         currentDeclaration.parent.name, <KernelTypeBuilder>[], charOffset);
@@ -720,8 +676,6 @@
     metadataCollector?.setDocumentationComment(
         procedure.target, documentationComment);
     metadataCollector?.setConstructorNameOffset(procedure.target, name);
-    metadataCollector?.setCodeStartEnd(
-        procedure.target, codeStartOffset, codeEndOffset);
 
     DeclarationBuilder<TypeBuilder> savedDeclaration = currentDeclaration;
     currentDeclaration = factoryDeclaration;
@@ -781,8 +735,8 @@
       List<TypeVariableBuilder> typeVariables,
       List<FormalParameterBuilder> formals,
       int charOffset) {
-    var builder = new KernelFunctionTypeBuilder(
-        outlineListener, charOffset, returnType, typeVariables, formals);
+    var builder =
+        new KernelFunctionTypeBuilder(returnType, typeVariables, formals);
     checkTypeVariables(typeVariables, null);
     // Nested declaration began in `OutlineBuilder.beginFunctionType` or
     // `OutlineBuilder.beginFunctionTypedFormalParameter`.
@@ -796,11 +750,9 @@
       KernelTypeBuilder type,
       String name,
       bool hasThis,
-      int charOffset,
-      int codeStartOffset,
-      int codeEndOffset) {
-    return new KernelFormalParameterBuilder(metadata, modifiers, type, name,
-        hasThis, this, charOffset, codeStartOffset, codeEndOffset);
+      int charOffset) {
+    return new KernelFormalParameterBuilder(
+        metadata, modifiers, type, name, hasThis, this, charOffset);
   }
 
   KernelTypeVariableBuilder addTypeVariable(
@@ -877,7 +829,6 @@
     // This is required for the DietListener to correctly match up metadata.
     int importIndex = 0;
     int exportIndex = 0;
-    MetadataCollector metadataCollector = loader.target.metadataCollector;
     while (importIndex < imports.length || exportIndex < exports.length) {
       if (exportIndex >= exports.length ||
           (importIndex < imports.length &&
@@ -892,18 +843,15 @@
           continue;
         }
 
-        LibraryDependency dependency;
         if (import.deferred && import.prefixBuilder?.dependency != null) {
-          dependency = import.prefixBuilder.dependency;
+          library.addDependency(import.prefixBuilder.dependency);
         } else {
-          dependency = new LibraryDependency.import(import.imported.target,
+          library.addDependency(new LibraryDependency.import(
+              import.imported.target,
               name: import.prefix,
               combinators: toKernelCombinators(import.combinators))
-            ..fileOffset = import.charOffset;
+            ..fileOffset = import.charOffset);
         }
-        library.addDependency(dependency);
-        metadataCollector?.setImportPrefixOffset(
-            dependency, import.prefixCharOffset);
       } else {
         // Add export
         Export export = exports[exportIndex++];
@@ -1038,8 +986,16 @@
     var builderTemplate = isExport
         ? templateDuplicatedExportInType
         : templateDuplicatedImportInType;
-    return new KernelInvalidTypeBuilder(name, charOffset, fileUri,
-        builderTemplate.withArguments(name, uri, otherUri));
+    return new KernelInvalidTypeBuilder(
+        name,
+        builderTemplate
+            .withArguments(
+                name,
+                // TODO(ahe): We should probably use a context object here
+                // instead of including URIs in this message.
+                uri,
+                otherUri)
+            .withLocation(fileUri, charOffset, name.length));
   }
 
   int finishDeferredLoadTearoffs() {
@@ -1326,7 +1282,7 @@
 
   void exportMemberFromPatch(String name, Declaration member) {
     if (uri.scheme != "dart" || !uri.path.startsWith("_")) {
-      addCompileTimeError(templatePatchInjectionFailed.withArguments(name, uri),
+      addProblem(templatePatchInjectionFailed.withArguments(name, uri),
           member.charOffset, noLength, member.fileUri);
     }
     // Platform-private libraries, such as "dart:_internal" have special
@@ -1350,3 +1306,5 @@
   return unhandled("no library parent", "${declaration.runtimeType}",
       declaration.charOffset, declaration.fileUri);
 }
+
+String extractName(name) => name is QualifiedName ? name.name : name;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
index 3237dc1..95d3634 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
@@ -6,6 +6,8 @@
 
 import 'package:kernel/ast.dart' show InterfaceType, Supertype;
 
+import '../fasta_codes.dart' show LocatedMessage;
+
 import '../problems.dart' show unsupported;
 
 import 'kernel_builder.dart'
@@ -47,8 +49,8 @@
   }
 
   @override
-  buildInvalidType(int charOffset, Uri fileUri) {
-    return unsupported("buildInvalidType", charOffset, fileUri);
+  buildInvalidType(LocatedMessage message) {
+    return unsupported("buildInvalidType", message.charOffset, message.uri);
   }
 
   KernelMixinApplicationBuilder clone(List<TypeBuilder> newTypes) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
index 82b8297..8c361e6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
@@ -4,14 +4,14 @@
 
 library fasta.kernel_interface_type_builder;
 
-import 'package:kernel/ast.dart' show DartType, InvalidType, Supertype;
+import 'package:kernel/ast.dart' show DartType, Supertype;
 
-import '../fasta_codes.dart' show Message;
+import '../fasta_codes.dart' show LocatedMessage;
 
 import '../messages.dart'
     show noLength, templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
 
-import '../source/outline_listener.dart';
+import '../severity.dart' show Severity;
 
 import 'kernel_builder.dart'
     show
@@ -20,25 +20,22 @@
         KernelTypeBuilder,
         LibraryBuilder,
         NamedTypeBuilder,
-        QualifiedName,
         TypeBuilder,
         TypeDeclarationBuilder,
-        TypeVariableBuilder;
+        TypeVariableBuilder,
+        flattenName;
 
 class KernelNamedTypeBuilder
     extends NamedTypeBuilder<KernelTypeBuilder, DartType>
     implements KernelTypeBuilder {
-  final int charOffset;
+  KernelNamedTypeBuilder(Object name, List<KernelTypeBuilder> arguments)
+      : super(name, arguments);
 
-  KernelNamedTypeBuilder(OutlineListener outlineListener, this.charOffset,
-      Object name, List<KernelTypeBuilder> arguments)
-      : super(outlineListener, name, arguments);
-
-  KernelInvalidTypeBuilder buildInvalidType(int charOffset, Uri fileUri,
-      [Message message]) {
+  KernelInvalidTypeBuilder buildInvalidType(LocatedMessage message) {
     // TODO(ahe): Consider if it makes sense to pass a QualifiedName to
     // KernelInvalidTypeBuilder?
-    return new KernelInvalidTypeBuilder("$name", charOffset, fileUri, message);
+    return new KernelInvalidTypeBuilder(
+        flattenName(name, message.charOffset, message.uri), message);
   }
 
   Supertype handleInvalidSupertype(
@@ -46,34 +43,32 @@
     var template = declaration.isTypeVariable
         ? templateSupertypeIsTypeVariable
         : templateSupertypeIsIllegal;
-    library.addCompileTimeError(
-        template.withArguments("$name"), charOffset, noLength, fileUri);
+    library.addProblem(
+        template.withArguments(flattenName(name, charOffset, fileUri)),
+        charOffset,
+        noLength,
+        fileUri);
     return null;
   }
 
   DartType build(LibraryBuilder library) {
-    DartType type = declaration.buildType(library, arguments);
-    _storeType(library, type);
-    return type;
+    return declaration.buildType(library, arguments);
   }
 
   Supertype buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration;
     if (declaration is KernelClassBuilder) {
-      var supertype = declaration.buildSupertype(library, arguments);
-      _storeType(library, supertype.asInterfaceType);
-      return supertype;
+      return declaration.buildSupertype(library, arguments);
     } else if (declaration is KernelInvalidTypeBuilder) {
-      library.addCompileTimeError(
+      library.addProblem(
           declaration.message.messageObject,
           declaration.message.charOffset,
           declaration.message.length,
-          declaration.message.uri);
-      _storeType(library, const InvalidType());
+          declaration.message.uri,
+          severity: Severity.error);
       return null;
     } else {
-      _storeType(library, const InvalidType());
       return handleInvalidSupertype(library, charOffset, fileUri);
     }
   }
@@ -82,19 +77,16 @@
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration;
     if (declaration is KernelClassBuilder) {
-      var supertype = declaration.buildMixedInType(library, arguments);
-      _storeType(library, supertype.asInterfaceType);
-      return supertype;
+      return declaration.buildMixedInType(library, arguments);
     } else if (declaration is KernelInvalidTypeBuilder) {
-      library.addCompileTimeError(
+      library.addProblem(
           declaration.message.messageObject,
           declaration.message.charOffset,
           declaration.message.length,
-          declaration.message.uri);
-      _storeType(library, const InvalidType());
+          declaration.message.uri,
+          severity: Severity.error);
       return null;
     } else {
-      _storeType(library, const InvalidType());
       return handleInvalidSupertype(library, charOffset, fileUri);
     }
   }
@@ -116,9 +108,7 @@
         i++;
       }
       if (arguments != null) {
-        return new KernelNamedTypeBuilder(
-            outlineListener, charOffset, name, arguments)
-          ..bind(declaration);
+        return new KernelNamedTypeBuilder(name, arguments)..bind(declaration);
       }
     }
     return this;
@@ -132,34 +122,9 @@
         clonedArguments[i] = arguments[i].clone(newTypes);
       }
     }
-    KernelNamedTypeBuilder newType = new KernelNamedTypeBuilder(
-        outlineListener, charOffset, name, clonedArguments);
+    KernelNamedTypeBuilder newType =
+        new KernelNamedTypeBuilder(name, clonedArguments);
     newTypes.add(newType);
     return newType;
   }
-
-  int get _storeOffset {
-    // TODO(scheglov) Can we always make charOffset the "suffix" offset?
-    var name = this.name;
-    return name is QualifiedName ? name.charOffset : charOffset;
-  }
-
-  void _storeType(LibraryBuilder library, DartType type) {
-    if (outlineListener != null) {
-      if (arguments != null && !this.declaration.buildsArguments) {
-        for (var argument in arguments) {
-          argument.build(library);
-        }
-      }
-      TypeDeclarationBuilder<KernelTypeBuilder, DartType> storeDeclaration;
-      if (actualDeclaration != null) {
-        storeDeclaration = actualDeclaration;
-        type = storeDeclaration.buildType(library, null);
-      } else {
-        storeDeclaration = declaration;
-      }
-      var target = storeDeclaration.hasTarget ? storeDeclaration.target : null;
-      outlineListener.store(_storeOffset, false, reference: target, type: type);
-    }
-  }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
index 7dbbdb3..c65c7b8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
@@ -41,6 +41,7 @@
 import '../messages.dart'
     show
         Message,
+        messageConstFactoryRedirectionToNonConst,
         messageMoreThanOneSuperOrThisInitializer,
         messageNonInstanceTypeVariableUse,
         messagePatchDeclarationMismatch,
@@ -232,7 +233,7 @@
 
   bool checkPatch(KernelFunctionBuilder patch) {
     if (!isExternal) {
-      patch.library.addCompileTimeError(
+      patch.library.addProblem(
           messagePatchNonExternal, patch.charOffset, noLength, patch.fileUri,
           context: [
             messagePatchDeclarationOrigin.withLocation(
@@ -244,8 +245,8 @@
   }
 
   void reportPatchMismatch(Declaration patch) {
-    library.addCompileTimeError(messagePatchDeclarationMismatch,
-        patch.charOffset, noLength, patch.fileUri, context: [
+    library.addProblem(messagePatchDeclarationMismatch, patch.charOffset,
+        noLength, patch.fileUri, context: [
       messagePatchDeclarationOrigin.withLocation(fileUri, charOffset, noLength)
     ]);
   }
@@ -484,9 +485,6 @@
     return super.buildFunction(library)..returnType = const VoidType();
   }
 
-  @override
-  bool get hasTarget => true;
-
   Constructor get target => origin.constructor;
 
   void injectInvalidInitializer(
@@ -496,7 +494,7 @@
     assert(lastInitializer == superInitializer ||
         lastInitializer == redirectingInitializer);
     Initializer error = helper.buildInvalidInitializer(
-        helper.buildCompileTimeError(message, charOffset, noLength),
+        helper.buildProblem(message, charOffset, noLength).desugared,
         charOffset);
     initializers.add(error..parent = constructor);
     initializers.add(lastInitializer);
@@ -520,8 +518,10 @@
       } else if (constructor.initializers.isNotEmpty) {
         Initializer first = constructor.initializers.first;
         Initializer error = helper.buildInvalidInitializer(
-            helper.buildCompileTimeError(
-                messageThisInitializerNotAlone, first.fileOffset, noLength),
+            helper
+                .buildProblem(
+                    messageThisInitializerNotAlone, first.fileOffset, noLength)
+                .desugared,
             first.fileOffset);
         initializers.add(error..parent = constructor);
       } else {
@@ -619,6 +619,13 @@
     if (actualBody != null) {
       unexpected("null", "${actualBody.runtimeType}", charOffset, fileUri);
     }
+
+    // Ensure that constant factories only have constant targets/bodies.
+    if (isConst && !target.isConst) {
+      library.addProblem(messageConstFactoryRedirectionToNonConst, charOffset,
+          noLength, fileUri);
+    }
+
     actualBody = new RedirectingFactoryBody(target, typeArguments);
     function.body = actualBody;
     actualBody?.parent = function;
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 bcd41f7..ce99bf3 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
@@ -37,12 +37,14 @@
 
 import '../fasta_codes.dart'
     show
+        messageSwitchExpressionNotAssignableCause,
         messageVoidExpression,
         noLength,
         templateCantInferTypeDueToCircularity,
         templateCantUseSuperBoundedTypeForInstanceCreation,
         templateForInLoopElementTypeNotAssignable,
-        templateForInLoopTypeNotIterable;
+        templateForInLoopTypeNotIterable,
+        templateSwitchExpressionNotAssignable;
 
 import '../problems.dart' show unhandled, unsupported;
 
@@ -176,22 +178,16 @@
 
 /// Concrete shadow object representing a set of invocation arguments.
 class ArgumentsJudgment extends Arguments {
-  /// The end offset of the closing `)`.
-  final int fileEndOffset;
-
   bool _hasExplicitTypeArguments;
 
   List<ExpressionJudgment> get positionalJudgments => positional.cast();
 
   List<NamedExpressionJudgment> get namedJudgments => named.cast();
 
-  ArgumentsJudgment(
-      int fileOffset, this.fileEndOffset, List<Expression> positional,
+  ArgumentsJudgment(List<Expression> positional,
       {List<DartType> types, List<NamedExpression> named})
       : _hasExplicitTypeArguments = types != null && types.isNotEmpty,
-        super(positional, types: types, named: named) {
-    this.fileOffset = fileOffset;
-  }
+        super(positional, types: types, named: named);
 
   static void setNonInferrableArgumentTypes(
       ArgumentsJudgment arguments, List<DartType> types) {
@@ -209,12 +205,10 @@
 /// Shadow object for [AsExpression].
 class AsJudgment extends AsExpression implements ExpressionJudgment {
   final AsExpressionTokens tokens;
-  final Expression desugaredError;
 
   DartType inferredType;
 
-  AsJudgment(Expression operand, this.tokens, DartType type,
-      {this.desugaredError})
+  AsJudgment(Expression operand, this.tokens, DartType type)
       : super(operand, type);
 
   ExpressionJudgment get judgment => operand;
@@ -227,10 +221,6 @@
     inferredType = type;
     inferrer.listener
         .asExpression(this, fileOffset, null, tokens, null, inferredType);
-    if (desugaredError != null) {
-      parent.replaceChild(this, desugaredError);
-      parent = null;
-    }
     return null;
   }
 }
@@ -559,8 +549,7 @@
   /// pre-decrement.
   bool isPreIncDec = false;
 
-  ComplexAssignmentJudgment(this.rhs, {Expression desugared})
-      : super(desugared);
+  ComplexAssignmentJudgment(this.rhs) : super(null);
 
   String toString() {
     var parts = _getToStringParts();
@@ -608,8 +597,8 @@
             .isOverloadedArithmeticOperatorAndType(combinerMember, readType);
       }
       DartType rhsType;
-      var combinerType =
-          inferrer.getCalleeFunctionType(combinerMember, readType, false);
+      var combinerType = inferrer.getCalleeFunctionType(
+          inferrer.getCalleeType(combinerMember, readType), false);
       if (isPreIncDec || isPostIncDec) {
         rhsType = inferrer.coreTypes.intClass.rawType;
       } else {
@@ -1002,7 +991,7 @@
   @override
   InferenceNode inferenceNode;
 
-  ShadowTypeInferrer typeInferrer;
+  ShadowTypeInferrer _typeInferrer;
 
   final bool _isImplicitlyTyped;
 
@@ -1489,9 +1478,8 @@
   /// If `-1`, then there is no separate location for invalid assignment.
   final int assignmentOffset;
 
-  IllegalAssignmentJudgment(ExpressionJudgment rhs,
-      {this.assignmentOffset: -1, Expression desugared})
-      : super(rhs, desugared: desugared) {
+  IllegalAssignmentJudgment(ExpressionJudgment rhs, {this.assignmentOffset: -1})
+      : super(rhs) {
     rhs.parent = this;
   }
 
@@ -1554,8 +1542,8 @@
     // To replicate analyzer behavior, we base type inference on the write
     // member.  TODO(paulberry): would it be better to use the read member
     // when doing compound assignment?
-    var calleeType =
-        inferrer.getCalleeFunctionType(writeMember, receiverType, false);
+    var calleeType = inferrer.getCalleeFunctionType(
+        inferrer.getCalleeType(writeMember, receiverType), false);
     DartType expectedIndexTypeForWrite;
     DartType indexContext = const UnknownType();
     DartType writeContext = const UnknownType();
@@ -1581,8 +1569,8 @@
     if (read != null) {
       var readMember =
           inferrer.findMethodInvocationMember(receiverType, read, silent: true);
-      var calleeFunctionType =
-          inferrer.getCalleeFunctionType(readMember, receiverType, false);
+      var calleeFunctionType = inferrer.getCalleeFunctionType(
+          inferrer.getCalleeType(readMember, receiverType), false);
       inferrer.ensureAssignable(
           getPositionalParameterType(calleeFunctionType, 0),
           indexType,
@@ -1603,8 +1591,8 @@
       _storeLetType(inferrer, replacedRead, readType);
     }
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
-    inferrer.listener.indexAssign(this, write.fileOffset, receiverType,
-        writeMember, inferredResult.combiner, inferredType);
+    inferrer.listener.indexAssign(this, write.fileOffset, writeMember,
+        inferredResult.combiner, inferredType);
     _replaceWithDesugared();
     return null;
   }
@@ -1622,27 +1610,16 @@
 /// Concrete shadow object representing an integer literal in kernel form.
 class IntJudgment extends IntLiteral implements ExpressionJudgment {
   IntLiteralTokens tokens;
-  final kernel.Expression desugaredError;
-  final bool isSynthetic;
 
   DartType inferredType;
 
-  IntJudgment(this.tokens, int value,
-      {this.desugaredError, this.isSynthetic: false})
-      : super(value);
+  IntJudgment(this.tokens, int value) : super(value);
 
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
     inferredType = inferrer.coreTypes.intClass.rawType;
-    if (!isSynthetic) {
-      inferrer.listener
-          .intLiteral(this, fileOffset, tokens, value, inferredType);
-    }
-    if (desugaredError != null) {
-      parent.replaceChild(this, desugaredError);
-      parent = null;
-    }
+    inferrer.listener.intLiteral(this, fileOffset, tokens, value, inferredType);
     return null;
   }
 }
@@ -1663,7 +1640,7 @@
 /// Concrete shadow object representing an invalid initializer in kernel form.
 class ShadowInvalidFieldInitializer extends LocalInitializer
     implements InitializerJudgment {
-  final Node field;
+  final Field field;
   final Expression value;
 
   ShadowInvalidFieldInitializer(
@@ -1677,9 +1654,7 @@
   @override
   void infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer) {
-    var field = this.field;
-    var typeContext = field is Field ? field.type : const UnknownType();
-    inferrer.inferExpression(value, typeContext, false);
+    inferrer.inferExpression(value, field.type, false);
     inferrer.listener.fieldInitializer(
         this, fileOffset, null, null, null, null, null, field);
   }
@@ -1906,12 +1881,12 @@
   MapLiteralTokens tokens;
   DartType inferredType;
 
-  List<MapEntryJudgment> get judgments => entries;
+  List<MapEntry> get judgments => entries;
 
   final DartType _declaredKeyType;
   final DartType _declaredValueType;
 
-  MapLiteralJudgment(this.tokens, List<MapEntryJudgment> judgments,
+  MapLiteralJudgment(this.tokens, List<MapEntry> judgments,
       {DartType keyType, DartType valueType, bool isConst: false})
       : _declaredKeyType = keyType,
         _declaredValueType = valueType,
@@ -1949,9 +1924,9 @@
       inferredValueType = _declaredValueType ?? const DynamicType();
     }
     List<ExpressionJudgment> cachedKeyJudgments =
-        judgments.map((j) => j.keyJudgment).toList();
+        judgments.map((j) => (j as MapEntryJudgment).keyJudgment).toList();
     List<ExpressionJudgment> cachedValueJudgments =
-        judgments.map((j) => j.valueJudgment).toList();
+        judgments.map((j) => (j as MapEntryJudgment).valueJudgment).toList();
     if (inferenceNeeded || typeChecksNeeded) {
       for (MapEntryJudgment judgment in judgments) {
         judgment.infer(inferrer, inferredKeyType, inferredValueType);
@@ -2238,11 +2213,10 @@
   /// If this assignment uses null-aware access (`?.`), the conditional
   /// expression that guards the access; otherwise `null`.
   ConditionalExpression nullAwareGuard;
-  final bool isSyntheticLhs;
 
   PropertyAssignmentJudgment(
       ExpressionJudgment receiver, ExpressionJudgment rhs,
-      {bool isSuper: false, this.isSyntheticLhs: false})
+      {bool isSuper: false})
       : super(receiver, rhs, isSuper);
 
   @override
@@ -2292,8 +2266,6 @@
     inferrer.listener.propertyAssign(
         this,
         write.fileOffset,
-        isSyntheticLhs,
-        receiverType,
         inferrer.getRealTarget(writeMember),
         writeContext,
         inferredResult.combiner,
@@ -2405,15 +2377,10 @@
           isVoidAllowed: true);
       inferredType = judgment.inferredType;
     } else {
-      inferredType = const VoidType();
+      inferredType = inferrer.coreTypes.nullClass.rawType;
     }
-    // Analyzer treats bare `return` statements as having no effect on the
-    // inferred type of the closure.  TODO(paulberry): is this what we want
-    // for Fasta?
-    if (judgment != null) {
-      closureContext.handleReturn(inferrer, inferredType, expression,
-          fileOffset, !identical(returnKeywordLexeme, "return"));
-    }
+    closureContext.handleReturn(inferrer, this, inferredType,
+        !identical(returnKeywordLexeme, "return"));
     inferrer.listener.returnStatement(this, fileOffset, tokens, null);
   }
 }
@@ -2710,14 +2677,30 @@
     var expressionJudgment = this.expressionJudgment;
     inferrer.inferExpression(expressionJudgment, const UnknownType(), true);
     var expressionType = expressionJudgment.inferredType;
+
     for (var switchCase in caseJudgments) {
       for (var caseExpression in switchCase.expressionJudgments) {
-        inferrer.inferExpression(caseExpression, expressionType, false);
+        DartType caseExpressionType =
+            inferrer.inferExpression(caseExpression, expressionType, true);
+
+        // Check whether the expression type is assignable to the case expression type.
+        if (!inferrer.isAssignable(expressionType, caseExpressionType)) {
+          inferrer.helper.addProblem(
+              templateSwitchExpressionNotAssignable.withArguments(
+                  expressionType, caseExpressionType),
+              caseExpression.fileOffset,
+              noLength,
+              context: [
+                messageSwitchExpressionNotAssignableCause.withLocation(
+                    inferrer.uri, expressionJudgment.fileOffset, noLength)
+              ]);
+        }
       }
       inferrer.inferStatement(switchCase.bodyJudgment);
       // TODO(paulberry): support labels.
       inferrer.listener.switchCase(switchCase, null, null, null, null, null);
     }
+
     inferrer.listener
         .switchStatement(this, fileOffset, tokens, expression, cases);
   }
@@ -2786,7 +2769,7 @@
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.variableAssign(this, fileOffset, false, _variable.type,
+    inferrer.listener.variableAssign(this, fileOffset, _variable.type,
         _variable.createBinder(inferrer), null, _variable.type);
     return super.infer(inferrer, typeContext);
   }
@@ -2826,7 +2809,7 @@
       ShadowTypeInferrer inferrer, DartType typeContext) {
     var inferredType = member?.getterType ?? const DynamicType();
     inferrer.listener
-        .propertyGet(this, fileOffset, false, null, member, inferredType);
+        .propertyGet(this, fileOffset, false, member, inferredType);
     return super.infer(inferrer, typeContext);
   }
 }
@@ -2837,13 +2820,9 @@
 /// These expressions are removed by type inference and replaced with their
 /// desugared equivalents.
 class SyntheticExpressionJudgment extends Let implements ExpressionJudgment {
-  /// The original expression that is wrapped by this synthetic expression.
-  /// Its type will be inferred.
-  final Expression original;
-
   DartType inferredType;
 
-  SyntheticExpressionJudgment(Expression desugared, {this.original})
+  SyntheticExpressionJudgment(Expression desugared)
       : super(new VariableDeclaration('_', initializer: new NullLiteral()),
             desugared);
 
@@ -2858,9 +2837,6 @@
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
-    if (original != null) {
-      inferrer.inferExpression(original, typeContext, true);
-    }
     _replaceWithDesugared();
     inferredType = const DynamicType();
     return null;
@@ -3072,13 +3048,13 @@
       TypeInferenceListener<int, Node, int> listener,
       InterfaceType thisType,
       ShadowField field) {
-    return field.typeInferrer = new ShadowTypeInferrer._(
+    return field._typeInferrer = new ShadowTypeInferrer._(
         this, field.fileUri, listener, true, thisType, null);
   }
 
   @override
   ShadowTypeInferrer getFieldTypeInferrer(ShadowField field) {
-    return field.typeInferrer;
+    return field._typeInferrer;
   }
 }
 
@@ -3153,7 +3129,8 @@
   DartType inferFieldTopLevel<Expression, Statement, Initializer, Type>(
       ShadowField field, bool typeNeeded) {
     if (field.initializer == null) return const DynamicType();
-    return inferExpression(field.initializer, const UnknownType(), typeNeeded);
+    return inferExpression(field.initializer, const UnknownType(), typeNeeded,
+        isVoidAllowed: true);
   }
 
   @override
@@ -3306,7 +3283,6 @@
     inferrer.listener.variableAssign(
         this,
         write.fileOffset,
-        false,
         writeContext,
         write is VariableSet
             ? (write.variable as VariableDeclarationJudgment)
@@ -3490,10 +3466,9 @@
 class UnresolvedVariableAssignmentJudgment extends SyntheticExpressionJudgment {
   final bool isCompound;
   final ExpressionJudgment rhs;
-  final bool isSyntheticLhs;
 
-  UnresolvedVariableAssignmentJudgment(kernel.Expression desugared,
-      this.isCompound, this.rhs, this.isSyntheticLhs)
+  UnresolvedVariableAssignmentJudgment(
+      kernel.Expression desugared, this.isCompound, this.rhs)
       : super(desugared);
 
   @override
@@ -3501,8 +3476,8 @@
       ShadowTypeInferrer inferrer, DartType typeContext) {
     inferrer.inferExpression(rhs, const UnknownType(), true);
     inferredType = isCompound ? const DynamicType() : rhs.inferredType;
-    inferrer.listener.variableAssign(this, fileOffset, isSyntheticLhs,
-        const DynamicType(), null, null, inferredType);
+    inferrer.listener.variableAssign(
+        this, fileOffset, const DynamicType(), null, null, inferredType);
     return super.infer(inferrer, typeContext);
   }
 }
@@ -3523,7 +3498,7 @@
     inferrer.listener.variableGet(
         this, offset, isSynthetic, false, null, const DynamicType());
     inferrer.listener.variableAssign(
-        this, fileOffset, false, const DynamicType(), null, null, inferredType);
+        this, fileOffset, const DynamicType(), null, null, inferredType);
     return super.infer(inferrer, typeContext);
   }
 }
@@ -3716,17 +3691,10 @@
 
 /// Concrete shadow object representing a named expression.
 class NamedExpressionJudgment extends NamedExpression {
-  final NamedExpressionTokens tokens;
+  NamedExpressionTokens tokens;
 
-  /// The original value that is wrapped by this synthetic named argument.
-  /// Its type will be inferred.
-  final Expression originalValue;
-
-  NamedExpressionJudgment(this.tokens, String nameLexeme, Expression value,
-      {this.originalValue})
-      : super(nameLexeme, value) {
-    originalValue?.parent = this;
-  }
+  NamedExpressionJudgment(this.tokens, String nameLexeme, Expression value)
+      : super(nameLexeme, value);
 
   ExpressionJudgment get judgment => value;
 }
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 0715e41..86122bb 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -119,14 +119,12 @@
 
   final List<LocatedMessage> errors = <LocatedMessage>[];
 
-  final TypeBuilder dynamicType =
-      new KernelNamedTypeBuilder(null, -1, "dynamic", null);
+  final TypeBuilder dynamicType = new KernelNamedTypeBuilder("dynamic", null);
 
   final NamedTypeBuilder objectType =
-      new KernelNamedTypeBuilder(null, -1, "Object", null);
+      new KernelNamedTypeBuilder("Object", null);
 
-  final TypeBuilder bottomType =
-      new KernelNamedTypeBuilder(null, -1, "Null", null);
+  final TypeBuilder bottomType = new KernelNamedTypeBuilder("Null", null);
 
   bool get strongMode => backendTarget.strongMode;
 
@@ -219,7 +217,7 @@
     cls.implementedTypes.clear();
     cls.supertype = null;
     cls.mixedInType = null;
-    builder.supertype = new KernelNamedTypeBuilder(null, -1, "Object", null)
+    builder.supertype = new KernelNamedTypeBuilder("Object", null)
       ..bind(objectClassBuilder);
     builder.interfaces = null;
     builder.mixedInType = null;
@@ -435,7 +433,7 @@
               if (cls != objectClass) {
                 cls.supertype ??= objectClass.asRawSupertype;
                 declaration.supertype ??=
-                    new KernelNamedTypeBuilder(null, -1, "Object", null)
+                    new KernelNamedTypeBuilder("Object", null)
                       ..bind(objectClassBuilder);
               }
               if (declaration.isMixinApplication) {
@@ -659,10 +657,8 @@
       for (Initializer initializer in constructor.initializers) {
         if (initializer is RedirectingInitializer) {
           if (constructor.isConst && !initializer.target.isConst) {
-            builder.addCompileTimeError(
-                messageConstConstructorRedirectionToNonConst,
-                initializer.fileOffset,
-                initializer.target.name.name.length);
+            builder.addProblem(messageConstConstructorRedirectionToNonConst,
+                initializer.fileOffset, initializer.target.name.name.length);
           }
           isRedirecting = true;
           break;
@@ -676,7 +672,7 @@
           superTarget ??= defaultSuperConstructor(cls);
           Initializer initializer;
           if (superTarget == null) {
-            builder.addCompileTimeError(
+            builder.addProblem(
                 templateSuperclassHasNoDefaultConstructor
                     .withArguments(cls.superclass.name),
                 constructor.fileOffset,
@@ -716,7 +712,7 @@
         }
         constructorInitializedFields[constructor] = myInitializedFields;
         if (constructor.isConst && nonFinalFields.isNotEmpty) {
-          builder.addCompileTimeError(messageConstConstructorNonFinalField,
+          builder.addProblem(messageConstConstructorNonFinalField,
               constructor.fileOffset, noLength,
               context: nonFinalFields
                   .map((field) => messageConstConstructorNonFinalFieldCause
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
index 41a0d14..017c9fc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
@@ -11,8 +11,6 @@
 
 import '../fasta_codes.dart' show templateTypeArgumentsOnTypeVariable;
 
-import '../source/outline_listener.dart';
-
 import 'kernel_builder.dart'
     show
         KernelClassBuilder,
@@ -25,7 +23,6 @@
 
 class KernelTypeVariableBuilder
     extends TypeVariableBuilder<KernelTypeBuilder, DartType> {
-  final OutlineListener outlineListener;
   final TypeParameter actualParameter;
 
   KernelTypeVariableBuilder actualOrigin;
@@ -37,16 +34,14 @@
       [KernelTypeBuilder bound, TypeParameter actual])
       // TODO(32378): We would like to use '??' here instead, but in conjuction
       // with '..', it crashes Dart2JS.
-      : outlineListener = compilationUnit?.outlineListener,
-        actualParameter = actual != null
+      : actualParameter = actual != null
             ? (actual..fileOffset = charOffset)
             : (new TypeParameter(name, null)..fileOffset = charOffset),
         super(name, bound, compilationUnit, charOffset);
 
   KernelTypeVariableBuilder.fromKernel(
       TypeParameter parameter, KernelLibraryBuilder compilationUnit)
-      : outlineListener = null,
-        actualParameter = parameter,
+      : actualParameter = parameter,
         super(parameter.name, null, compilationUnit, parameter.fileOffset);
 
   @override
@@ -54,9 +49,6 @@
 
   TypeParameter get parameter => origin.actualParameter;
 
-  @override
-  bool get hasTarget => true;
-
   TypeParameter get target => parameter;
 
   DartType buildType(
@@ -84,8 +76,7 @@
   }
 
   KernelTypeBuilder asTypeBuilder() {
-    return new KernelNamedTypeBuilder(outlineListener, charOffset, name, null)
-      ..bind(this);
+    return new KernelNamedTypeBuilder(name, null)..bind(this);
   }
 
   void finish(LibraryBuilder library, KernelClassBuilder object,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart
index 5936507..fb688d1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart
@@ -28,9 +28,6 @@
 
   bool get isFinal => variable.isFinal;
 
-  @override
-  bool get hasTarget => true;
-
   VariableDeclaration get target => variable;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart b/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart
index e56e209..6a15522 100644
--- a/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart
@@ -2,8 +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.
 
-import 'package:kernel/kernel.dart'
-    show LibraryDependency, Member, MetadataRepository, NamedNode, TreeNode;
+import 'package:kernel/kernel.dart' show Member, MetadataRepository, NamedNode;
 
 /// The collector to add target specific metadata to.
 abstract class MetadataCollector {
@@ -11,11 +10,7 @@
   /// to a component, metadata is serialized with the component.
   MetadataRepository get repository;
 
-  void setCodeStartEnd(TreeNode node, int start, int end);
-
   void setConstructorNameOffset(Member node, Object name);
 
   void setDocumentationComment(NamedNode node, String comment);
-
-  void setImportPrefixOffset(LibraryDependency node, int offset);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index dff7075..a45b739 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -64,8 +64,7 @@
       }
     }
     if (arguments != null) {
-      return new KernelNamedTypeBuilder(
-          type.outlineListener, type.charOffset, type.name, arguments)
+      return new KernelNamedTypeBuilder(type.name, arguments)
         ..bind(type.declaration);
     }
     return type;
@@ -114,9 +113,7 @@
               formal.name,
               formal.hasThis,
               formal.parent,
-              formal.charOffset,
-              formal.codeStartOffset,
-              formal.codeEndOffset);
+              formal.charOffset);
           changed = true;
         } else {
           formals[i] = formal;
@@ -132,8 +129,7 @@
     }
 
     if (changed) {
-      return new KernelFunctionTypeBuilder(type.outlineListener,
-          type.charOffset, returnType, variables, formals);
+      return new KernelFunctionTypeBuilder(returnType, variables, formals);
     }
 
     return type;
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index e37afdc..f1f9d5c 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -21,17 +21,14 @@
         Template,
         messagePlatformPrivateLibraryAccess,
         templateInternalProblemContextSeverity,
-        templateInternalProblemMissingSeverity,
         templateSourceBodySummary;
 
 import 'problems.dart' show internalProblem;
 
-import 'rewrite_severity.dart' as rewrite_severity;
+import 'rewrite_severity.dart' show rewriteSeverity;
 
 import 'severity.dart' show Severity;
 
-import 'source/outline_listener.dart';
-
 import 'target_implementation.dart' show TargetImplementation;
 
 import 'ticker.dart' show Ticker;
@@ -145,8 +142,8 @@
         !accessor.isPatch &&
         !target.backendTarget
             .allowPlatformPrivateLibraryAccess(accessor.uri, uri)) {
-      accessor.addCompileTimeError(messagePlatformPrivateLibraryAccess,
-          charOffset, noLength, accessor.fileUri);
+      accessor.addProblem(messagePlatformPrivateLibraryAccess, charOffset,
+          noLength, accessor.fileUri);
     }
     return builder;
   }
@@ -181,8 +178,6 @@
     logSummary(outlineSummaryTemplate);
   }
 
-  OutlineListener createOutlineListener(Uri fileUri) => null;
-
   void logSummary(Template<SummaryTemplate> template) {
     ticker.log((Duration elapsed, Duration sinceStart) {
       int libraryCount = 0;
@@ -201,37 +196,19 @@
   /// Builds all the method bodies found in the given [library].
   Future<Null> buildBody(covariant LibraryBuilder library);
 
-  /// Register [message] as a compile-time error.
-  ///
-  /// If [wasHandled] is true, this error is added to [handledErrors],
-  /// otherwise it is added to [unhandledErrors].
-  void addCompileTimeError(
-      Message message, int charOffset, int length, Uri fileUri,
-      {bool wasHandled: false, List<LocatedMessage> context}) {
-    addMessage(message, charOffset, length, fileUri, Severity.error,
-        wasHandled: wasHandled, context: context);
-  }
-
   /// Register [message] as a problem with a severity determined by the
   /// intrinsic severity of the message.
   void addProblem(Message message, int charOffset, int length, Uri fileUri,
-      {List<LocatedMessage> context}) {
-    Severity severity = message.code.severity;
-    if (severity == null) {
-      addMessage(message, charOffset, length, fileUri, Severity.error,
-          context: context);
-      internalProblem(
-          templateInternalProblemMissingSeverity
-              .withArguments(message.code.name),
-          charOffset,
-          fileUri);
-    }
+      {bool wasHandled: false,
+      List<LocatedMessage> context,
+      Severity severity}) {
+    severity ??= message.code.severity;
     if (severity == Severity.errorLegacyWarning) {
       severity =
           target.backendTarget.strongMode ? Severity.error : Severity.warning;
     }
     addMessage(message, charOffset, length, fileUri, severity,
-        context: context);
+        wasHandled: wasHandled, context: context);
   }
 
   /// All messages reported by the compiler (errors, warnings, etc.) are routed
@@ -240,10 +217,14 @@
   /// Returns true if the message is new, that is, not previously
   /// reported. This is important as some parser errors may be reported up to
   /// three times by `OutlineBuilder`, `DietListener`, and `BodyBuilder`.
+  ///
+  /// If [severity] is `Severity.error`, the message is added to
+  /// [handledErrors] if [wasHandled] is true or to [unhandledErrors] if
+  /// [wasHandled] is false.
   bool addMessage(Message message, int charOffset, int length, Uri fileUri,
       Severity severity,
       {bool wasHandled: false, List<LocatedMessage> context}) {
-    severity = rewriteSeverity(severity, message, fileUri);
+    severity = rewriteSeverity(severity, message.code, fileUri);
     if (severity == Severity.ignored) return false;
     String trace = """
 message: ${message.message}
@@ -271,10 +252,6 @@
     return true;
   }
 
-  Severity rewriteSeverity(Severity severity, Message message, Uri fileUri) {
-    return rewrite_severity.rewriteSeverity(severity, message.code, fileUri);
-  }
-
   Declaration getAbstractClassInstantiationError() {
     return target.getAbstractClassInstantiationError(this);
   }
diff --git a/pkg/front_end/lib/src/fasta/parser.dart b/pkg/front_end/lib/src/fasta/parser.dart
index e5349ff..54082f1 100644
--- a/pkg/front_end/lib/src/fasta/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser.dart
@@ -33,12 +33,7 @@
 export 'parser/top_level_parser.dart' show TopLevelParser;
 
 export 'parser/util.dart'
-    show
-        endOffsetForToken,
-        lengthForToken,
-        lengthOfSpan,
-        offsetForToken,
-        optional;
+    show lengthForToken, lengthOfSpan, offsetForToken, optional;
 
 class ErrorCollectingListener extends Listener {
   final List<ParserError> recoverableErrors = <ParserError>[];
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 6ed6457..0a6ea11 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -172,10 +172,10 @@
   }
 
   @override
-  void beginFormalParameter(Token beginToken, MemberKind kind,
-      Token covariantToken, Token varFinalOrConst) {
+  void beginFormalParameter(Token token, MemberKind kind, Token covariantToken,
+      Token varFinalOrConst) {
     listener?.beginFormalParameter(
-        beginToken, kind, covariantToken, varFinalOrConst);
+        token, kind, covariantToken, varFinalOrConst);
   }
 
   @override
@@ -285,9 +285,9 @@
 
   @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token name) {
-    listener?.beginMethod(
-        externalToken, staticToken, covariantToken, varFinalOrConst, name);
+      Token varFinalOrConst, Token getOrSet, Token name) {
+    listener?.beginMethod(externalToken, staticToken, covariantToken,
+        varFinalOrConst, getOrSet, name);
   }
 
   @override
@@ -607,15 +607,10 @@
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     listener?.endFormalParameter(
-        thisKeyword, periodAfterThis, nameToken, kind, memberKind, endToken);
+        thisKeyword, periodAfterThis, nameToken, kind, memberKind);
   }
 
   @override
@@ -1263,6 +1258,11 @@
   }
 
   @override
+  void handleRecoverMixinHeader() {
+    listener?.handleRecoverMixinHeader();
+  }
+
+  @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
     if (forwardErrors) {
diff --git a/pkg/front_end/lib/src/fasta/parser/identifier_context.dart b/pkg/front_end/lib/src/fasta/parser/identifier_context.dart
index 83d9acd..460fec9 100644
--- a/pkg/front_end/lib/src/fasta/parser/identifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/identifier_context.dart
@@ -240,9 +240,6 @@
   /// expressions are required.
   final bool allowedInConstantExpression;
 
-  /// Indicated whether the `isSynthetic` flag is required for the identifier.
-  final bool requiresSyntheticFlag;
-
   final Template<_MessageWithArgument<Token>> recoveryTemplate;
 
   const IdentifierContext(this._name,
@@ -252,7 +249,6 @@
       this.isContinuation: false,
       this.isScopeReference: false,
       this.isBuiltInIdentifierAllowed: true,
-      this.requiresSyntheticFlag: false,
       bool allowedInConstantExpression,
       this.recoveryTemplate: templateExpectedIdentifier})
       : this.allowedInConstantExpression =
diff --git a/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart b/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
index 078f2d6..9814c3b 100644
--- a/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
+++ b/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
@@ -81,8 +81,7 @@
 
 /// See [IdentifierContext.combinator].
 class CombinatorIdentifierContext extends IdentifierContext {
-  const CombinatorIdentifierContext()
-      : super('combinator', requiresSyntheticFlag: true);
+  const CombinatorIdentifierContext() : super('combinator');
 
   @override
   Token ensureIdentifier(Token token, Parser parser) {
@@ -155,12 +154,10 @@
 
 /// See [IdentifierContext.dottedName].
 class DottedNameIdentifierContext extends IdentifierContext {
-  const DottedNameIdentifierContext()
-      : super('dottedName', requiresSyntheticFlag: true);
+  const DottedNameIdentifierContext() : super('dottedName');
 
   const DottedNameIdentifierContext.continuation()
-      : super('dottedNameContinuation',
-            isContinuation: true, requiresSyntheticFlag: true);
+      : super('dottedNameContinuation', isContinuation: true);
 
   @override
   Token ensureIdentifier(Token token, Parser parser) {
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index 803363f..0d9dfb9 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -155,6 +155,17 @@
     logEvent("MixinHeader");
   }
 
+  /// Handle recovery associated with a mixin header.
+  /// This may be called multiple times after [handleMixinHeader]
+  /// to recover information about the previous mixin header.
+  /// The substructures are a subset of
+  /// and in the same order as [handleMixinHeader]
+  /// - on types
+  /// - implemented types
+  void handleRecoverMixinHeader() {
+    logEvent("RecoverMixinHeader");
+  }
+
   /// Handle the end of a mixin declaration.  Substructures:
   /// - mixin header
   /// - class or mixin body
@@ -257,19 +268,11 @@
     logEvent("FactoryMethod");
   }
 
-  /// [beginToken] is the first token of the parameter, e.g. `int` in
-  /// `int a`, or `this` in `C(this.f)`.
-  void beginFormalParameter(Token beginToken, MemberKind kind,
-      Token covariantToken, Token varFinalOrConst) {}
+  void beginFormalParameter(Token token, MemberKind kind, Token covariantToken,
+      Token varFinalOrConst) {}
 
-  /// [endToken] is the last token of the parameter, e.g. `1` in `{int a = 1}`.
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     logEvent("FormalParameter");
   }
 
@@ -679,7 +682,7 @@
   /// Handle the beginning of a method declaration.  Substructures:
   /// - metadata
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token name) {}
+      Token varFinalOrConst, Token getOrSet, Token name) {}
 
   /// Handle the end of a method declaration.  Substructures:
   /// - metadata
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 1885d3b..9bbe503 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -73,7 +73,10 @@
 import 'modifier_context.dart' show ModifierRecoveryContext, isModifier;
 
 import 'recovery_listeners.dart'
-    show ClassHeaderRecoveryListener, ImportRecoveryListener;
+    show
+        ClassHeaderRecoveryListener,
+        ImportRecoveryListener,
+        MixinHeaderRecoveryListener;
 
 import 'token_stream_rewriter.dart' show TokenStreamRewriter;
 
@@ -1432,8 +1435,8 @@
     } else {
       listener.handleFormalParameterWithoutValue(next);
     }
-    listener.endFormalParameter(thisKeyword, periodAfterThis, nameToken,
-        parameterKind, memberKind, token);
+    listener.endFormalParameter(
+        thisKeyword, periodAfterThis, nameToken, parameterKind, memberKind);
     return token;
   }
 
@@ -1869,12 +1872,13 @@
     assert(optional('mixin', mixinKeyword));
     Token name = ensureIdentifier(
         mixinKeyword, IdentifierContext.classOrMixinDeclaration);
-    Token token = computeTypeParamOrArg(name, true).parseVariables(name, this);
+    Token headerStart =
+        computeTypeParamOrArg(name, true).parseVariables(name, this);
     listener.beginMixinDeclaration(mixinKeyword, name);
-    token = parseMixinHeaderOpt(token, mixinKeyword);
+    Token token = parseMixinHeaderOpt(headerStart, mixinKeyword);
     if (!optional('{', token.next)) {
       // Recovery
-      token = parseMixinHeaderRecovery(mixinKeyword);
+      token = parseMixinHeaderRecovery(token, mixinKeyword, headerStart);
       ensureBlock(token, fasta.templateExpectedClassOrMixinBody);
     }
     token = parseClassOrMixinBody(token);
@@ -1889,9 +1893,67 @@
     return token;
   }
 
-  Token parseMixinHeaderRecovery(Token mixinKeyword) {
-    // TODO(danrubel): Add mixin recovery similiar to class recovery.
-    return mixinKeyword;
+  Token parseMixinHeaderRecovery(
+      Token token, Token mixinKeyword, Token headerStart) {
+    final primaryListener = listener;
+    final recoveryListener = new MixinHeaderRecoveryListener();
+
+    // Reparse to determine which clauses have already been parsed
+    // but intercept the events so they are not sent to the primary listener.
+    listener = recoveryListener;
+    token = parseMixinHeaderOpt(headerStart, mixinKeyword);
+    bool hasOn = recoveryListener.onKeyword != null;
+    bool hasImplements = recoveryListener.implementsKeyword != null;
+
+    // Update the recovery listener to forward subsequent events
+    // to the primary listener.
+    recoveryListener.listener = primaryListener;
+
+    // Parse additional out-of-order clauses
+    Token start;
+    do {
+      start = token;
+
+      // Check for extraneous token in the middle of a class header.
+      token = skipUnexpectedTokenOpt(
+          token, const <String>['on', 'implements', '{']);
+
+      // During recovery, clauses are parsed in the same order and
+      // generate the same events as in the parseMixinHeaderOpt method above.
+      recoveryListener.clear();
+      token = parseMixinOnOpt(token);
+
+      if (recoveryListener.onKeyword != null) {
+        if (hasOn) {
+          reportRecoverableError(
+              recoveryListener.onKeyword, fasta.messageMultipleOnClauses);
+        } else {
+          if (hasImplements) {
+            reportRecoverableError(
+                recoveryListener.onKeyword, fasta.messageImplementsBeforeOn);
+          }
+          hasOn = true;
+        }
+      }
+
+      token = parseClassOrMixinImplementsOpt(token);
+
+      if (recoveryListener.implementsKeyword != null) {
+        if (hasImplements) {
+          reportRecoverableError(recoveryListener.implementsKeyword,
+              fasta.messageMultipleImplements);
+        } else {
+          hasImplements = true;
+        }
+      }
+
+      listener.handleRecoverMixinHeader();
+
+      // Exit if a mixin body is detected, or if no progress has been made
+    } while (!optional('{', token.next) && start != token);
+
+    listener = primaryListener;
+    return token;
   }
 
   /// ```
@@ -2429,9 +2491,23 @@
       next = token.next;
     }
     if (!optional('(', next)) {
-      reportRecoverableError(
-          token, fasta.templateExpectedAfterButGot.withArguments('('));
-      rewriter.insertParens(token, false);
+      // Recovery
+      if (optional('?.', next)) {
+        // An error for `super?.` is reported in parseSuperExpression.
+        token = next;
+        next = token.next;
+        if (!next.isIdentifier) {
+          // Insert a synthetic identifier but don't report another error.
+          next = rewriter.insertSyntheticIdentifier(token);
+        }
+        token = next;
+        next = token.next;
+      }
+      if (!optional('(', next)) {
+        reportRecoverableError(
+            next, fasta.templateExpectedAfterButGot.withArguments('('));
+        rewriter.insertParens(token, false);
+      }
     }
     return parseInitializerExpressionRest(start);
   }
@@ -2868,8 +2944,8 @@
 
     // TODO(danrubel): Consider parsing the name before calling beginMethod
     // rather than passing the name token into beginMethod.
-    listener.beginMethod(
-        externalToken, staticToken, covariantToken, varFinalOrConst, name);
+    listener.beginMethod(externalToken, staticToken, covariantToken,
+        varFinalOrConst, getOrSet, name);
 
     Token token = typeInfo.parseType(beforeType, this);
     assert(token.next == (getOrSet ?? name));
@@ -3596,20 +3672,15 @@
     assert(precedence >= 1);
     assert(precedence <= SELECTOR_PRECEDENCE);
     token = parseUnaryExpression(token, allowCascades);
-    Token next = token.next;
-    TokenType type = next.type;
-    int tokenLevel = type.precedence;
-    Token typeArguments;
     TypeParamOrArgInfo typeArg = computeMethodTypeArguments(token);
     if (typeArg != noTypeParamOrArg) {
       // For example a(b)<T>(c), where token is before '<'.
-      typeArguments = next;
       token = typeArg.parseArguments(token, this);
-      next = token.next;
-      assert(optional('(', next));
-      type = next.type;
-      tokenLevel = type.precedence;
+      assert(optional('(', token.next));
     }
+    Token next = token.next;
+    TokenType type = next.type;
+    int tokenLevel = type.precedence;
     for (int level = tokenLevel; level >= precedence; --level) {
       int lastBinaryExpressionLevel = -1;
       while (identical(tokenLevel, level)) {
@@ -3646,8 +3717,7 @@
             listener.endBinaryExpression(operator);
           } else if ((identical(type, TokenType.OPEN_PAREN)) ||
               (identical(type, TokenType.OPEN_SQUARE_BRACKET))) {
-            token = parseArgumentOrIndexStar(token, typeArguments);
-            next = token.next;
+            token = parseArgumentOrIndexStar(token, typeArg);
           } else if (identical(type, TokenType.INDEX)) {
             BeginToken replacement = link(
                 new BeginToken(TokenType.OPEN_SQUARE_BRACKET, next.charOffset,
@@ -3655,7 +3725,7 @@
                 new Token(TokenType.CLOSE_SQUARE_BRACKET, next.charOffset + 1));
             rewriter.replaceTokenFollowing(token, replacement);
             replacement.endToken = replacement.next;
-            token = parseArgumentOrIndexStar(token, null);
+            token = parseArgumentOrIndexStar(token, noTypeParamOrArg);
           } else {
             // Recovery
             reportRecoverableErrorWithToken(
@@ -3699,7 +3769,7 @@
     assert(optional('..', cascadeOperator));
     listener.beginCascade(cascadeOperator);
     if (optional('[', token.next)) {
-      token = parseArgumentOrIndexStar(token, null);
+      token = parseArgumentOrIndexStar(token, noTypeParamOrArg);
     } else {
       token = parseSend(token, IdentifierContext.expressionContinuation);
       listener.endBinaryExpression(cascadeOperator);
@@ -3714,16 +3784,14 @@
         next = token.next;
         listener.endBinaryExpression(period);
       }
-      Token typeArguments;
       TypeParamOrArgInfo typeArg = computeMethodTypeArguments(token);
       if (typeArg != noTypeParamOrArg) {
         // For example a(b)..<T>(c), where token is '<'.
-        typeArguments = next;
         token = typeArg.parseArguments(token, this);
         next = token.next;
         assert(optional('(', next));
       }
-      token = parseArgumentOrIndexStar(token, typeArguments);
+      token = parseArgumentOrIndexStar(token, typeArg);
       next = token.next;
     } while (!identical(mark, token));
 
@@ -3794,15 +3862,12 @@
     return parsePrimary(token, IdentifierContext.expression);
   }
 
-  Token parseArgumentOrIndexStar(Token token, Token typeArguments) {
-    // TODO(danrubel): Accept the token before typeArguments
-    // TODO(brianwilkerson): Consider replacing `typeArguments` with a boolean
-    // flag, given that the only thing it's used for is to compare it with null.
+  Token parseArgumentOrIndexStar(Token token, TypeParamOrArgInfo typeArg) {
     Token next = token.next;
     Token beginToken = next;
     while (true) {
       if (optional('[', next)) {
-        assert(typeArguments == null);
+        assert(typeArg == noTypeParamOrArg);
         Token openSquareBracket = next;
         bool old = mayParseFunctionExpressions;
         mayParseFunctionExpressions = true;
@@ -3817,15 +3882,26 @@
         }
         listener.handleIndexedExpression(openSquareBracket, next);
         token = next;
+        typeArg = computeMethodTypeArguments(token);
+        if (typeArg != noTypeParamOrArg) {
+          // For example a[b]<T>(c), where token is before '<'.
+          token = typeArg.parseArguments(token, this);
+          assert(optional('(', token.next));
+        }
         next = token.next;
       } else if (optional('(', next)) {
-        if (typeArguments == null) {
+        if (typeArg == noTypeParamOrArg) {
           listener.handleNoTypeArguments(next);
         }
         token = parseArguments(token);
+        typeArg = computeMethodTypeArguments(token);
+        if (typeArg != noTypeParamOrArg) {
+          // For example a(b)<T>(c), where token is before '<'.
+          token = typeArg.parseArguments(token, this);
+          assert(optional('(', token.next));
+        }
         next = token.next;
         listener.handleSend(beginToken, next);
-        typeArguments = null;
       } else {
         break;
       }
diff --git a/pkg/front_end/lib/src/fasta/parser/recovery_listeners.dart b/pkg/front_end/lib/src/fasta/parser/recovery_listeners.dart
index 9ffcb3e..0508ecd 100644
--- a/pkg/front_end/lib/src/fasta/parser/recovery_listeners.dart
+++ b/pkg/front_end/lib/src/fasta/parser/recovery_listeners.dart
@@ -71,3 +71,26 @@
     super.handleImportPrefix(deferredKeyword, asKeyword);
   }
 }
+
+class MixinHeaderRecoveryListener extends ForwardingListener {
+  Token onKeyword;
+  Token implementsKeyword;
+
+  void clear() {
+    onKeyword = null;
+    implementsKeyword = null;
+  }
+
+  @override
+  void handleClassOrMixinImplements(
+      Token implementsKeyword, int interfacesCount) {
+    this.implementsKeyword = implementsKeyword;
+    super.handleClassOrMixinImplements(implementsKeyword, interfacesCount);
+  }
+
+  @override
+  void handleMixinOn(Token onKeyword, int typeCount) {
+    this.onKeyword = onKeyword;
+    super.handleMixinOn(onKeyword, typeCount);
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/parser/util.dart b/pkg/front_end/lib/src/fasta/parser/util.dart
index f617749..50937cb6 100644
--- a/pkg/front_end/lib/src/fasta/parser/util.dart
+++ b/pkg/front_end/lib/src/fasta/parser/util.dart
@@ -63,12 +63,6 @@
   return token == null ? TreeNode.noOffset : token.offset;
 }
 
-/// A null-aware alternative to `token.end`.  If [token] is `null`, returns
-/// `TreeNode.noOffset`.
-int endOffsetForToken(Token token) {
-  return token == null ? TreeNode.noOffset : token.end;
-}
-
 bool isDigit(int c) => c >= 0x30 && c <= 0x39;
 
 bool isLetter(int c) => c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A;
diff --git a/pkg/front_end/lib/src/fasta/scanner.dart b/pkg/front_end/lib/src/fasta/scanner.dart
index 21de9c1..3229f4a 100644
--- a/pkg/front_end/lib/src/fasta/scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner.dart
@@ -58,15 +58,12 @@
 /// Scan/tokenize the given UTF8 [bytes].
 /// If [recover] is null, then the [defaultRecoveryStrategy] is used.
 ScannerResult scan(List<int> bytes,
-    {bool includeComments: false,
-    bool scanGenericMethodComments: false,
-    Recover recover}) {
+    {bool includeComments: false, Recover recover}) {
   if (bytes.last != 0) {
     throw new ArgumentError("[bytes]: the last byte must be null.");
   }
-  Scanner scanner = new Utf8BytesScanner(bytes,
-      includeComments: includeComments,
-      scanGenericMethodComments: scanGenericMethodComments);
+  Scanner scanner =
+      new Utf8BytesScanner(bytes, includeComments: includeComments);
   return _tokenizeAndRecover(scanner, recover, bytes: bytes);
 }
 
@@ -74,13 +71,11 @@
 /// If [recover] is null, then the [defaultRecoveryStrategy] is used.
 ScannerResult scanString(String source,
     {bool includeComments: false,
-    bool scanGenericMethodComments: false,
     bool scanLazyAssignmentOperators: false,
     Recover recover}) {
   assert(source != null, 'source must not be null');
-  StringScanner scanner = new StringScanner(source,
-      includeComments: includeComments,
-      scanGenericMethodComments: scanGenericMethodComments);
+  StringScanner scanner =
+      new StringScanner(source, includeComments: includeComments);
   return _tokenizeAndRecover(scanner, recover, source: source);
 }
 
diff --git a/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart
index 74d577b..b680943 100644
--- a/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart
@@ -44,12 +44,6 @@
   final bool includeComments;
 
   /**
-   * A flag indicating whether to parse generic method comments, of the form
-   * `/*=T*/` and `/*<T>*/`.  The flag [includeComments] must be set to `true`.
-   */
-  bool scanGenericMethodComments = false;
-
-  /**
    * The string offset for the next token that will be created.
    *
    * Note that in the [Utf8BytesScanner], [stringOffset] and [scanOffset] values
@@ -86,8 +80,7 @@
 
   final List<int> lineStarts;
 
-  AbstractScanner(this.includeComments, this.scanGenericMethodComments,
-      {int numberOfBytesHint})
+  AbstractScanner(this.includeComments, {int numberOfBytesHint})
       : lineStarts = new LineStarts(numberOfBytesHint) {
     this.tail = this.tokens;
   }
@@ -892,26 +885,6 @@
   void appendComment(int start, TokenType type, bool asciiOnly) {
     if (!includeComments) return;
     CommentToken newComment = createCommentToken(type, start, asciiOnly);
-    if (scanGenericMethodComments) {
-      String value = newComment.lexeme;
-      int length = value.length;
-      if (length > 5 &&
-          value.codeUnitAt(0) == $SLASH &&
-          value.codeUnitAt(1) == $STAR &&
-          value.codeUnitAt(2) == $EQ) {
-        newComment = new CommentToken.fromString(
-            TokenType.GENERIC_METHOD_TYPE_ASSIGN, value, start);
-      } else if (length > 6 &&
-          value.codeUnitAt(0) == $SLASH &&
-          value.codeUnitAt(1) == $STAR &&
-          value.codeUnitAt(2) == $LT &&
-          value.codeUnitAt(length - 1) == $SLASH &&
-          value.codeUnitAt(length - 2) == $STAR &&
-          value.codeUnitAt(length - 3) == $GT) {
-        newComment = new CommentToken.fromString(
-            TokenType.GENERIC_METHOD_TYPE_LIST, value, start);
-      }
-    }
     _appendToCommentStream(newComment);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart
index 5d8487a..b6e0f09 100644
--- a/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart
@@ -27,10 +27,8 @@
 abstract class ArrayBasedScanner extends AbstractScanner {
   bool hasErrors = false;
 
-  ArrayBasedScanner(bool includeComments, bool scanGenericMethodComments,
-      {int numberOfBytesHint})
-      : super(includeComments, scanGenericMethodComments,
-            numberOfBytesHint: numberOfBytesHint);
+  ArrayBasedScanner(bool includeComments, {int numberOfBytesHint})
+      : super(includeComments, numberOfBytesHint: numberOfBytesHint);
 
   /**
    * The stack of open groups, e.g [: { ... ( .. :]
diff --git a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart
index 7de4ef6..b5cb240 100644
--- a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart
@@ -26,11 +26,9 @@
   int scanOffset = -1;
 
   StringScanner(String string,
-      {bool includeComments: false,
-      bool scanGenericMethodComments: false,
-      bool scanLazyAssignmentOperators: false})
+      {bool includeComments: false, bool scanLazyAssignmentOperators: false})
       : string = ensureZeroTermination(string),
-        super(includeComments, scanGenericMethodComments);
+        super(includeComments);
 
   static String ensureZeroTermination(String string) {
     return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0)
diff --git a/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart
index 9442bf9..eec14d4 100644
--- a/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart
+++ b/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart
@@ -81,10 +81,8 @@
    * array whose last element is '0' to signal the end of the file. If this
    * is not the case, the entire array is copied before scanning.
    */
-  Utf8BytesScanner(this.bytes,
-      {bool includeComments: false, bool scanGenericMethodComments: false})
-      : super(includeComments, scanGenericMethodComments,
-            numberOfBytesHint: bytes.length) {
+  Utf8BytesScanner(this.bytes, {bool includeComments: false})
+      : super(includeComments, numberOfBytesHint: bytes.length) {
     assert(bytes.last == 0);
     // Skip a leading BOM.
     if (containsBomAt(0)) byteOffset += 3;
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 f4159f2..ad4a1df 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -32,7 +32,11 @@
     show deprecated_InputError, deprecated_inputError;
 
 import '../fasta_codes.dart'
-    show Message, messageExpectedBlockToSkip, templateInternalProblemNotFound;
+    show
+        LocatedMessage,
+        Message,
+        messageExpectedBlockToSkip,
+        templateInternalProblemNotFound;
 
 import '../kernel/kernel_body_builder.dart' show KernelBodyBuilder;
 
@@ -42,9 +46,6 @@
 import '../kernel/kernel_function_type_alias_builder.dart'
     show KernelFunctionTypeAliasBuilder;
 
-import '../kernel/kernel_procedure_builder.dart'
-    show KernelRedirectingFactoryBuilder;
-
 import '../parser.dart' show Assert, MemberKind, Parser, optional;
 
 import '../problems.dart' show DebugAbort, internalProblem, unexpected;
@@ -76,11 +77,6 @@
   int importExportDirectiveIndex = 0;
   int partDirectiveIndex = 0;
 
-  /// The unit currently being parsed, might be the same as [library] when
-  /// the defining unit of the library is being parsed, updated from outside
-  /// before parsing each part.
-  SourceLibraryBuilder currentUnit;
-
   ClassBuilder currentClass;
 
   /// For top-level declarations, this is the library scope. For class members,
@@ -126,8 +122,7 @@
       Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
     debugEvent("PartOf");
     if (hasName) discard(1);
-    Token metadata = pop();
-    parseMetadata(currentUnit, metadata, currentUnit.target);
+    discard(1); // Metadata.
   }
 
   @override
@@ -288,8 +283,9 @@
     String name = pop();
     Token metadata = pop();
     checkEmpty(beginToken.charOffset);
-    buildFunctionBody(bodyToken, lookupBuilder(beginToken, getOrSet, name),
-        MemberKind.TopLevelMethod, metadata);
+    final StackListener listener =
+        createFunctionListener(lookupBuilder(beginToken, getOrSet, name));
+    buildFunctionBody(listener, bodyToken, metadata, MemberKind.TopLevelMethod);
   }
 
   @override
@@ -324,7 +320,8 @@
     debugEvent("handleQualified");
     String suffix = pop();
     var prefix = pop();
-    push(new QualifiedName(prefix, suffix, period.charOffset));
+    assert(identical(suffix, period.next.lexeme));
+    push(new QualifiedName(prefix, period.next));
   }
 
   @override
@@ -498,37 +495,16 @@
     Object name = pop();
     Token metadata = pop();
     checkEmpty(beginToken.charOffset);
-    if (bodyToken == null || optional("=", bodyToken.endGroup.next)) {
-      // TODO(dmitryas): Consider building redirecting factory bodies here.
-      KernelRedirectingFactoryBuilder factory =
-          lookupConstructor(beginToken, name);
-      parseMetadata(factory, metadata, factory.target);
 
-      if (factory.formals != null) {
-        List<int> metadataOffsets = new List<int>(factory.formals.length);
-        for (int i = 0; i < factory.formals.length; ++i) {
-          List<MetadataBuilder> metadata = factory.formals[i].metadata;
-          if (metadata != null && metadata.length > 0) {
-            // [parseMetadata] is using [Parser.parseMetadataStar] under the
-            // hood, so we only need the offset of the first annotation.
-            metadataOffsets[i] = metadata[0].charOffset;
-          } else {
-            metadataOffsets[i] = -1;
-          }
-        }
-        List<Token> metadataTokens =
-            tokensForOffsets(beginToken, endToken, metadataOffsets);
-        for (int i = 0; i < factory.formals.length; ++i) {
-          Token metadata = metadataTokens[i];
-          if (metadata == null) continue;
-          parseMetadata(
-              factory.formals[i], metadata, factory.formals[i].target);
-        }
-      }
-      return;
+    ProcedureBuilder builder = lookupConstructor(beginToken, name);
+    if (bodyToken == null || optional("=", bodyToken.endGroup.next)) {
+      parseMetadata(builder, metadata, builder.target);
+      buildRedirectingFactoryMethod(
+          bodyToken, builder, MemberKind.Factory, metadata);
+    } else {
+      buildFunctionBody(createFunctionListener(builder), bodyToken, metadata,
+          MemberKind.Factory);
     }
-    buildFunctionBody(bodyToken, lookupConstructor(beginToken, name),
-        MemberKind.Factory, metadata);
   }
 
   @override
@@ -575,10 +551,12 @@
       builder = lookupBuilder(beginToken, getOrSet, name);
     }
     buildFunctionBody(
+        createFunctionListener(builder),
         beginParam,
-        builder,
-        builder.isStatic ? MemberKind.StaticMethod : MemberKind.NonStaticMethod,
-        metadata);
+        metadata,
+        builder.isStatic
+            ? MemberKind.StaticMethod
+            : MemberKind.NonStaticMethod);
   }
 
   StackListener createListener(
@@ -610,19 +588,40 @@
       ..constantContext = constantContext;
   }
 
-  void buildFunctionBody(
-      Token token, ProcedureBuilder builder, MemberKind kind, Token metadata) {
-    Scope typeParameterScope = builder.computeTypeParameterScope(memberScope);
-    Scope formalParameterScope =
+  StackListener createFunctionListener(ProcedureBuilder builder) {
+    final Scope typeParameterScope =
+        builder.computeTypeParameterScope(memberScope);
+    final Scope formalParameterScope =
         builder.computeFormalParameterScope(typeParameterScope);
     assert(typeParameterScope != null);
     assert(formalParameterScope != null);
-    parseFunctionBody(
-        createListener(builder, typeParameterScope, builder.isInstanceMember,
-            formalParameterScope),
-        token,
-        metadata,
-        kind);
+    return createListener(builder, typeParameterScope, builder.isInstanceMember,
+        formalParameterScope);
+  }
+
+  void buildRedirectingFactoryMethod(
+      Token token, ProcedureBuilder builder, MemberKind kind, Token metadata) {
+    final StackListener listener = createFunctionListener(builder);
+    try {
+      Parser parser = new Parser(listener);
+
+      if (metadata != null) {
+        parser.parseMetadataStar(parser.syntheticPreviousToken(metadata));
+        listener.pop();
+      }
+
+      token = parser.parseFormalParametersOpt(
+          parser.syntheticPreviousToken(token), MemberKind.Factory);
+
+      listener.pop();
+      listener.checkEmpty(token.next.charOffset);
+    } on DebugAbort {
+      rethrow;
+    } on deprecated_InputError {
+      rethrow;
+    } catch (e, s) {
+      throw new Crash(uri, token.charOffset, e, s);
+    }
   }
 
   void buildFields(int count, Token token, bool isTopLevel) {
@@ -751,7 +750,7 @@
     listener.finishFields();
   }
 
-  void parseFunctionBody(StackListener listener, Token startToken,
+  void buildFunctionBody(StackListener listener, Token startToken,
       Token metadata, MemberKind kind) {
     Token token = startToken;
     try {
@@ -823,14 +822,11 @@
   Declaration lookupConstructor(Token token, Object nameOrQualified) {
     assert(currentClass != null);
     Declaration declaration;
-    String name;
     String suffix;
     if (nameOrQualified is QualifiedName) {
-      name = nameOrQualified.prefix;
-      suffix = nameOrQualified.suffix;
+      suffix = nameOrQualified.name;
     } else {
-      name = nameOrQualified;
-      suffix = name == currentClass.name ? "" : name;
+      suffix = nameOrQualified == currentClass.name ? "" : nameOrQualified;
     }
     declaration = currentClass.constructors.local[suffix];
     checkBuilder(token, declaration, nameOrQualified);
@@ -852,12 +848,10 @@
   }
 
   @override
-  void addCompileTimeError(Message message, int charOffset, int length) {
-    library.addCompileTimeError(message, charOffset, length, uri);
-  }
-
-  void addProblem(Message message, int charOffset, int length) {
-    library.addProblem(message, charOffset, length, uri);
+  void addProblem(Message message, int charOffset, int length,
+      {bool wasHandled: false, List<LocatedMessage> context}) {
+    library.addProblem(message, charOffset, length, uri,
+        wasHandled: wasHandled, context: context);
   }
 
   @override
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 6fc54ed..8bbedb6 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -4,8 +4,6 @@
 
 library fasta.outline_builder;
 
-import 'dart:math' show min;
-
 import 'package:kernel/ast.dart' show ProcedureKind;
 
 import '../../scanner/token.dart' show Token;
@@ -14,13 +12,14 @@
 
 import '../builder/metadata_builder.dart' show ExpressionMetadataBuilder;
 
-import '../combinator.dart' show Combinator, CombinatorIdentifier;
+import '../combinator.dart' show Combinator;
 
 import '../fasta_codes.dart'
     show
         LocatedMessage,
         Message,
         messageConstConstructorWithBody,
+        messageConstInstanceField,
         messageConstMethod,
         messageConstructorWithReturnType,
         messageConstructorWithTypeParameters,
@@ -29,6 +28,7 @@
         messageOperatorWithOptionalFormals,
         messageStaticConstructor,
         messageTypedefNotFunction,
+        templateCycleInTypeVariables,
         templateDuplicatedParameterName,
         templateDuplicatedParameterNameCause,
         templateOperatorMinusParameterMismatch,
@@ -113,14 +113,12 @@
 
   int popCharOffset() => pop();
 
-  List<CombinatorIdentifier> popIdentifierList(int count) {
+  List<String> popIdentifierList(int count) {
     if (count == 0) return null;
-    var list = new List<CombinatorIdentifier>.filled(count, null);
+    List<String> list = new List<String>.filled(count, null, growable: true);
     for (int i = count - 1; i >= 0; i--) {
-      bool isSynthetic = pop();
-      int offset = popCharOffset();
-      String name = pop();
-      list[i] = new CombinatorIdentifier(offset, name, isSynthetic);
+      popCharOffset();
+      list[i] = pop();
     }
     return list;
   }
@@ -150,50 +148,33 @@
   }
 
   @override
-  void beginMetadataStar(Token token) {
-    push(token);
-  }
-
-  @override
   void endMetadataStar(int count) {
     debugEvent("MetadataStar");
-    if (count == 0) {
-      pop();
-      push(NullValue.MetadataToken);
-      push(NullValue.Metadata);
-    } else {
-      push(popList(
-          count,
-          new List<ExpressionMetadataBuilder<TypeBuilder>>.filled(count, null,
-              growable: true)));
-    }
+    push(popList(
+            count,
+            new List<ExpressionMetadataBuilder<TypeBuilder>>.filled(count, null,
+                growable: true)) ??
+        NullValue.Metadata);
   }
 
   @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     debugEvent("InvalidTopLevelDeclaration");
     pop(); // metadata star
-    pop(); // metadataToken
   }
 
   @override
   void endHide(Token hideKeyword) {
     debugEvent("Hide");
-    List<CombinatorIdentifier> identifiers = pop();
-    List<String> names =
-        identifiers.map((identifier) => identifier.name).toList();
-    push(new Combinator.hide(
-        identifiers, names, hideKeyword.charOffset, library.fileUri));
+    List<String> names = pop();
+    push(new Combinator.hide(names, hideKeyword.charOffset, library.fileUri));
   }
 
   @override
   void endShow(Token showKeyword) {
     debugEvent("Show");
-    List<CombinatorIdentifier> identifiers = pop();
-    List<String> names =
-        identifiers.map((identifier) => identifier.name).toList();
-    push(new Combinator.show(
-        identifiers, names, showKeyword.charOffset, library.fileUri));
+    List<String> names = pop();
+    push(new Combinator.show(names, showKeyword.charOffset, library.fileUri));
   }
 
   @override
@@ -212,7 +193,6 @@
     int uriOffset = popCharOffset();
     String uri = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     library.addExport(metadata, uri, configurations, combinators,
         exportKeyword.charOffset, uriOffset);
     checkEmpty(exportKeyword.charOffset);
@@ -241,7 +221,6 @@
     int uriOffset = popCharOffset();
     String uri = pop(); // For a conditional import, this is the default URI.
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     library.addImport(
         metadata,
         uri,
@@ -278,9 +257,7 @@
   @override
   void handleDottedName(int count, Token firstIdentifier) {
     debugEvent("DottedName");
-    push(popIdentifierList(count)
-        .map((identifier) => identifier.name)
-        .join('.'));
+    push(popIdentifierList(count).join('.'));
   }
 
   @override
@@ -299,7 +276,6 @@
     int charOffset = popCharOffset();
     String uri = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     library.addPart(metadata, uri, charOffset);
     checkEmpty(partKeyword.charOffset);
   }
@@ -323,15 +299,12 @@
     if (context == IdentifierContext.enumValueDeclaration) {
       super.handleIdentifier(token, context);
       push(token.charOffset);
-      var docComment = documentationCommentBefore(token);
-      push(docComment?.text ?? NullValue.DocumentationComment);
+      String documentationComment = getDocumentationComment(token);
+      push(documentationComment ?? NullValue.DocumentationComment);
     } else {
       super.handleIdentifier(token, context);
       push(token.charOffset);
     }
-    if (context.requiresSyntheticFlag) {
-      push(token.isSynthetic);
-    }
     if (inConstructor && context == IdentifierContext.methodDeclaration) {
       inConstructorName = true;
     }
@@ -363,7 +336,7 @@
       push(charOffset);
       // Point to dollar sign
       int interpolationOffset = charOffset + beginToken.lexeme.length;
-      addCompileTimeError(messageInterpolationInUri, interpolationOffset, 1);
+      addProblem(messageInterpolationInUri, interpolationOffset, 1);
     }
   }
 
@@ -404,9 +377,11 @@
     debugEvent("handleQualified");
     int suffixOffset = pop();
     String suffix = pop();
+    assert(identical(suffix, period.next.lexeme));
+    assert(suffixOffset == period.next.charOffset);
     int offset = pop();
     var prefix = pop();
-    push(new QualifiedName(prefix, suffix, suffixOffset));
+    push(new QualifiedName(prefix, period.next));
     push(offset);
   }
 
@@ -414,12 +389,11 @@
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     debugEvent("endLibraryName");
     popCharOffset();
+    String documentationComment = getDocumentationComment(libraryKeyword);
     Object name = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(libraryKeyword, metadataToken);
-    library.documentationComment = docComment?.text;
-    library.name = "${name}";
+    library.documentationComment = documentationComment;
+    library.name = flattenName(name, offsetForToken(libraryKeyword), uri);
     library.metadata = metadata;
   }
 
@@ -482,6 +456,7 @@
   @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     debugEvent("endClassDeclaration");
+    String documentationComment = getDocumentationComment(beginToken);
     List<TypeBuilder> interfaces = pop(NullValue.TypeBuilderList);
     int supertypeOffset = pop();
     TypeBuilder supertype = pop();
@@ -493,18 +468,12 @@
       supertype.typeVariables = typeVariables;
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
 
     final int startCharOffset =
         metadata == null ? beginToken.charOffset : metadata.first.charOffset;
 
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
     library.addClass(
-        docComment?.text,
+        documentationComment,
         metadata,
         modifiers,
         name,
@@ -514,9 +483,7 @@
         startCharOffset,
         charOffset,
         endToken.charOffset,
-        supertypeOffset,
-        codeStartOffset,
-        codeEndOffset);
+        supertypeOffset);
     checkEmpty(beginToken.charOffset);
   }
 
@@ -557,21 +524,15 @@
       modifiers |= abstractMask;
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
+    String documentationComment = getDocumentationComment(beginToken);
     checkEmpty(beginToken.charOffset);
     library
         .endNestedDeclaration("#method")
         .resolveTypes(typeVariables, library);
     final int startCharOffset =
         metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
     library.addProcedure(
-        docComment?.text,
+        documentationComment,
         metadata,
         modifiers,
         returnType,
@@ -584,8 +545,6 @@
         formalsOffset,
         endToken.charOffset,
         nativeMethodName,
-        codeStartOffset,
-        codeEndOffset,
         isTopLevel: true);
     nativeMethodName = null;
   }
@@ -632,8 +591,9 @@
 
   @override
   void beginMethod(Token externalToken, Token staticToken, Token covariantToken,
-      Token varFinalOrConst, Token name) {
-    inConstructor = name?.lexeme == library.currentDeclaration.name;
+      Token varFinalOrConst, Token getOrSet, Token name) {
+    inConstructor =
+        name?.lexeme == library.currentDeclaration.name && getOrSet == null;
     List<Modifier> modifiers = <Modifier>[];
     if (externalToken != null) {
       modifiers.add(External);
@@ -711,14 +671,13 @@
                 charOffset, uri);
         }
         String string = name;
-        addCompileTimeError(
-            template.withArguments(name), charOffset, string.length);
+        addProblem(template.withArguments(name), charOffset, string.length);
       } else {
         if (formals != null) {
           for (FormalParameterBuilder formal in formals) {
             if (!formal.isRequired) {
-              addCompileTimeError(messageOperatorWithOptionalFormals,
-                  formal.charOffset, formal.name.length);
+              addProblem(messageOperatorWithOptionalFormals, formal.charOffset,
+                  formal.name.length);
             }
           }
         }
@@ -743,8 +702,7 @@
     bool isConst = (modifiers & constMask) != 0;
     int varFinalOrConstOffset = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
+    String documentationComment = getDocumentationComment(beginToken);
     library
         .endNestedDeclaration("#method")
         .resolveTypes(typeVariables, library);
@@ -754,8 +712,7 @@
             : library.computeAndValidateConstructorName(name, charOffset);
     if (constructorName != null) {
       if (isConst && bodyKind != MethodBody.Abstract) {
-        addCompileTimeError(
-            messageConstConstructorWithBody, varFinalOrConstOffset, 5);
+        addProblem(messageConstConstructorWithBody, varFinalOrConstOffset, 5);
         modifiers &= ~constMask;
       }
       if (returnType != null) {
@@ -766,13 +723,8 @@
       }
       final int startCharOffset =
           metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-      int codeStartOffset =
-          _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-      int codeEndOffset = endToken.end;
-
       library.addConstructor(
-          docComment?.text,
+          documentationComment,
           metadata,
           modifiers,
           returnType,
@@ -784,23 +736,16 @@
           charOffset,
           formalsOffset,
           endToken.charOffset,
-          codeStartOffset,
-          codeEndOffset,
           nativeMethodName);
     } else {
       if (isConst) {
-        addCompileTimeError(messageConstMethod, varFinalOrConstOffset, 5);
+        addProblem(messageConstMethod, varFinalOrConstOffset, 5);
         modifiers &= ~constMask;
       }
       final int startCharOffset =
           metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-      int codeStartOffset =
-          _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-      int codeEndOffset = endToken.end;
-
       library.addProcedure(
-          docComment?.text,
+          documentationComment,
           metadata,
           modifiers,
           returnType,
@@ -813,8 +758,6 @@
           formalsOffset,
           endToken.charOffset,
           nativeMethodName,
-          codeStartOffset,
-          codeEndOffset,
           isTopLevel: false);
     }
     nativeMethodName = null;
@@ -834,6 +777,7 @@
   void endNamedMixinApplication(Token beginToken, Token classKeyword,
       Token equals, Token implementsKeyword, Token endToken) {
     debugEvent("endNamedMixinApplication");
+    String documentationComment = getDocumentationComment(beginToken);
     List<TypeBuilder> interfaces = popIfNotNull(implementsKeyword);
     TypeBuilder mixinApplication = pop();
     int modifiers = pop();
@@ -841,24 +785,8 @@
     int charOffset = pop();
     String name = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
-    library.addNamedMixinApplication(
-        docComment?.text,
-        metadata,
-        name,
-        typeVariables,
-        modifiers,
-        mixinApplication,
-        interfaces,
-        charOffset,
-        codeStartOffset,
-        codeEndOffset);
+    library.addNamedMixinApplication(documentationComment, metadata, name,
+        typeVariables, modifiers, mixinApplication, interfaces, charOffset);
     checkEmpty(beginToken.charOffset);
   }
 
@@ -907,36 +835,23 @@
   }
 
   @override
-  void beginFormalParameter(Token beginToken, MemberKind kind,
-      Token covariantToken, Token varFinalOrConst) {
-    push(beginToken);
+  void beginFormalParameter(Token token, MemberKind kind, Token covariantToken,
+      Token varFinalOrConst) {
     push((covariantToken != null ? covariantMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme));
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     debugEvent("FormalParameter");
     int charOffset = pop();
     String name = pop();
     TypeBuilder type = pop();
     int modifiers = pop();
-    Token beginToken = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(null, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
-    push(library.addFormalParameter(metadata, modifiers, type, name,
-        thisKeyword != null, charOffset, codeStartOffset, codeEndOffset));
+    push(library.addFormalParameter(
+        metadata, modifiers, type, name, thisKeyword != null, charOffset));
   }
 
   @override
@@ -1013,7 +928,7 @@
       if (formals.length == 2) {
         // The name may be null for generalized function types.
         if (formals[0].name != null && formals[0].name == formals[1].name) {
-          addCompileTimeError(
+          addProblem(
               templateDuplicatedParameterName.withArguments(formals[1].name),
               formals[1].charOffset,
               formals[1].name.length,
@@ -1030,7 +945,7 @@
         for (FormalParameterBuilder formal in formals) {
           if (formal.name == null) continue;
           if (seenNames.containsKey(formal.name)) {
-            addCompileTimeError(
+            addProblem(
                 templateDuplicatedParameterName.withArguments(formal.name),
                 formal.charOffset,
                 formal.name.length,
@@ -1065,15 +980,14 @@
 
   @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
+    String documentationComment = getDocumentationComment(enumKeyword);
     List<Object> constantNamesAndOffsets = popList(
-        count * 5, new List<Object>.filled(count * 5, null, growable: true));
+        count * 4, new List<Object>.filled(count * 4, null, growable: true));
     int charOffset = pop();
     String name = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(enumKeyword, metadataToken);
-    library.addEnum(docComment?.text, metadata, name, constantNamesAndOffsets,
-        charOffset, leftBrace?.endGroup?.charOffset);
+    library.addEnum(documentationComment, metadata, name,
+        constantNamesAndOffsets, charOffset, leftBrace?.endGroup?.charOffset);
     checkEmpty(enumKeyword.charOffset);
   }
 
@@ -1120,6 +1034,7 @@
   void endFunctionTypeAlias(
       Token typedefKeyword, Token equals, Token endToken) {
     debugEvent("endFunctionTypeAlias");
+    String documentationComment = getDocumentationComment(typedefKeyword);
     List<TypeVariableBuilder> typeVariables;
     String name;
     int charOffset;
@@ -1150,14 +1065,11 @@
         functionType = type;
       } else {
         // TODO(ahe): Improve this error message.
-        addCompileTimeError(
-            messageTypedefNotFunction, equals.charOffset, equals.length);
+        addProblem(messageTypedefNotFunction, equals.charOffset, equals.length);
       }
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(typedefKeyword, metadataToken);
-    library.addFunctionTypeAlias(docComment?.text, metadata, name,
+    library.addFunctionTypeAlias(documentationComment, metadata, name,
         typeVariables, functionType, charOffset);
     checkEmpty(typedefKeyword.charOffset);
   }
@@ -1173,12 +1085,9 @@
         (covariantToken != null ? covariantMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-    int firstFieldCodeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    library.addFields(docComment?.text, metadata, modifiers, type, fieldsInfo,
-        firstFieldCodeStartOffset);
+    String documentationComment = getDocumentationComment(beginToken);
+    library.addFields(
+        documentationComment, metadata, modifiers, type, fieldsInfo);
     checkEmpty(beginToken.charOffset);
   }
 
@@ -1192,13 +1101,17 @@
     int modifiers = (staticToken != null ? staticMask : 0) |
         (covariantToken != null ? covariantMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
+    if (staticToken == null && modifiers & constMask != 0) {
+      // It is a compile-time error if an instance variable is declared to be
+      // constant.
+      addProblem(messageConstInstanceField, varFinalOrConst.charOffset,
+          varFinalOrConst.length);
+      modifiers &= ~constMask;
+    }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-    int firstFieldCodeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    library.addFields(docComment?.text, metadata, modifiers, type, fieldsInfo,
-        firstFieldCodeStartOffset);
+    String documentationComment = getDocumentationComment(beginToken);
+    library.addFields(
+        documentationComment, metadata, modifiers, type, fieldsInfo);
   }
 
   @override
@@ -1209,7 +1122,6 @@
     // TODO(paulberry): type variable metadata should not be ignored.  See
     // dartbug.com/28981.
     /* List<MetadataBuilder> metadata = */ pop();
-    pop(); // metadataToken
 
     push(library.addTypeVariable(name, null, charOffset));
   }
@@ -1235,6 +1147,53 @@
   void endTypeVariables(Token beginToken, Token endToken) {
     debugEvent("endTypeVariables");
 
+    // Peek to leave type parameters on top of stack.
+    List typeParameters = peek();
+
+    Map<String, TypeVariableBuilder> typeVariablesByName;
+    for (TypeVariableBuilder builder in typeParameters) {
+      if (builder.bound != null) {
+        if (typeVariablesByName == null) {
+          typeVariablesByName = new Map<String, TypeVariableBuilder>();
+          for (TypeVariableBuilder builder in typeParameters) {
+            typeVariablesByName[builder.name] = builder;
+          }
+        }
+
+        // Find cycle: If there's no cycle we can at most step through all
+        // `typeParameters` (at which point the last builders bound will be
+        // null).
+        // If there is a cycle with `builder` 'inside' the steps to get back to
+        // it will also be bound by `typeParameters.length`.
+        // If there is a cycle without `builder` 'inside' we will just ignore it
+        // for now. It will be reported when processing one of the `builder`s
+        // that is in fact `inside` the cycle. This matches the cyclic class
+        // hierarchy error.
+        TypeVariableBuilder bound = builder;
+        for (int steps = 0;
+            bound.bound != null && steps < typeParameters.length;
+            ++steps) {
+          bound = typeVariablesByName[bound.bound.name];
+          if (bound == null || bound == builder) break;
+        }
+        if (bound == builder && bound.bound != null) {
+          // Write out cycle.
+          List<String> via = new List<String>();
+          bound = typeVariablesByName[builder.bound.name];
+          while (bound != builder) {
+            via.add(bound.name);
+            bound = typeVariablesByName[bound.bound.name];
+          }
+          String involvedString = via.join("', '");
+          addProblem(
+              templateCycleInTypeVariables.withArguments(
+                  builder.name, involvedString),
+              builder.charOffset,
+              builder.name.length);
+        }
+      }
+    }
+
     if (inConstructorName) {
       addProblem(messageConstructorWithTypeParameters,
           offsetForToken(beginToken), lengthOfSpan(beginToken, endToken));
@@ -1249,9 +1208,9 @@
     int charOffset = popCharOffset();
     Object containingLibrary = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     if (hasName) {
-      library.addPartOf(metadata, "$containingLibrary", null, charOffset);
+      library.addPartOf(metadata,
+          flattenName(containingLibrary, charOffset, uri), null, charOffset);
     } else {
       library.addPartOf(metadata, null, containingLibrary, charOffset);
     }
@@ -1295,15 +1254,9 @@
     Object name = pop();
     int modifiers = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
+    String documentationComment = getDocumentationComment(beginToken);
     library.addFactoryMethod(
-        docComment?.text,
+        documentationComment,
         metadata,
         modifiers,
         name,
@@ -1313,8 +1266,6 @@
         charOffset,
         formalsOffset,
         endToken.charOffset,
-        codeStartOffset,
-        codeEndOffset,
         nativeMethodName);
     nativeMethodName = null;
     inConstructor = false;
@@ -1368,7 +1319,6 @@
   void handleInvalidMember(Token endToken) {
     debugEvent("InvalidMember");
     pop(); // metadata star
-    pop(); // metadataToken
   }
 
   @override
@@ -1393,72 +1343,38 @@
     debugEvent("AsyncModifier");
   }
 
-  @override
-  void addCompileTimeError(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
-    library.addCompileTimeError(message, charOffset, length, uri,
-        context: context);
-  }
-
   void addProblem(Message message, int charOffset, int length,
-      {List<LocatedMessage> context}) {
-    library.addProblem(message, charOffset, length, uri, context: context);
-  }
-
-  static int _chooseCodeStartOffset(
-      _DocumentationComment docComment, Token metadataToken, Token beginToken) {
-    if (docComment != null && metadataToken != null) {
-      return min(docComment.offset, metadataToken.charOffset);
-    }
-    if (docComment != null) {
-      return docComment.offset;
-    }
-    if (metadataToken != null) {
-      return metadataToken.charOffset;
-    }
-    return beginToken.offset;
-  }
-
-  /// Return the documentation comment for the [beginToken] or [metadataToken],
-  /// or `null` if there is no preceding documentation comment in either of
-  /// these nodes.
-  static _DocumentationComment documentationComment(
-      Token beginToken, Token metadataToken) {
-    return documentationCommentBefore(beginToken) ??
-        documentationCommentBefore(metadataToken);
+      {bool wasHandled: false, List<LocatedMessage> context}) {
+    library.addProblem(message, charOffset, length, uri,
+        wasHandled: wasHandled, context: context);
   }
 
   /// Return the documentation comment for the entity that starts at the
   /// given [token], or `null` if there is no preceding documentation comment.
-  static _DocumentationComment documentationCommentBefore(Token token) {
-    Token commentToken = token?.precedingComments;
-    if (commentToken == null) return null;
+  static String getDocumentationComment(Token token) {
+    Token docToken = token.precedingComments;
+    if (docToken == null) return null;
     bool inSlash = false;
-    Token firstDocToken;
-    StringBuffer buffer;
-    while (commentToken != null) {
-      String lexeme = commentToken.lexeme;
+    var buffer = new StringBuffer();
+    while (docToken != null) {
+      String lexeme = docToken.lexeme;
       if (lexeme.startsWith('/**')) {
         inSlash = false;
-        firstDocToken = commentToken;
-        buffer = new StringBuffer();
+        buffer.clear();
         buffer.write(lexeme);
       } else if (lexeme.startsWith('///')) {
-        if (!inSlash || buffer == null) {
+        if (!inSlash) {
           inSlash = true;
-          firstDocToken = commentToken;
-          buffer = new StringBuffer();
+          buffer.clear();
         }
         if (buffer.isNotEmpty) {
           buffer.writeln();
         }
         buffer.write(lexeme);
       }
-      commentToken = commentToken.next;
+      docToken = docToken.next;
     }
-    if (buffer == null) return null;
-    return new _DocumentationComment(
-        firstDocToken.charOffset, buffer.toString());
+    return buffer.toString();
   }
 
   @override
@@ -1466,10 +1382,3 @@
     // printEvent('OutlineBuilder: $name');
   }
 }
-
-class _DocumentationComment {
-  final int offset;
-  final String text;
-
-  _DocumentationComment(this.offset, this.text);
-}
diff --git a/pkg/front_end/lib/src/fasta/source/outline_listener.dart b/pkg/front_end/lib/src/fasta/source/outline_listener.dart
deleted file mode 100644
index 0f77d6c..0000000
--- a/pkg/front_end/lib/src/fasta/source/outline_listener.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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 '../kernel/kernel_ast_api.dart' show DartType, Node;
-
-/// Callback interface used by builders to report the results of resolution
-/// in library outlines to a client.
-class OutlineListener {
-  /// Stores given resolution data at the given [offset].
-  ///
-  /// If the token for which the data is stored is synthetic, then [isSynthetic]
-  /// is set to `true`.
-  ///
-  /// [importIndex] is the index of the import directive in the library, and
-  /// is used to store import prefixes.
-  ///
-  /// [reference] is the referenced declaration - a class, a typedef, a type
-  /// parameter, etc.
-  ///
-  /// [type] is the type that was build from the [reference], for example code
-  /// `List<int>` will have a reference to `List` and type `List<int>`, i.e.
-  /// with type arguments applied.
-  void store(int offset, bool isSynthetic,
-      {int importIndex,
-      bool isNamespaceCombinatorReference,
-      Node reference,
-      DartType type}) {}
-}
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 6135e72..8df5e4a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -161,15 +161,15 @@
       if (!member.isStatic) return;
       // TODO(ahe): Revisit these messages. It seems like the last two should
       // be `context` parameter to this message.
-      addCompileTimeError(templateConflictsWithMember.withArguments(name),
+      addProblem(templateConflictsWithMember.withArguments(name),
           constructor.charOffset, noLength);
       if (constructor.isFactory) {
-        addCompileTimeError(
+        addProblem(
             templateConflictsWithFactory.withArguments("${this.name}.${name}"),
             member.charOffset,
             noLength);
       } else {
-        addCompileTimeError(
+        addProblem(
             templateConflictsWithConstructor
                 .withArguments("${this.name}.${name}"),
             member.charOffset,
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 75ee308..a96b82c 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
@@ -29,7 +29,8 @@
         TypeBuilder,
         TypeDeclarationBuilder,
         TypeVariableBuilder,
-        UnresolvedType;
+        UnresolvedType,
+        flattenName;
 
 import '../combinator.dart' show Combinator;
 
@@ -48,12 +49,14 @@
         noLength,
         templateConflictsWithMember,
         templateConflictsWithSetter,
+        templateConstructorWithWrongNameContext,
         templateCouldNotParseUri,
         templateDeferredPrefixDuplicated,
         templateDeferredPrefixDuplicatedCause,
         templateDuplicatedDefinition,
-        templateConstructorWithWrongNameContext,
         templateMissingPartOf,
+        templateNotAPrefixInTypeAnnotation,
+        templatePartOfInLibrary,
         templatePartOfLibraryNameMismatch,
         templatePartOfUriMismatch,
         templatePartOfUseUri,
@@ -65,8 +68,6 @@
 
 import '../problems.dart' show unhandled;
 
-import '../source/outline_listener.dart' show OutlineListener;
-
 import 'source_loader.dart' show SourceLoader;
 
 abstract class SourceLibraryBuilder<T extends TypeBuilder, R>
@@ -115,8 +116,6 @@
 
   bool canAddImplementationBuilders = false;
 
-  final OutlineListener outlineListener;
-
   SourceLibraryBuilder(SourceLoader loader, Uri fileUri, Scope scope)
       : this.fromScopes(loader, fileUri, new DeclarationBuilder<T>.library(),
             scope ?? new Scope.top());
@@ -125,7 +124,6 @@
       this.loader, this.fileUri, this.libraryDeclaration, this.importScope)
       : disableTypeInference = loader.target.disableTypeInference,
         currentDeclaration = libraryDeclaration,
-        outlineListener = loader.createOutlineListener(fileUri),
         super(
             fileUri, libraryDeclaration.toScope(importScope), new Scope.top());
 
@@ -175,7 +173,7 @@
 
   Uri resolve(Uri baseUri, String uri, int uriOffset, {isPart: false}) {
     if (uri == null) {
-      addCompileTimeError(messageExpectedUri, uriOffset, noLength, this.uri);
+      addProblem(messageExpectedUri, uriOffset, noLength, this.uri);
       return new Uri(scheme: MALFORMED_URI_SCHEME);
     }
     Uri parsedUri;
@@ -185,11 +183,8 @@
       // Point to position in string indicated by the exception,
       // or to the initial quote if no position is given.
       // (Assumes the directive is using a single-line string.)
-      addCompileTimeError(
-          templateCouldNotParseUri.withArguments(uri, e.message),
-          uriOffset + 1 + (e.offset ?? -1),
-          1,
-          this.uri);
+      addProblem(templateCouldNotParseUri.withArguments(uri, e.message),
+          uriOffset + 1 + (e.offset ?? -1), 1, this.uri);
       return new Uri(
           scheme: MALFORMED_URI_SCHEME, query: Uri.encodeQueryComponent(uri));
     }
@@ -207,8 +202,8 @@
     String prefix;
     String suffix;
     if (name is QualifiedName) {
-      prefix = name.prefix;
-      suffix = name.suffix;
+      prefix = name.qualifier;
+      suffix = name.name;
     } else {
       prefix = name;
       suffix = null;
@@ -349,9 +344,7 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      int supertypeOffset,
-      int codeStartOffset,
-      int codeEndOffset);
+      int supertypeOffset);
 
   void addNamedMixinApplication(
       String documentationComment,
@@ -361,9 +354,7 @@
       int modifiers,
       T mixinApplication,
       List<T> interfaces,
-      int charOffset,
-      int codeStartOffset,
-      int codeEndOffset);
+      int charOffset);
 
   void addField(
       String documentationComment,
@@ -372,47 +363,23 @@
       T type,
       String name,
       int charOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       Token initializerTokenForInference,
       bool hasInitializer);
 
-  void addFields(
-      String documentationComment,
-      List<MetadataBuilder> metadata,
-      int modifiers,
-      T type,
-      List<Object> fieldsInfo,
-      int firstFieldCodeStartOffset) {
+  void addFields(String documentationComment, List<MetadataBuilder> metadata,
+      int modifiers, T type, List<Object> fieldsInfo) {
     for (int i = 0; i < fieldsInfo.length; i += 4) {
       String name = fieldsInfo[i];
       int charOffset = fieldsInfo[i + 1];
       bool hasInitializer = fieldsInfo[i + 2] != null;
       Token initializerTokenForInference =
           type == null ? fieldsInfo[i + 2] : null;
-      Token beforeLast = fieldsInfo[i + 3];
       if (initializerTokenForInference != null) {
+        Token beforeLast = fieldsInfo[i + 3];
         beforeLast.setNext(new Token.eof(beforeLast.next.offset));
       }
-
-      int codeEndOffset;
-      if (beforeLast != null) {
-        codeEndOffset = beforeLast.next.offset;
-      } else {
-        codeEndOffset = charOffset + name.length;
-      }
-
-      addField(
-          documentationComment,
-          metadata,
-          modifiers,
-          type,
-          name,
-          charOffset,
-          i == 0 ? firstFieldCodeStartOffset : charOffset,
-          codeEndOffset,
-          initializerTokenForInference,
-          hasInitializer);
+      addField(documentationComment, metadata, modifiers, type, name,
+          charOffset, initializerTokenForInference, hasInitializer);
     }
   }
 
@@ -429,8 +396,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName);
 
   void addProcedure(
@@ -447,8 +412,6 @@
       int charOpenParenOffset,
       int charEndOffset,
       String nativeMethodName,
-      int codeStartOffset,
-      int codeEndOffset,
       {bool isTopLevel});
 
   void addEnum(
@@ -484,19 +447,10 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName);
 
-  FormalParameterBuilder addFormalParameter(
-      List<MetadataBuilder> metadata,
-      int modifiers,
-      T type,
-      String name,
-      bool hasThis,
-      int charOffset,
-      int codeStartOffset,
-      int codeEndOffset);
+  FormalParameterBuilder addFormalParameter(List<MetadataBuilder> metadata,
+      int modifiers, T type, String name, bool hasThis, int charOffset);
 
   TypeVariableBuilder addTypeVariable(String name, T bound, int charOffset);
 
@@ -520,10 +474,8 @@
     }
     bool isConstructor = declaration is ProcedureBuilder &&
         (declaration.isConstructor || declaration.isFactory);
-    if (!isConstructor &&
-        !declaration.isSetter &&
-        name == currentDeclaration.name) {
-      addCompileTimeError(
+    if (!isConstructor && name == currentDeclaration.name) {
+      addProblem(
           messageMemberWithSameNameAsClass, charOffset, noLength, fileUri);
     }
     Map<String, Declaration> members = isConstructor
@@ -545,11 +497,8 @@
         other = declaration;
       }
       if (deferred != null) {
-        addCompileTimeError(
-            templateDeferredPrefixDuplicated.withArguments(name),
-            deferred.charOffset,
-            noLength,
-            fileUri,
+        addProblem(templateDeferredPrefixDuplicated.withArguments(name),
+            deferred.charOffset, noLength, fileUri,
             context: [
               templateDeferredPrefixDuplicatedCause
                   .withArguments(name)
@@ -563,8 +512,8 @@
               name, existing, member, charOffset);
         });
     } else if (isDuplicatedDefinition(existing, declaration)) {
-      addCompileTimeError(templateDuplicatedDefinition.withArguments(name),
-          charOffset, noLength, fileUri);
+      addProblem(templateDuplicatedDefinition.withArguments(name), charOffset,
+          noLength, fileUri);
     }
     return members[name] = declaration;
   }
@@ -611,10 +560,10 @@
     scope.setters.forEach((String name, Declaration setter) {
       Declaration member = scopeBuilder[name];
       if (member == null || !member.isField || member.isFinal) return;
-      addCompileTimeError(templateConflictsWithMember.withArguments(name),
+      addProblem(templateConflictsWithMember.withArguments(name),
           setter.charOffset, noLength, fileUri);
       // TODO(ahe): Context to previous message?
-      addCompileTimeError(templateConflictsWithSetter.withArguments(name),
+      addProblem(templateConflictsWithSetter.withArguments(name),
           member.charOffset, noLength, fileUri);
     });
 
@@ -647,7 +596,7 @@
     Set<Uri> seenParts = new Set<Uri>();
     for (SourceLibraryBuilder<T, R> part in parts) {
       if (part == this) {
-        addCompileTimeError(messagePartOfSelf, -1, noLength, fileUri);
+        addProblem(messagePartOfSelf, -1, noLength, fileUri);
       } else if (seenParts.add(part.fileUri)) {
         if (part.partOfLibrary != null) {
           addProblem(messagePartOfTwoLibraries, -1, noLength, part.fileUri,
@@ -661,8 +610,8 @@
           includePart(part);
         }
       } else {
-        addCompileTimeError(templatePartTwice.withArguments(part.fileUri), -1,
-            noLength, fileUri);
+        addProblem(templatePartTwice.withArguments(part.fileUri), -1, noLength,
+            fileUri);
       }
     }
   }
@@ -703,8 +652,8 @@
       // metadata annotations can be associated with it.
       assert(!part.isPart);
       if (uriIsValid(part.fileUri)) {
-        addCompileTimeError(templateMissingPartOf.withArguments(part.fileUri),
-            -1, noLength, fileUri);
+        addProblem(templateMissingPartOf.withArguments(part.fileUri), -1,
+            noLength, fileUri);
       }
     }
     part.forEach((String name, Declaration declaration) {
@@ -733,6 +682,13 @@
       if (import.imported == loader.coreLibrary) {
         explicitCoreImport = true;
       }
+      if (import.imported?.isPart ?? false) {
+        addProblem(
+            templatePartOfInLibrary.withArguments(import.imported.fileUri),
+            import.charOffset,
+            noLength,
+            fileUri);
+      }
       import.finalizeImports(this);
     }
     if (!explicitCoreImport) {
@@ -868,7 +824,7 @@
       for (UnresolvedType<T> type in types) {
         Object nameOrQualified = type.builder.name;
         String name = nameOrQualified is QualifiedName
-            ? nameOrQualified.prefix
+            ? nameOrQualified.qualifier
             : nameOrQualified;
         TypeVariableBuilder builder;
         if (name != null) {
@@ -880,8 +836,13 @@
           parent.addType(type);
         } else if (nameOrQualified is QualifiedName) {
           // Attempt to use type variable as prefix.
-          type.builder.bind(
-              type.builder.buildInvalidType(type.charOffset, type.fileUri));
+          type.builder.bind(type.builder.buildInvalidType(
+              templateNotAPrefixInTypeAnnotation
+                  .withArguments(
+                      flattenName(nameOrQualified.qualifier, type.charOffset,
+                          type.fileUri),
+                      nameOrQualified.name)
+                  .withLocation(type.fileUri, type.charOffset, noLength)));
         } else {
           type.builder.bind(builder);
         }
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 cbe5078..9f48ebd 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -45,8 +45,6 @@
         NamedTypeBuilder,
         TypeBuilder;
 
-import '../combinator.dart';
-
 import '../deprecated_problems.dart' show deprecated_inputError;
 
 import '../export.dart' show Export;
@@ -104,8 +102,6 @@
 
 import 'outline_builder.dart' show OutlineBuilder;
 
-import 'outline_listener.dart' show OutlineListener;
-
 import 'source_class_builder.dart' show SourceClassBuilder;
 
 import 'source_library_builder.dart' show SourceLibraryBuilder;
@@ -182,8 +178,8 @@
     while (token is ErrorToken) {
       if (!suppressLexicalErrors) {
         ErrorToken error = token;
-        library.addCompileTimeError(error.assertionMessage,
-            offsetForToken(token), lengthForToken(token), uri);
+        library.addProblem(error.assertionMessage, offsetForToken(token),
+            lengthForToken(token), uri);
       }
       token = token.next;
     }
@@ -213,13 +209,9 @@
       // time we suppress lexical errors.
       Token tokens = await tokenize(library, suppressLexicalErrors: true);
       if (tokens == null) return;
-
       DietListener listener = createDietListener(library);
       DietParser parser = new DietParser(listener);
-
-      listener.currentUnit = library;
       parser.parseUnit(tokens);
-
       for (SourceLibraryBuilder part in library.parts) {
         if (part.partOfLibrary != library) {
           // Part was included in multiple libraries. Skip it here.
@@ -227,7 +219,6 @@
         }
         Token tokens = await tokenize(part);
         if (tokens != null) {
-          listener.currentUnit = part;
           listener.uri = part.fileUri;
           listener.partDirectiveIndex = 0;
           parser.parseUnit(tokens);
@@ -348,21 +339,6 @@
       // and can lead to memory leaks.
       exportee.exporters.clear();
     }
-    for (var library in builders.values) {
-      if (library is SourceLibraryBuilder) {
-        OutlineListener outlineListener = library.outlineListener;
-        if (outlineListener != null) {
-          for (var import in library.imports) {
-            storeCombinatorIdentifiersResolution(
-                outlineListener, import.imported, import.combinators);
-          }
-          for (var export in library.exports) {
-            storeCombinatorIdentifiersResolution(
-                outlineListener, export.exported, export.combinators);
-          }
-        }
-      }
-    }
     ticker.logMs("Computed library scopes");
     // debugPrintExports();
   }
@@ -566,7 +542,7 @@
       // [cyclicCandidates] is sensitive to if the platform (or other modules)
       // are included in [classes].
       for (LocatedMessage message in messages.keys.toList()..sort()) {
-        messages[message].addCompileTimeError(
+        messages[message].addProblem(
             message.messageObject, message.charOffset, message.length);
       }
     }
@@ -585,13 +561,11 @@
       target.addDirectSupertype(cls, directSupertypes);
       for (ClassBuilder supertype in directSupertypes) {
         if (supertype is EnumBuilder) {
-          cls.addCompileTimeError(
-              templateExtendingEnum.withArguments(supertype.name),
-              cls.charOffset,
-              noLength);
+          cls.addProblem(templateExtendingEnum.withArguments(supertype.name),
+              cls.charOffset, noLength);
         } else if (!cls.library.mayImplementRestrictedTypes &&
             blackListedClasses.contains(supertype)) {
-          cls.addCompileTimeError(
+          cls.addProblem(
               templateExtendingRestricted.withArguments(supertype.name),
               cls.charOffset,
               noLength);
@@ -607,7 +581,7 @@
             for (Declaration constructory
                 in builder.constructors.local.values) {
               if (constructory.isConstructor && !constructory.isSynthetic) {
-                cls.addCompileTimeError(
+                cls.addProblem(
                     templateIllegalMixinDueToConstructors
                         .withArguments(builder.fullNameForErrors),
                     cls.charOffset,
@@ -623,7 +597,7 @@
           }
         }
         if (!isClassBuilder) {
-          cls.addCompileTimeError(
+          cls.addProblem(
               templateIllegalMixin.withArguments(mixedInType.fullNameForErrors),
               cls.charOffset,
               noLength);
@@ -715,13 +689,14 @@
   void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
 
   void computeCoreTypes(Component component) {
-    DartType Function(Class) instantiateWithBottom =
-        (Class cls) => new InterfaceType(cls, <DartType>[const BottomType()]);
-
     coreTypes = new CoreTypes(component);
-    futureOfBottom = instantiateWithBottom(coreTypes.futureClass);
-    iterableOfBottom = instantiateWithBottom(coreTypes.iterableClass);
-    streamOfBottom = instantiateWithBottom(coreTypes.streamClass);
+
+    futureOfBottom = new InterfaceType(
+        coreTypes.futureClass, <DartType>[const BottomType()]);
+    iterableOfBottom = new InterfaceType(
+        coreTypes.iterableClass, <DartType>[const BottomType()]);
+    streamOfBottom = new InterfaceType(
+        coreTypes.streamClass, <DartType>[const BottomType()]);
 
     ticker.logMs("Computed core types");
   }
@@ -900,8 +875,7 @@
     return target.backendTarget.throwCompileConstantError(coreTypes, error);
   }
 
-  Expression buildCompileTimeError(
-      Message message, int offset, int length, Uri uri) {
+  Expression buildProblem(Message message, int offset, int length, Uri uri) {
     String text = target.context
         .format(message.withLocation(uri, offset, length), Severity.error);
     return target.backendTarget.buildCompileTimeError(coreTypes, text, offset);
@@ -972,19 +946,4 @@
     hierarchy = null;
     typeInferenceEngine = null;
   }
-
-  void storeCombinatorIdentifiersResolution(OutlineListener outlineListener,
-      LibraryBuilder consumed, List<Combinator> combinators) {
-    if (combinators != null) {
-      for (var combinator in combinators) {
-        for (var identifier in combinator.identifiers) {
-          var declaration = consumed.exportScope.local[identifier.name];
-          declaration ??= consumed.exportScope.setters[identifier.name];
-          outlineListener.store(identifier.offset, identifier.isSynthetic,
-              isNamespaceCombinatorReference: true,
-              reference: declaration?.target);
-        }
-      }
-    }
-  }
 }
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 154b20a..cd41814 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -9,6 +9,7 @@
 
 import '../fasta_codes.dart'
     show
+        LocatedMessage,
         Message,
         messageNativeClauseShouldBeAnnotation,
         templateInternalProblemStackNotEmpty;
@@ -52,7 +53,6 @@
   IdentifierList,
   Initializers,
   Metadata,
-  MetadataToken,
   Modifiers,
   ParameterDefaultValue,
   Prefix,
@@ -76,7 +76,7 @@
 
   // TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
   // and ast_builder.dart.
-  void finishFunction(List annotations, covariant formals,
+  void finishFunction(covariant List<Object> annotations, covariant formals,
       AsyncMarker asyncModifier, covariant body) {
     return unsupported("finishFunction", -1, uri);
   }
@@ -344,17 +344,18 @@
       return;
     }
     debugEvent("Error: ${message.message}");
-    addCompileTimeError(message, offsetForToken(startToken),
+    addProblem(message, offsetForToken(startToken),
         lengthOfSpan(startToken, endToken));
   }
 
   @override
   void handleUnescapeError(
       Message message, Token token, int stringOffset, int length) {
-    addCompileTimeError(message, token.charOffset + stringOffset, length);
+    addProblem(message, token.charOffset + stringOffset, length);
   }
 
-  void addCompileTimeError(Message message, int charOffset, int length);
+  void addProblem(Message message, int charOffset, int length,
+      {bool wasHandled: false, List<LocatedMessage> context});
 }
 
 class Stack {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
index 38505c3..22aa02d 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
@@ -2,21 +2,22 @@
 // for 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:kernel/ast.dart' show Arguments, Expression, FunctionType;
+
 import '../fasta_codes.dart' show LocatedMessage, Message;
 
-import '../kernel/kernel_ast_api.dart'
-    show ArgumentsJudgment, Expression, FunctionType;
+import '../kernel/kernel_shadow_ast.dart' show SyntheticExpressionJudgment;
 
 abstract class InferenceHelper {
-  Expression wrapInCompileTimeError(Expression expression, Message message);
-
-  Expression buildCompileTimeError(Message message, int charOffset, int length,
+  SyntheticExpressionJudgment buildProblem(
+      Message message, int charOffset, int length,
       {List<LocatedMessage> context});
 
   LocatedMessage checkArgumentsForType(
-      FunctionType function, ArgumentsJudgment arguments, int offset);
+      FunctionType function, Arguments arguments, int offset);
 
-  void addProblem(Message message, int charOffset, int length);
+  void addProblem(Message message, int charOffset, int length,
+      {List<LocatedMessage> context, bool wasHandled});
 
   Expression wrapInProblem(Expression expression, Message message, int length,
       {List<LocatedMessage> context});
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 02395c0..362a67a 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
@@ -129,7 +129,7 @@
     var kind = declaredMethod.kind;
     var overriddenTypes = _computeAccessorOverriddenTypes();
     if (isCircular) {
-      _library.addCompileTimeError(
+      _library.addProblem(
           templateCantInferTypeDueToCircularity.withArguments(_name),
           _offset,
           noLength,
@@ -704,7 +704,7 @@
         first = type;
       } else if (first != type) {
         // Types don't match.  Report an error.
-        library.addCompileTimeError(
+        library.addProblem(
             templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
             charOffset,
             noLength,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 6e3610c..48d0b20 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -59,7 +59,7 @@
             .inferDeclarationType(typeInferrer.inferFieldTopLevel(field, true));
         if (isCircular) {
           // Report the appropriate error.
-          _library.addCompileTimeError(
+          _library.addProblem(
               templateCantInferTypeDueToCircularity
                   .withArguments(field.name.name),
               field.fileOffset,
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 b3c28bb..68a2f7a 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
@@ -545,13 +545,8 @@
       void thenStatement,
       void elseStatement);
 
-  void indexAssign(
-      ExpressionJudgment judgment,
-      Location location,
-      DartType receiverType,
-      Reference writeMember,
-      Reference combiner,
-      DartType inferredType);
+  void indexAssign(ExpressionJudgment judgment, Location location,
+      Reference writeMember, Reference combiner, DartType inferredType);
 
   void intLiteral(ExpressionJudgment judgment, Location location,
       IntLiteralTokens tokens, num value, DartType inferredType);
@@ -614,7 +609,6 @@
   void methodInvocation(
       ExpressionJudgment judgment,
       Location resultOffset,
-      DartType receiverType,
       List<DartType> argumentsTypes,
       bool isImplicitCall,
       Reference interfaceMember,
@@ -643,20 +637,13 @@
   void propertyAssign(
       ExpressionJudgment judgment,
       Location location,
-      bool isSyntheticLhs,
-      DartType receiverType,
       Reference writeMember,
       DartType writeContext,
       Reference combiner,
       DartType inferredType);
 
-  void propertyGet(
-      ExpressionJudgment judgment,
-      Location location,
-      bool forSyntheticToken,
-      DartType receiverType,
-      Reference member,
-      DartType inferredType);
+  void propertyGet(ExpressionJudgment judgment, Location location,
+      bool forSyntheticToken, Reference member, DartType inferredType);
 
   void propertyGetCall(
       ExpressionJudgment judgment, Location location, DartType inferredType);
@@ -760,7 +747,6 @@
   void variableAssign(
       ExpressionJudgment judgment,
       Location location,
-      bool isSyntheticLhs,
       DartType writeContext,
       covariant Object writeVariableBinder,
       Reference combiner,
@@ -964,8 +950,8 @@
       void elseStatement) {}
 
   @override
-  void indexAssign(ExpressionJudgment judgment, location, receiverType,
-      writeMember, combiner, DartType inferredType) {}
+  void indexAssign(ExpressionJudgment judgment, location, writeMember, combiner,
+      DartType inferredType) {}
 
   @override
   void intLiteral(ExpressionJudgment judgment, location,
@@ -1030,7 +1016,6 @@
   void methodInvocation(
       ExpressionJudgment judgment,
       resultOffset,
-      DartType receiverType,
       List<DartType> argumentsTypes,
       bool isImplicitCall,
       interfaceMember,
@@ -1061,19 +1046,12 @@
       NullLiteralTokens tokens, bool isSynthetic, DartType inferredType) {}
 
   @override
-  void propertyAssign(
-      ExpressionJudgment judgment,
-      location,
-      bool isSyntheticLhs,
-      receiverType,
-      writeMember,
-      DartType writeContext,
-      combiner,
-      DartType inferredType) {}
+  void propertyAssign(ExpressionJudgment judgment, location, writeMember,
+      DartType writeContext, combiner, DartType inferredType) {}
 
   @override
   void propertyGet(ExpressionJudgment judgment, location,
-      bool forSyntheticToken, receiverType, member, DartType inferredType) {}
+      bool forSyntheticToken, member, DartType inferredType) {}
 
   @override
   void propertyGetCall(
@@ -1192,7 +1170,6 @@
   void variableAssign(
       ExpressionJudgment judgment,
       location,
-      bool isSyntheticLhs,
       DartType writeContext,
       covariant void writeVariableBinder,
       combiner,
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 b8113fe..1d24bbd 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
@@ -36,6 +36,7 @@
         ProcedureKind,
         PropertyGet,
         PropertySet,
+        ReturnStatement,
         StaticGet,
         SuperMethodInvocation,
         SuperPropertyGet,
@@ -74,6 +75,7 @@
         Message,
         Template,
         messageReturnFromVoidFunction,
+        messageReturnWithoutExpression,
         messageVoidExpression,
         noLength,
         templateArgumentTypeNotAssignable,
@@ -87,6 +89,7 @@
         templateInvalidCastNewExpr,
         templateInvalidCastStaticMethod,
         templateInvalidCastTopLevelFunction,
+        templateInvokeNonFunction,
         templateMixinInferenceNoMatchingClass,
         templateUndefinedGetter,
         templateUndefinedMethod,
@@ -102,7 +105,6 @@
         ShadowClass,
         ShadowField,
         ShadowMember,
-        SyntheticExpressionJudgment,
         VariableDeclarationJudgment,
         getExplicitTypeArguments;
 
@@ -202,10 +204,24 @@
   /// wrapping this type in `Stream` or `Iterator`, as appropriate.
   DartType _inferredUnwrappedReturnOrYieldType;
 
+  /// Whether the function is an arrow function.
+  bool isArrow;
+
+  /// A list of return statements in functions whose return type is being
+  /// inferred.
+  ///
+  /// The returns are checked for validity after the return type is inferred.
+  List<ReturnStatement> returnStatements;
+
+  /// A list of return expression types in functions whose return type is
+  /// being inferred.
+  List<DartType> returnExpressionTypes;
+
   factory ClosureContext(TypeInferrerImpl inferrer, AsyncMarker asyncMarker,
       DartType returnContext, bool needToInferReturnType) {
     assert(returnContext != null);
-    DartType declaredReturnType = returnContext;
+    DartType declaredReturnType =
+        greatestClosure(inferrer.coreTypes, returnContext);
     bool isAsync = asyncMarker == AsyncMarker.Async ||
         asyncMarker == AsyncMarker.AsyncStar;
     bool isGenerator = asyncMarker == AsyncMarker.SyncStar ||
@@ -227,23 +243,86 @@
   }
 
   ClosureContext._(this.isAsync, this.isGenerator, this.returnOrYieldContext,
-      this.declaredReturnType, this._needToInferReturnType) {}
+      this.declaredReturnType, this._needToInferReturnType) {
+    if (_needToInferReturnType) {
+      returnStatements = [];
+      returnExpressionTypes = [];
+    }
+  }
+
+  bool checkValidReturn(TypeInferrerImpl inferrer, DartType returnType,
+      ReturnStatement statement, DartType expressionType) {
+    if (statement.expression == null) {
+      if (isAsync) {
+        returnType = inferrer.typeSchemaEnvironment.unfutureType(returnType);
+      }
+      if (returnType is! VoidType &&
+          returnType is! DynamicType &&
+          returnType != inferrer.coreTypes.nullClass.rawType) {
+        statement.expression = inferrer.helper.wrapInProblem(
+            new NullLiteral()..fileOffset = statement.fileOffset,
+            messageReturnWithoutExpression,
+            noLength)
+          ..parent = statement;
+        return false;
+      }
+    } else {
+      if (isAsync) {
+        returnType = inferrer.typeSchemaEnvironment.unfutureType(returnType);
+        expressionType =
+            inferrer.typeSchemaEnvironment.unfutureType(expressionType);
+      }
+      if (!isArrow && returnType is VoidType) {
+        if (expressionType is! VoidType &&
+            expressionType is! DynamicType &&
+            expressionType != inferrer.coreTypes.nullClass.rawType) {
+          statement.expression = inferrer.helper.wrapInProblem(
+              statement.expression, messageReturnFromVoidFunction, noLength)
+            ..parent = statement;
+          return false;
+        }
+      } else if (expressionType is VoidType) {
+        if (returnType is! VoidType &&
+            returnType is! DynamicType &&
+            returnType != inferrer.coreTypes.nullClass.rawType) {
+          statement.expression = inferrer.helper.wrapInProblem(
+              statement.expression, messageVoidExpression, noLength)
+            ..parent = statement;
+          return false;
+        }
+      }
+    }
+    return true;
+  }
 
   /// Updates the inferred return type based on the presence of a return
   /// statement returning the given [type].
-  void handleReturn(TypeInferrerImpl inferrer, DartType type,
-      Expression expression, int fileOffset, bool isArrow) {
+  void handleReturn(TypeInferrerImpl inferrer, ReturnStatement statement,
+      DartType type, bool isArrow) {
     if (isGenerator) return;
-    if (inferrer.ensureAssignable(
-            returnOrYieldContext, type, expression, fileOffset,
-            isReturnFromAsync: isAsync,
-            isReturn: true,
-            declaredReturnType: declaredReturnType,
-            isArrow: isArrow) !=
-        null) {
-      type = greatestClosure(inferrer.coreTypes, returnOrYieldContext);
+    // The first return we see tells us if we have an arrow function.
+    if (this.isArrow == null) {
+      this.isArrow = isArrow;
+    } else {
+      assert(this.isArrow == isArrow);
     }
+
     if (_needToInferReturnType) {
+      // Add the return to a list to be checked for validity after we've
+      // inferred the return type.
+      returnStatements.add(statement);
+      returnExpressionTypes.add(type);
+
+      // The return expression has to be assignable to the return type
+      // expectation from the downwards inference context.
+      if (statement.expression != null &&
+          inferrer.ensureAssignable(returnOrYieldContext, type,
+                  statement.expression, statement.fileOffset,
+                  isReturnFromAsync: isAsync, isVoidAllowed: true) !=
+              null) {
+        // Not assignable, use the expectation.
+        type = greatestClosure(inferrer.coreTypes, returnOrYieldContext);
+      }
       var unwrappedType = type;
       if (isAsync) {
         unwrappedType = inferrer.typeSchemaEnvironment.unfutureType(type);
@@ -255,6 +334,16 @@
             .getStandardUpperBound(
                 _inferredUnwrappedReturnOrYieldType, unwrappedType);
       }
+      return;
+    }
+
+    // If we are not inferring a type we can immediately check that the return
+    // is valid.
+    if (checkValidReturn(inferrer, declaredReturnType, statement, type) &&
+        statement.expression != null) {
+      inferrer.ensureAssignable(returnOrYieldContext, type,
+          statement.expression, statement.fileOffset,
+          isReturnFromAsync: isAsync, isVoidAllowed: true);
     }
   }
 
@@ -293,13 +382,20 @@
     assert(_needToInferReturnType);
     DartType inferredType =
         inferrer.inferReturnType(_inferredUnwrappedReturnOrYieldType);
-    if (!_analyzerSubtypeOf(inferrer, inferredType, returnOrYieldContext)) {
+    if (!inferrer.typeSchemaEnvironment
+        .isSubtypeOf(inferredType, returnOrYieldContext)) {
       // If the inferred return type isn't a subtype of the context, we use the
       // context.
       inferredType = greatestClosure(inferrer.coreTypes, returnOrYieldContext);
     }
 
-    return _wrapAsyncOrGenerator(inferrer, inferredType);
+    inferredType = _wrapAsyncOrGenerator(inferrer, inferredType);
+    for (int i = 0; i < returnStatements.length; ++i) {
+      checkValidReturn(inferrer, inferredType, returnStatements[i],
+          returnExpressionTypes[i]);
+    }
+
+    return inferredType;
   }
 
   DartType _wrapAsyncOrGenerator(TypeInferrerImpl inferrer, DartType type) {
@@ -315,19 +411,6 @@
       return type;
     }
   }
-
-  static bool _analyzerSubtypeOf(
-      TypeInferrerImpl inferrer, DartType subtype, DartType supertype) {
-    if (supertype is VoidType) {
-      if (subtype is VoidType) return true;
-      if (subtype is InterfaceType &&
-          identical(subtype.classNode, inferrer.coreTypes.nullClass)) {
-        return true;
-      }
-      return false;
-    }
-    return inferrer.typeSchemaEnvironment.isSubtypeOf(subtype, supertype);
-  }
 }
 
 /// Enum denoting the kinds of contravariance check that might need to be
@@ -584,22 +667,9 @@
   Expression ensureAssignable(DartType expectedType, DartType actualType,
       Expression expression, int fileOffset,
       {bool isReturnFromAsync: false,
-      bool isReturn: false,
-      bool isVoidAllowed,
-      bool isArrow: false,
-      DartType declaredReturnType,
+      bool isVoidAllowed: false,
       Template<Message Function(DartType, DartType)> template}) {
-    isVoidAllowed ??= isArrow;
     assert(expectedType != null);
-    if (isReturn &&
-        !isArrow &&
-        !isValidReturn(declaredReturnType, actualType, isReturnFromAsync)) {
-      TreeNode parent = expression.parent;
-      Expression errorNode = helper.wrapInProblem(
-          expression, messageReturnFromVoidFunction, noLength);
-      parent?.replaceChild(expression, errorNode);
-      return errorNode;
-    }
     expectedType = greatestClosure(coreTypes, expectedType);
 
     DartType initialExpectedType = expectedType;
@@ -616,28 +686,6 @@
         expectedType = futuredExpectedType;
       }
     }
-    if (isReturn && !isArrow) {
-      if (expectedType is VoidType) {
-        isVoidAllowed = true;
-        if (actualType is! VoidType &&
-            actualType is! DynamicType &&
-            !isNull(actualType)) {
-          // Error: not assignable.  Perform error recovery.
-          TreeNode parent = expression.parent;
-          Expression errorNode = helper.wrapInProblem(
-              expression, messageReturnFromVoidFunction, noLength);
-          parent?.replaceChild(expression, errorNode);
-          return errorNode;
-        }
-      } else {
-        DartType flattened = typeSchemaEnvironment.unfutureType(expectedType);
-        if (flattened is VoidType) {
-          isVoidAllowed = true;
-        } else {
-          isVoidAllowed = expectedType is DynamicType;
-        }
-      }
-    }
 
     // We don't need to insert assignability checks when doing top level type
     // inference since top level type inference only cares about the type that
@@ -692,10 +740,11 @@
     if (!typeSchemaEnvironment.isSubtypeOf(expectedType, actualType)) {
       // Error: not assignable.  Perform error recovery.
       var parent = expression.parent;
-      var errorNode = helper.wrapInCompileTimeError(
+      var errorNode = helper.wrapInProblem(
           expression,
           (template ?? templateInvalidAssignment)
-              .withArguments(actualType, expectedType));
+              .withArguments(actualType, expectedType),
+          noLength);
       parent?.replaceChild(expression, errorNode);
       return errorNode;
     } else {
@@ -704,8 +753,8 @@
         // The type of the expression is known precisely, so an implicit
         // downcast is guaranteed to fail.  Insert a compile-time error.
         var parent = expression.parent;
-        var errorNode = helper.wrapInCompileTimeError(
-            expression, template.withArguments(actualType, expectedType));
+        var errorNode = helper.wrapInProblem(expression,
+            template.withArguments(actualType, expectedType), noLength);
         parent?.replaceChild(expression, errorNode);
         return errorNode;
       } else {
@@ -720,63 +769,6 @@
     }
   }
 
-  bool isValidReturn(
-      DartType returnType, DartType expressionType, bool isAsync) {
-    final DartType t = returnType;
-    final DartType s = expressionType;
-    if (!isAsync) {
-      if (t is DynamicType) {
-        // * `return exp;` where `exp` has static type `S` is a valid return if:
-        //   * `T` is `dynamic`
-        return true;
-      }
-
-      if (t is VoidType) {
-        // * `return exp;` where `exp` has static type `S` is a valid return if:
-        //   * `T` is `void`
-        //   * and `S` is `void` or `dynamic` or `Null`
-        return s is VoidType || s is DynamicType || isNull(s);
-      } else {
-        // * `return exp;` where `exp` has static type `S` is a valid return if:
-        //   * `T` is not `void`
-        //   * and `S` is not `void`
-        //   * and `S` is assignable to `T`
-        return s is! VoidType;
-      }
-    }
-    final DartType flattenT = typeSchemaEnvironment.unfutureType(t);
-
-    // * `return exp;` where `exp` has static type `S` is a valid return if:
-    //   * `flatten(T)` is `dynamic` or `Null`
-    if (flattenT is DynamicType || isNull(flattenT)) return true;
-
-    // * `return exp;` where `exp` has static type `S` is a valid return if:
-    //   * `T` is `void`
-    //   * and `S` is `void`, `dynamic` or `Null`
-    if (t is VoidType) {
-      if (s is VoidType || s is DynamicType || isNull(s)) return true;
-    } else {
-      final DartType flattenS = typeSchemaEnvironment.unfutureType(s);
-      // * `return exp;` where `exp` has static type `S` is a valid return if:
-      //   * `T` is not `void`
-      //   * `flatten(T)` is `void`
-      //   * and `flatten(S)` is `void`, `dynamic` or `Null`
-      if (flattenT is VoidType) {
-        if (flattenS is VoidType ||
-            flattenS is DynamicType ||
-            isNull(flattenS)) {
-          return true;
-        }
-      }
-
-      // * `return exp;` where `exp` has static type `S` is a valid return if:
-      //   * `T` is not `void`
-      //   * and `flatten(S)` is not `void`
-      if (flattenS is! VoidType) return true;
-    }
-    return false;
-  }
-
   bool isNull(DartType type) {
     return type is InterfaceType && type.classNode == coreTypes.nullClass;
   }
@@ -833,10 +825,10 @@
           new Let(
               new VariableDeclaration.forValue(receiver)
                 ..fileOffset = receiver.fileOffset,
-              new SyntheticExpressionJudgment(helper.buildCompileTimeError(
+              helper.buildProblem(
                   errorTemplate.withArguments(name.name, receiverType),
                   fileOffset,
-                  noLength)))
+                  noLength))
             ..fileOffset = fileOffset);
     }
     return interfaceMember;
@@ -969,14 +961,12 @@
     }
   }
 
-  FunctionType getCalleeFunctionType(
-      Object interfaceMember, DartType receiverType, bool followCall) {
-    var type = getCalleeType(interfaceMember, receiverType);
-    if (type is FunctionType) {
-      return type;
-    } else if (followCall && type is InterfaceType) {
-      var member = _getInterfaceMember(type.classNode, callName, false);
-      var callType = getCalleeType(member, type);
+  FunctionType getCalleeFunctionType(DartType calleeType, bool followCall) {
+    if (calleeType is FunctionType) {
+      return calleeType;
+    } else if (followCall && calleeType is InterfaceType) {
+      var member = _getInterfaceMember(calleeType.classNode, callName, false);
+      var callType = getCalleeType(member, calleeType);
       if (callType is FunctionType) {
         return callType;
       }
@@ -1216,10 +1206,12 @@
     assert(closureContext == null);
     this.helper = helper;
     var actualType = inferExpression(
-        initializer, declaredType ?? const UnknownType(), declaredType != null);
+        initializer, declaredType ?? const UnknownType(), declaredType != null,
+        isVoidAllowed: true);
     if (declaredType != null) {
       ensureAssignable(
-          declaredType, actualType, initializer, initializer.fileOffset);
+          declaredType, actualType, initializer, initializer.fileOffset,
+          isVoidAllowed: declaredType is VoidType);
     }
     this.helper = null;
   }
@@ -1342,10 +1334,10 @@
     if (named.length == 2) {
       if (named[0].name == named[1].name) {
         var name = named[1].name;
-        var error = helper.buildCompileTimeError(
-            templateDuplicatedNamedArgument.withArguments(name),
-            named[1].fileOffset,
-            name.length);
+        var error = helper
+            .buildProblem(templateDuplicatedNamedArgument.withArguments(name),
+                named[1].fileOffset, name.length)
+            .desugared;
         arguments.named = [new kernel.NamedExpression(named[1].name, error)];
         formalTypes.removeLast();
         actualTypes.removeLast();
@@ -1360,10 +1352,10 @@
         if (seenNames.containsKey(name)) {
           hasProblem = true;
           var prevNamedExpression = seenNames[name];
-          prevNamedExpression.value = helper.buildCompileTimeError(
-              templateDuplicatedNamedArgument.withArguments(name),
-              expression.fileOffset,
-              name.length)
+          prevNamedExpression.value = helper
+              .buildProblem(templateDuplicatedNamedArgument.withArguments(name),
+                  expression.fileOffset, name.length)
+              .desugared
             ..parent = prevNamedExpression;
           formalTypes.removeAt(namedTypeIndex);
           actualTypes.removeAt(namedTypeIndex);
@@ -1634,12 +1626,22 @@
       isOverloadedArithmeticOperator = typeSchemaEnvironment
           .isOverloadedArithmeticOperatorAndType(interfaceMember, receiverType);
     }
-    var calleeType =
-        getCalleeFunctionType(interfaceMember, receiverType, !isImplicitCall);
+    var calleeType = getCalleeType(interfaceMember, receiverType);
+    var functionType = getCalleeFunctionType(calleeType, !isImplicitCall);
+    if (interfaceMember != null &&
+        calleeType is! DynamicType &&
+        calleeType != coreTypes.functionClass.rawType &&
+        identical(functionType, unknownFunction)) {
+      var parent = expression.parent;
+      kernel.Expression error = helper.wrapInProblem(expression,
+          templateInvokeNonFunction.withArguments(methodName.name), noLength);
+      parent?.replaceChild(expression, error);
+      return new ExpressionInferenceResult(null, const DynamicType());
+    }
     var checkKind = preCheckInvocationContravariance(receiver, receiverType,
         interfaceMember, desugaredInvocation, arguments, expression);
-    var inferenceResult = inferInvocation(
-        typeContext, fileOffset, calleeType, calleeType.returnType, arguments,
+    var inferenceResult = inferInvocation(typeContext, fileOffset, functionType,
+        functionType.returnType, arguments,
         isOverloadedArithmeticOperator: isOverloadedArithmeticOperator,
         receiverType: receiverType);
     var inferredType = inferenceResult.type;
@@ -1647,7 +1649,7 @@
       inferredType = coreTypes.boolClass.rawType;
     }
     handleInvocationContravariance(checkKind, desugaredInvocation, arguments,
-        expression, inferredType, calleeType, fileOffset);
+        expression, inferredType, functionType, fileOffset);
     int resultOffset = arguments.fileOffset != -1
         ? arguments.fileOffset
         : expression.fileOffset;
@@ -1669,14 +1671,15 @@
           receiverType is! DynamicType &&
           receiverType != typeSchemaEnvironment.rawFunctionType) {
         var parent = expression.parent;
-        var errorNode = helper.wrapInCompileTimeError(expression,
-            templateImplicitCallOfNonMethod.withArguments(receiverType));
+        var errorNode = helper.wrapInProblem(
+            expression,
+            templateImplicitCallOfNonMethod.withArguments(receiverType),
+            noLength);
         parent?.replaceChild(expression, errorNode);
       }
       listener.methodInvocation(
           expression,
           resultOffset,
-          receiverType,
           arguments.types,
           isImplicitCall,
           getRealTarget(interfaceMember),
@@ -1751,7 +1754,7 @@
       listener.propertyGetCall(expression, expression.fileOffset, inferredType);
     } else {
       listener.propertyGet(expression, expression.fileOffset, forSyntheticToken,
-          receiverType, interfaceMember, inferredType);
+          interfaceMember, inferredType);
     }
     expression.inferredType = inferredType;
   }
@@ -1956,14 +1959,13 @@
     return new InterfaceType(class_, <DartType>[type ?? const DynamicType()]);
   }
 
-  void _forEachArgument(ArgumentsJudgment arguments,
-      void callback(String name, Expression expression)) {
+  void _forEachArgument(
+      Arguments arguments, void callback(String name, Expression expression)) {
     for (var expression in arguments.positional) {
       callback(null, expression);
     }
-    for (var namedExpression in arguments.namedJudgments) {
-      callback(namedExpression.name,
-          namedExpression.originalValue ?? namedExpression.value);
+    for (var namedExpression in arguments.named) {
+      callback(namedExpression.name, namedExpression.value);
     }
   }
 
diff --git a/pkg/front_end/lib/src/scanner/token.dart b/pkg/front_end/lib/src/scanner/token.dart
index 7015f5c..4d07967 100644
--- a/pkg/front_end/lib/src/scanner/token.dart
+++ b/pkg/front_end/lib/src/scanner/token.dart
@@ -1418,20 +1418,6 @@
   static const TokenType PERIOD_PERIOD_PERIOD = const TokenType(
       '...', 'PERIOD_PERIOD_PERIOD', NO_PRECEDENCE, PERIOD_PERIOD_PERIOD_TOKEN);
 
-  static const TokenType GENERIC_METHOD_TYPE_LIST = const TokenType(
-      'generic_comment_list',
-      'GENERIC_METHOD_TYPE_LIST',
-      NO_PRECEDENCE,
-      GENERIC_METHOD_TYPE_LIST_TOKEN,
-      stringValue: null);
-
-  static const TokenType GENERIC_METHOD_TYPE_ASSIGN = const TokenType(
-      'generic_comment_assign',
-      'GENERIC_METHOD_TYPE_ASSIGN',
-      NO_PRECEDENCE,
-      GENERIC_METHOD_TYPE_ASSIGN_TOKEN,
-      stringValue: null);
-
   static const TokenType AS = Keyword.AS;
 
   static const TokenType IS = Keyword.IS;
@@ -1523,8 +1509,6 @@
     TokenType.BACKPING,
     TokenType.BACKSLASH,
     TokenType.PERIOD_PERIOD_PERIOD,
-    TokenType.GENERIC_METHOD_TYPE_LIST,
-    TokenType.GENERIC_METHOD_TYPE_ASSIGN,
 
     // TODO(danrubel): Should these be added to the "all" list?
     //TokenType.IS,
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 0c4ff07..602e60c 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -33,7 +33,6 @@
 CantInferPackagesFromManyInputs/example: Fail
 CantInferPackagesFromPackageUri/analyzerCode: Fail
 CantInferPackagesFromPackageUri/example: Fail
-CantInferTypeDueToCircularity/dart2jsCode: Fail
 CantInferTypeDueToCircularity/example: Fail
 CantInferTypeDueToInconsistentOverrides/example: Fail
 CantUseSuperBoundedTypeForInstanceCreation/analyzerCode: Fail
@@ -49,6 +48,8 @@
 ConflictsWithTypeVariable/example: Fail
 ConstAfterFactory/script1: Fail
 ConstAndCovariant/script2: Fail
+ConstAndFinal/declaration3: Fail
+ConstAndFinal/declaration4: Fail
 ConstAndVar/script1: Fail
 ConstConstructorInSubclassOfMixinApplication/example: Fail
 ConstConstructorNonFinalField/example: Fail
@@ -56,27 +57,19 @@
 ConstConstructorWithNonConstSuper/example: Fail
 ConstEvalContext/analyzerCode: Fail # This is just used for displaying the context.
 ConstEvalContext/example: Fail # This is just used for displaying the context.
-ConstEvalDuplicateKey/dart2jsCode: Fail
 ConstEvalDuplicateKey/example: Fail
-ConstEvalFailedAssertion/dart2jsCode: Fail
 ConstEvalFailedAssertion/example: Fail
-ConstEvalFailedAssertionWithMessage/dart2jsCode: Fail
 ConstEvalFailedAssertionWithMessage/example: Fail
 ConstEvalInvalidBinaryOperandType/analyzerCode: Fail # CONST_EVAL_TYPE_NUM / CONST_EVAL_TYPE_BOOL
 ConstEvalInvalidBinaryOperandType/example: Fail
-ConstEvalInvalidMethodInvocation/dart2jsCode: Fail
 ConstEvalInvalidMethodInvocation/example: Fail
-ConstEvalInvalidStaticInvocation/dart2jsCode: Fail
 ConstEvalInvalidStaticInvocation/example: Fail
-ConstEvalInvalidStringInterpolationOperand/dart2jsCode: Fail
 ConstEvalInvalidStringInterpolationOperand/example: Fail
 ConstEvalInvalidType/analyzerCode: Fail # CONST_CONSTRUCTOR_FIELD_TYPE_MISMATCH / CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH / CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH / ...
 ConstEvalInvalidType/example: Fail
 ConstEvalNegativeShift/analyzerCode: Fail # http://dartbug.com/33481
 ConstEvalNegativeShift/example: Fail
-ConstEvalNonConstantLiteral/dart2jsCode: Fail
 ConstEvalNonConstantLiteral/example: Fail
-ConstEvalNonConstantVariableGet/dart2jsCode: Fail
 ConstEvalNonConstantVariableGet/example: Fail
 ConstEvalZeroDivisor/example: Fail
 ConstFieldWithoutInitializer/example: Fail
@@ -185,7 +178,6 @@
 FunctionTypeDefaultValue/example: Fail
 FunctionTypedParameterVar/script1: Fail
 GeneratorReturnsValue/example: Fail
-GetterNotFound/dart2jsCode: Fail
 GetterNotFound/example: Fail
 GetterWithFormals/example: Fail
 IllegalAssignmentToNonAssignable/script1: Fail
@@ -194,6 +186,7 @@
 IllegalMixinDueToConstructors/example: Fail
 IllegalSyncGeneratorVoidReturnType/analyzerCode: Fail # The analyzer doesn't report this error.
 ImplementsBeforeExtends/script: Fail
+ImplementsBeforeOn/script: Fail
 ImplementsBeforeWith/script: Fail
 ImplementsFutureOr/analyzerCode: Fail # The analyzer doesn't report this error.
 ImplicitCallOfNonMethod/example: Fail
@@ -231,7 +224,6 @@
 MemberWithSameNameAsClass/analyzerCode: Fail
 MemberWithSameNameAsClass/example: Fail
 MetadataTypeArguments/example: Fail
-MethodNotFound/dart2jsCode: Fail
 MethodNotFound/example: Fail
 MissingArgumentList/analyzerCode: Fail
 MissingArgumentList/example: Fail
@@ -241,12 +233,12 @@
 MissingInput/example: Fail
 MissingMain/analyzerCode: Fail
 MissingMain/example: Fail
-MissingPartOf/dart2jsCode: Fail
 MissingPrefixInDeferredImport/example: Fail
 MixinInferenceNoMatchingClass/example: Fail
 MultipleExtends/script: Fail
 MultipleImplements/script: Fail
 MultipleLibraryDirectives/example: Fail
+MultipleOnClauses/script: Fail
 MultipleWith/script: Fail
 NamedFunctionExpression/example: Fail
 NativeClauseShouldBeAnnotation/example: Fail
@@ -260,7 +252,6 @@
 NonInstanceTypeVariableUse/example: Fail
 NonPartOfDirectiveInPart/script1: Fail
 NotAConstantExpression/example: Fail
-NotAPrefixInTypeAnnotation/example: Fail
 NotAType/example: Fail
 NotAnLvalue/example: Fail
 NotConstantExpression/example: Fail
@@ -280,14 +271,9 @@
 OverrideTypeVariablesMismatch/example: Fail
 PackageNotFound/analyzerCode: Fail
 PackageNotFound/example: Fail
-PartOfLibraryNameMismatch/dart2jsCode: Fail
 PartOfLibraryNameMismatch/example: Fail
-PartOfSelf/dart2jsCode: Fail
-PartOfUriMismatch/dart2jsCode: Fail
 PartOfUriMismatch/example: Fail
-PartOfUseUri/dart2jsCode: Fail
 PartOfUseUri/example: Fail
-PartTwice/dart2jsCode: Fail
 PatchClassTypeVariablesMismatch/analyzerCode: Fail
 PatchClassTypeVariablesMismatch/example: Fail
 PatchDeclarationMismatch/analyzerCode: Fail
@@ -314,7 +300,6 @@
 SdkSpecificationNotFound/example: Fail
 SdkSummaryNotFound/analyzerCode: Fail
 SdkSummaryNotFound/example: Fail
-SetterNotFound/dart2jsCode: Fail
 SetterNotFound/example: Fail
 SetterNotSync/example: Fail
 SetterWithWrongNumberOfFormals/example: Fail
@@ -328,10 +313,8 @@
 SuperAsIdentifier/example: Fail
 SuperNullAware/example: Fail
 SuperclassHasNoDefaultConstructor/example: Fail
-SuperclassHasNoGetter/dart2jsCode: Fail
 SuperclassHasNoGetter/example: Fail
 SuperclassHasNoMethod/example: Fail
-SuperclassHasNoSetter/dart2jsCode: Fail
 SuperclassHasNoSetter/example: Fail
 SuperclassMethodArgumentMismatch/analyzerCode: Fail
 SuperclassMethodArgumentMismatch/example: Fail
@@ -345,7 +328,6 @@
 ThisOrSuperAccessInFieldInitializer/example: Fail
 TooFewArguments/example: Fail
 TooManyArguments/example: Fail
-TooManyArgumentsCouldBeNamed/example: Fail
 TopLevelOperator/script1: Fail
 TopLevelOperator/script2: Fail
 TopLevelOperator/script3: Fail
@@ -354,7 +336,9 @@
 TypeArgumentsOnTypeVariable/script1: Fail
 TypeNotFound/example: Fail
 TypeVariableDuplicatedName/example: Fail
-TypeVariableInConstExpression/example: Fail
+TypeVariableInConstantContext/declaration1: Fail
+TypeVariableInConstantContext/declaration2: Fail
+TypeVariableInConstantContext/declaration3: Fail
 TypeVariableInStaticContext/example: Fail
 TypeVariableSameNameAsEnclosing/example: Fail
 TypedefNotFunction/example: Fail
@@ -365,7 +349,6 @@
 UnexpectedToken/script1: Fail
 UnmatchedToken/script1: Fail
 UnmatchedToken/script3: Fail
-UnresolvedPrefixInTypeAnnotation/example: Fail
 Unspecified/analyzerCode: Fail
 Unspecified/example: Fail
 UnsupportedPrefixPlus/script: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index b428d444..76aea60 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -26,27 +26,15 @@
 # "InternalProblem". This way, UX review can prioritize it accordingly.
 #
 # Eventually, we'd like to have all diagnostics in one shared
-# location. However, for now, dart2js and the analyzer needs to translate error
-# codes to their own format. To support this, an entry can contain an analyzer
-# error code (analyzerCode) and a dart2js error code (dart2jsCode).
-#
-# For dart2js, there's a few special error codes:
-#
-# - `*ignored*` this error is ignored by dart2js (normally a recoverable parser
-#   error that dart2js reports in later phase for historical reasons).
-#
-# - `*fatal*` this is an error that is considered fatal by dart2js (normally a
-#   recoverable parser error that dart2js can't reliably recover from).
-#
-# dart2js only needs to translate error generated by the parser or scanner, so
-# only lexical and syntactical errors have a code for dart2js. Long term, we
-# assume that dart2js will rely solely on the front-end to report errors.
+# location. However, for now, the analyzer needs to translate error codes to
+# its own format. To support this, an entry can contain an analyzer error code
+# (analyzerCode).
 #
 # Long term, the analyzer and front-end need to share the same error codes. So
 # eventually all error codes should have an `analyzerCode` field.
 #
-# In some cases a mesage is internal to the frontend, and no meaningful dart2js
-# nor analyzer code can be provided. In such cases set `frontendInternal: true`.
+# In some cases a mesage is internal to the frontend, and no meaningful
+# analyzer code can be provided. In such cases set `frontendInternal: true`.
 #
 # ## Parameter Substitution in Template and Tip
 #
@@ -81,7 +69,6 @@
 
 AsciiControlCharacter:
   template: "The control character #unicode can only be used in strings and comments."
-  dart2jsCode: BAD_INPUT_CHARACTER
   analyzerCode: ILLEGAL_CHARACTER
   expression: "\x1b 1"
 
@@ -104,12 +91,10 @@
 
 ConstEvalZeroDivisor:
   template: "Binary operator '#string' on '#string2' requires non-zero divisor, but divisor was '0'."
-  dart2jsCode: INVALID_CONSTANT_DIV
   analyzerCode: CONST_EVAL_THROWS_IDBZE
 
 ConstEvalNegativeShift:
   template: "Binary operator '#string' on '#string2' requires non-negative operand, but was '#string3'."
-  dart2jsCode: INVALID_CONSTANT_SHIFT
 
 ConstEvalInvalidMethodInvocation:
   template: "The method '#string' can't be invoked on '#constant' within a const context."
@@ -138,37 +123,30 @@
 NotConstantExpression:
   template: "#string is not a constant expression."
   analyzerCode: NOT_CONSTANT_EXPRESSION
-  dart2jsCode: "*fatal*"
 
 NotAConstantExpression:
   template: "Not a constant expression."
-  severity: ERROR
   analyzerCode: NOT_CONSTANT_EXPRESSION
-  dart2jsCode: "*fatal*"
 
 NonAsciiIdentifier:
   template: "The non-ASCII character '#character' (#unicode) can't be used in identifiers, only in strings and comments."
   tip: "Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign)."
   analyzerCode: ILLEGAL_CHARACTER
-  dart2jsCode: BAD_INPUT_CHARACTER
   expression: "å"
 
 NonAsciiWhitespace:
   template: "The non-ASCII space character #unicode can only be used in strings and comments."
   analyzerCode: ILLEGAL_CHARACTER
-  dart2jsCode: BAD_INPUT_CHARACTER
   expression: "\u2028 1"
 
 Encoding:
   template: "Unable to decode bytes as UTF-8."
-  dart2jsCode: "*fatal*"
   bytes: [255]
 
 EmptyNamedParameterList:
   template: "Named parameter lists cannot be empty."
   tip: "Try adding a named parameter to the list."
   analyzerCode: "MISSING_IDENTIFIER"
-  dart2jsCode: EMPTY_NAMED_PARAMETER_LIST
   script: >
     foo({}) {}
 
@@ -180,7 +158,6 @@
   template: "Optional parameter lists cannot be empty."
   tip: "Try adding an optional parameter to the list."
   analyzerCode: "MISSING_IDENTIFIER"
-  dart2jsCode: EMPTY_OPTIONAL_PARAMETER_LIST
   script: >
     foo([]) {}
 
@@ -192,7 +169,6 @@
   template: "Expected a block."
   tip: "Try adding {}."
   analyzerCode: EXPECTED_TOKEN
-  dart2jsCode: "*fatal*"
   script: "try finally {}"
 
 ExpectedBlockToSkip:
@@ -200,7 +176,6 @@
   # TODO(ahe): In some scenarios, we can suggest removing the 'static' keyword.
   tip: "Try adding {}."
   analyzerCode: MISSING_FUNCTION_BODY
-  dart2jsCode: NATIVE_OR_BODY_EXPECTED
   script: "main();"
 
 ExpectedBody:
@@ -208,13 +183,11 @@
   # TODO(ahe): In some scenarios, we can suggest removing the 'static' keyword.
   tip: "Try adding {}."
   analyzerCode: MISSING_FUNCTION_BODY
-  dart2jsCode: BODY_EXPECTED
   script: "main();"
 
 ExpectedStatement:
   template: "Expected a statement."
   analyzerCode: MISSING_STATEMENT
-  dart2jsCode: "*fatal*"
   statement: "void;"
 
 ExpectedButGot:
@@ -224,7 +197,6 @@
   # a ',' would also have worked. We don't have enough information to give a
   # good suggestion.
   analyzerCode: EXPECTED_TOKEN
-  dart2jsCode: MISSING_TOKEN_BEFORE_THIS
   script:
     - "main() => true ? 1;"
     - "main() => foo(x: 1 y: 2);"
@@ -251,7 +223,6 @@
   #    class Foo {
   #
   analyzerCode: EXPECTED_TOKEN
-  dart2jsCode: MISSING_TOKEN_AFTER_THIS
   script:
     - "main() { return true }"
 
@@ -259,54 +230,52 @@
   template: "Only one library directive may be declared in a file."
   tip: "Try removing all but one of the library directives."
   analyzerCode: MULTIPLE_LIBRARY_DIRECTIVES
-  dart2jsCode: "*ignored*"
 
 MultipleExtends:
   template: "Each class definition can have at most one extends clause."
   tip: "Try choosing one superclass and define your class to implement (or mix in) the others."
   analyzerCode: MULTIPLE_EXTENDS_CLAUSES
-  dart2jsCode: "*ignored*"
   script: "class A extends B extends C {}"
 
 MultipleWith:
   template: "Each class definition can have at most one with clause."
   tip: "Try combining all of the with clauses into a single clause."
   analyzerCode: MULTIPLE_WITH_CLAUSES
-  dart2jsCode: "*ignored*"
   script: "class A extends B with C, D with E {}"
 
 WithWithoutExtends:
   template: "The with clause can't be used without an extends clause."
   tip: "Try adding an extends clause such as 'extends Object'."
   analyzerCode: WITH_WITHOUT_EXTENDS
-  dart2jsCode: "GENERIC"
   script: "class A with B, C {}"
 
 WithBeforeExtends:
   template: "The extends clause must be before the with clause."
   tip: "Try moving the extends clause before the with clause."
   analyzerCode: WITH_BEFORE_EXTENDS
-  dart2jsCode: "*ignored*"
   script: "class A with B extends C {}"
 
 ImplementsBeforeExtends:
   template: "The extends clause must be before the implements clause."
   tip: "Try moving the extends clause before the implements clause."
   analyzerCode: IMPLEMENTS_BEFORE_EXTENDS
-  dart2jsCode: "*ignored*"
   script: "class A implements B extends C {}"
 
+ImplementsBeforeOn:
+  template: "The on clause must be before the implements clause."
+  tip: "Try moving the on clause before the implements clause."
+  analyzerCode: IMPLEMENTS_BEFORE_ON
+  script: "mixin A implements B on C {}"
+
 ImplementsBeforeWith:
   template: "The with clause must be before the implements clause."
   tip: "Try moving the with clause before the implements clause."
   analyzerCode: IMPLEMENTS_BEFORE_WITH
-  dart2jsCode: "*ignored*"
   script: "class A extends B implements C with D {}"
 
 ImplementsRepeated:
   template: "'#name' can only be implemented once."
   analyzerCode: IMPLEMENTS_REPEATED
-  dart2jsCode: "*fatal*"
   tip: "Try removing #count of the occurrences."
   script:
     - >-
@@ -317,7 +286,6 @@
 ImplementsSuperClass:
   template: "'#name' can't be used in both 'extends' and 'implements' clauses."
   analyzerCode: IMPLEMENTS_SUPER_CLASS
-  dart2jsCode: "*fatal*"
   tip: "Try removing one of the occurrences."
   script:
     - >-
@@ -328,13 +296,16 @@
   template: "Each class definition can have at most one implements clause."
   tip: "Try combining all of the implements clauses into a single clause."
   analyzerCode: MULTIPLE_IMPLEMENTS_CLAUSES
-  dart2jsCode: "GENERIC"
   script: "class A implements B implements C, D {}"
 
+MultipleOnClauses:
+  template: "Each mixin definition can have at most one on clause."
+  tip: "Try combining all of the on clauses into a single clause."
+  analyzerCode: MULTIPLE_ON_CLAUSES
+  script: "mixin A on B on C, D {}"
+
 ImplementsFutureOr:
   template: "'FutureOr' can't be used in an 'implements' clause."
-  severity: ERROR
-  dart2jsCode: "*fatal*"
   script:
     - >-
       import 'dart:async';
@@ -343,30 +314,25 @@
 ExpectedClassOrMixinBody:
   template: "Expected a class or mixin body, but got '#lexeme'."
   analyzerCode: MISSING_CLASS_BODY
-  dart2jsCode: "*fatal*"
 
 ExpectedClassBodyToSkip: ExpectedClassOrMixinBody
 
 ExpectedDeclaration:
   template: "Expected a declaration, but got '#lexeme'."
   analyzerCode: EXPECTED_EXECUTABLE
-  dart2jsCode: "*fatal*"
 
 ExpectedClassMember:
   template: "Expected a class member, but got '#lexeme'."
   analyzerCode: EXPECTED_CLASS_MEMBER
-  dart2jsCode: "*fatal*"
 
 ExpectedFunctionBody:
   template: "Expected a function body, but got '#lexeme'."
   analyzerCode: MISSING_FUNCTION_BODY
-  dart2jsCode: NATIVE_OR_FATAL
 
 ExpectedHexDigit:
   template: "A hex digit (0-9 or A-F) must follow '0x'."
   # No tip, seems obvious from the error message.
   analyzerCode: MISSING_HEX_DIGIT
-  dart2jsCode: HEX_DIGIT_EXPECTED
   script: >
     main() {
       var i = 0x;
@@ -374,45 +340,36 @@
 
 ExpectedIdentifier:
   template: "Expected an identifier, but got '#lexeme'."
-  severity: ERROR
   analyzerCode: MISSING_IDENTIFIER
-  dart2jsCode: "*fatal*"
   script: "do() {} main() {}"
 
 EqualityCannotBeEqualityOperand:
   template: "An equality expression can't be an operand of another equality expression."
   tip: "Try re-writing the expression."
   analyzerCode: EQUALITY_CANNOT_BE_EQUALITY_OPERAND
-  dart2jsCode: "*fatal*"
   script:
     - "main() { var b = a < b < c; }"
     - "main() { var b = a == b != c; }"
 
 ExpectedOpenParens:
   template: "Expected '('."
-  dart2jsCode: GENERIC
 
 ExpectedString:
   template: "Expected a String, but got '#lexeme'."
   analyzerCode: EXPECTED_STRING_LITERAL
-  dart2jsCode: "*fatal*"
 
 ExpectedToken:
   template: "Expected to find '#string'."
   analyzerCode: EXPECTED_TOKEN
-  dart2jsCode: "*fatal*"
 
 ExpectedType:
   template: "Expected a type, but got '#lexeme'."
-  severity: ERROR
   analyzerCode: EXPECTED_TYPE_NAME
-  dart2jsCode: "*fatal*"
 
 MissingExpressionInThrow:
   template: "Missing expression after 'throw'."
   tip: "Add an expression after 'throw' or use 'rethrow' to throw a caught exception"
   analyzerCode: MISSING_EXPRESSION_IN_THROW
-  dart2jsCode: "*fatal*"
   statement:
     - "throw;"
 
@@ -420,7 +377,6 @@
   template: "Variables must be declared using the keywords 'const', 'final', 'var' or a type name."
   tip: "Try adding the name of the type of the variable or the keyword 'var'."
   analyzerCode: MISSING_CONST_FINAL_VAR_OR_TYPE
-  dart2jsCode: "*fatal*"
   script:
     - "class C { static f; }"
 
@@ -428,7 +384,6 @@
   template: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
   tip: "Try replacing the keyword with a return type."
   analyzerCode: FUNCTION_TYPED_PARAMETER_VAR
-  dart2jsCode: "*fatal*"
   script:
     - "void f(const x()) {}"
     - "void f(final x()) {}"
@@ -438,7 +393,6 @@
   template: "Members of classes can't be declared to be 'abstract'."
   tip: "Try removing the 'abstract' keyword. You can add the 'abstract' keyword before the class declaration."
   analyzerCode: ABSTRACT_CLASS_MEMBER
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "abstract class C {abstract C.c();}"
     - "abstract class C {abstract m();}"
@@ -451,7 +405,6 @@
   template: "Classes can't be declared inside other classes."
   tip: "Try moving the class to the top-level."
   analyzerCode: CLASS_IN_CLASS
-  dart2jsCode: "*fatal*"
   script:
     - "class C { class B {} }"
 
@@ -459,7 +412,6 @@
   template: "Enums can't be declared inside classes."
   tip: "Try moving the enum to the top-level."
   analyzerCode: ENUM_IN_CLASS
-  dart2jsCode: "*fatal*"
   script:
     - "class Foo { enum Bar { Bar1, Bar2, Bar3 } }"
 
@@ -467,7 +419,6 @@
   template: "Typedefs can't be declared inside classes."
   tip: "Try moving the typedef to the top-level."
   analyzerCode: TYPEDEF_IN_CLASS
-  dart2jsCode: "*fatal*"
   script:
     - "abstract class C { typedef int F(int x); }"
 
@@ -475,7 +426,6 @@
   template: "Getters, setters and methods can't be declared to be 'covariant'."
   tip: "Try removing the 'covariant' keyword."
   analyzerCode: COVARIANT_MEMBER
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "static covariant get x => 0;"
     - "covariant int m() => 0;"
@@ -484,7 +434,6 @@
   template: "The return type can't be 'var'."
   tip: "Try removing the keyword 'var', or replacing it with the name of the return type."
   analyzerCode: VAR_RETURN_TYPE
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { var m() {} }"
     - "class C { var C() {} }"
@@ -493,14 +442,12 @@
   template: "Classes can't be declared to be 'const'."
   tip: "Try removing the 'const' keyword. If you're trying to indicate that instances of the class can be constants, place the 'const' keyword on  the class' constructor(s)."
   analyzerCode: CONST_CLASS
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script: "const class C {}"
 
 ConstAndCovariant:
   template: "Members can't be declared to be both 'const' and 'covariant'."
   tip: "Try removing either the 'const' or 'covariant' keyword."
   analyzerCode: CONST_AND_COVARIANT
-  dart2jsCode: "*ignored*"
   script:
     - "class C { covariant const C f; }"
     - "class C { const covariant C f; }"
@@ -509,16 +456,16 @@
   template: "Members can't be declared to be both 'const' and 'final'."
   tip: "Try removing either the 'const' or 'final' keyword."
   analyzerCode: CONST_AND_FINAL
-  dart2jsCode: EXTRANEOUS_MODIFIER
-  script:
-    - "class C { const final int x = 5; }"
-    - "class C { final const int x = 5; }"
+  declaration:
+    - "class C { static const final int x = 5; }"
+    - "class C { static final const int x = 5; }"
+    - "const final int x = 5;"
+    - "final const int x = 5;"
 
 ConstAndVar:
   template: "Members can't be declared to be both 'const' and 'var'."
   tip: "Try removing either the 'const' or 'var' keyword."
   analyzerCode: CONST_AND_VAR
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { const var x; }"
     - "class C { var const x; }"
@@ -527,29 +474,34 @@
   template: "Only redirecting factory constructors can be declared to be 'const'."
   tip: "Try removing the 'const' keyword, or replacing the body with '=' followed by a valid target."
   analyzerCode: CONST_FACTORY
-  dart2jsCode: "*ignored*"
   script:
     - "class C { const factory C() {} }"
 
+ConstFactoryRedirectionToNonConst:
+  template: "Constant factory constructor can't delegate to a non-constant constructor."
+  tip: "Try redirecting to a different constructor or marking the target constructor 'const'."
+  analyzerCode: REDIRECT_TO_NON_CONST_CONSTRUCTOR
+  script:
+    - >-
+      class A {
+        const factory A.foo() = A.bar;
+        A.bar() {}
+      }
+
 NonConstFactory:
   template: "Cannot invoke a non-'const' factory where a const expression is expected."
   tip: "Try using a constructor or factory that is 'const'."
-  severity: ERROR
   analyzerCode: NOT_CONSTANT_EXPRESSION
-  dart2jsCode: "*fatal*"
 
 NonConstConstructor:
   template: "Cannot invoke a non-'const' constructor where a const expression is expected."
   tip: "Try using a constructor or factory that is 'const'."
-  severity: ERROR
   analyzerCode: NOT_CONSTANT_EXPRESSION
-  dart2jsCode: "*fatal*"
 
 ConstAfterFactory:
   template: "The modifier 'const' should be before the modifier 'factory'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: CONST_AFTER_FACTORY
-  dart2jsCode: "*ignored*"
   script:
     - "class C { factory const C() = prefix.B.foo; }"
 
@@ -557,7 +509,6 @@
   template: "A const constructor can't have a body."
   tip: "Try removing either the 'const' keyword or the body."
   analyzerCode: CONST_CONSTRUCTOR_WITH_BODY
-  dart2jsCode: "*fatal*"
   script:
     - "class C { const C() {} }"
 
@@ -565,7 +516,6 @@
   template: "Getters, setters and methods can't be declared to be 'const'."
   tip: "Try removing the 'const' keyword."
   analyzerCode: CONST_METHOD
-  dart2jsCode: "*fatal*"
   script:
     - "class C { const m() {} }"
 
@@ -573,7 +523,6 @@
   template: "The modifier 'covariant' should be before the modifier 'final'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: COVARIANT_AFTER_FINAL
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "final covariant f;"
 
@@ -581,7 +530,6 @@
   template: "The modifier 'covariant' should be before the modifier 'var'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: COVARIANT_AFTER_VAR
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "var covariant f;"
 
@@ -589,7 +537,6 @@
   template: "Members can't be declared to be both 'covariant' and 'static'."
   tip: "Try removing either the 'covariant' or 'static' keyword."
   analyzerCode: COVARIANT_AND_STATIC
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { covariant static A f; }"
     - "class C { static covariant A f; }"
@@ -598,7 +545,6 @@
   template: "The modifier '#lexeme' was already specified."
   tip: "Try removing all but one occurance of the modifier."
   analyzerCode: DUPLICATED_MODIFIER
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { const const m; }"
     - "class C { external external f(); }"
@@ -610,7 +556,6 @@
   template: "The modifier 'external' should be before the modifier 'const'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: EXTERNAL_AFTER_CONST
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { const external C(); }"
 
@@ -618,7 +563,6 @@
   template: "The modifier 'external' should be before the modifier 'factory'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: EXTERNAL_AFTER_FACTORY
-  dart2jsCode: "*ignored*"
   script:
     - "class C { factory external C(); }"
 
@@ -626,7 +570,6 @@
   template: "The modifier 'external' should be before the modifier 'static'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: EXTERNAL_AFTER_STATIC
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { static external f(); }"
 
@@ -634,7 +577,6 @@
   template: "External constructors can't have a body."
   tip: "Try removing the body of the constructor, or removing the keyword 'external'."
   analyzerCode: EXTERNAL_CONSTRUCTOR_WITH_BODY
-  dart2jsCode: "*ignored*"
   script:
     - "class C { external C() {} }"
 
@@ -642,13 +584,11 @@
   template: "An external constructor can't initialize fields."
   tip: "Try removing the field initializers, or removing the keyword 'external'."
   analyzerCode: EXTERNAL_CONSTRUCTOR_WITH_FIELD_INITIALIZERS
-  dart2jsCode: "*fatal*"
 
 ExternalFactoryWithBody:
   template: "External factories can't have a body."
   tip: "Try removing the body of the factory, or removing the keyword 'external'."
   analyzerCode: EXTERNAL_CONSTRUCTOR_WITH_BODY
-  dart2jsCode: "*ignored*"
   script:
     - "class C { external factory C() {} }"
 
@@ -656,25 +596,20 @@
   template: "Fields can't be declared to be 'external'."
   tip: "Try removing the keyword 'external'."
   analyzerCode: EXTERNAL_FIELD
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { external var f; }"
 
 InitializerForStaticField:
   template: "'#name' isn't an instance field of this class."
   analyzerCode: INITIALIZER_FOR_STATIC_FIELD
-  dart2jsCode: "*fatal*"
 
 InitializerOutsideConstructor:
   template: "Only constructors can have initializers, and '#name' is not a constructor."
   analyzerCode: INITIALIZER_OUTSIDE_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
 
 MoreThanOneSuperOrThisInitializer:
   template: "Can't have more than one 'super' or 'this' initializer."
-  severity: ERROR
   analyzerCode: SUPER_IN_REDIRECTING_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C.bad() : super(), super(); }"
     - "class C { C(); C.bad() : super(), this(); }"
@@ -683,31 +618,25 @@
 
 ThisInitializerNotAlone:
   template: "Can't have other initializers together with 'this'."
-  severity: ERROR
   analyzerCode: FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { int x; C(); C.bad() : x = 5, this(); }"
     - "class C { int x; C(); C.bad() : this(), x = 5; }"
 
 SuperInitializerNotLast:
   template: "Can't have initializers after 'super'."
-  severity: ERROR
   analyzerCode: INVALID_SUPER_INVOCATION
-  dart2jsCode: "*fatal*"
   script:
     - "class C { int x; C.bad() : super(), x = 5; }"
 
 ConstConstructorWithNonConstSuper:
   template: "Constant constructor can't call non-constant super constructors."
   analyzerCode: CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
-  dart2jsCode: "*fatal*"
 
 ExtraneousModifier:
   template: "Can't have modifier '#lexeme' here."
   tip: "Try removing '#lexeme'."
   analyzerCode: EXTRANEOUS_MODIFIER
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "var String foo; main(){}"
     - "var set foo; main(){}"
@@ -740,7 +669,6 @@
   template: "Members can't be declared to be both 'final' and 'covariant'."
   tip: "Try removing either the 'final' or 'covariant' keyword."
   analyzerCode: FINAL_AND_COVARIANT
-  dart2jsCode: "*ignored*"
   script:
     - "class C { covariant final f = 5; }"
     - "class C { final covariant f = 5; }"
@@ -749,7 +677,6 @@
   template: "Members can't be declared to be both 'final' and 'var'."
   tip: "Try removing the keyword 'var'."
   analyzerCode: FINAL_AND_VAR
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { final var x = 5; }"
     - "class C { var final x = 5; }"
@@ -758,7 +685,6 @@
   template: "The modifier 'static' should be before the modifier 'const'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: STATIC_AFTER_CONST
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { const static int f; }"
 
@@ -766,7 +692,6 @@
   template: "The modifier 'static' should be before the modifier 'final'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: STATIC_AFTER_FINAL
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { final static int f = 5; }"
 
@@ -774,7 +699,6 @@
   template: "The modifier 'static' should be before the modifier 'var'."
   tip: "Try re-ordering the modifiers."
   analyzerCode: STATIC_AFTER_VAR
-  dart2jsCode: "*ignored*"
   script:
     - "class C { var static f; }"
 
@@ -782,7 +706,6 @@
   template: "Constructors can't be static."
   tip: "Try removing the keyword 'static'."
   analyzerCode: STATIC_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { static C() {} }"
     - "class C { static C.m() {} }"
@@ -791,7 +714,6 @@
   template: "Operators can't be static."
   tip: "Try removing the keyword 'static'."
   analyzerCode: STATIC_OPERATOR
-  dart2jsCode: EXTRANEOUS_MODIFIER
   script:
     - "class C { static operator +(int x) => x + 1; }"
 
@@ -799,46 +721,38 @@
   template: "A break statement can't be used outside of a loop or switch statement."
   tip: "Try removing the break statement."
   analyzerCode: BREAK_OUTSIDE_OF_LOOP
-  dart2jsCode: "*ignored*"
   script:
     - "main() { break; }"
 
 InvalidBreakTarget:
   template: "Can't break to '#name'."
-  dart2jsCode: "*fatal*"
 
 BreakTargetOutsideFunction:
   template: "Can't break to '#name' in a different function."
   analyzerCode: LABEL_IN_OUTER_SCOPE
-  dart2jsCode: "*fatal*"
 
 ContinueOutsideOfLoop:
   template: "A continue statement can't be used outside of a loop or switch statement."
   tip: "Try removing the continue statement."
   analyzerCode: CONTINUE_OUTSIDE_OF_LOOP
-  dart2jsCode: "*ignored*"
   script:
     - "main() { continue; }"
 
 InvalidContinueTarget:
   template: "Can't continue at '#name'."
-  dart2jsCode: "*fatal*"
 
 ContinueTargetOutsideFunction:
   template: "Can't continue at '#name' in a different function."
   analyzerCode: LABEL_IN_OUTER_SCOPE
-  dart2jsCode: "*fatal*"
 
 ContinueLabelNotTarget:
   template: "Target of continue must be a label."
   analyzerCode: LABEL_UNDEFINED
-  dart2jsCode: "*fatal*"
 
 ContinueWithoutLabelInCase:
   template: "A continue statement in a switch statement must have a label as a target."
   tip: "Try adding a label associated with one of the case clauses to the continue statement."
   analyzerCode: CONTINUE_WITHOUT_LABEL_IN_CASE
-  dart2jsCode: "*ignored*"
   script:
     - "main() { switch (x) {case 1: continue;} }"
 
@@ -846,7 +760,6 @@
   template: "The label '#name' was already used in this switch statement."
   tip: "Try choosing a different name for this label."
   analyzerCode: DUPLICATE_LABEL_IN_SWITCH_STATEMENT
-  dart2jsCode: "*fatal*"
   statement:
     - "switch (0) {l1: case 0: break; l1: case 1: break;}"
 
@@ -854,7 +767,6 @@
   template: "Can't find label '#name'."
   tip: "Try defining the label, or correcting the name to match an existing label."
   analyzerCode: LABEL_UNDEFINED
-  dart2jsCode: "*fatal*"
   statement:
     - "switch (0) {case 0: continue L;}"
 
@@ -862,7 +774,6 @@
   template: "The loop variable in a for-each loop can't be initialized."
   tip: "Try removing the initializer, or using a different kind of loop."
   analyzerCode: INITIALIZED_VARIABLE_IN_FOR_EACH
-  dart2jsCode: "*fatal*"
   statement:
     - "for (int a = 0 in <int>[10]) {}"
 
@@ -870,7 +781,6 @@
   template: "The keyword 'await' isn't allowed for a normal 'for' statement."
   tip: "Try removing the keyword, or use a for-each statement."
   analyzerCode: INVALID_AWAIT_IN_FOR
-  dart2jsCode: INVALID_AWAIT_FOR
   script:
     - "f() async {await for (int i = 0; i < 5; i++) {}}"
 
@@ -878,15 +788,12 @@
   template: "Invalid modifier 'sync'."
   tip: "Try replacing 'sync' with 'sync*'."
   analyzerCode: MISSING_STAR_AFTER_SYNC
-  dart2jsCode: INVALID_SYNC_MODIFIER
   script: "main() sync {}"
 
 InvalidVoid:
   template: "Type 'void' can't be used here because it isn't a return type."
   tip: "Try removing 'void' keyword or replace it with 'var', 'final', or a type."
-  severity: ERROR
   analyzerCode: INVALID_USE_OF_VOID
-  dart2jsCode: VOID_NOT_ALLOWED
   script:
     - "void x; main() {}"
     - "foo(void x) {} main() { foo(null); }"
@@ -894,16 +801,12 @@
 InvalidInitializer:
   template: "Not a valid initializer."
   tip: "To initialize a field, use the syntax 'name = value'."
-  severity: ERROR
   analyzerCode: INVALID_INITIALIZER
-  dart2jsCode: "*fatal*"
 
 FinalFieldNotInitialized:
   template: "Final field '#name' is not initialized."
   tip: "Try to initialize the field in the declaration or in every constructor."
-  severity: ERROR
   analyzerCode: FINAL_NOT_INITIALIZED
-  dart2jsCode: "*fatal*"
   script: >
     class C {
       final int x;
@@ -912,9 +815,7 @@
 FinalFieldNotInitializedByConstructor:
   template: "Final field '#name' is not initialized by this constructor."
   tip: "Try to initialize the field using an initializing formal or a field initializer."
-  severity: ERROR
   analyzerCode: FINAL_NOT_INITIALIZED_CONSTRUCTOR_1
-  dart2jsCode: "*fatal*"
   script: >
     class C {
       final int x;
@@ -926,7 +827,6 @@
   template: "Numbers in exponential notation should always contain an exponent (an integer number with an optional sign)."
   tip: "Make sure there is an exponent, and remove any whitespace before it."
   analyzerCode: MISSING_DIGIT
-  dart2jsCode: EXPONENT_MISSING
   script: >
     main() {
       var i = 1e;
@@ -936,7 +836,6 @@
   template: "Positional optional parameters can't use ':' to specify a default value."
   tip: "Try replacing ':' with '='."
   analyzerCode: WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER
-  dart2jsCode: POSITIONAL_PARAMETER_WITH_EQUALS
   script: >
     main() {
       foo([a: 1]) => print(a);
@@ -947,7 +846,6 @@
   template: "Non-optional parameters can't have a default value."
   tip: "Try removing the default value or making the parameter optional."
   analyzerCode: NAMED_PARAMETER_OUTSIDE_GROUP
-  dart2jsCode: REQUIRED_PARAMETER_WITH_DEFAULT
   script:
     - >
       main() {
@@ -963,19 +861,16 @@
 StackOverflow:
   template: "Stack overflow."
   analyzerCode: STACK_OVERFLOW
-  dart2jsCode: GENERIC
 
 InvalidCodePoint:
   template: "The escape sequence starting with '\\u' isn't a valid code point."
   analyzerCode: INVALID_CODE_POINT
-  dart2jsCode: "*fatal*"
   expression:
     - "'\\u{110000}'"
 
 InvalidHexEscape:
   template: "An escape sequence starting with '\\x' must be followed by 2 hexidecimal digits."
   analyzerCode: INVALID_HEX_ESCAPE
-  dart2jsCode: "*fatal*"
   expression:
     - "'\\x0'"
     - "'\\x0y'"
@@ -983,7 +878,6 @@
 InvalidUnicodeEscape:
   template: "An escape sequence starting with '\\u' must be followed by 4 hexidecimal digits or from 1 to 6 digits between '{' and '}'."
   analyzerCode: INVALID_UNICODE_ESCAPE
-  dart2jsCode: "*fatal*"
   expression:
     - "'\\u'"
     - "'\\u0F'"
@@ -995,7 +889,6 @@
   template: "A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({})."
   tip: "Try adding a backslash (\\) to escape the '$'."
   analyzerCode: UNEXPECTED_DOLLAR_IN_STRING
-  dart2jsCode: MALFORMED_STRING_LITERAL
   script:
     - >
       main() {
@@ -1017,14 +910,12 @@
 UnexpectedToken:
   template: "Unexpected token '#lexeme'."
   analyzerCode: UNEXPECTED_TOKEN
-  dart2jsCode: "*fatal*"
   script:
     - "import 'b.dart' d as b;"
 
 UnmatchedToken:
   template: "Can't find '#string' to match '#lexeme'."
   analyzerCode: EXPECTED_TOKEN
-  dart2jsCode: UNMATCHED_TOKEN
   script:
     - "main("
     - "main(){"
@@ -1033,7 +924,6 @@
 UnsupportedOperator:
   template: "The '#lexeme' operator is not supported."
   analyzerCode: UNSUPPORTED_OPERATOR
-  dart2jsCode: "*ignored*"
   script:
     - "class C { void operator ===(x) {} }"
     - "class C { void operator !==(x) {} }"
@@ -1042,13 +932,11 @@
   template: "'+' is not a prefix operator."
   tip: "Try removing '+'."
   analyzerCode: MISSING_IDENTIFIER
-  dart2jsCode: UNSUPPORTED_PREFIX_PLUS
   script: "main() => +2;  // No longer a valid way to write '2'"
 
 UnterminatedComment:
   template: "Comment starting with '/*' must end with '*/'."
   analyzerCode: UNTERMINATED_MULTI_LINE_COMMENT
-  dart2jsCode: UNTERMINATED_COMMENT
   script:
     main() {
     }
@@ -1057,7 +945,6 @@
 UnterminatedString:
   template: "String starting with #string must end with #string2."
   analyzerCode: UNTERMINATED_STRING_LITERAL
-  dart2jsCode: UNTERMINATED_STRING
   script:
     - >
       main() {
@@ -1091,51 +978,42 @@
 UnterminatedToken:
   # This is a fall-back message that shouldn't happen.
   template: "Incomplete token."
-  dart2jsCode: UNTERMINATED_TOKEN
 
 # Note: avoid using this template, it should only be used for debugging and
 # prototyping, see [diagnostics.md](
 # lib/src/fasta/diagnostics.md#avoid-composing-messages-programmatically).
 Unspecified:
   template: "#string"
-  dart2jsCode: GENERIC
 
 AbstractNotSync:
   template: "Abstract methods can't use 'async', 'async*', or 'sync*'."
   analyzerCode: NON_SYNC_ABSTRACT_METHOD
-  dart2jsCode: "*ignored*"
 
 AsyncAsIdentifier:
   analyzerCode: ASYNC_KEYWORD_USED_AS_IDENTIFIER
   template: "'async' can't be used as an identifier in 'async', 'async*', or 'sync*' methods."
-  dart2jsCode: GENERIC
 
 AwaitAsIdentifier:
   template: "'await' can't be used as an identifier in 'async', 'async*', or 'sync*' methods."
   analyzerCode: ASYNC_KEYWORD_USED_AS_IDENTIFIER
-  dart2jsCode: "*ignored*"
 
 AwaitNotAsync:
   template: "'await' can only be used in 'async' or 'async*' methods."
   analyzerCode: AWAIT_IN_WRONG_CONTEXT
-  dart2jsCode: "*ignored*"
 
 BuiltInIdentifierAsType:
   template: "The built-in identifier '#lexeme' can't be used as a type."
   tip: "Try correcting the name to match an existing type."
   analyzerCode: BUILT_IN_IDENTIFIER_AS_TYPE
-  dart2jsCode: EXTRANEOUS_MODIFIER
 
 BuiltInIdentifierInDeclaration:
   template: "Can't use '#lexeme' as a name here."
   analyzerCode: BUILT_IN_IDENTIFIER_IN_DECLARATION
-  dart2jsCode: GENERIC
 
 AwaitForNotAsync:
   template: "The asynchronous for-in can only be used in functions marked with 'async' or 'async*'."
   tip: "Try marking the function body with either 'async' or 'async*', or removing the 'await' before the for loop."
   analyzerCode: ASYNC_FOR_IN_WRONG_CONTEXT
-  dart2jsCode: "*ignored*"
   script: >
     main(o) sync* {
       await for (var e in o) {}
@@ -1144,103 +1022,84 @@
 ConstructorNotSync:
   template: "Constructor bodies can't use 'async', 'async*', or 'sync*'."
   analyzerCode: NON_SYNC_CONSTRUCTOR
-  dart2jsCode: "*ignored*"
 
 FactoryNotSync:
   template: "Factory bodies can't use 'async', 'async*', or 'sync*'."
   analyzerCode: NON_SYNC_FACTORY
-  dart2jsCode: "*ignored*"
 
 GeneratorReturnsValue:
   template: "'sync*' and 'async*' can't return a value."
   analyzerCode: RETURN_IN_GENERATOR
-  dart2jsCode: "*ignored*"
 
 InvalidInlineFunctionType:
   template: "Invalid inline function type."
   tip: "Try changing the inline function type (as in 'int f()') to a prefixed function type using the `Function` keyword (as in 'int Function() f')."
-  dart2jsCode: INVALID_INLINE_FUNCTION_TYPE
   declaration: "typedef F = Function(int f(String x));"
 
 SetterNotSync:
   template: "Setters can't use 'async', 'async*', or 'sync*'."
   analyzerCode: INVALID_MODIFIER_ON_SETTER
-  dart2jsCode: "*ignored*"
 
 YieldAsIdentifier:
   template: "'yield' can't be used as an identifier in 'async', 'async*', or 'sync*' methods."
   analyzerCode: ASYNC_KEYWORD_USED_AS_IDENTIFIER
-  dart2jsCode: "*fatal*"
 
 YieldNotGenerator:
   template: "'yield' can only be used in 'sync*' or 'async*' methods."
   analyzerCode: YIELD_IN_NON_GENERATOR
-  dart2jsCode: "*ignored*"
 
 OnlyTry:
   template: "Try block should be followed by 'on', 'catch', or 'finally' block."
   tip: "Did you forget to add a 'finally' block?"
   analyzerCode: MISSING_CATCH_OR_FINALLY
-  dart2jsCode: "*ignored*"
   statement: "try {}"
 
 TypeAfterVar:
   template: "Can't have both a type and 'var'."
   tip: "Try removing 'var.'"
   analyzerCode: VAR_AND_TYPE
-  dart2jsCode: EXTRANEOUS_MODIFIER
 
 AssertExtraneousArgument:
   template: "`assert` can't have more than two arguments."
-  dart2jsCode: "*fatal*"
 
 PositionalAfterNamedArgument:
   template: "Place positional arguments before named arguments."
   tip: "Try moving the positional argument before the named arguments, or add a name to the argument."
   analyzerCode: POSITIONAL_AFTER_NAMED_ARGUMENT
-  dart2jsCode: "*ignored*"
 
 ExpectedNamedArgument:
   template: "Expected named argument."
   analyzerCode: EXTRA_POSITIONAL_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 AssertAsExpression:
   template: "`assert` can't be used as an expression."
-  dart2jsCode: "*fatal*"
 
 FunctionTypeDefaultValue:
   template: "Can't have a default value in a function type."
   analyzerCode: DEFAULT_VALUE_IN_FUNCTION_TYPE
-  dart2jsCode: "*ignored*"
 
 PrivateNamedParameter:
   template: "An optional named parameter can't start with '_'."
   analyzerCode: PRIVATE_OPTIONAL_PARAMETER
-  dart2jsCode: "*ignored*"
 
 NoFormals:
   template: "A function should have formal parameters."
   tip: "Try adding '()' after '#lexeme', or add 'get' before '#lexeme' to declare a getter."
   analyzerCode: MISSING_FUNCTION_PARAMETERS
-  dart2jsCode: "*ignored*"
 
 GetterWithFormals:
   template: "A getter can't have formal parameters."
   tip: "Try removing '(...)'."
   analyzerCode: GETTER_WITH_PARAMETERS
-  dart2jsCode: "*ignored*"
 
 SetterWithWrongNumberOfFormals:
   template: "A setter should have exactly one formal parameter."
   analyzerCode: WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
-  dart2jsCode: "*ignored*"
 
 CatchSyntax:
   template: "'catch' must be followed by '(identifier)' or '(identifier, identifier)'."
   tip: "No types are needed, the first is given by 'on', the second is always 'StackTrace'."
   analyzerCode: CATCH_SYNTAX
-  dart2jsCode: "*ignored*"
   statement:
     - "try {} catch {}"
     - "try {} catch () {}"
@@ -1250,55 +1109,52 @@
   template: "'super' can't be null."
   tip: "Try replacing '?.' with '.'"
   analyzerCode: INVALID_OPERATOR_FOR_SUPER
-  dart2jsCode: "*ignored*"
 
 ConstFieldWithoutInitializer:
   template: "The const variable '#name' must be initialized."
   tip: "Try adding an initializer ('= <expression>') to the declaration."
   analyzerCode: CONST_NOT_INITIALIZED
-  dart2jsCode: "*ignored*"
 
 FinalFieldWithoutInitializer:
   template: "The final variable '#name' must be initialized."
   tip: "Try adding an initializer ('= <expression>') to the declaration."
   analyzerCode: FINAL_NOT_INITIALIZED
-  dart2jsCode: "*ignored*"
 
 MetadataTypeArguments:
   template: "An annotation (metadata) can't use type arguments."
   analyzerCode: ANNOTATION_WITH_TYPE_ARGUMENTS
-  dart2jsCode: "*ignored*"
 
 ConstructorNotFound:
   template: "Couldn't find constructor '#name'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: CONSTRUCTOR_NOT_FOUND
-  dart2jsCode: "*fatal*"
 
 ConstructorWithReturnType:
   template: "Constructors can't have a return type."
   tip: "Try removing the return type."
   analyzerCode: CONSTRUCTOR_WITH_RETURN_TYPE
-  dart2jsCode: "*fatal*"
   script:
     - "class C { int C() {} }"
 
 ConstructorWithTypeParameters:
   template: "Constructors can't have type parameters."
-  severity: ERROR
   analyzerCode: TYPE_PARAMETER_ON_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C<T>() {} }"
     - "class C { C.foo<T>() {} }"
     - "class C { factory C<T>() => null; }"
     - "class C { factory C.foo<T>() => null; }"
 
+ConstructorWithTypeArguments:
+  template: "A constructor invocation can't have type arguments on the constructor name."
+  tip: "Try to place the type arguments on the class name."
+  analyzerCode: UNDEFINED_CLASS
+  script:
+    - "class C<X> { C.foo(); } bar() { new C.foo<int>(); }"
+
 ConstructorWithWrongName:
   template: "The name of a constructor must match the name of the enclosing class."
-  severity: ERROR
   analyzerCode: INVALID_CONSTRUCTOR_NAME
-  dart2jsCode: "*fatal*"
   script:
     - "class A { B.foo() {} }"
     - "class A { factory B() => null; }"
@@ -1311,9 +1167,7 @@
 ConstructorCyclic:
   template: "Redirecting constructers can't be cyclic."
   tip: "Try to have all constructors eventually redirect to a non-redirecting constructor."
-  severity: ERROR
   analyzerCode: RECURSIVE_CONSTRUCTOR_REDIRECT
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C.foo() : this.bar(); C.bar() : this.foo(); }"
 
@@ -1321,7 +1175,6 @@
   template: "Field formal parameters can only be used in a constructor."
   tip: "Try removing 'this.'."
   analyzerCode: FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { void m(this.x); }"
 
@@ -1329,24 +1182,20 @@
   template: "Redirection constructor target not found: '#name'"
   severity: ERROR_LEGACY_WARNING
   analyzerCode: REDIRECT_TO_MISSING_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
 
 CyclicTypedef:
   template: "The typedef '#name' has a reference to itself."
   analyzerCode: TYPE_ALIAS_CANNOT_REFERENCE_ITSELF
-  dart2jsCode: "*fatal*"
 
 TypeNotFound:
   template: "Type '#name' not found."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: UNDEFINED_CLASS
-  dart2jsCode: "*fatal*"
 
 NonInstanceTypeVariableUse:
   template: "Can only use type variables in instance methods."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: TYPE_PARAMETER_REFERENCED_BY_STATIC
-  dart2jsCode: "*fatal*"
 
 GetterNotFound:
   template: "Getter not found: '#name'."
@@ -1373,51 +1222,36 @@
 
 MissingArgumentList:
   template: "Constructor invocations must have an argument list."
-  severity: ERROR
 
 TooFewArguments:
   template: "Too few positional arguments: #count required, #count2 given."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: NOT_ENOUGH_REQUIRED_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 TooManyArguments:
   template: "Too many positional arguments: #count allowed, but #count2 found."
   tip: "Try removing the extra positional arguments."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: EXTRA_POSITIONAL_ARGUMENTS
-  dart2jsCode: "*fatal*"
-
-TooManyArgumentsCouldBeNamed:
-  template: "Too many positional arguments: #count allowed, but #count2 found."
-  tip: "Try removing the extra positional arguments or specifying the name for named arguments."
-  severity: ERROR_LEGACY_WARNING
-  analyzerCode: EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED
-  dart2jsCode: "*fatal*"
 
 NoSuchNamedParameter:
   template: "No named parameter with the name '#name'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: UNDEFINED_NAMED_PARAMETER
-  dart2jsCode: "*fatal*"
 
 AbstractClassInstantiation:
   template: "The class '#name' is abstract and can't be instantiated."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: NEW_WITH_ABSTRACT_CLASS
-  dart2jsCode: "*fatal*"
 
 EnumInstantiation:
   template: "Enums can't be instantiated."
-  severity: ERROR
   analyzerCode: INSTANTIATE_ENUM
-  dart2jsCode: "*fatal*"
 
 AbstractRedirectedClassInstantiation:
   template: "Factory redirects to class '#name', which is abstract and can't be instantiated."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: FACTORY_REDIRECTS_TO_ABSTRACT_CLASS
-  dart2jsCode: "*fatal*"
 
 MissingImplementationNotAbstract:
   template: |
@@ -1431,7 +1265,6 @@
      - provide a 'noSuchMethod' implementation.
   severity: ERROR_LEGACY_WARNING
   analyzerCode: CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
-  dart2jsCode: "*fatal*"
   script:
     - "class C {foo();}"
 
@@ -1443,19 +1276,16 @@
   template: "List literal requires exactly one type argument."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: EXPECTED_ONE_LIST_TYPE_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 MapLiteralTypeArgumentMismatch:
   template: "Map literal requires exactly two type arguments."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: EXPECTED_TWO_MAP_TYPE_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 LoadLibraryTakesNoArguments:
   template: "'loadLibrary' takes no arguments."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: LOAD_LIBRARY_TAKES_NO_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 LoadLibraryHidesMember:
   template: "The library '#uri' defines a top-level member named 'loadLibrary'. This member is hidden by the special member 'loadLibrary' that the language adds to support deferred loading."
@@ -1463,28 +1293,34 @@
   severity: IGNORED
 
 TypeArgumentMismatch:
-  template: "'#name' expects #count type arguments."
+  template: "Expected #count type arguments."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: WRONG_NUMBER_OF_TYPE_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 NotAType:
   template: "'#name' isn't a type."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: NOT_A_TYPE
-  dart2jsCode: "*ignored*"
 
 NotAPrefixInTypeAnnotation:
-  template: "'#lexeme.#lexeme2' can't be used as a type because '#lexeme' doesn't refer to an import prefix."
+  template: "'#name.#name2' can't be used as a type because '#name' doesn't refer to an import prefix."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: NOT_A_TYPE
-  dart2jsCode: "*ignored*"
+  declaration:
+    - |
+        class C<T> {
+          T.String method() {}
+        }
+    - |
+        class C<T> {
+          T.String field;
+        }
 
 UnresolvedPrefixInTypeAnnotation:
-  template: "'#lexeme.#lexeme2' can't be used as a type because '#lexeme' isn't defined."
+  template: "'#name.#name2' can't be used as a type because '#name' isn't defined."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: NOT_A_TYPE
-  dart2jsCode: "*ignored*"
+  statement: "T.String x;"
 
 FastaUsageShort:
   template: |
@@ -1556,18 +1392,15 @@
 NamedFunctionExpression:
   template: "A function expression can't have a name."
   analyzerCode: NAMED_FUNCTION_EXPRESSION
-  dart2jsCode: "*ignored*"
 
 NativeClauseShouldBeAnnotation:
   template: "Native clause in this form is deprecated."
   tip: "Try removing this native clause and adding @native() or @native('native-name') before the declaration."
   analyzerCode: NATIVE_CLAUSE_SHOULD_BE_ANNOTATION
-  dart2jsCode: "*fatal*"
 
 ReturnTypeFunctionExpression:
   template: "A function expression can't have a return type."
   severity: ERROR_LEGACY_WARNING
-  dart2jsCode: "*ignored*"
 
 InternalProblemUnhandled:
   template: "Unhandled #string in #string2."
@@ -1638,10 +1471,6 @@
   template: "The URI '#uri' has no scheme."
   severity: INTERNAL_PROBLEM
 
-InternalProblemMissingSeverity:
-  template: "Message code missing severity: #string"
-  severity: INTERNAL_PROBLEM
-
 InternalProblemContextSeverity:
   template: "Non-context message has context severity: #string"
   severity: INTERNAL_PROBLEM
@@ -1676,44 +1505,37 @@
   template: "Deferred imports should have a prefix."
   tip: "Try adding a prefix to the import."
   analyzerCode: MISSING_PREFIX_IN_DEFERRED_IMPORT
-  dart2jsCode: "*fatal*"
 
 DeferredAfterPrefix:
   template: "The deferred keyword should come immediately before the prefix ('as' clause)."
   tip: "Try moving the deferred keyword before the prefix."
   analyzerCode: DEFERRED_AFTER_PREFIX
-  dart2jsCode: "*fatal*"
 
 DuplicateDeferred:
   template: "An import directive can only have one 'deferred' keyword."
   tip: "Try removing all but one 'deferred' keyword."
   analyzerCode: DUPLICATE_DEFERRED
-  dart2jsCode: "*fatal*"
 
 DeferredTypeAnnotation:
   template: "The type '#type' is deferred loaded via prefix '#name' and can't be used as a type annotation."
   tip: "Try removing 'deferred' from the import of '#name' or use a supertype of '#type' that isn't deferred."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: TYPE_ANNOTATION_DEFERRED_CLASS
-  dart2jsCode: "*fatal*"
 
 DuplicatePrefix:
   template: "An import directive can only have one prefix ('as' clause)."
   tip: "Try removing all but one prefix."
   analyzerCode: DUPLICATE_PREFIX
-  dart2jsCode: "*fatal*"
 
 PrefixAfterCombinator:
   template: "The prefix ('as' clause) should come before any show/hide combinators."
   tip: "Try moving the prefix before the combinators."
   analyzerCode: PREFIX_AFTER_COMBINATOR
-  dart2jsCode: "*fatal*"
 
 DuplicatedExport:
   template: "'#name' is exported from both '#uri' and '#uri2'."
   severity: IGNORED
   analyzerCode: AMBIGUOUS_EXPORT
-  dart2jsCode: "*ignored*"
 
 DuplicatedExportInType:
   template: "'#name' is exported from both '#uri' and '#uri2'."
@@ -1727,7 +1549,6 @@
   template: "'#name' is imported from both '#uri' and '#uri2'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: AMBIGUOUS_IMPORT
-  dart2jsCode: "*fatal*"
   script:
     lib1.dart: "class A {}"
     lib2.dart: "class A {}"
@@ -1735,29 +1556,22 @@
 
 CyclicClassHierarchy:
   template: "'#name' is a supertype of itself via '#string'."
-  severity: ERROR
   analyzerCode: RECURSIVE_INTERFACE_INHERITANCE
-  dart2jsCode: "*fatal*"
 
 ExtendingEnum:
   template: "'#name' is an enum and can't be extended or implemented."
-  severity: ERROR
   analyzerCode: EXTENDS_ENUM
-  dart2jsCode: "*fatal*"
 
 ExtendingRestricted:
   template: "'#name' is restricted and can't be extended or implemented."
   analyzerCode: EXTENDS_DISALLOWED_CLASS
-  dart2jsCode: "*ignored*"
 
 NoUnnamedConstructorInObject:
   template: "'Object' has no unnamed constructor."
 
 IllegalAsyncGeneratorReturnType:
   template: "Functions marked 'async*' must have a return type assignable to 'Stream'."
-  severity: ERROR
   analyzerCode: ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE
-  dart2jsCode: "*fatal*"
   script:
     - >-
       int g() async* {
@@ -1766,8 +1580,6 @@
 
 IllegalAsyncGeneratorVoidReturnType:
   template: "Functions marked 'async*' can't have return type 'void'."
-  severity: ERROR
-  dart2jsCode: "*fatal*"
   script:
     - >-
       void g() async* {
@@ -1775,9 +1587,7 @@
 
 IllegalAsyncReturnType:
   template: "Functions marked 'async' must have a return type assignable to 'Future'."
-  severity: ERROR
   analyzerCode: ILLEGAL_ASYNC_RETURN_TYPE
-  dart2jsCode: "*fatal*"
   script:
     - >-
       int f() async {
@@ -1786,9 +1596,7 @@
 
 IllegalSyncGeneratorReturnType:
   template: "Functions marked 'sync*' must have a return type assignable to 'Iterable'."
-  severity: ERROR
   analyzerCode: ILLEGAL_SYNC_GENERATOR_RETURN_TYPE
-  dart2jsCode: "*fatal*"
   script:
     - >-
       int g() sync* {
@@ -1797,8 +1605,6 @@
 
 IllegalSyncGeneratorVoidReturnType:
   template: "Functions marked 'sync*' can't have return type 'void'."
-  severity: ERROR
-  dart2jsCode: "*fatal*"
   script:
     - >-
       void g() sync* {
@@ -1807,7 +1613,6 @@
 IllegalMixinDueToConstructors:
   template: "Can't use '#name' as a mixin because it has constructors."
   analyzerCode: MIXIN_DECLARES_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
 
 IllegalMixinDueToConstructorsCause:
   template: "This constructor prevents using '#name' as a mixin."
@@ -1815,43 +1620,32 @@
 
 ConflictsWithConstructor:
   template: "Conflicts with constructor '#name'."
-  severity: ERROR
   analyzerCode: CONFLICTS_WITH_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
 
 ConflictsWithFactory:
   template: "Conflicts with factory '#name'."
-  severity: ERROR
 
 ConflictsWithMember:
   template: "Conflicts with member '#name'."
-  severity: ERROR
   analyzerCode: CONFLICTS_WITH_MEMBER
-  dart2jsCode: "*fatal*"
 
 ConflictsWithMemberWarning:
   template: "Conflicts with member '#name'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: CONFLICTS_WITH_MEMBER
-  dart2jsCode: "*fatal*"
 
 ConflictsWithSetter:
   template: "Conflicts with setter '#name'."
-  severity: ERROR
   analyzerCode: CONFLICTS_WITH_MEMBER
-  dart2jsCode: "*fatal*"
 
 ConflictsWithSetterWarning:
   template: "Conflicts with setter '#name'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: CONFLICTS_WITH_MEMBER
-  dart2jsCode: "*fatal*"
 
 ConflictsWithTypeVariable:
   template: "Conflicts with type variable '#name'."
-  severity: ERROR
   analyzerCode: CONFLICTING_TYPE_VARIABLE_AND_MEMBER
-  dart2jsCode: "*fatal*"
 
 ConflictsWithTypeVariableCause:
   template: "This is the type variable."
@@ -1861,7 +1655,6 @@
   template: "Can't declare a member that conflicts with an inherited one."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: DECLARED_MEMBER_CONFLICTS_WITH_INHERITED
-  dart2jsCode: "*fatal*"
   script:
     - >-
       class A {
@@ -1900,7 +1693,6 @@
   template: "Can't inherit members that conflict with each other."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: CONFLICTS_WITH_INHERITED_MEMBER
-  dart2jsCode: "*fatal*"
   script:
     - >-
       class A {
@@ -1909,7 +1701,7 @@
       abstract class B {
         get foo;
       }
-      class C extends A implements B {}
+      abstract class C extends A implements B {}
     - >-
       class A {
         var foo;
@@ -1917,7 +1709,7 @@
       abstract class B {
         foo();
       }
-      class C extends A implements B {}
+      abstract class C extends A implements B {}
     - >-
       class A {
         get foo => 0;
@@ -1925,7 +1717,7 @@
       abstract class B {
         foo();
       }
-      class C extends A implements B {}
+      abstract class C extends A implements B {}
 
 InheritedMembersConflictCause1:
   template: "This is one inherited member."
@@ -1938,13 +1730,11 @@
 IllegalMixin:
   template: "The type '#name' can't be mixed in."
   analyzerCode: ILLEGAL_MIXIN
-  dart2jsCode: "*fatal*"
 
 OverrideTypeVariablesMismatch:
   template: "Declared type variables of '#name' doesn't match those on overridden method '#name2'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: INVALID_METHOD_OVERRIDE_TYPE_PARAMETERS
-  dart2jsCode: "*fatal*"
 
 OverriddenMethodCause:
   template: "This is the overriden method ('#name')."
@@ -1954,37 +1744,31 @@
   template: "The method '#name' doesn't have the named parameter '#name2' of overriden method '#name3'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: INVALID_OVERRIDE_NAMED
-  dart2jsCode: "*fatal*"
 
 OverrideFewerNamedArguments:
   template: "The method '#name' has fewer named arguments than those of overridden method '#name2'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: INVALID_OVERRIDE_NAMED
-  dart2jsCode: "*fatal*"
 
 OverrideFewerPositionalArguments:
   template: "The method '#name' has fewer positional arguments than those of overridden method '#name2'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: INVALID_OVERRIDE_POSITIONAL
-  dart2jsCode: "*fatal*"
 
 OverrideMoreRequiredArguments:
   template: "The method '#name' has more required arguments than those of overridden method '#name2'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: INVALID_OVERRIDE_REQUIRED
-  dart2jsCode: "*fatal*"
 
 OverrideTypeMismatchParameter:
   template: "The parameter '#name' of the method '#name2' has type #type, which does not match the corresponding type in the overridden method (#type2)."
   tip: "Change to a supertype of #type2 (or, for a covariant parameter, a subtype)."
   analyzerCode: INVALID_METHOD_OVERRIDE
-  dart2jsCode: "*ignored*"
 
 OverrideTypeMismatchReturnType:
   template: "The return type of the method '#name' is #type, which does not match the return type of the overridden method (#type2)."
   tip: "Change to a subtype of #type2."
   analyzerCode: INVALID_METHOD_OVERRIDE
-  dart2jsCode: "*ignored*"
 
 PartOfSelf:
   template: "A file can't be a part of itself."
@@ -1995,7 +1779,6 @@
 TypeVariableDuplicatedName:
   template: "A type variable can't have the same name as another."
   analyzerCode: DUPLICATE_DEFINITION
-  dart2jsCode: "*fatal*"
 
 TypeVariableDuplicatedNameCause:
   template: "The other type variable named '#name'."
@@ -2004,20 +1787,17 @@
 TypeVariableSameNameAsEnclosing:
   template: "A type variable can't have the same name as its enclosing declaration."
   analyzerCode: CONFLICTING_TYPE_VARIABLE_AND_CLASS
-  dart2jsCode: "*fatal*"
 
 ExpectedEnumBody:
   template: "Expected a enum body, but got '#lexeme'."
   tip: "An enum definition must have a body with at least one constant name."
   analyzerCode: MISSING_ENUM_BODY
-  dart2jsCode: "*fatal*"
   script:
     - "enum E"
 
 EnumDeclarationEmpty:
   template: "An enum declaration can't be empty."
   analyzerCode: EMPTY_ENUM_BODY
-  dart2jsCode: "*ignored*"
   script:
     - "enum E {}"
 
@@ -2025,7 +1805,6 @@
   template: "Classes can't be declared to be 'external'."
   tip: "Try removing the keyword 'external'."
   analyzerCode: EXTERNAL_CLASS
-  dart2jsCode: "*ignored*"
   script:
     - "external class C {}"
 
@@ -2033,7 +1812,6 @@
   template: "Enums can't be declared to be 'external'."
   tip: "Try removing the keyword 'external'."
   analyzerCode: EXTERNAL_ENUM
-  dart2jsCode: "*ignored*"
   script:
     - "external enum E {ONE}"
 
@@ -2041,7 +1819,6 @@
   # TODO(danrubel): remove reference to `native` once support has been removed
   template: "An external or native method can't have a body."
   analyzerCode: EXTERNAL_METHOD_WITH_BODY
-  dart2jsCode: "*ignored*"
   script:
     - "class C {external foo() {}}"
     - "class C {foo() native {}}"
@@ -2051,7 +1828,6 @@
   template: "Typedefs can't be declared to be 'external'."
   tip: "Try removing the keyword 'external'."
   analyzerCode: EXTERNAL_TYPEDEF
-  dart2jsCode: "*ignored*"
   script:
     - "external typedef F();"
 
@@ -2061,18 +1837,15 @@
 PlatformPrivateLibraryAccess:
   template: "Can't access platform private library."
   analyzerCode: IMPORT_INTERNAL_LIBRARY
-  dart2jsCode: "*fatal*"
 
 TypedefNotFunction:
   template: "Can't create typedef from non-function type."
   analyzerCode: INVALID_GENERIC_FUNCTION_TYPE
-  dart2jsCode: "*fatal*"
 
 LibraryDirectiveNotFirst:
   template: "The library directive must appear before all other directives."
   tip: "Try moving the library directive before any other directives."
   analyzerCode: LIBRARY_DIRECTIVE_NOT_FIRST
-  dart2jsCode: "*ignored*"
   script:
     - "class Foo{} library l;"
     - "import 'x.dart'; library l;"
@@ -2082,7 +1855,6 @@
   template: "Import directives must preceed part directives."
   tip: "Try moving the import directives before the part directives."
   analyzerCode: IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE
-  dart2jsCode: "*ignored*"
   script:
     - "part 'foo.dart'; import 'bar.dart';"
 
@@ -2090,7 +1862,6 @@
   template: "Export directives must preceed part directives."
   tip: "Try moving the export directives before the part directives."
   analyzerCode: EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE
-  dart2jsCode: "*ignored*"
   script:
     - "part 'foo.dart'; export 'bar.dart';"
 
@@ -2098,7 +1869,6 @@
   template: "Directives must appear before any declarations."
   tip: "Try moving the directive before any declarations."
   analyzerCode: DIRECTIVE_AFTER_DECLARATION
-  dart2jsCode: "*ignored*"
   script:
     - "class foo { } import 'bar.dart';"
     - "class foo { } export 'bar.dart';"
@@ -2107,7 +1877,6 @@
   template: "The part-of directive must be the only directive in a part."
   tip: "Try removing the other directives, or moving them to the library for which this is a part."
   analyzerCode: NON_PART_OF_DIRECTIVE_IN_PART
-  dart2jsCode: "*ignored*"
   script:
     - "part of l; part 'f.dart';"
 
@@ -2115,7 +1884,6 @@
   template: "Only one part-of directive may be declared in a file."
   tip: "Try removing all but one of the part-of directives."
   analyzerCode: MULTIPLE_PART_OF_DIRECTIVES
-  dart2jsCode: "*ignored*"
   script:
     - "part of l; part of m;"
 
@@ -2129,9 +1897,7 @@
 PartOfTwoLibraries:
   template: "A file can't be part of more than one library."
   tip: "Try moving the shared declarations into the libraries, or into a new library."
-  severity: ERROR
   analyzerCode: PART_OF_DIFFERENT_LIBRARY
-  dart2jsCode: "*fatal*"
   script:
     main.dart: "library lib; import 'lib.dart'; part 'part.dart';"
     lib.dart: "library lib; part 'part.dart';"
@@ -2145,7 +1911,6 @@
   template: "Top-level declarations can't be declared to be 'factory'."
   tip: "Try removing the keyword 'factory'."
   analyzerCode: FACTORY_TOP_LEVEL_DECLARATION
-  dart2jsCode: "*fatal*"
   script:
     - "factory class C {}"
 
@@ -2153,7 +1918,6 @@
   template: "Only factory constructor can specify '=' redirection."
   tip: "Try making this a factory constructor, or remove the redirection."
   analyzerCode: REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C() = D; }"
 
@@ -2161,7 +1925,6 @@
   template: "Operators must be declared within a class."
   tip: "Try removing the operator, moving it to a class, or converting it to be a function."
   analyzerCode: TOP_LEVEL_OPERATOR
-  dart2jsCode: "*fatal*"
   script:
     - "operator +(bool x, bool y) => x | y;"
     - "bool operator +(bool x, bool y) => x | y;"
@@ -2171,7 +1934,6 @@
   template: "A function declaration needs an explicit list of parameters."
   tip: "Try adding a parameter list to the function declaration."
   analyzerCode: MISSING_FUNCTION_PARAMETERS
-  dart2jsCode: "*fatal*"
   script:
     - "void f {}"
 
@@ -2179,7 +1941,6 @@
   template: "A method declaration needs an explicit list of parameters."
   tip: "Try adding a parameter list to the method declaration."
   analyzerCode: MISSING_METHOD_PARAMETERS
-  dart2jsCode: "*fatal*"
   script:
     - "class C { void m {} }"
 
@@ -2187,7 +1948,6 @@
   template: "A typedef needs an explicit list of parameters."
   tip: "Try adding a parameter list to the typedef."
   analyzerCode: MISSING_TYPEDEF_PARAMETERS
-  dart2jsCode: "*fatal*"
   script:
     - "typedef void F;"
 
@@ -2198,13 +1958,20 @@
     part.dart: ""
     main.dart: "part 'part.dart';"
 
+PartOfInLibrary:
+  template: "Can't import '#uri', because it has a 'part of' declaration."
+  tip: "Try removing the 'part of' declaration, or using '#uri' as a part."
+  analyzerCode: IMPORT_OF_NON_LIBRARY
+  script:
+    part.dart: "part of mainlib;"
+    main.dart: "library mainlib; import 'part.dart';"
+
 SupertypeIsFunction:
   template: "Can't use a function type as supertype."
 
 DeferredPrefixDuplicated:
   template: "Can't use the name '#name' for a deferred library, as the name is used elsewhere."
   analyzerCode: SHARED_DEFERRED_PREFIX
-  dart2jsCode: "*fatal*"
 
 DeferredPrefixDuplicatedCause:
   template: "'#name' is used here."
@@ -2215,7 +1982,6 @@
   tip: "Try removing the type arguments."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: TYPE_ARGUMENTS_ON_TYPE_VARIABLE
-  dart2jsCode: "*fatal*"
   script:
     - "dynamic<T>(x) => 0"
 
@@ -2224,9 +1990,7 @@
 
 DuplicatedName:
   template: "'#name' is already declared in this scope."
-  severity: ERROR
   analyzerCode: DUPLICATE_DEFINITION
-  dart2jsCode: "*fatal*"
 
 DuplicatedNameCause:
   template: "Previous declaration of '#name'."
@@ -2234,9 +1998,7 @@
 
 DuplicatedNamePreviouslyUsed:
   template: "Can't declare '#name' because it was already used in this scope."
-  severity: ERROR
   analyzerCode: REFERENCED_BEFORE_DECLARATION
-  dart2jsCode: "*ignored*"
   script:
     - "main(arguments) { arguments; var arguments; }"
 
@@ -2246,15 +2008,11 @@
 
 DuplicatedNamedArgument:
   template: "Duplicated named argument '#name'."
-  severity: ERROR
   analyzerCode: DUPLICATE_NAMED_ARGUMENT
-  dart2jsCode: "*fatal*"
 
 DuplicatedParameterName:
   template: "Duplicated parameter name '#name'."
-  severity: ERROR
   analyzerCode: DUPLICATE_DEFINITION
-  dart2jsCode: "*fatal*"
 
 DuplicatedParameterNameCause:
   template: "Other parameter named '#name'."
@@ -2266,20 +2024,17 @@
 EnumConstantSameNameAsEnclosing:
   template: "Name of enum constant '#name' can't be the same as the enum's own name."
   analyzerCode: ENUM_CONSTANT_WITH_ENUM_NAME
-  dart2jsCode: "*fatal*"
 
 MissingOperatorKeyword:
   template: "Operator declarations must be preceeded by the keyword 'operator'."
   tip: "Try adding the keyword 'operator'."
   analyzerCode: MISSING_KEYWORD_OPERATOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { +(x) {} }"
 
 InvalidOperator:
   template: "The string '#lexeme' isn't a user-definable operator."
   analyzerCode: INVALID_OPERATOR
-  dart2jsCode: "*fatal*"
   script:
     - "class C { void operator %=(x) {} }"
 
@@ -2289,12 +2044,10 @@
 OperatorParameterMismatch1:
   template: "Operator '#name' should have exactly one parameter."
   analyzerCode: WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
-  dart2jsCode: "*fatal*"
 
 OperatorParameterMismatch2:
   template: "Operator '#name' should have exactly two parameters."
   analyzerCode: WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR
-  dart2jsCode: "*fatal*"
 
 OperatorMinusParameterMismatch:
   template: "Operator '#name' should have zero or one parameter."
@@ -2302,19 +2055,14 @@
     With zero parameters, it has the syntactic form '-a', formally known as 'unary-'.
     With one parameter, it has the syntactic form 'a - b', formally known as '-'.
   analyzerCode: WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS
-  dart2jsCode: "*fatal*"
 
 SupertypeIsIllegal:
   template: "The type '#name' can't be used as supertype."
-  severity: ERROR
   analyzerCode: EXTENDS_NON_CLASS
-  dart2jsCode: "*fatal*"
 
 SupertypeIsTypeVariable:
   template: "The type variable '#name' can't be used as supertype."
-  severity: ERROR
   analyzerCode: EXTENDS_NON_CLASS
-  dart2jsCode: "*fatal*"
 
 PartOfLibraryNameMismatch:
   template: "Using '#uri' as part of '#name' but its 'part of' declaration says '#name2'."
@@ -2335,7 +2083,6 @@
 MissingMain:
   template: "No 'main' method found."
   tip: "Try adding a method named 'main' to your program."
-  dart2jsCode: MISSING_MAIN
 
 MissingInput:
   template: "No input file provided to the compiler."
@@ -2356,35 +2103,43 @@
 ThisAccessInFieldInitializer:
   template: "Can't access 'this' in a field initializer to read '#name'."
   analyzerCode: THIS_ACCESS_FROM_INITIALIZER
-  dart2jsCode: "*fatal*"
 
 ThisOrSuperAccessInFieldInitializer:
   template: "Can't access '#string' in a field initializer."
   analyzerCode: THIS_ACCESS_FROM_INITIALIZER
-  dart2jsCode: "*fatal*"
 
 ThisAsIdentifier:
   template: "Expected identifier, but got 'this'."
-  severity: ERROR
   analyzerCode: INVALID_REFERENCE_TO_THIS
-  dart2jsCode: "*fatal*"
 
 SuperAsIdentifier:
   template: "Expected identifier, but got 'super'."
   analyzerCode: SUPER_AS_EXPRESSION
-  dart2jsCode: "*fatal*"
 
 SuperAsExpression:
   template: "Can't use 'super' as an expression."
   tip: "To delegate a constructor to a super constructor, put the super call as an initializer."
   analyzerCode: SUPER_AS_EXPRESSION
-  dart2jsCode: "*fatal*"
+
+SwitchExpressionNotAssignable:
+  template: "Type '#type' of the switch expression isn't assignable to the type '#type2' of this case expression."
+  analyzerCode: SWITCH_EXPRESSION_NOT_ASSIGNABLE
+  script:
+    - >-
+      void f() {
+        switch (42) {
+          case "foo": break;
+        }
+      }
+
+SwitchExpressionNotAssignableCause:
+  template: "The switch expression is here."
+  severity: CONTEXT
 
 SwitchHasCaseAfterDefault:
   template: "The default case should be the last case in a switch statement."
   tip: "Try moving the default case after the other case clauses."
   analyzerCode: SWITCH_HAS_CASE_AFTER_DEFAULT_CASE
-  dart2jsCode: "*fatal*"
   script:
     - "class C { foo(int a) {switch (a) {default: return 0; case 1: return 1;}} }"
 
@@ -2392,7 +2147,6 @@
   template: "The 'default' case can only be declared once."
   tip: "Try removing all but one default case."
   analyzerCode: SWITCH_HAS_MULTIPLE_DEFAULT_CASES
-  dart2jsCode: "*fatal*"
   script:
     - "class C { foo(int a) {switch (a) {default: return 0; default: return 1;}} }"
 
@@ -2400,29 +2154,43 @@
   template: "Switch case may fall through to the next case."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: CASE_BLOCK_NOT_TERMINATED
-  dart2jsCode: "*fatal*"
 
 FinalInstanceVariableAlreadyInitialized:
   template: "'#name' is a final instance variable that has already been initialized."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: FINAL_INITIALIZED_MULTIPLE_TIMES
-  dart2jsCode: "*fatal*"
 
 FinalInstanceVariableAlreadyInitializedCause:
   template: "'#name' was initialized here."
   severity: CONTEXT
 
-TypeVariableInConstExpression:
-  template: "Type variable '#name' can't be used as a constant expression '#type'."
-  severity: ERROR
-  analyzerCode: TYPE_PARAMETER_IN_CONST_EXPRESSION
-  dart2jsCode: "*fatal*"
-
 TypeVariableInStaticContext:
   template: "Type variables can't be used in static members."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: TYPE_PARAMETER_REFERENCED_BY_STATIC
-  dart2jsCode: "*fatal*"
+
+TypeVariableInConstantContext:
+  template: "Type variables can't be used as constants."
+  analyzerCode: TYPE_PARAMETER_IN_CONST_EXPRESSION
+  declaration:
+    - |
+      class C<T> {
+        instanceMethod() {
+          return const <Object>[T];
+        }
+      }
+    - |
+      class C<T> {
+        instanceMethod() {
+          return const <T>[null];
+        }
+      }
+    - |
+      class C<T> {
+        instanceMethod() {
+          return const <List<T>>[null];
+        }
+      }
 
 SuperclassMethodArgumentMismatch:
   template: "Superclass doesn't have a method named '#name' with matching arguments."
@@ -2442,17 +2210,14 @@
   template: "Superclass has no method named '#name'."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: UNDEFINED_SUPER_METHOD
-  dart2jsCode: "*ignored*"
 
 SuperclassHasNoDefaultConstructor:
   template: "The superclass, '#name', has no unnamed constructor that takes no arguments."
   analyzerCode: NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT
-  dart2jsCode: "*ignored*"
 
 ConstConstructorNonFinalField:
   template: "Constructor is marked 'const' so all fields must be final."
   analyzerCode: CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
-  dart2jsCode: "*fatal*"
 
 ConstConstructorNonFinalFieldCause:
   template: "Field isn't final, but constructor is 'const'."
@@ -2460,14 +2225,10 @@
 
 ConstConstructorInSubclassOfMixinApplication:
   template: "Can't extend a mixin application and be 'const'."
-  severity: ERROR
   analyzerCode: CONST_CONSTRUCTOR_IN_SUBCLASS_OF_MIXIN_APPLICATION
-  dart2jsCode: "*fatal*"
 
 ConstConstructorRedirectionToNonConst:
   template: "A constant constructor can't call a non-constant constructor."
-  severity: ERROR
-  dart2jsCode: "*fatal*"
   script:
     - >-
       class A {
@@ -2484,7 +2245,6 @@
 ExpectedAnInitializer:
   template: "Expected an initializer."
   analyzerCode: MISSING_INITIALIZER
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C() : {} }"
 
@@ -2492,7 +2252,6 @@
   template: "Expected an assignment after the field name."
   tip: "To initialize a field, use the syntax 'name = value'."
   analyzerCode: MISSING_ASSIGNMENT_IN_INITIALIZER
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C() : x(3) {} }"
 
@@ -2500,29 +2259,24 @@
   template: "Redirecting constructors can't have a body."
   tip: "Try removing the body, or not making this a redirecting constructor."
   analyzerCode: REDIRECTING_CONSTRUCTOR_WITH_BODY
-  dart2jsCode: "*fatal*"
   script:
     - "class C { C() : this.x() {} }"
 
 CannotAssignToParenthesizedExpression:
   template: "Can't assign to a parenthesized expression."
   analyzerCode: ASSIGNMENT_TO_PARENTHESIZED_EXPRESSION
-  dart2jsCode: "*fatal*"
 
 NotAnLvalue:
   template: "Can't assign to this."
   analyzerCode: NOT_AN_LVALUE
-  dart2jsCode: "*fatal*"
 
 CannotAssignToSuper:
   template: "Can't assign to super."
   analyzerCode: NOT_AN_LVALUE
-  dart2jsCode: "*fatal*"
 
 IllegalAssignmentToNonAssignable:
   template: "Illegal assignment to non-assignable expression."
   analyzerCode: ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
-  dart2jsCode: "*fatal*"
   script:
     - "main(){ f()++; }"
 
@@ -2530,7 +2284,6 @@
   template: "Missing selector such as '.<identifier>' or '[0]'."
   tip: "Try adding a selector."
   analyzerCode: MISSING_ASSIGNABLE_SELECTOR
-  dart2jsCode: "*fatal*"
   script:
     - "main(){ ++f(); }"
 
@@ -2563,37 +2316,31 @@
 InterpolationInUri:
   template: "Can't use string interpolation in a URI."
   analyzerCode: INVALID_LITERAL_IN_CONFIGURATION
-  dart2jsCode: "*fatal*"
 
 IntegerLiteralIsOutOfRange:
   template: "The integer literal #lexeme can't be represented in 64 bits."
   tip: "Try using the BigInt class if you need an integer larger than 9,223,372,036,854,775,807 or less than -9,223,372,036,854,775,808."
   analyzerCode: INTEGER_LITERAL_OUT_OF_RANGE
-  dart2jsCode: "*fatal*"
 
 ColonInPlaceOfIn:
   template: "For-in loops use 'in' rather than a colon."
   tip: "Try replacing the colon with the keyword 'in'."
   analyzerCode: COLON_IN_PLACE_OF_IN
-  dart2jsCode: "*fatal*"
 
 ExternalFactoryRedirection:
   template: "A redirecting factory can't be external."
   tip: "Try removing the 'external' modifier."
   analyzerCode: EXTERNAL_CONSTRUCTOR_WITH_BODY
-  dart2jsCode: "*ignored*"
 
 ArgumentTypeNotAssignable:
   template: "The argument type '#type' can't be assigned to the parameter type '#type2'."
   tip: "Try changing the type of the parameter, or casting the argument to '#type2'."
   analyzerCode: ARGUMENT_TYPE_NOT_ASSIGNABLE
-  dart2jsCode: "*ignored*"
 
 InvalidAssignment:
   template: "A value of type '#type' can't be assigned to a variable of type '#type2'."
   tip: "Try changing the type of the left hand side, or casting the right hand side to '#type2'."
   analyzerCode: INVALID_ASSIGNMENT
-  dart2jsCode: "*ignored*"
   script: >
     main() {
       int i;
@@ -2626,60 +2373,50 @@
   template: "The function expression type '#type' isn't of expected type '#type2'."
   tip: "Change the type of the function expression or the context in which it is used."
   analyzerCode: INVALID_CAST_FUNCTION_EXPR
-  dart2jsCode: "*ignored*"
 
 InvalidCastLiteralList:
   template: "The list literal type '#type' isn't of expected type '#type2'."
   tip: "Change the type of the list literal or the context in which it is used."
   analyzerCode: INVALID_CAST_LITERAL_LIST
-  dart2jsCode: "*ignored*"
 
 InvalidCastLiteralMap:
   template: "The map literal type '#type' isn't of expected type '#type2'."
   tip: "Change the type of the map literal or the context in which it is used."
   analyzerCode: INVALID_CAST_LITERAL_MAP
-  dart2jsCode: "*ignored*"
 
 InvalidCastLocalFunction:
   template: "The local function has type '#type' that isn't of expected type '#type2'."
   tip: "Change the type of the function or the context in which it is used."
   analyzerCode: INVALID_CAST_FUNCTION
-  dart2jsCode: "*ignored*"
 
 InvalidCastNewExpr:
   template: "The constructor returns type '#type' that isn't of expected type '#type2'."
   tip: "Change the type of the object being constructed or the context in which it is used."
   analyzerCode: INVALID_CAST_NEW_EXPR
-  dart2jsCode: "*ignored*"
 
 InvalidCastStaticMethod:
   template: "The static method has type '#type' that isn't of expected type '#type2'."
   tip: "Change the type of the method or the context in which it is used."
   analyzerCode: INVALID_CAST_METHOD
-  dart2jsCode: "*ignored*"
 
 InvalidCastTopLevelFunction:
   template: "The top level function has type '#type' that isn't of expected type '#type2'."
   tip: "Change the type of the function or the context in which it is used."
   analyzerCode: INVALID_CAST_FUNCTION
-  dart2jsCode: "*ignored*"
 
 InvalidCatchArguments:
   template: "Invalid catch arguments."
   analyzerCode: INVALID_CATCH_ARGUMENTS
-  dart2jsCode: "*fatal*"
 
 InvalidUseOfNullAwareAccess:
   template: "Cannot use '?.' here."
   tip: "Try using '.'."
   analyzerCode: INVALID_USE_OF_NULL_AWARE_ACCESS
-  dart2jsCode: "*fatal*"
 
 UndefinedGetter:
   template: "The getter '#name' isn't defined for the class '#type'."
   tip: "Try correcting the name to the name of an existing getter, or defining a getter or field named '#name'."
   analyzerCode: UNDEFINED_GETTER
-  dart2jsCode: "*ignored*"
   script: >
     class C {}
     main() {
@@ -2691,7 +2428,6 @@
   template: "The setter '#name' isn't defined for the class '#type'."
   tip: "Try correcting the name to the name of an existing setter, or defining a setter or field named '#name'."
   analyzerCode: UNDEFINED_SETTER
-  dart2jsCode: "*ignored*"
   script: >
     class C {}
     main() {
@@ -2703,7 +2439,6 @@
   template: "The method '#name' isn't defined for the class '#type'."
   tip: "Try correcting the name to the name of an existing method, or defining a method named '#name'."
   analyzerCode: UNDEFINED_METHOD
-  dart2jsCode: "*ignored*"
   script: >
     class C {}
     main() {
@@ -2732,77 +2467,60 @@
 CantInferTypeDueToInconsistentOverrides:
   template: "Can't infer the type of '#string': overridden members must all have the same type."
   tip: "Specify the type explicitly."
-  severity: ERROR
   analyzerCode: INVALID_METHOD_OVERRIDE
-  dart2jsCode: "*fatal*"
 
 CantInferTypeDueToCircularity:
   template: "Can't infer the type of '#string': circularity found during type inference."
   tip: "Specify the type explicitly."
   analyzerCode: RECURSIVE_COMPILE_TIME_CONSTANT
-  severity: ERROR
 
 AmbiguousSupertypes:
   template: "'#name' can't implement both '#type' and '#type2'"
-  severity: ERROR
   analyzerCode: AMBIGUOUS_SUPERTYPES
-  dart2jsCode: "*fatal*"
 
 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
 
 MixinInferenceNoMatchingClass:
   template: "Type parameters could not be inferred for the mixin '#name' because '#name2' does not implement the mixin's supertype constraint '#type'."
-  severity: ERROR
   analyzerCode: MIXIN_INFERENCE_NO_POSSIBLE_SUBSTITUTION
-  dart2jsCode: "*fatal*"
 
 ImplicitCallOfNonMethod:
   template: "Cannot invoke an instance of '#type' because it declares 'call' to be something other than a method."
   tip: "Try changing 'call' to a method or explicitly invoke 'call'."
-  severity: ERROR
   analyzerCode: IMPLICIT_CALL_OF_NON_METHOD
-  dart2jsCode: "*fatal*"
 
 ExpectedOneExpression:
   template: "Expected one expression, but found additional input."
-  severity: ERROR
 
 ForInLoopNotAssignable:
   template: "Can't assign to this, so it can't be used in a for-in loop."
-  severity: ERROR
   statement: "for (1 in []) {}"
 
 ForInLoopExactlyOneVariable:
   template: "A for-in loop can't have more than one loop variable."
-  severity: ERROR
   statement: "for (var x, y in []) {}"
 
 ForInLoopWithConstVariable:
   template: "A for-in loop-variable can't be 'const'."
   tip: "Try removing the 'const' modifier."
   analyzerCode: FOR_IN_WITH_CONST_VARIABLE
-  dart2jsCode: "*fatal*"
 
 ForInLoopElementTypeNotAssignable:
   template: "A value of type '#type' can't be assigned to a variable of type '#type2'."
   tip: "Try changing the type of the variable."
   analyzerCode: FOR_IN_OF_INVALID_ELEMENT_TYPE
-  dart2jsCode: "*fatal*"
 
 ForInLoopTypeNotIterable:
   template: "The type '#type' used in the 'for' loop must implement '#type2'."
   analyzerCode: FOR_IN_OF_INVALID_TYPE
-  dart2jsCode: "*fatal*"
 
 InitializingFormalTypeMismatch:
   template: "The type of parameter '#name' (#type) is not a subtype of the corresponding field's type (#type2)."
   tip: "Try changing the type of parameter '#name' to a subtype of #type2."
   severity: ERROR_LEGACY_WARNING
   analyzerCode: INVALID_PARAMETER_DECLARATION
-  dart2jsCode: "*fatal*"
   script: >
     class C {
       int x;
@@ -2836,15 +2554,11 @@
 WebLiteralCannotBeRepresentedExactly:
   template: "The integer literal #string can't be represented exactly in JavaScript."
   tip: "Try changing the literal to something that can be represented in Javascript. In Javascript #string2 is the nearest value that can be represented exactly."
-  severity: ERROR
-  dart2jsCode: "*fatal*"
 
 BoundIssueViaRawTypeWithNonSimpleBounds:
   template: "Generic type '#name' can't be used without type arguments in a type variable bound."
   tip: "Try providing type arguments to '#name' here."
-  severity: ERROR
   analyzerCode: NOT_INSTANTIATED_BOUND
-  dart2jsCode: "*fatal*"
   script: >
     class Hest<X extends Hest<X>> {}
     class Fisk<Y extends Hest> {}
@@ -2856,18 +2570,14 @@
 BoundIssueViaLoopNonSimplicity:
   template: "Generic type '#name' can't be used without type arguments in the bounds of its own type variables."
   tip: "Try providing type arguments to '#name' here."
-  severity: ERROR
   analyzerCode: NOT_INSTANTIATED_BOUND
-  dart2jsCode: "*fatal*"
   script: >
     class Hest<X extends Hest> {}
 
 BoundIssueViaCycleNonSimplicity:
   template: "Generic type '#name' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through '#name2'."
   tip: "Try providing type arguments to '#name2' here or to some other raw types in the bounds along the reference chain."
-  severity: ERROR
   analyzerCode: NOT_INSTANTIATED_BOUND
-  dart2jsCode: "*fatal*"
   script: >
     class Hest<X extends Fisk> {}
     class Fisk<Y extends Hest> {}
@@ -2876,11 +2586,16 @@
   template: "Bound of this variable references raw type '#name'."
   severity: CONTEXT
 
+CycleInTypeVariables:
+  template: "Type '#name' is a bound of itself via '#string'."
+  tip: "Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle."
+  analyzerCode: TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND
+  script:
+    - "foo<A extends A>() {}"
+
 CantUsePrefixAsExpression:
   template: "A prefix can't be used as an expression."
-  severity: ERROR
   analyzerCode: PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT
-  dart2jsCode: "*fatal*"
   script: |
     import "dart:core" as prefix;
 
@@ -2891,9 +2606,7 @@
 CantUsePrefixWithNullAware:
   template: "A prefix can't be used with null-aware operators."
   tip: "It should be safe to remove the '?' as a prefix is never null."
-  severity: ERROR
   analyzerCode: PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT
-  dart2jsCode: "*fatal*"
   script: |
     import "dart:core" as prefix;
 
@@ -2909,8 +2622,6 @@
     Try moving the constant from the deferred library, or removing 'deferred'
     from the import.
   analyzerCode: CONST_DEFERRED_CLASS
-  dart2jsCode: "*fatal*"
-  severity: ERROR
   script: |
     import "dart:core" deferred as prefix;
 
@@ -2921,8 +2632,6 @@
 CyclicRedirectingFactoryConstructors:
   template: "Cyclic definition of factory '#name'."
   analyzerCode: RECURSIVE_FACTORY_REDIRECT
-  dart2jsCode: "*fatal*"
-  severity: ERROR
   script: |
     class Foo {
       factory Foo.foo() = Foo.bar;
@@ -2933,16 +2642,12 @@
 GenericFunctionTypeInBound:
   template: "Type variables can't have generic function types in their bounds."
   analyzerCode: GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND
-  dart2jsCode: "*fatal*"
-  severity: ERROR
   script: |
     class Hest<X extends Y Function<Y>(Y)> {}
 
 VoidExpression:
   template: "This expression has type 'void' and can't be used."
-  severity: WARNING
   analyzerCode: USE_OF_VOID_RESULT
-  dart2jsCode: "*fatal*"
   statement: |
     {
       void x;
@@ -2951,12 +2656,45 @@
 
 ReturnFromVoidFunction:
   template: "Can't return a value from a void function."
-  severity: WARNING
   analyzerCode: RETURN_OF_INVALID_TYPE
-  dart2jsCode: "*fatal*"
   declaration: "void foo() { return 1; }"
 
+ReturnWithoutExpression:
+  template: "Must explicitly return a value from a non-void function."
+  severity: WARNING
+  analyzerCode: RETURN_WITHOUT_VALUE
+  declaration: "int foo() { return; }"
+
 RethrowNotCatch:
   template: "'rethrow' can only be used in catch clauses."
   analyzerCode: RETHROW_OUTSIDE_CATCH
-  dart2jsCode: "*fatal*"
+
+InvokeNonFunction:
+  template: "'#name' isn't a function or method and can't be invoked."
+  analyzerCode: INVOCATION_OF_NON_FUNCTION
+  script: |
+    class Foo {
+      int f;
+    }
+    main() {
+      Foo foo = new Foo();
+      foo.f();
+    }
+
+ConstInstanceField:
+  template: "Only static fields can be declared as const."
+  tip: "Try using 'final' instead of 'const', or adding the keyword 'static'."
+  analyzerCode: CONST_INSTANCE_FIELD
+  script:
+    - "class C { const field = 0; }"
+
+DefaultValueInRedirectingFactoryConstructor:
+  template: "Can't have a default value here because any default values of '#name' would be used instead."
+  tip: "Try removing the default value."
+  analyzerCode: DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR
+  script:
+    - >-
+      class A {
+        factory A.f({int x = 42}) = A.g;
+        A.g() {}
+      }
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 9de0d3f..4beec7d 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -182,17 +182,17 @@
         " getter: $uri::myGetter, setter: $uri::mySetter,"
         " receiverVariable: null, indexVariable: null)",
         new KernelIndexedAccessGenerator.internal(
-            helper, token, token, expression, index, getter, setter));
+            helper, token, expression, index, getter, setter));
     check(
         "ThisIndexedAccessGenerator(offset: 4, index: index,"
         " getter: $uri::myGetter, setter: $uri::mySetter, indexVariable: null)",
         new KernelThisIndexedAccessGenerator(
-            helper, token, token, index, getter, setter));
+            helper, token, index, getter, setter));
     check(
         "SuperIndexedAccessGenerator(offset: 4, index: index,"
         " getter: $uri::myGetter, setter: $uri::mySetter, indexVariable: null)",
         new KernelSuperIndexedAccessGenerator(
-            helper, token, token, index, getter, setter));
+            helper, token, index, getter, setter));
     check(
         "StaticAccessGenerator(offset: 4, readTarget: $uri::myGetter,"
         " writeTarget: $uri::mySetter)",
diff --git a/pkg/front_end/test/fasta/messages_test.dart b/pkg/front_end/test/fasta/messages_test.dart
index b06f4ec..54290a5 100644
--- a/pkg/front_end/test/fasta/messages_test.dart
+++ b/pkg/front_end/test/fasta/messages_test.dart
@@ -90,9 +90,9 @@
       String externalTest;
       bool frontendInternal = false;
       String analyzerCode;
-      String dart2jsCode;
       Severity severity;
       YamlNode badSeverity;
+      YamlNode unnecessarySeverity;
 
       for (String key in message.keys) {
         YamlNode node = message.nodes[key];
@@ -106,6 +106,8 @@
             severity = severityEnumValues[value];
             if (severity == null) {
               badSeverity = node;
+            } else if (severity == Severity.error) {
+              unnecessarySeverity = node;
             }
             break;
 
@@ -117,10 +119,6 @@
             analyzerCode = value;
             break;
 
-          case "dart2jsCode":
-            dart2jsCode = value;
-            break;
-
           case "bytes":
             YamlList list = node;
             if (list.first is List) {
@@ -197,7 +195,7 @@
         if (problem != null) {
           String filename = relativize(uri);
           location ??= message.span.start;
-          int line = location.line;
+          int line = location.line + 1;
           int column = location.column;
           problem = "$filename:$line:$column: error:\n$problem";
         }
@@ -224,6 +222,14 @@
               : null,
           location: badSeverity?.span?.start);
 
+      yield createDescription(
+          "unnecessarySeverity",
+          null,
+          unnecessarySeverity != null
+              ? "The 'ERROR' severity is the default and not necessary."
+              : null,
+          location: unnecessarySeverity?.span?.start);
+
       bool exampleAndAnalyzerCodeRequired = severity != Severity.context &&
           severity != Severity.internalProblem &&
           severity != Severity.ignored;
@@ -260,17 +266,6 @@
                   " on an example to find the code."
                   " The code is printed just before the file name."
               : null);
-
-      yield createDescription(
-          "dart2jsCode",
-          null,
-          exampleAndAnalyzerCodeRequired &&
-                  !frontendInternal &&
-                  analyzerCode != null &&
-                  dart2jsCode == null
-              ? "No dart2js code for $name."
-                  " Try using *ignored* or *fatal*"
-              : null);
     }
   }
 
@@ -280,7 +275,7 @@
     buffer
       ..write(relativize(span.sourceUrl))
       ..write(":")
-      ..write(span.start.line)
+      ..write(span.start.line + 1)
       ..write(":")
       ..write(span.start.column)
       ..write(": error: ")
diff --git a/pkg/front_end/test/fasta/parser/type_info_test.dart b/pkg/front_end/test/fasta/parser/type_info_test.dart
index 73e592c..ea5dfdc 100644
--- a/pkg/front_end/test/fasta/parser/type_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/type_info_test.dart
@@ -580,7 +580,7 @@
       'handleNoName )',
       'handleFormalParameterWithoutValue )',
       'endFormalParameter null null ) FormalParameterKind.mandatory '
-          'MemberKind.GeneralizedFunctionType int',
+          'MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
       'endFunctionType Function',
     ]);
@@ -606,7 +606,7 @@
       'handleNoName )',
       'handleFormalParameterWithoutValue )',
       'endFormalParameter null null ) FormalParameterKind.mandatory'
-          ' MemberKind.GeneralizedFunctionType int',
+          ' MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
       'endFunctionType Function',
     ]);
@@ -912,7 +912,7 @@
           'handleIdentifier x formalParameterDeclaration',
           'handleFormalParameterWithoutValue )',
           'endFormalParameter null null x FormalParameterKind.mandatory '
-              'MemberKind.GeneralizedFunctionType x',
+              'MemberKind.GeneralizedFunctionType',
           'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function',
           'beginFormalParameters ( MemberKind.GeneralizedFunctionType',
@@ -925,7 +925,7 @@
           'handleIdentifier x formalParameterDeclaration',
           'handleFormalParameterWithoutValue )',
           'endFormalParameter null null x FormalParameterKind.mandatory '
-              'MemberKind.GeneralizedFunctionType x',
+              'MemberKind.GeneralizedFunctionType',
           'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
           'endFunctionType Function',
         ]);
@@ -1654,7 +1654,7 @@
       'handleType T',
       'handleNoName )',
       'handleFormalParameterWithoutValue )',
-      'endFormalParameter null null ) FormalParameterKind.mandatory MemberKind.GeneralizedFunctionType T',
+      'endFormalParameter null null ) FormalParameterKind.mandatory MemberKind.GeneralizedFunctionType',
       'endFormalParameters 1 ( ) MemberKind.GeneralizedFunctionType',
       'endFunctionType Function',
       'endTypeVariable > 0 extends',
@@ -1907,9 +1907,9 @@
   }
 
   @override
-  void beginFormalParameter(Token beginToken, MemberKind kind,
-      Token covariantToken, Token varFinalOrConst) {
-    calls.add('beginFormalParameter $beginToken $kind');
+  void beginFormalParameter(Token token, MemberKind kind, Token covariantToken,
+      Token varFinalOrConst) {
+    calls.add('beginFormalParameter $token $kind');
   }
 
   @override
@@ -1967,15 +1967,10 @@
   }
 
   @override
-  void endFormalParameter(
-      Token thisKeyword,
-      Token periodAfterThis,
-      Token nameToken,
-      FormalParameterKind kind,
-      MemberKind memberKind,
-      Token endToken) {
+  void endFormalParameter(Token thisKeyword, Token periodAfterThis,
+      Token nameToken, FormalParameterKind kind, MemberKind memberKind) {
     calls.add('endFormalParameter $thisKeyword $periodAfterThis '
-        '$nameToken $kind $memberKind $endToken');
+        '$nameToken $kind $memberKind');
   }
 
   @override
diff --git a/pkg/front_end/test/scanner_fasta_test.dart b/pkg/front_end/test/scanner_fasta_test.dart
index 2d01af9..fa5c628 100644
--- a/pkg/front_end/test/scanner_fasta_test.dart
+++ b/pkg/front_end/test/scanner_fasta_test.dart
@@ -52,12 +52,10 @@
 @reflectiveTest
 class ScannerTest_Fasta_UTF8 extends ScannerTest_Fasta {
   @override
-  createScanner(String source, {bool genericMethodComments: false}) {
+  createScanner(String source) {
     List<int> encoded = utf8.encode(source).toList(growable: true);
     encoded.add(0); // Ensure 0 terminted bytes for UTF8 scanner
-    return new fasta.Utf8BytesScanner(encoded,
-        includeComments: true,
-        scanGenericMethodComments: genericMethodComments);
+    return new fasta.Utf8BytesScanner(encoded, includeComments: true);
   }
 
   test_invalid_utf8() {
@@ -97,17 +95,13 @@
     usingFasta = true;
   }
 
-  createScanner(String source, {bool genericMethodComments: false}) =>
-      new fasta.StringScanner(source,
-          includeComments: true,
-          scanGenericMethodComments: genericMethodComments);
+  createScanner(String source) =>
+      new fasta.StringScanner(source, includeComments: true);
 
   @override
   Token scanWithListener(String source, ErrorListener listener,
-      {bool genericMethodComments: false,
-      bool lazyAssignmentOperators: false}) {
-    var scanner =
-        createScanner(source, genericMethodComments: genericMethodComments);
+      {bool lazyAssignmentOperators: false}) {
+    var scanner = createScanner(source);
     var token = scanner.tokenize();
     return new ToAnalyzerTokenStreamConverter_WithListener(listener)
         .convertTokens(token);
diff --git a/pkg/front_end/test/scanner_replacement_test.dart b/pkg/front_end/test/scanner_replacement_test.dart
index c13663a..a9f0b70 100644
--- a/pkg/front_end/test/scanner_replacement_test.dart
+++ b/pkg/front_end/test/scanner_replacement_test.dart
@@ -37,15 +37,13 @@
 
   @override
   analyzer.Token scanWithListener(String source, ErrorListener listener,
-      {bool genericMethodComments: false,
-      bool lazyAssignmentOperators: false}) {
+      {bool lazyAssignmentOperators: false}) {
     // Process the source similar to
     // pkg/analyzer/lib/src/dart/scanner/scanner.dart
     // to simulate replacing the analyzer scanner
 
     fasta.ScannerResult result = fasta.scanString(source,
         includeComments: true,
-        scanGenericMethodComments: genericMethodComments,
         scanLazyAssignmentOperators: lazyAssignmentOperators,
         recover: ((List<int> bytes, fasta.Token tokens, List<int> lineStarts) {
       // perform recovery as a separate step
@@ -206,12 +204,9 @@
     ]);
   }
 
-  analyzer.Token _scan(String source,
-      {bool genericMethodComments: false,
-      bool lazyAssignmentOperators: false}) {
+  analyzer.Token _scan(String source, {bool lazyAssignmentOperators: false}) {
     ErrorListener listener = new ErrorListener();
     analyzer.Token token = scanWithListener(source, listener,
-        genericMethodComments: genericMethodComments,
         lazyAssignmentOperators: lazyAssignmentOperators);
     listener.assertNoErrors();
     return token;
diff --git a/pkg/front_end/test/scanner_test.dart b/pkg/front_end/test/scanner_test.dart
index e33b0bc..9ad98df 100644
--- a/pkg/front_end/test/scanner_test.dart
+++ b/pkg/front_end/test/scanner_test.dart
@@ -83,7 +83,7 @@
   bool usingFasta = false;
 
   Token scanWithListener(String source, ErrorListener listener,
-      {bool genericMethodComments: false, bool lazyAssignmentOperators: false});
+      {bool lazyAssignmentOperators: false});
 
   void test_ampersand() {
     _assertToken(TokenType.AMPERSAND, "&");
@@ -191,18 +191,6 @@
     _assertToken(TokenType.COMMA, ",");
   }
 
-  void test_comment_generic_method_type_assign() {
-    _assertComment(TokenType.MULTI_LINE_COMMENT, "/*=comment*/");
-    _assertComment(TokenType.GENERIC_METHOD_TYPE_ASSIGN, "/*=comment*/",
-        genericMethodComments: true);
-  }
-
-  void test_comment_generic_method_type_list() {
-    _assertComment(TokenType.MULTI_LINE_COMMENT, "/*<comment>*/");
-    _assertComment(TokenType.GENERIC_METHOD_TYPE_LIST, "/*<comment>*/",
-        genericMethodComments: true);
-  }
-
   void test_comment_multi() {
     _assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */");
   }
@@ -1341,12 +1329,11 @@
     expect(openParen.endToken, isNull);
   }
 
-  void _assertComment(TokenType commentType, String source,
-      {bool genericMethodComments: false}) {
+  void _assertComment(TokenType commentType, String source) {
     //
     // Test without a trailing end-of-line marker
     //
-    Token token = _scan(source, genericMethodComments: genericMethodComments);
+    Token token = _scan(source);
     expect(token, isNotNull);
     expect(token.type, TokenType.EOF);
     Token comment = token.precedingComments;
@@ -1358,7 +1345,7 @@
     //
     // Test with a trailing end-of-line marker
     //
-    token = _scan("$source\n", genericMethodComments: genericMethodComments);
+    token = _scan("$source\n");
     expect(token, isNotNull);
     expect(token.type, TokenType.EOF);
     comment = token.precedingComments;
@@ -1520,12 +1507,9 @@
   }
 
   Token _scan(String source,
-      {bool genericMethodComments: false,
-      bool lazyAssignmentOperators: false,
-      bool ignoreErrors: false}) {
+      {bool lazyAssignmentOperators: false, bool ignoreErrors: false}) {
     ErrorListener listener = new ErrorListener();
     Token token = scanWithListener(source, listener,
-        genericMethodComments: genericMethodComments,
         lazyAssignmentOperators: lazyAssignmentOperators);
     if (!ignoreErrors) {
       listener.assertNoErrors();
diff --git a/pkg/front_end/test/src/base/processed_options_test.dart b/pkg/front_end/test/src/base/processed_options_test.dart
index bf575e6..2e74c1d 100644
--- a/pkg/front_end/test/src/base/processed_options_test.dart
+++ b/pkg/front_end/test/src/base/processed_options_test.dart
@@ -50,7 +50,7 @@
       ..sdkRoot = Uri.parse('org-dartlang-test:///sdk/dir/')
       ..compileSdk = false;
     expect(new ProcessedOptions(raw).sdkSummary,
-        Uri.parse('org-dartlang-test:///sdk/dir/vm_platform.dill'));
+        Uri.parse('org-dartlang-test:///sdk/dir/vm_platform_strong.dill'));
 
     // But it is left null when compile-sdk is true
     raw = new CompilerOptions()
@@ -357,7 +357,7 @@
         .entityForUri(sdkRoot)
         .writeAsStringSync('\n');
     fileSystem
-        .entityForUri(sdkRoot.resolve('vm_platform.dill'))
+        .entityForUri(sdkRoot.resolve('vm_platform_strong.dill'))
         .writeAsStringSync('\n');
     fileSystem
         .entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
@@ -428,7 +428,7 @@
   test_validateOptions_inferred_summary_exists() async {
     var sdkRoot = Uri.parse('org-dartlang-test:///sdk/root/');
     var sdkSummary =
-        Uri.parse('org-dartlang-test:///sdk/root/vm_platform.dill');
+        Uri.parse('org-dartlang-test:///sdk/root/vm_platform_strong.dill');
     fileSystem.entityForUri(sdkRoot).writeAsStringSync('\n');
     fileSystem.entityForUri(sdkSummary).writeAsStringSync('\n');
     fileSystem
diff --git a/pkg/front_end/testcases/compile.status b/pkg/front_end/testcases/compile.status
index cd8199e..ba0d63c 100644
--- a/pkg/front_end/testcases/compile.status
+++ b/pkg/front_end/testcases/compile.status
@@ -104,6 +104,8 @@
 regress/issue_29982: Fail # Issue 29982.
 regress/issue_30836: RuntimeError # Issue 30836.
 regress/issue_33452: RuntimeError # Test has an intentional error
+regress/issue_32972: RuntimeError
+regress/issue_34225: RuntimeError
 
 runtime_checks/implicit_downcast_constructor_initializer: RuntimeError # Test exercises strong mode semantics
 runtime_checks/implicit_downcast_do: RuntimeError # Test exercises strong mode semantics
diff --git a/pkg/front_end/testcases/dartino/super_is_parameter.incremental.yaml b/pkg/front_end/testcases/dartino/super_is_parameter.incremental.yaml
index 65037fa..fef1a3e 100644
--- a/pkg/front_end/testcases/dartino/super_is_parameter.incremental.yaml
+++ b/pkg/front_end/testcases/dartino/super_is_parameter.incremental.yaml
@@ -6,7 +6,7 @@
   <<<< []
   class A<S> {
   ==== []
-  class A<S extends S> {
+  class A<S extends num> {
   >>>>
     S field;
   }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart
index 852fb3f..e385138 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.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.
 
-/*@testedFeatures=inference*/
+/*@testedFeatures=warning,inference*/
 library test;
 
 main() {
@@ -32,7 +32,7 @@
   };
   var /*@type=(bool) -> int*/ g = /*@returnType=int*/ (bool b) {
     if (b) {
-      return;
+      /*@warning=ReturnWithoutExpression*/ return;
     } else {
       return 0;
     }
@@ -62,7 +62,7 @@
     if (b) {
       return 0;
     } else {
-      return;
+      /*@warning=ReturnWithoutExpression*/ return;
     }
   };
   var /*@type=(bool) -> int*/ l = /*@returnType=int*/ (bool b) {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect
index b0ec67b..5e2379c 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.expect
@@ -31,7 +31,7 @@
   };
   (core::bool) → core::int g = (core::bool b) → core::int {
     if(b) {
-      return;
+      return null;
     }
     else {
       return 0;
@@ -66,7 +66,7 @@
       return 0;
     }
     else {
-      return;
+      return null;
     }
   };
   (core::bool) → core::int l = (core::bool b) → core::int {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.transformed.expect
index b0ec67b..5e2379c 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_returns.dart.strong.transformed.expect
@@ -31,7 +31,7 @@
   };
   (core::bool) → core::int g = (core::bool b) → core::int {
     if(b) {
-      return;
+      return null;
     }
     else {
       return 0;
@@ -66,7 +66,7 @@
       return 0;
     }
     else {
-      return;
+      return null;
     }
   };
   (core::bool) → core::int l = (core::bool b) → core::int {
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart
index d9f7677..23d2b4e 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart
@@ -8,7 +8,7 @@
 f() {
   List<int> o;
   o. /*@target=Iterable::forEach*/ forEach(
-      /*@returnType=void*/ (/*@type=int*/ i) {
+      /*@returnType=int*/ (/*@type=int*/ i) {
     return i /*@target=num::+*/ + 1;
   });
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.expect
index bdd35f6..38ae920 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.expect
@@ -4,7 +4,7 @@
 
 static method f() → dynamic {
   core::List<core::int> o;
-  o.{core::Iterable::forEach}((core::int i) → void {
+  o.{core::Iterable::forEach}((core::int i) → core::int {
     return i.{core::num::+}(1);
   });
 }
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.transformed.expect
index bdd35f6..38ae920 100644
--- a/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_void_context.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 static method f() → dynamic {
   core::List<core::int> o;
-  o.{core::Iterable::forEach}((core::int i) → void {
+  o.{core::Iterable::forEach}((core::int i) → core::int {
     return i.{core::num::+}(1);
   });
 }
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart b/pkg/front_end/testcases/inference/call_corner_cases.dart
index 41a5eb4..5504669 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart
@@ -20,10 +20,12 @@
   B get getB => new B();
 }
 
-main() {
+test() {
   var /*@type=int*/ callA = new A() /*@target=A::call*/ ();
   var /*@type=int*/ callFieldA = new D(). /*@target=D::fieldA*/ fieldA();
   var /*@type=int*/ callGetA = new D(). /*@target=D::getA*/ getA();
   var /*@type=dynamic*/ callFieldB = new D(). /*@target=D::fieldB*/ fieldB();
   var /*@type=dynamic*/ callGetB = new D(). /*@target=D::getB*/ getB();
 }
+
+main() {}
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 8283021..bf4efd4 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
@@ -27,10 +27,11 @@
   get getB() → self::B
     return new self::B::•();
 }
-static method main() → dynamic {
+static method test() → dynamic {
   dynamic callA = new self::A::•().call();
   dynamic callFieldA = new self::D::•().fieldA();
   dynamic callGetA = new self::D::•().getA();
   dynamic callFieldB = new self::D::•().fieldB();
   dynamic callGetB = new self::D::•().getB();
 }
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.transformed.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.transformed.expect
index 8283021..bf4efd4 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.direct.transformed.expect
@@ -27,10 +27,11 @@
   get getB() → self::B
     return new self::B::•();
 }
-static method main() → dynamic {
+static method test() → dynamic {
   dynamic callA = new self::A::•().call();
   dynamic callFieldA = new self::D::•().fieldA();
   dynamic callGetA = new self::D::•().getA();
   dynamic callFieldB = new self::D::•().fieldB();
   dynamic callGetB = new self::D::•().getB();
 }
+static method main() → dynamic {}
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 e0d0b05..523519b 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
@@ -24,5 +24,7 @@
   get getB() → self::B
     ;
 }
+static method test() → dynamic
+  ;
 static method main() → dynamic
   ;
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 6457f6f..5d462fc 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
@@ -27,10 +27,15 @@
   get getB() → self::B
     return new self::B::•();
 }
-static method main() → dynamic {
+static method test() → dynamic {
   core::int callA = new self::A::•().{self::A::call}();
   core::int callFieldA = new self::D::•().{self::D::fieldA}();
   core::int callGetA = new self::D::•().{self::D::getA}();
-  dynamic callFieldB = new self::D::•().{self::D::fieldB}();
-  dynamic callGetB = new self::D::•().{self::D::getB}();
+  dynamic callFieldB = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
+  var /*@type=dynamic*/ callFieldB = new D(). /*@target=D::fieldB*/ fieldB();
+                                                                    ^" in let final dynamic #t2 = new self::D::•().{self::D::fieldB}() in null;
+  dynamic callGetB = let dynamic _ = null in let final dynamic #t3 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
+  var /*@type=dynamic*/ callGetB = new D(). /*@target=D::getB*/ getB();
+                                                                ^" in let final dynamic #t4 = new self::D::•().{self::D::getB}() in null;
 }
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect
index 6457f6f..1c713e2 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart.strong.transformed.expect
@@ -27,10 +27,15 @@
   get getB() → self::B
     return new self::B::•();
 }
-static method main() → dynamic {
+static method test() → dynamic {
   core::int callA = new self::A::•().{self::A::call}();
   core::int callFieldA = new self::D::•().{self::D::fieldA}();
   core::int callGetA = new self::D::•().{self::D::getA}();
-  dynamic callFieldB = new self::D::•().{self::D::fieldB}();
-  dynamic callGetB = new self::D::•().{self::D::getB}();
+  dynamic callFieldB = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:27:69: Error: 'fieldB' isn't a function or method and can't be invoked.
+  var /*@type=dynamic*/ callFieldB = new D(). /*@target=D::fieldB*/ fieldB();
+                                                                    ^" in let final dynamic #t2 = new self::D::•().{self::D::fieldB}() in null;
+  dynamic callGetB = let<BottomType> _ = null in let final dynamic #t3 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/call_corner_cases.dart:28:65: Error: 'getB' isn't a function or method and can't be invoked.
+  var /*@type=dynamic*/ callGetB = new D(). /*@target=D::getB*/ getB();
+                                                                ^" in let final dynamic #t4 = new self::D::•().{self::D::getB}() in null;
 }
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
index 452d130..1081803 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
@@ -12,7 +12,9 @@
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
   core::int get_hashCode = d.{core::Object::hashCode};
-  dynamic call_hashCode = d.{core::Object::hashCode}();
+  dynamic call_hashCode = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+      d. /*@target=Object::hashCode*/ hashCode();
+                                      ^" in let final dynamic #t2 = d.{core::Object::hashCode}() in null;
   core::String call_toString = d.{core::Object::toString}();
   dynamic call_toStringArg = d.toString(color: "pink");
   dynamic call_foo0 = d.foo();
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
index 452d130..3d83647 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
@@ -12,7 +12,9 @@
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
   core::int get_hashCode = d.{core::Object::hashCode};
-  dynamic call_hashCode = d.{core::Object::hashCode}();
+  dynamic call_hashCode = let<BottomType> _ = null in let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+      d. /*@target=Object::hashCode*/ hashCode();
+                                      ^" in let final dynamic #t2 = d.{core::Object::hashCode}() in null;
   core::String call_toString = d.{core::Object::toString}();
   dynamic call_toStringArg = d.toString(color: "pink");
   dynamic call_foo0 = d.foo();
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
index c615c82..c72713a 100644
--- a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart
@@ -18,7 +18,7 @@
 
 main() {
   int y = /*info:DYNAMIC_CAST*/ new D()
-      . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D::m*/ m<int>(
-          42);
+      . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D::m*/ /*@error=TypeArgumentMismatch*/ m<
+          int>(42);
   print(y);
 }
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 a6dedb5..5d1b277 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
@@ -8,6 +8,10 @@
 // Change to a subtype of test::C::m::T.
 // /*@error=OverrideTypeMismatchReturnType*/ /*@topType=dynamic*/ m(
 //                                                                ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:21:106: Error: Expected 0 type arguments.
+//       . /*error:WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD*/ /*@target=D::m*/ /*@error=TypeArgumentMismatch*/ m<
+//                                                                                                          ^
 
 library test;
 import self as self;
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart b/pkg/front_end/testcases/inference/lambda_void_context.dart
index 27bcadf..cf6ddfc 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart
@@ -8,7 +8,7 @@
 f() {
   List<int> o;
   o. /*@target=Iterable::forEach*/ forEach(
-      /*@returnType=void*/ (/*@type=int*/ i) => i /*@target=num::+*/ + 1);
+      /*@returnType=int*/ (/*@type=int*/ i) => i /*@target=num::+*/ + 1);
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.expect
index f46ab7c..13abe3f 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.expect
@@ -4,6 +4,6 @@
 
 static method f() → dynamic {
   core::List<core::int> o;
-  o.{core::Iterable::forEach}((core::int i) → void => i.{core::num::+}(1));
+  o.{core::Iterable::forEach}((core::int i) → core::int => i.{core::num::+}(1));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.transformed.expect
index f46ab7c..13abe3f 100644
--- a/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/lambda_void_context.dart.strong.transformed.expect
@@ -4,6 +4,6 @@
 
 static method f() → dynamic {
   core::List<core::int> o;
-  o.{core::Iterable::forEach}((core::int i) → void => i.{core::num::+}(1));
+  o.{core::Iterable::forEach}((core::int i) → core::int => i.{core::num::+}(1));
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
index e8031c5..964c88f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.expect
@@ -1,3 +1,25 @@
+// Errors:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
index e8031c5..964c88f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.direct.transformed.expect
@@ -1,3 +1,25 @@
+// Errors:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
index 7b2576f..b442329 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.expect
@@ -1,3 +1,25 @@
+// Errors:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
index 7b2576f..b442329 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.strong.transformed.expect
@@ -1,3 +1,25 @@
+// Errors:
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:9: Error: Type 'T' is a bound of itself via 'U', 'Y', 'Z'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//         ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:41:22: Error: Type 'U' is a bound of itself via 'Y', 'Z', 'T'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+// class I<T extends U, U extends Y, V extends Function(W), W extends Function(X),
+//                      ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:28: Error: Type 'Y' is a bound of itself via 'Z', 'T', 'U'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                            ^
+//
+// pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart:42:41: Error: Type 'Z' is a bound of itself via 'T', 'U', 'Y'.
+// Try breaking the cycle by removing at least on of the 'extends' clauses in the cycle.
+//     X extends Function(V), Y extends Z, Z extends T> {}
+//                                         ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/qualified.dart b/pkg/front_end/testcases/qualified.dart
index 794f6bd..397020d 100644
--- a/pkg/front_end/testcases/qualified.dart
+++ b/pkg/front_end/testcases/qualified.dart
@@ -15,6 +15,8 @@
 
 class WithMixin extends lib.Supertype with lib.Mixin {}
 
+class IllegalSupertype extends lib.VoidFunction {}
+
 main() {
   new C<String>();
   new C<String>.a();
@@ -24,4 +26,5 @@
   new lib.C<String>.b();
   new WithMixin().supertypeMethod();
   new WithMixin().foo();
+  new IllegalSupertype();
 }
diff --git a/pkg/front_end/testcases/qualified.dart.direct.expect b/pkg/front_end/testcases/qualified.dart.direct.expect
index e062fce..b5e33b4 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.expect
@@ -7,6 +7,10 @@
 // pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
 // class Bad extends lib.Missing {
 //                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
 
 library test.qualified.main;
 import self as self;
@@ -24,6 +28,11 @@
     : super lib::Supertype::•()
     ;
 }
+class IllegalSupertype extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
 class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
@@ -44,4 +53,5 @@
   new lib::C::a<core::String>();
   new self::WithMixin::•().supertypeMethod();
   new self::WithMixin::•().foo();
+  new self::IllegalSupertype::•();
 }
diff --git a/pkg/front_end/testcases/qualified.dart.direct.transformed.expect b/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
index a9175a1..3ffad7c 100644
--- a/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/qualified.dart.direct.transformed.expect
@@ -7,6 +7,10 @@
 // pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
 // class Bad extends lib.Missing {
 //                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
 
 library test.qualified.main;
 import self as self;
@@ -30,6 +34,11 @@
     : super lib::Supertype::•()
     ;
 }
+class IllegalSupertype extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
 class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
@@ -50,4 +59,5 @@
   new lib::C::a<core::String>();
   new self::WithMixin::•().supertypeMethod();
   new self::WithMixin::•().foo();
+  new self::IllegalSupertype::•();
 }
diff --git a/pkg/front_end/testcases/qualified.dart.outline.expect b/pkg/front_end/testcases/qualified.dart.outline.expect
index b04c33a..f72c9c6 100644
--- a/pkg/front_end/testcases/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/qualified.dart.outline.expect
@@ -15,6 +15,10 @@
   synthetic constructor •() → void
     ;
 }
+class IllegalSupertype extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
 class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
diff --git a/pkg/front_end/testcases/qualified.dart.strong.expect b/pkg/front_end/testcases/qualified.dart.strong.expect
index fa6e54e..f1a7aea 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.expect
@@ -11,6 +11,10 @@
 // pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
 // class Bad extends lib.Missing {
 //                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
 
 library test.qualified.main;
 import self as self;
@@ -28,6 +32,11 @@
     : super lib::Supertype::•()
     ;
 }
+class IllegalSupertype extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
 class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
@@ -48,4 +57,5 @@
   new lib::C::a<core::String>();
   new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
   new self::WithMixin::•().{lib::Mixin::foo}();
+  new self::IllegalSupertype::•();
 }
diff --git a/pkg/front_end/testcases/qualified.dart.strong.transformed.expect b/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
index 9894c5e..34c0697 100644
--- a/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/qualified.dart.strong.transformed.expect
@@ -11,6 +11,10 @@
 // pkg/front_end/testcases/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
 // class Bad extends lib.Missing {
 //                   ^
+//
+// pkg/front_end/testcases/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
+// class IllegalSupertype extends lib.VoidFunction {}
+//       ^
 
 library test.qualified.main;
 import self as self;
@@ -34,6 +38,11 @@
     : super lib::Supertype::•()
     ;
 }
+class IllegalSupertype extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
 class C<T extends core::Object = dynamic> extends core::Object { // from org-dartlang-testcase:///qualified_part.dart
   static field dynamic _redirecting# = <dynamic>[self::C::b];
   constructor •() → void
@@ -54,4 +63,5 @@
   new lib::C::a<core::String>();
   new self::WithMixin::•().{lib::Supertype::supertypeMethod}();
   new self::WithMixin::•().{lib::Mixin::foo}();
+  new self::IllegalSupertype::•();
 }
diff --git a/pkg/front_end/testcases/qualified_lib.dart b/pkg/front_end/testcases/qualified_lib.dart
index dba8057..ae00a71 100644
--- a/pkg/front_end/testcases/qualified_lib.dart
+++ b/pkg/front_end/testcases/qualified_lib.dart
@@ -23,3 +23,5 @@
     print("I'm Mixin.foo");
   }
 }
+
+typedef VoidFunction = void Function();
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 6e155d9..9b12575 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -225,22 +225,22 @@
 // pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     super.m(87);
-//            ^^^^
+//            ^
 //
 // pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     use(super.m(87));
-//                ^^^^
+//                ^
 //
 // pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     super.n(87);
-//            ^^^^
+//            ^
 //
 // pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     use(super.n(87));
-//                ^^^^
+//                ^
 //
 // pkg/front_end/testcases/rasta/super.dart:11:9: Error: Final field 'f' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
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 080a6f0..f2f6961 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.expect
@@ -1,6 +1,6 @@
 // Errors:
 //
-// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
 //   C<String, String> field;
 //   ^
 
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
index 080a6f0..f2f6961 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.strong.transformed.expect
@@ -1,6 +1,6 @@
 // Errors:
 //
-// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: 'C' expects 1 type arguments.
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
 //   C<String, String> field;
 //   ^
 
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
index 71e52ba..01ccbc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -5,7 +5,7 @@
 static method bad() → dynamic {
   for (core::int i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
+           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
index 71e52ba..01ccbc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
@@ -5,7 +5,7 @@
 static method bad() → dynamic {
   for (core::int i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
+           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index 50d3af2..689db8c 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -11,7 +11,7 @@
 static method bad() → dynamic {
   for (core::int i = (let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
+           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
index 0cffebe..7db28e0 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 static method bad() → dynamic {
   for (core::int i = (let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final<BottomType> #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
+           ^" in let final<BottomType> #t2 = let<BottomType> _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect b/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
index de8a7cd..a07ea78 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.direct.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
index de8a7cd..a07ea78 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.direct.transformed.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect b/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
index 21d109e..729a604 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.strong.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
index 21d109e..729a604 100644
--- a/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_30834.dart.strong.transformed.expect
@@ -1,3 +1,9 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_30834.dart:6:7: Error: A class member can't have the same name as the enclosing class.
+//   set A(v) {}
+//       ^
+
 library;
 import self as self;
 import "dart:core" as core;
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 64fefaf..d69d0be 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.expect
@@ -7,7 +7,7 @@
 //   T<U> v;
 //     ^
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
 //   T<U> v;
 //   ^
 
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
index 64fefaf..d69d0be 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.strong.transformed.expect
@@ -7,7 +7,7 @@
 //   T<U> v;
 //     ^
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: 'T' expects 0 type arguments.
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
 //   T<U> v;
 //   ^
 
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
index c8a8ea6..11b7715 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
@@ -3,11 +3,11 @@
 // pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //   new A.foo(1, 2);
-//            ^^^^^^
+//            ^
 //
 // pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
 //   new A().foo();
-//              ^^
+//              ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart b/pkg/front_end/testcases/regress/issue_32660.dart
new file mode 100644
index 0000000..ec799be
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32660.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.
+
+class A {
+  foo(int x) => x;
+}
+
+class B {
+  foo(int x, {int y}) => y;
+}
+
+class C extends A implements B {
+  noSuchMethod(i) {
+    print("No such method!");
+    return 42;
+  }
+}
+
+class D {
+  foo(int x) => x;
+}
+
+class E extends D {
+  foo(int x, {int y});
+
+  noSuchMethod(i) {
+    print(i.namedArguments);
+    return 42;
+  }
+}
+
+main() {
+  C c = new C();
+  E e = new E();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32660.dart.direct.expect
new file mode 100644
index 0000000..7f42fe5
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.direct.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic
+    return x;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x, {core::int y = null}) → dynamic
+    return y;
+}
+class C extends self::A implements self::B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+  method noSuchMethod(dynamic i) → dynamic {
+    core::print("No such method!");
+    return 42;
+  }
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic
+    return x;
+}
+class E extends self::D {
+  synthetic constructor •() → void
+    : super self::D::•()
+    ;
+  abstract method foo(core::int x, {core::int y = null}) → dynamic;
+  method noSuchMethod(dynamic i) → dynamic {
+    core::print(i.namedArguments);
+    return 42;
+  }
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  self::E e = new self::E::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_32660.dart.direct.transformed.expect
new file mode 100644
index 0000000..7f42fe5
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.direct.transformed.expect
@@ -0,0 +1,48 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic
+    return x;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x, {core::int y = null}) → dynamic
+    return y;
+}
+class C extends self::A implements self::B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+  method noSuchMethod(dynamic i) → dynamic {
+    core::print("No such method!");
+    return 42;
+  }
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic
+    return x;
+}
+class E extends self::D {
+  synthetic constructor •() → void
+    : super self::D::•()
+    ;
+  abstract method foo(core::int x, {core::int y = null}) → dynamic;
+  method noSuchMethod(dynamic i) → dynamic {
+    core::print(i.namedArguments);
+    return 42;
+  }
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  self::E e = new self::E::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
new file mode 100644
index 0000000..e77621d
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
@@ -0,0 +1,37 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo(core::int x) → dynamic
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo(core::int x, {core::int y}) → dynamic
+    ;
+}
+class C extends self::A implements self::B {
+  synthetic constructor •() → void
+    ;
+  method noSuchMethod(dynamic i) → dynamic
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    ;
+  method foo(core::int x) → dynamic
+    ;
+}
+class E extends self::D {
+  synthetic constructor •() → void
+    ;
+  abstract method foo(core::int x, {core::int y}) → dynamic;
+  method noSuchMethod(dynamic i) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
new file mode 100644
index 0000000..057aa3f
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.strong.expect
@@ -0,0 +1,73 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:13:7: Error: The non-abstract class 'C' is missing implementations for these members:
+//   'foo'.
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+// 
+// class C extends A implements B {
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32660.dart:24:7: Error: The non-abstract class 'E' is missing implementations for these members:
+//   'foo'.
+// Try to either
+//  - provide an implementation,
+//  - inherit an implementation from a superclass or mixin,
+//  - mark the class as abstract, or
+//  - provide a 'noSuchMethod' implementation.
+// 
+// class E extends D {
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic
+    return x;
+}
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x, {core::int y = null}) → dynamic
+    return y;
+}
+class C extends self::A implements self::B {
+  synthetic constructor •() → void
+    : super self::A::•()
+    ;
+  method noSuchMethod(core::Invocation i) → dynamic {
+    core::print("No such method!");
+    return 42;
+  }
+  abstract forwarding-stub method foo(core::int x, {core::int y = null}) → dynamic;
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  method foo(core::int x) → dynamic
+    return x;
+}
+class E extends self::D {
+  synthetic constructor •() → void
+    : super self::D::•()
+    ;
+  abstract method foo(core::int x, {core::int y = null}) → dynamic;
+  method noSuchMethod(core::Invocation i) → dynamic {
+    core::print(i.{core::Invocation::namedArguments});
+    return 42;
+  }
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  self::E e = new self::E::•();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart b/pkg/front_end/testcases/regress/issue_32972.dart
new file mode 100644
index 0000000..23a1482
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void foo<X>(X i) {
+  print(i);
+}
+
+class Foo {
+  static foo<X>(X i) {
+    print(i);
+  }
+
+  bar<X>(X i) {
+    print(i);
+  }
+}
+
+class Bar<X, Y> {}
+
+main() {
+  foo<String, String>("hello world");
+  foo<String>("hello world");
+  Foo.foo<int, int>(42);
+  Foo.foo<int>(42);
+  Foo f = new Foo();
+  f.bar<double, double>(42.42);
+  f.bar<double>(42.42);
+  new Bar<String>();
+  new Bar<String, String>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect b/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
new file mode 100644
index 0000000..720e78e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.direct.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object = dynamic>(self::Foo::foo::X i) → dynamic {
+    core::print(i);
+  }
+  method bar<X extends core::Object = dynamic>(self::Foo::bar::X i) → dynamic {
+    core::print(i);
+  }
+}
+class Bar<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo<X extends core::Object = dynamic>(self::foo::X i) → void {
+  core::print(i);
+}
+static method main() → dynamic {
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), core::List::unmodifiable<dynamic>(<dynamic>["hello world"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  self::foo<core::String>("hello world");
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::int, core::int]), core::List::unmodifiable<dynamic>(<dynamic>[42]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  self::Foo::foo<core::int>(42);
+  self::Foo f = new self::Foo::•();
+  f.bar<core::double, core::double>(42.42);
+  f.bar<core::double>(42.42);
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  new self::Bar::•<core::String, core::String>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_32972.dart.direct.transformed.expect
new file mode 100644
index 0000000..720e78e
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.direct.transformed.expect
@@ -0,0 +1,34 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object = dynamic>(self::Foo::foo::X i) → dynamic {
+    core::print(i);
+  }
+  method bar<X extends core::Object = dynamic>(self::Foo::bar::X i) → dynamic {
+    core::print(i);
+  }
+}
+class Bar<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo<X extends core::Object = dynamic>(self::foo::X i) → void {
+  core::print(i);
+}
+static method main() → dynamic {
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), core::List::unmodifiable<dynamic>(<dynamic>["hello world"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  self::foo<core::String>("hello world");
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::int, core::int]), core::List::unmodifiable<dynamic>(<dynamic>[42]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  self::Foo::foo<core::int>(42);
+  self::Foo f = new self::Foo::•();
+  f.bar<core::double, core::double>(42.42);
+  f.bar<core::double>(42.42);
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  new self::Bar::•<core::String, core::String>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32972.dart.outline.expect
new file mode 100644
index 0000000..e9de5cd
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.outline.expect
@@ -0,0 +1,20 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    ;
+  static method foo<X extends core::Object = dynamic>(self::Foo::foo::X i) → dynamic
+    ;
+  method bar<X extends core::Object = dynamic>(self::Foo::bar::X i) → dynamic
+    ;
+}
+class Bar<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method foo<X extends core::Object = dynamic>(self::foo::X i) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect b/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
new file mode 100644
index 0000000..11825b0
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_32972.dart.strong.expect
@@ -0,0 +1,52 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:22:3: Error: Expected 1 type arguments.
+//   foo<String, String>("hello world");
+//   ^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:24:7: Error: Expected 1 type arguments.
+//   Foo.foo<int, int>(42);
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:29:7: Error: Expected 2 type arguments.
+//   new Bar<String>();
+//       ^
+//
+// pkg/front_end/testcases/regress/issue_32972.dart:27:5: Error: Expected 1 type arguments.
+//   f.bar<double, double>(42.42);
+//     ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static method foo<X extends core::Object = dynamic>(self::Foo::foo::X i) → dynamic {
+    core::print(i);
+  }
+  method bar<X extends core::Object = dynamic>(self::Foo::bar::X i) → dynamic {
+    core::print(i);
+  }
+}
+class Bar<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo<X extends core::Object = dynamic>(self::foo::X i) → void {
+  core::print(i);
+}
+static method main() → dynamic {
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String, core::String]), core::List::unmodifiable<dynamic>(<dynamic>["hello world"]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  self::foo<core::String>("hello world");
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#foo, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::int, core::int]), core::List::unmodifiable<dynamic>(<dynamic>[42]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  self::Foo::foo<core::int>(42);
+  self::Foo f = new self::Foo::•();
+  f.{self::Foo::bar}<core::double, core::double>(42.42);
+  f.{self::Foo::bar}<core::double>(42.42);
+  throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#, 32, core::List::unmodifiable<dynamic>(<core::Type>[core::String]), const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})));
+  new self::Bar::•<core::String, core::String>();
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart b/pkg/front_end/testcases/regress/issue_34225.dart
new file mode 100644
index 0000000..e058ee7
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.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.
+
+class C {
+  static set C(v) {} //# 01: compile-time error
+}
+
+class D {
+  set D(v) {} //# 02: compile-time error
+}
+
+main() {
+  var c = new C();
+  c.C = 5;
+  var d = new D();
+  d.D = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect b/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
new file mode 100644
index 0000000..7c48338
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.direct.expect
@@ -0,0 +1,32 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static set C(dynamic v) → dynamic {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → dynamic {}
+}
+static method main() → dynamic {
+  dynamic c = new self::C::•();
+  c.C = 5;
+  dynamic d = new self::D::•();
+  d.D = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
new file mode 100644
index 0000000..7c48338
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.direct.transformed.expect
@@ -0,0 +1,32 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static set C(dynamic v) → dynamic {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → dynamic {}
+}
+static method main() → dynamic {
+  dynamic c = new self::C::•();
+  c.C = 5;
+  dynamic d = new self::D::•();
+  d.D = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
new file mode 100644
index 0000000..3625d24
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.outline.expect
@@ -0,0 +1,18 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    ;
+  static set C(dynamic v) → dynamic
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    ;
+  set D(dynamic v) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
new file mode 100644
index 0000000..90b0ea1
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.expect
@@ -0,0 +1,35 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static set C(dynamic v) → void {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → void {}
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  let final dynamic #t1 = c in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
+  c.C = 5;
+    ^";
+  self::D d = new self::D::•();
+  d.{self::D::D} = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
new file mode 100644
index 0000000..45d4bcd
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34225.dart.strong.transformed.expect
@@ -0,0 +1,35 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
+//   static set C(v) {} //# 01: compile-time error
+//              ^
+//
+// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
+//   set D(v) {} //# 02: compile-time error
+//       ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  static set C(dynamic v) → void {}
+}
+class D extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+  set D(dynamic v) → void {}
+}
+static method main() → dynamic {
+  self::C c = new self::C::•();
+  let final self::C #t1 = c in let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
+  c.C = 5;
+    ^";
+  self::D d = new self::D::•();
+  d.{self::D::D} = 5;
+}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart b/pkg/front_end/testcases/regress/issue_34291.dart
new file mode 100644
index 0000000..4011208
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "issue_34291_lib.dart" as lib;
+
+class B {}
+
+lib.A<B> foo() {}
+
+main() {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.direct.expect b/pkg/front_end/testcases/regress/issue_34291.dart.direct.expect
new file mode 100644
index 0000000..ee89c3a
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.direct.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "./issue_34291_lib.dart" as iss;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo() → iss::A {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_34291.dart.direct.transformed.expect
new file mode 100644
index 0000000..ee89c3a
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.direct.transformed.expect
@@ -0,0 +1,12 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "./issue_34291_lib.dart" as iss;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo() → iss::A {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
new file mode 100644
index 0000000..103a1a4
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "./issue_34291_lib.dart" as iss;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    ;
+}
+static method foo() → iss::A
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect b/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect
new file mode 100644
index 0000000..8d80aa8
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.strong.expect
@@ -0,0 +1,17 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// lib.A<B> foo() {}
+// ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo() → invalid-type {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect
new file mode 100644
index 0000000..8d80aa8
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.strong.transformed.expect
@@ -0,0 +1,17 @@
+// Errors:
+//
+// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// lib.A<B> foo() {}
+// ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class B extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+static method foo() → invalid-type {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_34291_lib.dart b/pkg/front_end/testcases/regress/issue_34291_lib.dart
new file mode 100644
index 0000000..a0e9344
--- /dev/null
+++ b/pkg/front_end/testcases/regress/issue_34291_lib.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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 {}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index b5d4f7b..587ecbc 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -59,7 +59,7 @@
 redirecting_factory_typeparambounds_test: Fail # Missing support for RedirectingFactoryConstructor.
 statements: Fail
 stringliteral: Fail
-super_rasta_copy: TypeCheckError
+super_rasta_copy: Fail
 top_level_accessors: Fail
 type_variable_as_super: Fail
 type_variable_prefix: RuntimeError
@@ -176,7 +176,7 @@
 rasta/native_is_illegal: Fail
 rasta/parser_error: Fail
 rasta/static: Fail
-rasta/super: TypeCheckError
+rasta/super: Fail
 rasta/super_initializer: Fail
 rasta/super_mixin: TypeCheckError
 rasta/super_operator: Fail
@@ -199,7 +199,10 @@
 regress/issue_30836: RuntimeError # Issue 30836.
 regress/issue_31184: TypeCheckError
 regress/issue_31299: TypeCheckError
+regress/issue_32972: TypeCheckError
 regress/issue_33452: RuntimeError # Test has an intentional error
+regress/issue_32660: TypeCheckError # Test has an intentional error
+regress/issue_34225: RuntimeError
 
 runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
 runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
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 66896c4..a923b10 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -203,12 +203,12 @@
 // pkg/front_end/testcases/super_rasta_copy.dart:139:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     super.m(87);
-//            ^^^^
+//            ^
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:140:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     use(super.m(87));
-//                ^^^^
+//                ^
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:14:9: Error: Final field 'f' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
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 6615790..837254e 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.expect
@@ -1,6 +1,6 @@
 // Errors:
 //
-// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.
+// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^
 
diff --git a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
index 6e7ca74..9c9e30c 100644
--- a/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/type_variable_prefix.dart.strong.transformed.expect
@@ -1,6 +1,6 @@
 // Errors:
 //
-// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: Type 'T.String' not found.
+// pkg/front_end/testcases/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
 //   T.String method() => "Hello, World!";
 //   ^
 
diff --git a/pkg/front_end/testcases/type_variable_uses.dart b/pkg/front_end/testcases/type_variable_uses.dart
new file mode 100644
index 0000000..a366ce6
--- /dev/null
+++ b/pkg/front_end/testcases/type_variable_uses.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.
+
+class C<T> {
+  const C();
+  static C<T> staticMethod() {
+    print(T);
+    T t;
+    C<T> l;
+    C<C<T>> ll;
+    const C<T>();
+    const <T>[];
+    const <C<T>>[];
+    const <Object>[T];
+    const <Object>[const C<T>()];
+  }
+
+  C<T> instanceMethod() {
+    print(T);
+    T t;
+    C<T> l;
+    C<C<T>> ll;
+    const C<T>();
+    const <T>[];
+    const <C<T>>[];
+    const <Object>[T];
+    const <Object>[const C<T>()];
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.direct.expect b/pkg/front_end/testcases/type_variable_uses.dart.direct.expect
new file mode 100644
index 0000000..a22eb9c
--- /dev/null
+++ b/pkg/front_end/testcases/type_variable_uses.dart.direct.expect
@@ -0,0 +1,118 @@
+// Errors:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object = dynamic> extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
+  static method staticMethod() → self::C<dynamic> {
+    core::print(invalid-type);
+    invalid-type t;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
+    const self::C::•<invalid-type>();
+    const <invalid-type>[];
+    const <self::C<invalid-type>>[];
+    const <core::Object>[invalid-type];
+    const <core::Object>[const self::C::•<invalid-type>()];
+  }
+  method instanceMethod() → self::C<self::C::T> {
+    core::print(self::C::T);
+    self::C::T t;
+    self::C<self::C::T> l;
+    self::C<self::C<self::C::T>> ll;
+    const self::C::•<self::C::T>();
+    const <self::C::T>[];
+    const <self::C<self::C::T>>[];
+    const <core::Object>[self::C::T];
+    const <core::Object>[const self::C::•<self::C::T>()];
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect b/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect
new file mode 100644
index 0000000..a22eb9c
--- /dev/null
+++ b/pkg/front_end/testcases/type_variable_uses.dart.direct.transformed.expect
@@ -0,0 +1,118 @@
+// Errors:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object = dynamic> extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
+  static method staticMethod() → self::C<dynamic> {
+    core::print(invalid-type);
+    invalid-type t;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
+    const self::C::•<invalid-type>();
+    const <invalid-type>[];
+    const <self::C<invalid-type>>[];
+    const <core::Object>[invalid-type];
+    const <core::Object>[const self::C::•<invalid-type>()];
+  }
+  method instanceMethod() → self::C<self::C::T> {
+    core::print(self::C::T);
+    self::C::T t;
+    self::C<self::C::T> l;
+    self::C<self::C<self::C::T>> ll;
+    const self::C::•<self::C::T>();
+    const <self::C::T>[];
+    const <self::C<self::C::T>>[];
+    const <core::Object>[self::C::T];
+    const <core::Object>[const self::C::•<self::C::T>()];
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.outline.expect b/pkg/front_end/testcases/type_variable_uses.dart.outline.expect
new file mode 100644
index 0000000..c58ea8f
--- /dev/null
+++ b/pkg/front_end/testcases/type_variable_uses.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object = dynamic> extends core::Object {
+  const constructor •() → void
+    ;
+  static method staticMethod() → self::C<dynamic>
+    ;
+  method instanceMethod() → self::C<self::C::T>
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.strong.expect b/pkg/front_end/testcases/type_variable_uses.dart.strong.expect
new file mode 100644
index 0000000..83deeb2
--- /dev/null
+++ b/pkg/front_end/testcases/type_variable_uses.dart.strong.expect
@@ -0,0 +1,134 @@
+// Errors:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
+//   static C<T> staticMethod() {
+//               ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
+//     C<T> l;
+//       ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
+//     C<C<T>> ll;
+//         ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object = dynamic> extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
+  static method staticMethod() → self::C<dynamic> {
+    core::print(invalid-type);
+    invalid-type t;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
+    const self::C::•<invalid-type>();
+    const <invalid-type>[];
+    const <self::C<invalid-type>>[];
+    const <core::Object>[invalid-type];
+    const <core::Object>[const self::C::•<invalid-type>()];
+  }
+  method instanceMethod() → self::C<self::C::T> {
+    core::print(self::C::T);
+    self::C::T t;
+    self::C<self::C::T> l;
+    self::C<self::C<self::C::T>> ll;
+    const self::C::•<self::C::T>();
+    const <self::C::T>[];
+    const <self::C<self::C::T>>[];
+    const <core::Object>[self::C::T];
+    const <core::Object>[const self::C::•<self::C::T>()];
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect b/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect
new file mode 100644
index 0000000..83deeb2
--- /dev/null
+++ b/pkg/front_end/testcases/type_variable_uses.dart.strong.transformed.expect
@@ -0,0 +1,134 @@
+// Errors:
+//
+// pkg/front_end/testcases/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
+//   static C<T> staticMethod() {
+//               ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:8:11: Error: Type variables can't be used in static members.
+//     print(T);
+//           ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:9:5: Error: Type variables can't be used in static members.
+//     T t;
+//     ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:10:7: Error: Type variables can't be used in static members.
+//     C<T> l;
+//       ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:11:9: Error: Type variables can't be used in static members.
+//     C<C<T>> ll;
+//         ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:12:13: Error: Type variables can't be used in static members.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:13:12: Error: Type variables can't be used in static members.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:14:14: Error: Type variables can't be used in static members.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:15:20: Error: Type variables can't be used in static members.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:16:28: Error: Type variables can't be used in static members.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Not a constant expression.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
+//     const C<T>();
+//             ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Not a constant expression.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
+//     const <T>[];
+//            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Not a constant expression.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
+//     const <C<T>>[];
+//              ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Not a constant expression.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
+//     const <Object>[T];
+//                    ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Not a constant expression.
+//     const <Object>[const C<T>()];
+//                            ^
+//
+// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
+//     const <Object>[const C<T>()];
+//                            ^
+
+library;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object = dynamic> extends core::Object {
+  const constructor •() → void
+    : super core::Object::•()
+    ;
+  static method staticMethod() → self::C<dynamic> {
+    core::print(invalid-type);
+    invalid-type t;
+    self::C<invalid-type> l;
+    self::C<self::C<invalid-type>> ll;
+    const self::C::•<invalid-type>();
+    const <invalid-type>[];
+    const <self::C<invalid-type>>[];
+    const <core::Object>[invalid-type];
+    const <core::Object>[const self::C::•<invalid-type>()];
+  }
+  method instanceMethod() → self::C<self::C::T> {
+    core::print(self::C::T);
+    self::C::T t;
+    self::C<self::C::T> l;
+    self::C<self::C<self::C::T>> ll;
+    const self::C::•<self::C::T>();
+    const <self::C::T>[];
+    const <self::C<self::C::T>>[];
+    const <core::Object>[self::C::T];
+    const <core::Object>[const self::C::•<self::C::T>()];
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/tool/_fasta/generate_messages.dart b/pkg/front_end/tool/_fasta/generate_messages.dart
index 7e491f1..ea27462 100644
--- a/pkg/front_end/tool/_fasta/generate_messages.dart
+++ b/pkg/front_end/tool/_fasta/generate_messages.dart
@@ -56,7 +56,7 @@
       throw "No 'template:' in key $name.";
     }
     sb.writeln(compileTemplate(name, map['template'], map['tip'],
-        map['analyzerCode'], map['dart2jsCode'], map['severity']));
+        map['analyzerCode'], map['severity']));
   }
 
   return new DartFormatter().format("$sb");
@@ -66,7 +66,7 @@
     new RegExp("#\([-a-zA-Z0-9_]+\)(?:%\([0-9]*\)\.\([0-9]+\))?");
 
 String compileTemplate(String name, String template, String tip,
-    String analyzerCode, String dart2jsCode, String severity) {
+    String analyzerCode, String severity) {
   if (template == null) {
     print('Error: missing template for message: $name');
     exitCode = 1;
@@ -79,6 +79,15 @@
   var parameters = new Set<String>();
   var conversions = new Set<String>();
   var arguments = new Set<String>();
+  bool hasNameSystem = false;
+  void ensureNameSystem() {
+    if (hasNameSystem) return;
+    conversions.add(r"""
+NameSystem nameSystem = new NameSystem();
+StringBuffer buffer;""");
+    hasNameSystem = true;
+  }
+
   for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) {
     String name = match[1];
     String padding = match[2];
@@ -161,9 +170,9 @@
 
       case "type":
         parameters.add("DartType _type");
+        ensureNameSystem();
         conversions.add(r"""
-NameSystem nameSystem = new NameSystem();
-StringBuffer buffer = new StringBuffer();
+buffer = new StringBuffer();
 new Printer(buffer, syntheticNames: nameSystem).writeNode(_type);
 String type = '$buffer';
 """);
@@ -172,6 +181,7 @@
 
       case "type2":
         parameters.add("DartType _type2");
+        ensureNameSystem();
         conversions.add(r"""
 buffer = new StringBuffer();
 new Printer(buffer, syntheticNames: nameSystem).writeNode(_type2);
@@ -209,8 +219,16 @@
         break;
 
       case "constant":
-        parameters.add("Constant constant");
-        arguments.add("'constant': constant");
+        parameters.add("Constant _constant");
+        ensureNameSystem();
+        conversions.add(r"""
+buffer = new StringBuffer();
+new Printer(buffer, syntheticNames: nameSystem).writeNode(_constant);
+String constant = '$buffer';
+""");
+
+        arguments.add("'constant': _constant");
+
         break;
 
       case "num1":
@@ -247,9 +265,6 @@
   if (analyzerCode != null) {
     codeArguments.add('analyzerCode: "$analyzerCode"');
   }
-  if (dart2jsCode != null) {
-    codeArguments.add('dart2jsCode: "$dart2jsCode"');
-  }
   if (severity != null) {
     String severityEnumName = severityEnumNames[severity];
     if (severityEnumName == null) {
diff --git a/pkg/front_end/tool/perf.dart b/pkg/front_end/tool/perf.dart
index b15dfa4..335dcd4 100644
--- a/pkg/front_end/tool/perf.dart
+++ b/pkg/front_end/tool/perf.dart
@@ -29,10 +29,6 @@
 import 'package:analyzer/src/generated/parser.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
-import 'package:analyzer/src/summary/format.dart';
-import 'package:analyzer/src/summary/idl.dart';
-import 'package:analyzer/src/summary/link.dart';
-import 'package:analyzer/src/summary/summarize_ast.dart';
 import 'package:front_end/src/fasta/scanner.dart';
 import 'package:front_end/src/scanner/token.dart';
 import 'package:package_config/discovery.dart';
@@ -54,10 +50,6 @@
   var handlers = {
     'scan': () async => scanFiles(files),
     'parse': () async => parseFiles(files),
-    'unlinked_summarize': () async => summarize(files),
-    'unlinked_summarize_from_sources': () async => summarize(files),
-    'prelinked_summarize': () async => summarize(files, prelink: true),
-    'linked_summarize': () async => summarize(files, link: true),
   };
 
   var handler = handlers[bench];
@@ -81,9 +73,6 @@
 /// Cumulative time spent parsing.
 Stopwatch parseTimer = new Stopwatch();
 
-/// Cumulative time spent building unlinked summaries.
-Stopwatch unlinkedSummarizeTimer = new Stopwatch();
-
 /// Cumulative time spent scanning.
 Stopwatch scanTimer = new Stopwatch();
 
@@ -108,62 +97,12 @@
   }
 }
 
-/// Generates unlinkmed summaries for all files in [files], and returns them in
-/// an [_UnlinkedSummaries] container.
-_UnlinkedSummaries generateUnlinkedSummaries(Set<Source> files) {
-  var unlinkedSummaries = new _UnlinkedSummaries();
-  for (var source in files) {
-    unlinkedSummaries.summariesByUri[source.uri.toString()] =
-        unlinkedSummarize(source);
-  }
-  return unlinkedSummaries;
-}
-
-/// Generates unlinked summaries for every file in [files] and, if requested via
-/// [prelink] or [link], generates the pre-linked and linked summaries as well.
-///
-/// This function also prints a report of the time spent on each action.
-void summarize(Set<Source> files, {bool prelink: false, bool link: false}) {
-  scanTimer = new Stopwatch();
-  parseTimer = new Stopwatch();
-  unlinkedSummarizeTimer = new Stopwatch();
-  var unlinkedSummaries = generateUnlinkedSummaries(files);
-  report('scan', scanTimer.elapsedMicroseconds);
-  report('parse', parseTimer.elapsedMicroseconds);
-  report('unlinked_summarize', unlinkedSummarizeTimer.elapsedMicroseconds);
-  report(
-      'unlinked_summarize_from_sources',
-      unlinkedSummarizeTimer.elapsedMicroseconds +
-          parseTimer.elapsedMicroseconds +
-          scanTimer.elapsedMicroseconds);
-
-  if (prelink || link) {
-    var prelinkTimer = new Stopwatch()..start();
-    var prelinkedLibraries = prelinkSummaries(files, unlinkedSummaries);
-    prelinkTimer.stop();
-    report('prelinked_summarize', prelinkTimer.elapsedMicroseconds);
-
-    if (link) {
-      var linkTimer = new Stopwatch()..start();
-      LinkedLibrary getDependency(String uri) {
-        // getDependency should never be called because all dependencies are
-        // present in [prelinkedLibraries].
-        print('Warning: getDependency called for: $uri');
-        return null;
-      }
-
-      relink(prelinkedLibraries, getDependency, unlinkedSummaries.getUnit,
-          true /*strong*/);
-      linkTimer.stop();
-      report('linked_summarize', linkTimer.elapsedMicroseconds);
-    }
-  }
-}
-
 /// Uses the diet-parser to parse only directives in [source].
 CompilationUnit parseDirectives(Source source) {
   var token = tokenize(source);
-  var parser = new Parser(source, AnalysisErrorListener.NULL_LISTENER);
+  // TODO(jcollins-g): Make parser work with Fasta
+  var parser =
+      new Parser(source, AnalysisErrorListener.NULL_LISTENER, useFasta: false);
   return parser.parseDirectives(token);
 }
 
@@ -189,20 +128,6 @@
   return unit;
 }
 
-/// Prelinks all the summaries for [files], using [unlinkedSummaries] to obtain
-/// their unlinked summaries.
-///
-/// The return value is suitable for passing to the summary linker.
-Map<String, LinkedLibraryBuilder> prelinkSummaries(
-    Set<Source> files, _UnlinkedSummaries unlinkedSummaries) {
-  Set<String> libraryUris = files.map((source) => '${source.uri}').toSet();
-
-  String getDeclaredVariable(String s) => null;
-  var prelinkedLibraries =
-      setupForLink(libraryUris, unlinkedSummaries.getUnit, getDeclaredVariable);
-  return prelinkedLibraries;
-}
-
 /// Report that metric [name] took [time] micro-seconds to process
 /// [inputSize] characters.
 void report(String name, int time) {
@@ -296,14 +221,6 @@
   return token;
 }
 
-UnlinkedUnitBuilder unlinkedSummarize(Source source) {
-  var unit = parseFull(source);
-  unlinkedSummarizeTimer.start();
-  var unlinkedUnit = serializeAstUnlinked(unit);
-  unlinkedSummarizeTimer.stop();
-  return unlinkedUnit;
-}
-
 String _findSdkPath() {
   var executable = Platform.resolvedExecutable;
   var executableDir = path.dirname(executable);
@@ -319,18 +236,3 @@
   // Not found; guess "sdk" relative to the current directory.
   return new Directory('sdk').absolute.path;
 }
-
-/// Simple container for a mapping from URI string to an unlinked summary.
-class _UnlinkedSummaries {
-  final summariesByUri = <String, UnlinkedUnit>{};
-
-  /// Get the unlinked summary for the given URI, and report a warning if it
-  /// can't be found.
-  UnlinkedUnit getUnit(String uri) {
-    var result = summariesByUri[uri];
-    if (result == null) {
-      print('Warning: no summary found for: $uri');
-    }
-    return result;
-  }
-}
diff --git a/pkg/front_end/tool/perf_test.dart b/pkg/front_end/tool/perf_test.dart
index 678c69b..7b54fb8 100644
--- a/pkg/front_end/tool/perf_test.dart
+++ b/pkg/front_end/tool/perf_test.dart
@@ -8,7 +8,7 @@
 import 'perf.dart' as m;
 
 main() async {
-  var benchIds = ['scan', 'parse', 'linked_summarize'];
+  var benchIds = ['scan', 'parse'];
   var inputFile =
       Platform.script.resolve('../lib/src/api_prototype/file_system.dart').path;
   for (var id in benchIds) {
diff --git a/pkg/js_ast/lib/src/builder.dart b/pkg/js_ast/lib/src/builder.dart
index 1de3981..414f8b0 100644
--- a/pkg/js_ast/lib/src/builder.dart
+++ b/pkg/js_ast/lib/src/builder.dart
@@ -827,9 +827,9 @@
       }
       lastCategory = NUMERIC;
       lastToken = src.substring(lastPosition, position);
-      int.parse(lastToken, onError: (_) {
+      if (int.tryParse(lastToken) == null) {
         error("Unparseable number");
-      });
+      }
     } else if (code == charCodes.$SLASH) {
       // Tokens that start with / are special due to regexp literals.
       lastCategory = SYMBOL;
@@ -861,9 +861,9 @@
       lastCategory = cat;
       lastToken = src.substring(lastPosition, position);
       if (cat == NUMERIC) {
-        double.parse(lastToken, (_) {
+        if (double.tryParse(lastToken) == null) {
           error("Unparseable number");
-        });
+        }
       } else if (cat == SYMBOL) {
         int binaryPrecendence = BINARY_PRECEDENCE[lastToken];
         if (binaryPrecendence == null && !UNARY_OPERATORS.contains(lastToken)) {
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index bd7286f..59c4823 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1050,6 +1050,9 @@
   /// Returns true if this is an abstract procedure.
   bool get isAbstract => false;
 
+  /// Returns true if the member has the 'const' modifier.
+  bool get isConst;
+
   /// True if this is a field or non-setter procedure.
   ///
   /// Note that operators and factories return `true`, even though there are
diff --git a/pkg/kernel/test/metadata_test.dart b/pkg/kernel/test/metadata_test.dart
index 4607413..02cf108 100644
--- a/pkg/kernel/test/metadata_test.dart
+++ b/pkg/kernel/test/metadata_test.dart
@@ -150,7 +150,7 @@
 main() {
   test('annotate-serialize-deserialize-validate', () async {
     final Uri platform =
-        computePlatformBinariesLocation().resolve("vm_platform.dill");
+        computePlatformBinariesLocation().resolve("vm_platform_strong.dill");
     final List<int> platformBinary =
         await new File(platform.toFilePath()).readAsBytes();
 
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 3077d69..be355c6 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -96,10 +96,10 @@
 
 [ $runtime == vm ]
 analysis_server/test/benchmarks_test: Pass, Slow
-analysis_server/test/completion_test: Pass, Slow
 analysis_server/test/domain_completion_test: Pass, Slow
 analysis_server/test/edit/refactoring_test: Pass, Slow
 analysis_server/test/integration/*: Pass, Slow
+analysis_server/test/integration/analysis/package_root_test: Pass, RuntimeError # Issue 33382
 analysis_server/test/integration/search/find_top_level_declarations_test: Pass, RuntimeError # 31571
 analysis_server/test/services/completion/dart/imported_reference_contributor_test: Pass, Slow
 analysis_server/test/services/completion/dart/keyword_contributor_test: Pass, Slow
@@ -107,7 +107,6 @@
 analysis_server/test/services/completion/dart/local_reference_contributor_test: Pass, Slow
 analysis_server/test/services/completion/dart/type_member_contributor_test: Pass, Slow
 analysis_server/test/services/correction/assist_test: Pass, Slow
-analysis_server/test/services/correction/fix_test: Pass, Slow
 analysis_server/test/services/refactoring/extract_method_test: Pass, Slow
 analysis_server/test/services/refactoring/inline_method_test: Pass, Slow
 analysis_server/test/socket_server_test: Skip # Pass, Slow
@@ -117,12 +116,10 @@
 analyzer/test/generated/non_error_resolver_kernel_test: Pass, Slow
 analyzer/test/generated/strong_mode_driver_test: Pass, Slow
 analyzer/test/src/dart/analysis/driver_resolution_kernel_test: Pass, Slow
-analyzer/test/src/dart/analysis/driver_resolution_test: Pass, Slow
 analyzer/test/src/dart/analysis/driver_test: Pass, Slow
 analyzer/test/src/summary/resynthesize_ast_test: Pass, Slow
 analyzer/test/src/task/strong/front_end_inference_test: Pass, Slow
 analyzer/test/src/task/strong/inferred_type_test: Pass, Slow
-analyzer_cli/test/driver_test: Pass, Slow, Timeout
 analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test: Pass, Slow
 analyzer_plugin/test/src/utilities/completion/optype_test: Pass, Slow
 mutation_observer: Skip # Skip tests on the VM if the package depends on dart:html
@@ -171,26 +168,6 @@
 [ $arch == x64 && $runtime == vm && $system == windows && $checked ]
 analyzer/test/src/task/strong/inferred_type_test: Pass, Slow
 
-# analyzer using the fasta parser
-[ $builder_tag == analyzer_use_fasta && $runtime == vm ]
-analysis_server/test/completion_test: Fail
-analysis_server/test/domain_completion_test: Fail
-analysis_server/test/integration/analysis/package_root_test: Pass, RuntimeError # Issue 33382
-analysis_server/test/services/completion/dart/keyword_contributor_test: Pass, Slow
-analysis_server/test/services/correction/fix_test: Fail, Timeout
-analysis_server/test/services/refactoring/extract_local_test: Fail
-analysis_server/test/src/plugin/plugin_manager_test: Pass, Slow
-analyzer/test/generated/compile_time_error_code_driver_test: Fail
-analyzer/test/generated/compile_time_error_code_kernel_test: Fail
-analyzer/test/generated/compile_time_error_code_kernel_test.dart: Fail
-analyzer/test/generated/compile_time_error_code_test: Fail
-analyzer/test/generated/invalid_code_driver_test: Fail
-analyzer/test/generated/non_error_resolver_driver_test: Fail
-analyzer/test/generated/non_error_resolver_test: Fail
-analyzer/test/generated/resolver_test: Fail
-analyzer/test/generated/utilities_test: Fail
-analyzer/test/src/context/context_test: Fail
-
 [ $builder_tag != dart2js_analyzer && $compiler == dart2js ]
 analysis_server/test/*: Skip # Issue 26813
 analyzer/test/*: Skip # Issue 26813
@@ -226,7 +203,6 @@
 [ $runtime == vm && $system == windows ]
 analysis_server/test/analysis/get_errors_test: Skip # runtime error, Issue 22180
 analysis_server/test/benchmarks_test: RuntimeError # Issue 32355
-analysis_server/test/integration/*: Skip # Issue 32356
 analysis_server/test/src/plugin/plugin_manager_test: Pass, Slow, RuntimeError # Issue 34231
 analyzer/test/generated/non_error_resolver_kernel_test: RuntimeError # Issue 30785
 analyzer/test/src/task/strong/checker_test: Pass, Slow
diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index e3af637..704b7a8 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -109,7 +109,7 @@
           case Severity.error:
           case Severity.internalProblem:
             // TODO(sigmund): support emitting code with errors as long as they
-            // are handled in the generated code (issue #30194).
+            // are handled in the generated code.
             printMessage = false; // errors are printed by VM
             errors.add(message.formatted);
             break;
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index 19a91fe..1b228dd 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -171,7 +171,10 @@
     for (var param in function.positionalParameters) {
       asm.emitPush(locals.getVarIndexInFrame(param));
     }
-    for (var param in function.namedParameters) {
+    // Native methods access their parameters by indices, so
+    // native wrappers should pass arguments in the original declaration
+    // order instead of sorted order.
+    for (var param in locals.originalNamedParameters) {
       asm.emitPush(locals.getVarIndexInFrame(param));
     }
 
@@ -236,6 +239,11 @@
   Procedure get prependTypeArguments => _prependTypeArguments ??=
       libraryIndex.getTopLevelMember('dart:_internal', '_prependTypeArguments');
 
+  Procedure _boundsCheckForPartialInstantiation;
+  Procedure get boundsCheckForPartialInstantiation =>
+      _boundsCheckForPartialInstantiation ??= libraryIndex.getTopLevelMember(
+          'dart:_internal', '_boundsCheckForPartialInstantiation');
+
   Procedure _futureValue;
   Procedure get futureValue =>
       _futureValue ??= libraryIndex.getMember('dart:async', 'Future', 'value');
@@ -738,7 +746,7 @@
       } else {
         assert(numOptionalNamed != 0);
         for (int i = 0; i < numOptionalNamed; i++) {
-          final param = function.namedParameters[i];
+          final param = locals.sortedNamedParameters[i];
           asm.emitLoadConstant(
               numFixed + i, cp.add(new ConstantString(param.name)));
           asm.emitLoadConstant(numFixed + i, _getDefaultParamConstIndex(param));
@@ -762,24 +770,19 @@
     if (locals.hasFunctionTypeArgsVar) {
       if (function.typeParameters.isNotEmpty) {
         assert(!(node is Procedure && node.isFactory));
+
+        Label done = new Label();
+
+        if (isClosure) {
+          _handleDelayedTypeArguments(done);
+        }
+
         asm.emitCheckFunctionTypeArgs(function.typeParameters.length,
             locals.functionTypeArgsVarIndexInFrame);
 
-        bool hasNonDynamicDefaultTypes = function.typeParameters.any((p) =>
-            p.defaultType != null && p.defaultType != const DynamicType());
-        if (hasNonDynamicDefaultTypes) {
-          List<DartType> defaultTypes = function.typeParameters
-              .map((p) => p.defaultType ?? const DynamicType())
-              .toList();
-          assert(defaultTypes
-              .every((t) => !containsTypeVariable(t, functionTypeParameters)));
+        _handleDefaultTypeArguments(function, isClosure, done);
 
-          Label done = new Label();
-          asm.emitJumpIfNotZeroTypeArgs(done);
-          _genTypeArguments(defaultTypes);
-          asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
-          asm.bind(done);
-        }
+        asm.bind(done);
       }
 
       if (isClosure) {
@@ -803,6 +806,55 @@
     }
   }
 
+  void _handleDelayedTypeArguments(Label doneCheckingTypeArguments) {
+    Label noDelayedTypeArgs = new Label();
+
+    asm.emitPush(locals.closureVarIndexInFrame);
+    asm.emitLoadFieldTOS(
+        cp.add(new ConstantInstanceField(closureDelayedTypeArguments)));
+    asm.emitStoreLocal(locals.functionTypeArgsVarIndexInFrame);
+    asm.emitPushConstant(cp.add(const ConstantEmptyTypeArguments()));
+    asm.emitIfEqStrictTOS();
+    asm.emitJump(noDelayedTypeArgs);
+
+    // There are non-empty delayed type arguments, and they are stored
+    // into function type args variable already.
+    // Just verify that there are no passed type arguments.
+    asm.emitCheckFunctionTypeArgs(0, locals.scratchVarIndexInFrame);
+    asm.emitJump(doneCheckingTypeArguments);
+
+    asm.bind(noDelayedTypeArgs);
+  }
+
+  void _handleDefaultTypeArguments(
+      FunctionNode function, bool isClosure, Label doneCheckingTypeArguments) {
+    bool hasNonDynamicDefaultTypes = function.typeParameters.any(
+        (p) => p.defaultType != null && p.defaultType != const DynamicType());
+    if (!hasNonDynamicDefaultTypes) {
+      return;
+    }
+
+    asm.emitJumpIfNotZeroTypeArgs(doneCheckingTypeArguments);
+
+    List<DartType> defaultTypes = function.typeParameters
+        .map((p) => p.defaultType ?? const DynamicType())
+        .toList();
+
+    // Load parent function type arguments if they are used to
+    // instantiate default types.
+    if (isClosure &&
+        defaultTypes
+            .any((t) => containsTypeVariable(t, functionTypeParameters))) {
+      asm.emitPush(locals.closureVarIndexInFrame);
+      asm.emitLoadFieldTOS(
+          cp.add(new ConstantInstanceField(closureFunctionTypeArguments)));
+      asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
+    }
+
+    _genTypeArguments(defaultTypes);
+    asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
+  }
+
   void _setupInitialContext(FunctionNode function) {
     _allocateContextIfNeeded();
 
@@ -813,12 +865,14 @@
         if (locals.hasFactoryTypeArgsVar) {
           _copyParamIfCaptured(locals.factoryTypeArgsVar);
         }
-        if (locals.hasReceiver) {
-          _copyParamIfCaptured(locals.receiverVar);
+        if (locals.hasCapturedReceiverVar) {
+          _genPushContextForVariable(locals.capturedReceiverVar);
+          asm.emitPush(locals.getVarIndexInFrame(locals.receiverVar));
+          _genStoreVar(locals.capturedReceiverVar);
         }
       }
       function.positionalParameters.forEach(_copyParamIfCaptured);
-      function.namedParameters.forEach(_copyParamIfCaptured);
+      locals.sortedNamedParameters.forEach(_copyParamIfCaptured);
     }
   }
 
@@ -844,7 +898,7 @@
       }
     }
     function.positionalParameters.forEach(_genArgumentTypeCheck);
-    function.namedParameters.forEach(_genArgumentTypeCheck);
+    locals.sortedNamedParameters.forEach(_genArgumentTypeCheck);
   }
 
   void _genArgumentTypeCheck(VariableDeclaration variable) {
@@ -907,7 +961,7 @@
     // as default value expressions could use local const variables which
     // are not available in bytecode.
     function.positionalParameters.forEach(_evaluateDefaultParameterValue);
-    function.namedParameters.forEach(_evaluateDefaultParameterValue);
+    locals.sortedNamedParameters.forEach(_evaluateDefaultParameterValue);
 
     final int closureFunctionIndex =
         cp.add(new ConstantClosureFunction(name, function));
@@ -1360,15 +1414,23 @@
   visitInstantiation(Instantiation node) {
     final int oldClosure = locals.tempIndexInFrame(node, tempIndex: 0);
     final int newClosure = locals.tempIndexInFrame(node, tempIndex: 1);
+    final int typeArguments = locals.tempIndexInFrame(node, tempIndex: 2);
 
     node.expression.accept(this);
-    asm.emitPopLocal(oldClosure);
+    asm.emitStoreLocal(oldClosure);
+
+    _genTypeArguments(node.typeArguments);
+    asm.emitStoreLocal(typeArguments);
+
+    _genStaticCall(
+        boundsCheckForPartialInstantiation, new ConstantArgDesc(2), 2);
+    asm.emitDrop1();
 
     assert(closureClass.typeParameters.isEmpty);
     asm.emitAllocate(cp.add(new ConstantClass(closureClass)));
     asm.emitStoreLocal(newClosure);
 
-    _genTypeArguments(node.typeArguments);
+    asm.emitPush(typeArguments);
     asm.emitStoreFieldTOS(
         cp.add(new ConstantInstanceField(closureDelayedTypeArguments)));
 
diff --git a/pkg/vm/lib/bytecode/local_vars.dart b/pkg/vm/lib/bytecode/local_vars.dart
index 4154fdc..a92c969 100644
--- a/pkg/vm/lib/bytecode/local_vars.dart
+++ b/pkg/vm/lib/bytecode/local_vars.dart
@@ -51,7 +51,7 @@
 
   int getOriginalParamSlotIndex(VariableDeclaration variable) =>
       _getVarDesc(variable).originalParamSlotIndex ??
-      (throw 'Variablie $variable does not have originalParamSlotIndex');
+      (throw 'Variable $variable does not have originalParamSlotIndex');
 
   int tempIndexInFrame(TreeNode node, {int tempIndex: 0}) {
     final temps = _temps[node];
@@ -107,6 +107,12 @@
       _currentFrame.receiverVar ??
       (throw 'Receiver variable is not declared in ${_currentFrame.function}');
 
+  bool get hasCapturedReceiverVar => _currentFrame.capturedReceiverVar != null;
+
+  VariableDeclaration get capturedReceiverVar =>
+      _currentFrame.capturedReceiverVar ??
+      (throw 'Captured receiver variable is not declared in ${_currentFrame.function}');
+
   bool get hasReceiver => _currentFrame.receiverVar != null;
 
   bool get isSyncYieldingFrame => _currentFrame.isSyncYielding;
@@ -157,6 +163,11 @@
   bool get hasOptionalParameters => _currentFrame.hasOptionalParameters;
   bool get hasCapturedParameters => _currentFrame.hasCapturedParameters;
 
+  List<VariableDeclaration> get originalNamedParameters =>
+      _currentFrame.originalNamedParameters;
+  List<VariableDeclaration> get sortedNamedParameters =>
+      _currentFrame.sortedNamedParameters;
+
   LocalVariables(Member node) {
     final scopeBuilder = new _ScopeBuilder(this);
     node.accept(scopeBuilder);
@@ -204,6 +215,8 @@
   final Frame parent;
   Scope topScope;
 
+  List<VariableDeclaration> originalNamedParameters;
+  List<VariableDeclaration> sortedNamedParameters;
   int numParameters = 0;
   int numTypeArguments = 0;
   bool hasOptionalParameters = false;
@@ -212,6 +225,7 @@
   bool isDartSync = true;
   bool isSyncYielding = false;
   VariableDeclaration receiverVar;
+  VariableDeclaration capturedReceiverVar;
   VariableDeclaration functionTypeArgsVar;
   VariableDeclaration factoryTypeArgsVar;
   VariableDeclaration closureVar;
@@ -260,10 +274,11 @@
 
   _ScopeBuilder(this.locals);
 
-  void _sortNamedParameters(FunctionNode function) {
-    function.namedParameters.sort(
-        (VariableDeclaration a, VariableDeclaration b) =>
-            a.name.compareTo(b.name));
+  List<VariableDeclaration> _sortNamedParameters(FunctionNode function) {
+    final params = function.namedParameters.toList();
+    params.sort((VariableDeclaration a, VariableDeclaration b) =>
+        a.name.compareTo(b.name));
+    return params;
   }
 
   void _visitFunction(TreeNode node) {
@@ -326,10 +341,11 @@
         _declareVariable(_currentFrame.closureVar);
       }
 
-      _sortNamedParameters(function);
+      _currentFrame.originalNamedParameters = function.namedParameters;
+      _currentFrame.sortedNamedParameters = _sortNamedParameters(function);
 
       visitList(function.positionalParameters, this);
-      visitList(function.namedParameters, this);
+      visitList(_currentFrame.sortedNamedParameters, this);
 
       if (_currentFrame.isSyncYielding) {
         // The following variables from parent frame are used implicitly and need
@@ -361,6 +377,15 @@
       _declareVariable(_currentFrame.scratchVar);
     }
 
+    if (node is Constructor || (node is Procedure && !node.isStatic)) {
+      if (locals.isCaptured(_currentFrame.receiverVar)) {
+        // Duplicate receiver variable for local use.
+        _currentFrame.capturedReceiverVar = _currentFrame.receiverVar;
+        _currentFrame.receiverVar = new VariableDeclaration('this');
+        _declareVariable(_currentFrame.receiverVar);
+      }
+    }
+
     _leaveFrame();
 
     _enclosingTryBlocks = savedEnclosingTryBlocks;
@@ -859,7 +884,7 @@
 
     _currentFrame.hasCapturedParameters =
         (isFactory && locals.isCaptured(_currentFrame.factoryTypeArgsVar)) ||
-            (hasReceiver && locals.isCaptured(_currentFrame.receiverVar)) ||
+            (hasReceiver && _currentFrame.capturedReceiverVar != null) ||
             function.positionalParameters.any(locals.isCaptured) ||
             function.namedParameters.any(locals.isCaptured);
 
@@ -868,7 +893,12 @@
       _allocateParameter(_currentFrame.factoryTypeArgsVar, count++);
     }
     if (hasReceiver) {
+      assert(!locals.isCaptured(_currentFrame.receiverVar));
       _allocateParameter(_currentFrame.receiverVar, count++);
+
+      if (_currentFrame.capturedReceiverVar != null) {
+        _allocateVariable(_currentFrame.capturedReceiverVar);
+      }
     }
     if (hasClosureArg) {
       assert(!locals.isCaptured(_currentFrame.closureVar));
@@ -877,7 +907,7 @@
     for (var param in function.positionalParameters) {
       _allocateParameter(param, count++);
     }
-    for (var param in function.namedParameters) {
+    for (var param in _currentFrame.sortedNamedParameters) {
       _allocateParameter(param, count++);
     }
     assert(count == _currentFrame.numParameters);
@@ -1106,6 +1136,6 @@
 
   @override
   visitInstantiation(Instantiation node) {
-    _visit(node, temps: 2);
+    _visit(node, temps: 3);
   }
 }
diff --git a/pkg/vm/lib/frontend_server.dart b/pkg/vm/lib/frontend_server.dart
index 3a236e7..6397f17 100644
--- a/pkg/vm/lib/frontend_server.dart
+++ b/pkg/vm/lib/frontend_server.dart
@@ -159,6 +159,10 @@
   /// won't recompile sources that were previously reported as changed.
   void acceptLastDelta();
 
+  /// Rejects results of previous compilation and sets compiler back to last
+  /// accepted state.
+  Future<void> rejectLastDelta();
+
   /// This let's compiler know that source file identifed by `uri` was changed.
   void invalidate(Uri uri);
 
@@ -371,6 +375,17 @@
             sink, (lib) => !lib.isExternal, true /* excludeUriToSource */)
         : printerFactory.newBinaryPrinter(sink);
 
+    component.libraries.sort((Library l1, Library l2) {
+      return "${l1.fileUri}".compareTo("${l2.fileUri}");
+    });
+
+    component.computeCanonicalNames();
+    for (Library library in component.libraries) {
+      library.additionalExports.sort((Reference r1, Reference r2) {
+        return "${r1.canonicalName}".compareTo("${r2.canonicalName}");
+      });
+    }
+
     printer.writeComponentFile(component);
     await sink.close();
   }
@@ -439,11 +454,7 @@
     if (deltaProgram != null && transformer != null) {
       transformer.transform(deltaProgram);
     }
-
-    final IOSink sink = new File(_kernelBinaryFilename).openWrite();
-    final BinaryPrinter printer = printerFactory.newBinaryPrinter(sink);
-    printer.writeComponentFile(deltaProgram);
-    await sink.close();
+    await writeDillFile(deltaProgram, _kernelBinaryFilename);
     _outputStream
         .writeln('$boundaryKey $_kernelBinaryFilename ${errors.length}');
     _kernelBinaryFilename = _kernelBinaryFilenameIncremental;
@@ -487,6 +498,14 @@
   }
 
   @override
+  Future<void> rejectLastDelta() async {
+    await _generator.reject();
+    final String boundaryKey = new Uuid().generateV4();
+    _outputStream.writeln('result $boundaryKey');
+    _outputStream.writeln(boundaryKey);
+  }
+
+  @override
   void invalidate(Uri uri) {
     _generator.invalidate(uri);
   }
@@ -619,6 +638,8 @@
           state = _State.COMPILE_EXPRESSION_EXPRESSION;
         } else if (string == 'accept') {
           compiler.acceptLastDelta();
+        } else if (string == 'reject') {
+          await compiler.rejectLastDelta();
         } else if (string == 'reset') {
           compiler.resetIncrementalCompiler();
         } else if (string == 'quit') {
diff --git a/pkg/vm/lib/incremental_compiler.dart b/pkg/vm/lib/incremental_compiler.dart
index 8238343..4cfedcd 100644
--- a/pkg/vm/lib/incremental_compiler.dart
+++ b/pkg/vm/lib/incremental_compiler.dart
@@ -17,16 +17,26 @@
 /// accepted.
 class IncrementalCompiler {
   IncrementalKernelGenerator _generator;
+
+  // Component that reflect current state of the compiler, which has not
+  // been yet accepted by the client. Is [null] if no compilation was done
+  // since last accept/reject acknowledgement by the client.
+  Component _candidate;
+  // Component that reflect the state that was most recently accepted by the
+  // client. Is [null], if no compilation results were accepted by the client.
+  Component _lastKnownGood;
+
   List<Component> _pendingDeltas;
   CompilerOptions _compilerOptions;
   bool initialized = false;
   bool fullComponent = false;
   Uri initializeFromDillUri;
+  Uri _entryPoint;
 
-  IncrementalCompiler(this._compilerOptions, Uri entryPoint,
+  IncrementalCompiler(this._compilerOptions, this._entryPoint,
       {this.initializeFromDillUri}) {
     _generator = new IncrementalKernelGenerator(
-        _compilerOptions, entryPoint, initializeFromDillUri);
+        _compilerOptions, _entryPoint, initializeFromDillUri);
     _pendingDeltas = <Component>[];
   }
 
@@ -41,25 +51,24 @@
     fullComponent = false;
     final bool firstDelta = _pendingDeltas.isEmpty;
     _pendingDeltas.add(component);
-    if (firstDelta) {
-      return component;
-    }
-
-    // If more than one delta is pending, we need to combine them.
-    Procedure mainMethod;
-    Map<Uri, Library> combined = <Uri, Library>{};
-    for (Component delta in _pendingDeltas) {
-      if (delta.mainMethod != null) {
-        mainMethod = delta.mainMethod;
+    if (!firstDelta) {
+      // If more than one delta is pending, we need to combine them.
+      Procedure mainMethod;
+      Map<Uri, Library> combined = <Uri, Library>{};
+      for (Component delta in _pendingDeltas) {
+        if (delta.mainMethod != null) {
+          mainMethod = delta.mainMethod;
+        }
+        for (Library library in delta.libraries) {
+          combined[library.importUri] = library;
+        }
       }
-      for (Library library in delta.libraries) {
-        combined[library.importUri] = library;
-      }
+      // TODO(vegorov) this needs to merge metadata repositories from deltas.
+      component = new Component(libraries: combined.values.toList())
+        ..mainMethod = mainMethod;
     }
-
-    // TODO(vegorov) this needs to merge metadata repositories from deltas.
-    return new Component(libraries: combined.values.toList())
-      ..mainMethod = mainMethod;
+    _candidate = component;
+    return component;
   }
 
   /// This lets incremental compiler know that results of last [compile] call
@@ -67,6 +76,40 @@
   /// results.
   accept() {
     _pendingDeltas.clear();
+
+    Map<Uri, Library> combined = <Uri, Library>{};
+    if (_lastKnownGood != null) {
+      // TODO(aam): Figure out how to skip no-longer-used libraries from
+      // [_lastKnownGood] libraries.
+      for (Library library in _lastKnownGood.libraries) {
+        combined[library.importUri] = library;
+      }
+    }
+    for (Library library in _candidate.libraries) {
+      combined[library.importUri] = library;
+    }
+    _lastKnownGood = new Component(
+      libraries: combined.values.toList(),
+      uriToSource: _candidate.uriToSource,
+    )..mainMethod = _candidate.mainMethod;
+    for (final repo in _candidate.metadata.values) {
+      _lastKnownGood.addMetadataRepository(repo);
+    }
+
+    _candidate = null;
+  }
+
+  /// This lets incremental compiler know that results of last [compile] call
+  /// were rejected. Subsequent [compile] or [compileExpression] calls need to
+  /// be processed without changes picked up by rejected [compile] call.
+  reject() async {
+    _pendingDeltas.clear();
+    _candidate = null;
+    // Need to reset and warm up compiler so that expression evaluation requests
+    // are processed in that known good state.
+    _generator = new IncrementalKernelGenerator.fromComponent(
+        _compilerOptions, _entryPoint, _lastKnownGood);
+    await _generator.computeDelta(entryPoint: _entryPoint);
   }
 
   /// This tells incremental compiler that it needs rescan [uri] file during
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index 6670254..ac3dd10 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -76,7 +76,9 @@
   if (genBytecode && !errorDetector.hasCompilationErrors && component != null) {
     await runWithFrontEndCompilerContext(source, options, component, () {
       generateBytecode(component,
-          strongMode: options.strongMode, dropAST: dropAST);
+          strongMode: options.strongMode,
+          dropAST: dropAST,
+          environmentDefines: environmentDefines);
     });
   }
 
diff --git a/pkg/vm/lib/transformations/call_site_annotator.dart b/pkg/vm/lib/transformations/call_site_annotator.dart
index 3d80936..c2ca324 100644
--- a/pkg/vm/lib/transformations/call_site_annotator.dart
+++ b/pkg/vm/lib/transformations/call_site_annotator.dart
@@ -55,22 +55,27 @@
   }
 
   @override
-  visitMethodInvocation(MethodInvocation node) {
-    super.visitMethodInvocation(node);
+  visitPropertySet(PropertySet node) {
+    super.visitPropertySet(node);
 
-    if (shouldAnnotate(node)) {
+    if (hasGenericCovariantParameters(node.interfaceTarget)) {
       _metadata.mapping[node] = new CallSiteAttributesMetadata(
           receiverType: node.receiver.getStaticType(env));
     }
   }
 
-  // TODO(vegorov) handle setters as well.
-  // TODO(34162): We don't need to save the type here, just whether or not it's
-  // a statically-checked call.
-  static bool shouldAnnotate(MethodInvocation node) =>
-      (node.interfaceTarget != null &&
-          hasGenericCovariantParameters(node.interfaceTarget)) ||
-      node.name.name == "call";
+  @override
+  visitMethodInvocation(MethodInvocation node) {
+    super.visitMethodInvocation(node);
+
+    // TODO(34162): We don't need to save the type here for calls, just whether
+    // or not it's a statically-checked call.
+    if (node.name.name == 'call' ||
+        hasGenericCovariantParameters(node.interfaceTarget)) {
+      _metadata.mapping[node] = new CallSiteAttributesMetadata(
+          receiverType: node.receiver.getStaticType(env));
+    }
+  }
 
   /// Return [true] if the given list of [VariableDeclaration] contains
   /// any annotated with generic-covariant-impl.
@@ -84,6 +89,8 @@
       return containsGenericCovariantImpl(
               member.function.positionalParameters) ||
           containsGenericCovariantImpl(member.function.namedParameters);
+    } else if (member is Field) {
+      return member.isGenericCovariantImpl;
     }
 
     return false;
diff --git a/pkg/vm/test/frontend_server_test.dart b/pkg/vm/test/frontend_server_test.dart
index 75c22d1..efef8e8 100644
--- a/pkg/vm/test/frontend_server_test.dart
+++ b/pkg/vm/test/frontend_server_test.dart
@@ -413,6 +413,8 @@
       when(generator.initialized).thenAnswer((_) => false);
       when(generator.compile())
           .thenAnswer((_) => new Future<Component>.value(new Component()));
+      when(generator.compile(entryPoint: anyNamed("entryPoint")))
+          .thenAnswer((_) => new Future<Component>.value(new Component()));
       final _MockedBinaryPrinterFactory printerFactory =
           new _MockedBinaryPrinterFactory();
       when(printerFactory.newBinaryPrinter(any))
@@ -587,6 +589,137 @@
       expect(await result, 0);
     });
 
+    test('compile expression when delta is rejected', () async {
+      var fileLib = new File('${tempDir.path}/lib.dart')..createSync();
+      fileLib.writeAsStringSync("foo() => 42;\n");
+      var file = new File('${tempDir.path}/foo.dart')..createSync();
+      file.writeAsStringSync("import 'lib.dart'; main1() => print(foo);\n");
+      var dillFile = new File('${tempDir.path}/app.dill');
+      expect(dillFile.existsSync(), equals(false));
+      final List<String> args = <String>[
+        '--sdk-root=${sdkRoot.toFilePath()}',
+        '--strong',
+        '--incremental',
+        '--platform=${platformKernel.path}',
+        '--output-dill=${dillFile.path}'
+      ];
+
+      final StreamController<List<int>> inputStreamController =
+          new StreamController<List<int>>();
+      final StreamController<List<int>> stdoutStreamController =
+          new StreamController<List<int>>();
+      final IOSink ioSink = new IOSink(stdoutStreamController.sink);
+      StreamController<String> receivedResults = new StreamController<String>();
+
+      String boundaryKey;
+      stdoutStreamController.stream
+          .transform(utf8.decoder)
+          .transform(const LineSplitter())
+          .listen((String s) {
+        print(s);
+        const String RESULT_OUTPUT_SPACE = 'result ';
+        if (boundaryKey == null) {
+          if (s.startsWith(RESULT_OUTPUT_SPACE)) {
+            boundaryKey = s.substring(RESULT_OUTPUT_SPACE.length);
+          }
+        } else {
+          if (s.startsWith(boundaryKey)) {
+            receivedResults.add(s.length > boundaryKey.length
+                ? s.substring(boundaryKey.length + 1)
+                : null);
+            boundaryKey = null;
+          }
+        }
+      });
+
+      final Future<int> result =
+          starter(args, input: inputStreamController.stream, output: ioSink);
+      inputStreamController.add('compile ${file.path}\n'.codeUnits);
+      int count = 0;
+      receivedResults.stream.listen((String outputFilenameAndErrorCount) {
+        if (count == 0) {
+          // First request was to 'compile', which resulted in full kernel file.
+          CompilationResult result =
+              new CompilationResult.parse(outputFilenameAndErrorCount);
+
+          expect(dillFile.existsSync(), equals(true));
+          expect(result.filename, dillFile.path);
+          expect(result.errorsCount, equals(0));
+          inputStreamController.add('accept\n'.codeUnits);
+
+          // 'compile-expression <boundarykey>
+          // expression
+          // definitions (one per line)
+          // ...
+          // <boundarykey>
+          // type-defintions (one per line)
+          // ...
+          // <boundarykey>
+          // <libraryUri: String>
+          // <klass: String>
+          // <isStatic: true|false>
+          inputStreamController.add('''
+compile-expression abc
+main1
+abc
+abc
+${file.uri}
+
+true
+'''
+              .codeUnits);
+          count += 1;
+        } else if (count == 1) {
+          // Second request was to 'compile-expression', which resulted in
+          // kernel file with a function that wraps compiled expression.
+          expect(outputFilenameAndErrorCount, isNotNull);
+          CompilationResult result =
+              new CompilationResult.parse(outputFilenameAndErrorCount);
+          print(outputFilenameAndErrorCount);
+
+          expect(result.errorsCount, equals(0));
+          File outputFile = new File(result.filename);
+          expect(outputFile.existsSync(), equals(true));
+          expect(outputFile.lengthSync(), isPositive);
+
+          file.writeAsStringSync("import 'lib.dart'; main() => foo();\n");
+          inputStreamController.add('recompile ${file.path} abc\n'
+              '${file.path}\n'
+              'abc\n'
+              .codeUnits);
+
+          count += 1;
+        } else if (count == 2) {
+          // Third request was to recompile the script after renaming a function.
+          expect(outputFilenameAndErrorCount, isNotNull);
+          CompilationResult result =
+              new CompilationResult.parse(outputFilenameAndErrorCount);
+          expect(result.errorsCount, equals(0));
+
+          inputStreamController.add('reject\n'.codeUnits);
+          count += 1;
+        } else if (count == 3) {
+          // Fourth request was to reject the compilation results.
+          inputStreamController.add(
+              'compile-expression abc\nmain1\nabc\nabc\n${file.uri}\n\ntrue\n'
+                  .codeUnits);
+          count += 1;
+        } else {
+          expect(count, 4);
+          // Fifth request was to 'compile-expression' that references original
+          // function, which should still be successful.
+          expect(outputFilenameAndErrorCount, isNotNull);
+          CompilationResult result =
+              new CompilationResult.parse(outputFilenameAndErrorCount);
+          expect(result.errorsCount, equals(0));
+          inputStreamController.add('quit\n'.codeUnits);
+        }
+      });
+
+      expect(await result, 0);
+      inputStreamController.close();
+    }, timeout: Timeout.factor(100));
+
     test('recompile request keeps incremental output dill filename', () async {
       var file = new File('${tempDir.path}/foo.dart')..createSync();
       file.writeAsStringSync("main() {}\n");
@@ -628,7 +761,6 @@
           starter(args, input: inputStreamController.stream, output: ioSink);
       inputStreamController.add('compile ${file.path}\n'.codeUnits);
       int count = 0;
-      Completer<bool> allDone = new Completer<bool>();
       receivedResults.stream.listen((String outputFilenameAndErrorCount) {
         CompilationResult result =
             new CompilationResult.parse(outputFilenameAndErrorCount);
@@ -653,11 +785,9 @@
           expect(result.filename, dillIncFile.path);
           expect(result.errorsCount, 0);
           expect(dillIncFile.existsSync(), equals(true));
-          allDone.complete(true);
+          inputStreamController.add('quit\n'.codeUnits);
         }
       });
-      expect(await allDone.future, true);
-      inputStreamController.add('quit\n'.codeUnits);
       expect(await result, 0);
       inputStreamController.close();
     });
@@ -791,6 +921,19 @@
       expect(depContentsParsed[1], isNotEmpty);
     });
 
+    void checkIsEqual(List<int> a, List<int> b) {
+      int length = a.length;
+      if (b.length < length) {
+        length = b.length;
+      }
+      for (int i = 0; i < length; ++i) {
+        if (a[i] != b[i]) {
+          fail("Data differs at byte ${i + 1}.");
+        }
+      }
+      expect(a.length, equals(b.length));
+    }
+
     test('mimic flutter benchmark', () async {
       // This is based on what flutters "hot_mode_dev_cycle__benchmark" does.
       var dillFile = new File('${tempDir.path}/full.dill');
@@ -800,7 +943,7 @@
         '--sdk-root=${sdkRoot.toFilePath()}',
         '--strong',
         '--incremental',
-        '--platform=$platformKernel',
+        '--platform=${platformKernel.path}',
         '--output-dill=${dillFile.path}',
         '--output-incremental-dill=${incrementalDillFile.path}'
       ];
@@ -814,6 +957,7 @@
       int libraryCount = -1;
       int sourceCount = -1;
 
+      List<List<int>> compiledKernels = <List<int>>[];
       for (int serverCloses = 0; serverCloses < 2; ++serverCloses) {
         print("Restart #$serverCloses");
         final StreamController<List<int>> inputStreamController =
@@ -852,6 +996,16 @@
           String outputFilename =
               outputFilenameAndErrorCount.substring(0, delim);
           print("$outputFilename -- count $count");
+
+          // Ensure that kernel file produced when compiler was initialized
+          // from compiled kernel files matches kernel file produced when
+          // compiler was initialized from sources on the first run.
+          if (serverCloses == 0) {
+            compiledKernels.add(new File(dillFile.path).readAsBytesSync());
+          } else {
+            checkIsEqual(compiledKernels[count],
+                new File(dillFile.path).readAsBytesSync());
+          }
           if (count == 0) {
             // First request is to 'compile', which results in full kernel file.
             expect(dillFile.existsSync(), equals(true));
@@ -927,11 +1081,10 @@
 
             // Reload with 1 change
             inputStreamController.add('accept\n'.codeUnits);
-            inputStreamController
-                .add('recompile ${dart2jsOtherFile.path} x$count\n'
-                    '${dart2jsOtherFile.uri}\n'
-                    'x$count\n'
-                    .codeUnits);
+            inputStreamController.add('recompile ${dart2js.path} x$count\n'
+                '${dart2jsOtherFile.uri}\n'
+                'x$count\n'
+                .codeUnits);
           } else if (count == 3) {
             // Partial file. Expect to not be empty.
             expect(incrementalDillFile.existsSync(), equals(true));
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 3347fd6..eb11001 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -201,19 +201,18 @@
   Push                 r1
   Push                 FP[-5]
   StoreContextVar      0
-  Allocate             CP#38
+  Allocate             CP#41
   StoreLocal           r4
   Push                 r4
-  Push                 r1
-  LoadContextVar       0
-  LoadTypeArgumentsField CP#17
-  StoreFieldTOS        CP#39
+  Push                 FP[-5]
+  LoadTypeArgumentsField CP#20
+  StoreFieldTOS        CP#42
   Push                 r4
   Push                 r0
-  StoreFieldTOS        CP#3
+  StoreFieldTOS        CP#6
   Push                 r4
-  PushConstant         CP#41
-  StoreFieldTOS        CP#42
+  PushConstant         CP#5
+  StoreFieldTOS        CP#3
   Push                 r4
   PushConstant         CP#0
   StoreFieldTOS        CP#44
@@ -229,57 +228,57 @@
   Push                 r3
   InstanceCall         2, CP#57
   Drop1
-  PushConstant         CP#18
+  PushConstant         CP#21
   ReturnTOS
 }
 ConstantPool {
   [0] = ClosureFunction nested1 <T5 extends dart.core::Object = dynamic, T6 extends dart.core::Object = dynamic>() → void;
   [1] = InstanceField dart.core::_Closure::_context
   [2] = Reserved
-  [3] = InstanceField dart.core::_Closure::_function_type_arguments
+  [3] = InstanceField dart.core::_Closure::_delayed_type_arguments
   [4] = Reserved
-  [5] = Int 2
-  [6] = Int 4
-  [7] = ArgDesc num-args 4, num-type-args 0, names []
-  [8] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#7
-  [9] = ClosureFunction nested2 <T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() → void;
-  [10] = Int 6
-  [11] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#7
-  [12] = ClosureFunction <anonymous closure> () → dart.core::Null;
-  [13] = TypeArgs [dart.core::Type]
-  [14] = Int 8
-  [15] = Int 0
-  [16] = Type #lib::A::T1
-  [17] = TypeArgumentsField #lib::A
-  [18] = Null
-  [19] = Int 1
-  [20] = Type #lib::A::T2
-  [21] = Type #lib::A::foo::T3
-  [22] = Int 3
-  [23] = Type #lib::A::foo::T4
-  [24] = Type T5
-  [25] = Int 5
-  [26] = Type T6
-  [27] = Type T7
-  [28] = Int 7
-  [29] = Type T8
-  [30] = ArgDesc num-args 2, num-type-args 0, names []
-  [31] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#30
-  [32] = ArgDesc num-args 1, num-type-args 0, names []
-  [33] = StaticICData target 'dart.core::print', arg-desc CP#32
-  [34] = TypeArgs [#lib::A::T1, #lib::A::T2, #lib::A::foo::T3, #lib::A::foo::T4, T5, T6, T7, T8]
-  [35] = ArgDesc num-args 0, num-type-args 8, names []
-  [36] = StaticICData target '#lib::callWithArgs', arg-desc CP#35
-  [37] = EndClosureFunctionScope
-  [38] = Class dart.core::_Closure
-  [39] = InstanceField dart.core::_Closure::_instantiator_type_arguments
-  [40] = Reserved
-  [41] = EmptyTypeArguments
-  [42] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [5] = EmptyTypeArguments
+  [6] = InstanceField dart.core::_Closure::_function_type_arguments
+  [7] = Reserved
+  [8] = Int 2
+  [9] = Int 4
+  [10] = ArgDesc num-args 4, num-type-args 0, names []
+  [11] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#10
+  [12] = ClosureFunction nested2 <T7 extends dart.core::Object = dynamic, T8 extends dart.core::Object = dynamic>() → void;
+  [13] = Int 6
+  [14] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#10
+  [15] = ClosureFunction <anonymous closure> () → dart.core::Null;
+  [16] = TypeArgs [dart.core::Type]
+  [17] = Int 8
+  [18] = Int 0
+  [19] = Type #lib::A::T1
+  [20] = TypeArgumentsField #lib::A
+  [21] = Null
+  [22] = Int 1
+  [23] = Type #lib::A::T2
+  [24] = Type #lib::A::foo::T3
+  [25] = Int 3
+  [26] = Type #lib::A::foo::T4
+  [27] = Type T5
+  [28] = Int 5
+  [29] = Type T6
+  [30] = Type T7
+  [31] = Int 7
+  [32] = Type T8
+  [33] = ArgDesc num-args 2, num-type-args 0, names []
+  [34] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#33
+  [35] = ArgDesc num-args 1, num-type-args 0, names []
+  [36] = StaticICData target 'dart.core::print', arg-desc CP#35
+  [37] = TypeArgs [#lib::A::T1, #lib::A::T2, #lib::A::foo::T3, #lib::A::foo::T4, T5, T6, T7, T8]
+  [38] = ArgDesc num-args 0, num-type-args 8, names []
+  [39] = StaticICData target '#lib::callWithArgs', arg-desc CP#38
+  [40] = EndClosureFunctionScope
+  [41] = Class dart.core::_Closure
+  [42] = InstanceField dart.core::_Closure::_instantiator_type_arguments
   [43] = Reserved
   [44] = InstanceField dart.core::_Closure::_function
   [45] = Reserved
-  [46] = ICData target-name 'call', arg-desc CP#32
+  [46] = ICData target-name 'call', arg-desc CP#35
   [47] = EndClosureFunctionScope
   [48] = TypeArgs [#lib::C7, #lib::C8]
   [49] = ArgDesc num-args 1, num-type-args 2, names []
@@ -292,121 +291,131 @@
   [56] = TypeArgs [dart.core::List<#lib::C5>, dart.core::List<#lib::C6>]
   [57] = ICData target-name 'call', arg-desc CP#49
 }
-Closure CP#12 {
+Closure CP#15 {
   EntryFixed           1, 4
   CheckStack
   Push                 FP[-5]
   LoadFieldTOS         CP#1
   PopLocal             r1
   Push                 FP[-5]
-  LoadFieldTOS         CP#3
+  LoadFieldTOS         CP#6
   PopLocal             r0
-  PushConstant         CP#13
+  PushConstant         CP#16
   StoreLocal           r3
   Push                 r3
-  PushConstant         CP#14
+  PushConstant         CP#17
   CreateArrayTOS
   StoreLocal           r3
   Push                 r3
-  PushConstant         CP#15
+  PushConstant         CP#18
   Push                 r1
   LoadContextVar       0
-  LoadTypeArgumentsField CP#17
-  PushConstant         CP#18
-  InstantiateType      CP#16
-  StoreIndexedTOS
-  Push                 r3
-  PushConstant         CP#19
-  Push                 r1
-  LoadContextVar       0
-  LoadTypeArgumentsField CP#17
-  PushConstant         CP#18
-  InstantiateType      CP#20
-  StoreIndexedTOS
-  Push                 r3
-  PushConstant         CP#5
-  PushConstant         CP#18
-  Push                 r0
-  InstantiateType      CP#21
+  LoadTypeArgumentsField CP#20
+  PushConstant         CP#21
+  InstantiateType      CP#19
   StoreIndexedTOS
   Push                 r3
   PushConstant         CP#22
-  PushConstant         CP#18
-  Push                 r0
+  Push                 r1
+  LoadContextVar       0
+  LoadTypeArgumentsField CP#20
+  PushConstant         CP#21
   InstantiateType      CP#23
   StoreIndexedTOS
   Push                 r3
-  PushConstant         CP#6
-  PushConstant         CP#18
+  PushConstant         CP#8
+  PushConstant         CP#21
   Push                 r0
   InstantiateType      CP#24
   StoreIndexedTOS
   Push                 r3
   PushConstant         CP#25
-  PushConstant         CP#18
+  PushConstant         CP#21
   Push                 r0
   InstantiateType      CP#26
   StoreIndexedTOS
   Push                 r3
-  PushConstant         CP#10
-  PushConstant         CP#18
+  PushConstant         CP#9
+  PushConstant         CP#21
   Push                 r0
   InstantiateType      CP#27
   StoreIndexedTOS
   Push                 r3
   PushConstant         CP#28
-  PushConstant         CP#18
+  PushConstant         CP#21
   Push                 r0
   InstantiateType      CP#29
   StoreIndexedTOS
-  PushConstant         CP#31
-  IndirectStaticCall   2, CP#30
-  PushConstant         CP#33
-  IndirectStaticCall   1, CP#32
-  Drop1
-  Push                 r1
-  LoadContextVar       0
-  LoadTypeArgumentsField CP#17
+  Push                 r3
+  PushConstant         CP#13
+  PushConstant         CP#21
   Push                 r0
-  InstantiateTypeArgumentsTOS 0, CP#34
+  InstantiateType      CP#30
+  StoreIndexedTOS
+  Push                 r3
+  PushConstant         CP#31
+  PushConstant         CP#21
+  Push                 r0
+  InstantiateType      CP#32
+  StoreIndexedTOS
+  PushConstant         CP#34
+  IndirectStaticCall   2, CP#33
   PushConstant         CP#36
   IndirectStaticCall   1, CP#35
   Drop1
-  PushConstant         CP#18
+  Push                 r1
+  LoadContextVar       0
+  LoadTypeArgumentsField CP#20
+  Push                 r0
+  InstantiateTypeArgumentsTOS 0, CP#37
+  PushConstant         CP#39
+  IndirectStaticCall   1, CP#38
+  Drop1
+  PushConstant         CP#21
   ReturnTOS
 
 }
 
-Closure CP#9 {
+Closure CP#12 {
   EntryFixed           1, 5
   CheckStack
   Push                 FP[-5]
   LoadFieldTOS         CP#1
   PopLocal             r1
-  CheckFunctionTypeArgs 2, 0
-  Push                 r0
   Push                 FP[-5]
   LoadFieldTOS         CP#3
-  PushConstant         CP#6
-  PushConstant         CP#10
-  PushConstant         CP#11
-  IndirectStaticCall   4, CP#7
+  StoreLocal           r0
+  PushConstant         CP#5
+  IfEqStrictTOS
+  Jump                 L1
+  CheckFunctionTypeArgs 0, 2
+  Jump                 L2
+L1:
+  CheckFunctionTypeArgs 2, 0
+L2:
+  Push                 r0
+  Push                 FP[-5]
+  LoadFieldTOS         CP#6
+  PushConstant         CP#9
+  PushConstant         CP#13
+  PushConstant         CP#14
+  IndirectStaticCall   4, CP#10
   PopLocal             r0
-  Allocate             CP#38
+  Allocate             CP#41
   StoreLocal           r4
   Push                 r4
   Push                 r1
   LoadContextVar       0
-  LoadTypeArgumentsField CP#17
-  StoreFieldTOS        CP#39
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#3
-  Push                 r4
-  PushConstant         CP#41
+  LoadTypeArgumentsField CP#20
   StoreFieldTOS        CP#42
   Push                 r4
-  PushConstant         CP#12
+  Push                 r0
+  StoreFieldTOS        CP#6
+  Push                 r4
+  PushConstant         CP#5
+  StoreFieldTOS        CP#3
+  Push                 r4
+  PushConstant         CP#15
   StoreFieldTOS        CP#44
   Push                 r4
   Push                 r1
@@ -415,7 +424,7 @@
   Push                 r3
   InstanceCall         1, CP#46
   Drop1
-  PushConstant         CP#18
+  PushConstant         CP#21
   ReturnTOS
 
 }
@@ -426,30 +435,40 @@
   Push                 FP[-5]
   LoadFieldTOS         CP#1
   PopLocal             r1
-  CheckFunctionTypeArgs 2, 0
-  Push                 r0
   Push                 FP[-5]
   LoadFieldTOS         CP#3
+  StoreLocal           r0
   PushConstant         CP#5
-  PushConstant         CP#6
+  IfEqStrictTOS
+  Jump                 L1
+  CheckFunctionTypeArgs 0, 2
+  Jump                 L2
+L1:
+  CheckFunctionTypeArgs 2, 0
+L2:
+  Push                 r0
+  Push                 FP[-5]
+  LoadFieldTOS         CP#6
   PushConstant         CP#8
-  IndirectStaticCall   4, CP#7
+  PushConstant         CP#9
+  PushConstant         CP#11
+  IndirectStaticCall   4, CP#10
   PopLocal             r0
-  Allocate             CP#38
+  Allocate             CP#41
   StoreLocal           r4
   Push                 r4
   Push                 r1
   LoadContextVar       0
-  LoadTypeArgumentsField CP#17
-  StoreFieldTOS        CP#39
-  Push                 r4
-  Push                 r0
-  StoreFieldTOS        CP#3
-  Push                 r4
-  PushConstant         CP#41
+  LoadTypeArgumentsField CP#20
   StoreFieldTOS        CP#42
   Push                 r4
-  PushConstant         CP#9
+  Push                 r0
+  StoreFieldTOS        CP#6
+  Push                 r4
+  PushConstant         CP#5
+  StoreFieldTOS        CP#3
+  Push                 r4
+  PushConstant         CP#12
   StoreFieldTOS        CP#44
   Push                 r4
   Push                 r1
@@ -463,7 +482,7 @@
   Push                 r3
   InstanceCall         2, CP#52
   Drop1
-  PushConstant         CP#18
+  PushConstant         CP#21
   ReturnTOS
 
 }
@@ -1474,20 +1493,20 @@
 }
 [@vm.bytecode=
 Bytecode {
-  Entry                6
+  Entry                7
   CheckStack
-  Allocate             CP#14
+  Allocate             CP#17
   StoreLocal           r3
   Push                 r3
-  PushConstant         CP#9
-  StoreFieldTOS        CP#15
-  Push                 r3
-  PushConstant         CP#9
-  StoreFieldTOS        CP#3
-  Push                 r3
-  PushConstant         CP#17
+  PushConstant         CP#12
   StoreFieldTOS        CP#18
   Push                 r3
+  PushConstant         CP#12
+  StoreFieldTOS        CP#6
+  Push                 r3
+  PushConstant         CP#5
+  StoreFieldTOS        CP#3
+  Push                 r3
   PushConstant         CP#0
   StoreFieldTOS        CP#20
   Push                 r3
@@ -1495,19 +1514,24 @@
   StoreFieldTOS        CP#1
   PopLocal             r2
   Push                 r2
-  PopLocal             r3
-  Allocate             CP#14
-  StoreLocal           r5
+  StoreLocal           r3
   PushConstant         CP#22
+  StoreLocal           r6
+  PushConstant         CP#24
+  IndirectStaticCall   2, CP#23
+  Drop1
+  Allocate             CP#17
+  StoreLocal           r5
+  Push                 r6
+  StoreFieldTOS        CP#3
+  Push                 r5
+  Push                 r3
+  LoadFieldTOS         CP#18
   StoreFieldTOS        CP#18
   Push                 r5
   Push                 r3
-  LoadFieldTOS         CP#15
-  StoreFieldTOS        CP#15
-  Push                 r5
-  Push                 r3
-  LoadFieldTOS         CP#3
-  StoreFieldTOS        CP#3
+  LoadFieldTOS         CP#6
+  StoreFieldTOS        CP#6
   Push                 r5
   Push                 r3
   LoadFieldTOS         CP#20
@@ -1520,33 +1544,35 @@
   PopLocal             r4
   Push                 r4
   ReturnTOS
-  PushConstant         CP#9
+  PushConstant         CP#12
   ReturnTOS
 }
 ConstantPool {
   [0] = ClosureFunction foo <T extends dart.core::Object = dynamic>(T t) → void;
   [1] = InstanceField dart.core::_Closure::_context
   [2] = Reserved
-  [3] = InstanceField dart.core::_Closure::_function_type_arguments
+  [3] = InstanceField dart.core::_Closure::_delayed_type_arguments
   [4] = Reserved
-  [5] = Int 0
-  [6] = Int 1
-  [7] = ArgDesc num-args 4, num-type-args 0, names []
-  [8] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#7
-  [9] = Null
-  [10] = Type T
-  [11] = String 't'
-  [12] = SubtypeTestCache
-  [13] = EndClosureFunctionScope
-  [14] = Class dart.core::_Closure
-  [15] = InstanceField dart.core::_Closure::_instantiator_type_arguments
-  [16] = Reserved
-  [17] = EmptyTypeArguments
-  [18] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [5] = EmptyTypeArguments
+  [6] = InstanceField dart.core::_Closure::_function_type_arguments
+  [7] = Reserved
+  [8] = Int 0
+  [9] = Int 1
+  [10] = ArgDesc num-args 4, num-type-args 0, names []
+  [11] = StaticICData target 'dart._internal::_prependTypeArguments', arg-desc CP#10
+  [12] = Null
+  [13] = Type T
+  [14] = String 't'
+  [15] = SubtypeTestCache
+  [16] = EndClosureFunctionScope
+  [17] = Class dart.core::_Closure
+  [18] = InstanceField dart.core::_Closure::_instantiator_type_arguments
   [19] = Reserved
   [20] = InstanceField dart.core::_Closure::_function
   [21] = Reserved
   [22] = TypeArgs [dart.core::int]
+  [23] = ArgDesc num-args 2, num-type-args 0, names []
+  [24] = StaticICData target 'dart._internal::_boundsCheckForPartialInstantiation', arg-desc CP#23
 }
 Closure CP#0 {
   EntryFixed           2, 3
@@ -1554,23 +1580,33 @@
   Push                 FP[-6]
   LoadFieldTOS         CP#1
   PopLocal             r1
-  CheckFunctionTypeArgs 1, 0
-  Push                 r0
   Push                 FP[-6]
   LoadFieldTOS         CP#3
+  StoreLocal           r0
   PushConstant         CP#5
-  PushConstant         CP#6
+  IfEqStrictTOS
+  Jump                 L1
+  CheckFunctionTypeArgs 0, 2
+  Jump                 L2
+L1:
+  CheckFunctionTypeArgs 1, 0
+L2:
+  Push                 r0
+  Push                 FP[-6]
+  LoadFieldTOS         CP#6
   PushConstant         CP#8
-  IndirectStaticCall   4, CP#7
+  PushConstant         CP#9
+  PushConstant         CP#11
+  IndirectStaticCall   4, CP#10
   PopLocal             r0
   Push                 FP[-5]
-  PushConstant         CP#9
+  PushConstant         CP#12
   Push                 r0
-  PushConstant         CP#10
-  PushConstant         CP#11
-  AssertAssignable     0, CP#12
+  PushConstant         CP#13
+  PushConstant         CP#14
+  AssertAssignable     0, CP#15
   Drop1
-  PushConstant         CP#9
+  PushConstant         CP#12
   ReturnTOS
 
 }
diff --git a/pkg/vm/testcases/bytecode/optional_params.dart.expect b/pkg/vm/testcases/bytecode/optional_params.dart.expect
index a8ae7f0..306a642 100644
--- a/pkg/vm/testcases/bytecode/optional_params.dart.expect
+++ b/pkg/vm/testcases/bytecode/optional_params.dart.expect
@@ -214,7 +214,7 @@
   [25] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#12
   [26] = StaticICData target 'dart.core::print', arg-desc CP#12
 }
-]static method foo2(dynamic y, dynamic z, {dynamic a = 42, dynamic b = const <core::String>["default_b"], dynamic c = "default_c"}) → void {
+]static method foo2(dynamic y, dynamic z, {dynamic c = "default_c", dynamic a = 42, dynamic b = const <core::String>["default_b"]}) → void {
   core::print("y = ${y}");
   core::print("z = ${z}");
   core::print("a = ${a}");
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index 924e681..457d5bc 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -175,7 +175,7 @@
     if(y is self::C<dynamic, self::D::Q, core::List<self::D::P>>) {
       core::print("22");
     }
-    this.{self::D::foo} = y as{TypeError} core::Map<self::D::P, self::D::Q>;
+    [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P, #lib::D::Q>] this.{self::D::foo} = y as{TypeError} core::Map<self::D::P, self::D::Q>;
   }
 [@vm.bytecode=
 Bytecode {
diff --git a/runtime/bin/dart_io_entries.txt b/runtime/bin/dart_io_entries.txt
index c642194..b21ec2d 100644
--- a/runtime/bin/dart_io_entries.txt
+++ b/runtime/bin/dart_io_entries.txt
@@ -10,7 +10,9 @@
 dart:io,::,_getWatchSignalInternal
 dart:io,CertificateException,CertificateException.
 dart:io,Directory,Directory.
+dart:io,Directory,Directory.fromRawPath
 dart:io,File,File.
+dart:io,File,File.fromRawPath
 dart:io,FileSystemException,FileSystemException.
 dart:io,HandshakeException,HandshakeException.
 dart:io,Link,Link.
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index 9270003..86685dc 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -52,6 +52,8 @@
 const char* const DartUtils::kHttpScheme = "http:";
 const char* const DartUtils::kVMServiceLibURL = "dart:vmservice";
 
+dart::SimpleHashMap* DartUtils::environment_ = NULL;
+
 MagicNumberData appjit_magic_number = {8, {0xdc, 0xdc, 0xf6, 0xf6, 0, 0, 0, 0}};
 MagicNumberData snapshot_magic_number = {4, {0xf5, 0xf5, 0xdc, 0xdc}};
 MagicNumberData kernel_magic_number = {4, {0x90, 0xab, 0xcd, 0xef}};
@@ -803,6 +805,43 @@
   return Dart_NewStringFromCString(new_str);
 }
 
+void DartUtils::SetEnvironment(dart::SimpleHashMap* environment) {
+  environment_ = environment;
+}
+
+Dart_Handle DartUtils::EnvironmentCallback(Dart_Handle name) {
+  uint8_t* utf8_array;
+  intptr_t utf8_len;
+  Dart_Handle result = Dart_Null();
+  Dart_Handle handle = Dart_StringToUTF8(name, &utf8_array, &utf8_len);
+  if (Dart_IsError(handle)) {
+    handle = Dart_ThrowException(
+        DartUtils::NewDartArgumentError(Dart_GetError(handle)));
+  } else {
+    char* name_chars = reinterpret_cast<char*>(malloc(utf8_len + 1));
+    memmove(name_chars, utf8_array, utf8_len);
+    name_chars[utf8_len] = '\0';
+    const char* value = NULL;
+    if (environment_ != NULL) {
+      SimpleHashMap::Entry* entry =
+          environment_->Lookup(GetHashmapKeyFromString(name_chars),
+                               SimpleHashMap::StringHash(name_chars), false);
+      if (entry != NULL) {
+        value = reinterpret_cast<char*>(entry->value);
+      }
+    }
+    if (value != NULL) {
+      result = Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(value),
+                                      strlen(value));
+      if (Dart_IsError(result)) {
+        result = Dart_Null();
+      }
+    }
+    free(name_chars);
+  }
+  return result;
+}
+
 // Statically allocated Dart_CObject instances for immutable
 // objects. As these will be used by different threads the use of
 // these depends on the fact that the marking internally in the
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index c6a9b23..5bfaf6d 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -10,6 +10,7 @@
 #include "include/dart_native_api.h"
 #include "platform/assert.h"
 #include "platform/globals.h"
+#include "platform/hashmap.h"
 
 namespace dart {
 namespace bin {
@@ -33,6 +34,10 @@
   return handle;
 }
 
+static inline void* GetHashmapKeyFromString(char* key) {
+  return reinterpret_cast<void*>(key);
+}
+
 class CommandLineOptions {
  public:
   explicit CommandLineOptions(int max_count)
@@ -256,6 +261,9 @@
 
   static Dart_Handle LibraryFilePath(Dart_Handle library_uri);
 
+  static void SetEnvironment(dart::SimpleHashMap* environment);
+  static Dart_Handle EnvironmentCallback(Dart_Handle name);
+
  private:
   static Dart_Handle SetWorkingDirectory();
   static Dart_Handle PrepareBuiltinLibrary(Dart_Handle builtin_lib,
@@ -271,6 +279,8 @@
   static Dart_Handle PrepareIsolateLibrary(Dart_Handle isolate_lib);
   static Dart_Handle PrepareCLILibrary(Dart_Handle cli_lib);
 
+  static dart::SimpleHashMap* environment_;
+
   DISALLOW_ALLOCATION();
   DISALLOW_IMPLICIT_CONSTRUCTORS(DartUtils);
 };
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc
index de20ad9..362a955 100644
--- a/runtime/bin/directory.cc
+++ b/runtime/bin/directory.cc
@@ -25,7 +25,8 @@
   Namespace* namespc = Namespace::GetNamespace(args, 0);
   const char* current = Directory::Current(namespc);
   if (current != NULL) {
-    Dart_SetReturnValue(args, DartUtils::NewString(current));
+    Dart_Handle str = ThrowIfError(DartUtils::NewString(current));
+    Dart_SetReturnValue(args, str);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
@@ -106,7 +107,8 @@
 void FUNCTION_NAME(Directory_SystemTemp)(Dart_NativeArguments args) {
   Namespace* namespc = Namespace::GetNamespace(args, 0);
   const char* result = Directory::SystemTemp(namespc);
-  Dart_SetReturnValue(args, DartUtils::NewString(result));
+  Dart_Handle str = ThrowIfError(DartUtils::NewString(result));
+  Dart_SetReturnValue(args, str);
 }
 
 void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) {
@@ -125,7 +127,8 @@
     }
   }
   if (result != NULL) {
-    Dart_SetReturnValue(args, DartUtils::NewString(result));
+    Dart_Handle str = ThrowIfError(DartUtils::NewString(result));
+    Dart_SetReturnValue(args, str);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
   }
@@ -248,10 +251,7 @@
                                sizeof(*listing), ReleaseListing);
   Dart_Handle result = Dart_SetNativeInstanceField(
       dart_this, kAsyncDirectoryListerFieldIndex, listing_pointer);
-  if (Dart_IsError(result)) {
-    Log::PrintErr("SetAsyncDirectoryListerPointer failed\n");
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
 }
 
 void Directory::SetSystemTemp(const char* path) {
diff --git a/runtime/bin/eventhandler.h b/runtime/bin/eventhandler.h
index bfd5c0e..8132cde 100644
--- a/runtime/bin/eventhandler.h
+++ b/runtime/bin/eventhandler.h
@@ -413,7 +413,7 @@
   virtual bool IsListeningSocket() const { return true; }
 
   virtual void SetPortAndMask(Dart_Port port, intptr_t mask) {
-    HashMap::Entry* entry = tokens_map_.Lookup(
+    SimpleHashMap::Entry* entry = tokens_map_.Lookup(
         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), true);
     PortEntry* pentry;
     if (entry->value == NULL) {
@@ -454,7 +454,7 @@
       } while (current != root);
     }
 
-    for (HashMap::Entry* entry = tokens_map_.Start(); entry != NULL;
+    for (SimpleHashMap::Entry* entry = tokens_map_.Start(); entry != NULL;
          entry = tokens_map_.Next(entry)) {
       PortEntry* pentry = reinterpret_cast<PortEntry*>(entry->value);
       if (pentry->IsReady()) {
@@ -467,7 +467,7 @@
   }
 
   virtual void RemovePort(Dart_Port port) {
-    HashMap::Entry* entry = tokens_map_.Lookup(
+    SimpleHashMap::Entry* entry = tokens_map_.Lookup(
         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false);
     if (entry != NULL) {
       PortEntry* pentry = reinterpret_cast<PortEntry*>(entry->value);
@@ -491,7 +491,7 @@
   }
 
   virtual void RemoveAllPorts() {
-    for (HashMap::Entry* entry = tokens_map_.Start(); entry != NULL;
+    for (SimpleHashMap::Entry* entry = tokens_map_.Start(); entry != NULL;
          entry = tokens_map_.Next(entry)) {
       PortEntry* pentry = reinterpret_cast<PortEntry*>(entry->value);
       entry->value = NULL;
@@ -532,7 +532,7 @@
     ASSERT(IS_EVENT(events, kCloseEvent) || IS_EVENT(events, kErrorEvent) ||
            IS_EVENT(events, kDestroyedEvent));
 
-    for (HashMap::Entry* entry = tokens_map_.Start(); entry != NULL;
+    for (SimpleHashMap::Entry* entry = tokens_map_.Start(); entry != NULL;
          entry = tokens_map_.Next(entry)) {
       PortEntry* pentry = reinterpret_cast<PortEntry*>(entry->value);
       DartUtils::PostInt32(pentry->dart_port, events);
@@ -550,7 +550,7 @@
   }
 
   virtual void ReturnTokens(Dart_Port port, int count) {
-    HashMap::Entry* entry = tokens_map_.Lookup(
+    SimpleHashMap::Entry* entry = tokens_map_.Lookup(
         GetHashmapKeyFromPort(port), GetHashmapHashFromPort(port), false);
     ASSERT(entry != NULL);
 
@@ -588,7 +588,7 @@
 
   // A convenience mapping:
   //   Dart_Port -> struct PortEntry { dart_port, mask, token_count }
-  HashMap tokens_map_;
+  SimpleHashMap tokens_map_;
 
   bool disable_tokens_;
 
diff --git a/runtime/bin/eventhandler_android.cc b/runtime/bin/eventhandler_android.cc
index 07e6c04..a6bd764 100644
--- a/runtime/bin/eventhandler_android.cc
+++ b/runtime/bin/eventhandler_android.cc
@@ -75,7 +75,7 @@
 }
 
 EventHandlerImplementation::EventHandlerImplementation()
-    : socket_map_(&HashMap::SamePointerValue, 16) {
+    : socket_map_(&SimpleHashMap::SamePointerValue, 16) {
   intptr_t result;
   result = NO_RETRY_EXPECTED(pipe(interrupt_fds_));
   if (result != 0) {
@@ -143,8 +143,8 @@
     intptr_t fd,
     bool is_listening) {
   ASSERT(fd >= 0);
-  HashMap::Entry* entry = socket_map_.Lookup(GetHashmapKeyFromFd(fd),
-                                             GetHashmapHashFromFd(fd), true);
+  SimpleHashMap::Entry* entry = socket_map_.Lookup(
+      GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd), true);
   ASSERT(entry != NULL);
   DescriptorInfo* di = reinterpret_cast<DescriptorInfo*>(entry->value);
   if (di == NULL) {
diff --git a/runtime/bin/eventhandler_android.h b/runtime/bin/eventhandler_android.h
index c934549..0cfd543 100644
--- a/runtime/bin/eventhandler_android.h
+++ b/runtime/bin/eventhandler_android.h
@@ -85,7 +85,7 @@
   static void* GetHashmapKeyFromFd(intptr_t fd);
   static uint32_t GetHashmapHashFromFd(intptr_t fd);
 
-  HashMap socket_map_;
+  SimpleHashMap socket_map_;
   TimeoutQueue timeout_queue_;
   bool shutdown_;
   int interrupt_fds_[2];
diff --git a/runtime/bin/eventhandler_fuchsia.cc b/runtime/bin/eventhandler_fuchsia.cc
index 6a7ae35..0f16c8e 100644
--- a/runtime/bin/eventhandler_fuchsia.cc
+++ b/runtime/bin/eventhandler_fuchsia.cc
@@ -266,7 +266,7 @@
 }
 
 EventHandlerImplementation::EventHandlerImplementation()
-    : socket_map_(&HashMap::SamePointerValue, 16) {
+    : socket_map_(&SimpleHashMap::SamePointerValue, 16) {
   shutdown_ = false;
   // Create the port.
   port_handle_ = ZX_HANDLE_INVALID;
@@ -311,7 +311,7 @@
     bool is_listening) {
   IOHandle* handle = reinterpret_cast<IOHandle*>(fd);
   ASSERT(handle->fd() >= 0);
-  HashMap::Entry* entry =
+  SimpleHashMap::Entry* entry =
       socket_map_.Lookup(GetHashmapKeyFromFd(handle->fd()),
                          GetHashmapHashFromFd(handle->fd()), true);
   ASSERT(entry != NULL);
diff --git a/runtime/bin/eventhandler_fuchsia.h b/runtime/bin/eventhandler_fuchsia.h
index 170f7bd..5a9f1ab 100644
--- a/runtime/bin/eventhandler_fuchsia.h
+++ b/runtime/bin/eventhandler_fuchsia.h
@@ -158,7 +158,7 @@
   intptr_t GetPollEvents(intptr_t events);
   void HandleInterrupt(InterruptMessage* msg);
 
-  HashMap socket_map_;
+  SimpleHashMap socket_map_;
   TimeoutQueue timeout_queue_;
   bool shutdown_;
   zx_handle_t port_handle_;
diff --git a/runtime/bin/eventhandler_linux.cc b/runtime/bin/eventhandler_linux.cc
index 2b20572..d02a49e 100644
--- a/runtime/bin/eventhandler_linux.cc
+++ b/runtime/bin/eventhandler_linux.cc
@@ -69,7 +69,7 @@
 }
 
 EventHandlerImplementation::EventHandlerImplementation()
-    : socket_map_(&HashMap::SamePointerValue, 16) {
+    : socket_map_(&SimpleHashMap::SamePointerValue, 16) {
   intptr_t result;
   result = NO_RETRY_EXPECTED(pipe(interrupt_fds_));
   if (result != 0) {
@@ -151,8 +151,8 @@
     intptr_t fd,
     bool is_listening) {
   ASSERT(fd >= 0);
-  HashMap::Entry* entry = socket_map_.Lookup(GetHashmapKeyFromFd(fd),
-                                             GetHashmapHashFromFd(fd), true);
+  SimpleHashMap::Entry* entry = socket_map_.Lookup(
+      GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd), true);
   ASSERT(entry != NULL);
   DescriptorInfo* di = reinterpret_cast<DescriptorInfo*>(entry->value);
   if (di == NULL) {
diff --git a/runtime/bin/eventhandler_linux.h b/runtime/bin/eventhandler_linux.h
index d817bd5..ac468dc 100644
--- a/runtime/bin/eventhandler_linux.h
+++ b/runtime/bin/eventhandler_linux.h
@@ -83,7 +83,7 @@
   static void* GetHashmapKeyFromFd(intptr_t fd);
   static uint32_t GetHashmapHashFromFd(intptr_t fd);
 
-  HashMap socket_map_;
+  SimpleHashMap socket_map_;
   TimeoutQueue timeout_queue_;
   bool shutdown_;
   int interrupt_fds_[2];
diff --git a/runtime/bin/eventhandler_macos.cc b/runtime/bin/eventhandler_macos.cc
index 974ab8a..04abaac 100644
--- a/runtime/bin/eventhandler_macos.cc
+++ b/runtime/bin/eventhandler_macos.cc
@@ -93,7 +93,7 @@
 }
 
 EventHandlerImplementation::EventHandlerImplementation()
-    : socket_map_(&HashMap::SamePointerValue, 16) {
+    : socket_map_(&SimpleHashMap::SamePointerValue, 16) {
   intptr_t result;
   result = NO_RETRY_EXPECTED(pipe(interrupt_fds_));
   if (result != 0) {
@@ -160,8 +160,8 @@
     intptr_t fd,
     bool is_listening) {
   ASSERT(fd >= 0);
-  HashMap::Entry* entry = socket_map_.Lookup(GetHashmapKeyFromFd(fd),
-                                             GetHashmapHashFromFd(fd), true);
+  SimpleHashMap::Entry* entry = socket_map_.Lookup(
+      GetHashmapKeyFromFd(fd), GetHashmapHashFromFd(fd), true);
   ASSERT(entry != NULL);
   DescriptorInfo* di = reinterpret_cast<DescriptorInfo*>(entry->value);
   if (di == NULL) {
diff --git a/runtime/bin/eventhandler_macos.h b/runtime/bin/eventhandler_macos.h
index c8ed3ba..7550fce 100644
--- a/runtime/bin/eventhandler_macos.h
+++ b/runtime/bin/eventhandler_macos.h
@@ -96,7 +96,7 @@
   static void* GetHashmapKeyFromFd(intptr_t fd);
   static uint32_t GetHashmapHashFromFd(intptr_t fd);
 
-  HashMap socket_map_;
+  SimpleHashMap socket_map_;
   TimeoutQueue timeout_queue_;
   bool shutdown_;
   int interrupt_fds_[2];
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 56cf4c9..45e5b91 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -49,10 +49,7 @@
   DEBUG_ASSERT(IsFile(dart_this));
   Dart_Handle result = Dart_SetNativeInstanceField(
       dart_this, kFileNativeFieldIndex, file_pointer);
-  if (Dart_IsError(result)) {
-    Log::PrintErr("SetNativeInstanceField in SetFile() failed\n");
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
 }
 
 void FUNCTION_NAME(File_GetPointer)(Dart_NativeArguments args) {
@@ -213,9 +210,7 @@
     dart_args[2] = Dart_NewInteger(bytes_read);
     // TODO(sgjesse): Cache the _makeUint8ListView function somewhere.
     Dart_Handle io_lib = Dart_LookupLibrary(DartUtils::NewString("dart:io"));
-    if (Dart_IsError(io_lib)) {
-      Dart_PropagateError(io_lib);
-    }
+    ThrowIfError(io_lib);
     Dart_Handle array_view =
         Dart_Invoke(io_lib, DartUtils::NewString("_makeUint8ListView"),
                     kNumArgs, dart_args);
@@ -239,9 +234,7 @@
   intptr_t length = end - start;
   intptr_t array_len = 0;
   Dart_Handle result = Dart_ListLength(buffer_obj, &array_len);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
   ASSERT(end <= array_len);
   uint8_t* buffer = Dart_ScopeAllocate(length);
   int64_t bytes_read = file->Read(reinterpret_cast<void*>(buffer), length);
@@ -278,9 +271,7 @@
   void* buffer = NULL;
   Dart_Handle result =
       Dart_TypedDataAcquireData(buffer_obj, &type, &buffer, &buffer_len);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
 
   ASSERT(type == Dart_TypedData_kUint8 || type == Dart_TypedData_kInt8);
   ASSERT(end <= buffer_len);
@@ -291,11 +282,7 @@
   bool success = file->WriteFully(byte_buffer + start, length);
 
   // Release the direct pointer acquired above.
-  result = Dart_TypedDataReleaseData(buffer_obj);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
-
+  ThrowIfError(Dart_TypedDataReleaseData(buffer_obj));
   if (!success) {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   } else {
@@ -567,7 +554,8 @@
   if (target == NULL) {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
   } else {
-    Dart_SetReturnValue(args, DartUtils::NewString(target));
+    Dart_Handle str = ThrowIfError(DartUtils::NewString(target));
+    Dart_SetReturnValue(args, str);
   }
 }
 
@@ -700,7 +688,8 @@
     }
   }
   if (path != NULL) {
-    Dart_SetReturnValue(args, DartUtils::NewString(path));
+    Dart_Handle str = ThrowIfError(DartUtils::NewString(path));
+    Dart_SetReturnValue(args, str);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
   }
@@ -743,22 +732,16 @@
   }
   Dart_Handle returned_data =
       Dart_NewTypedData(Dart_TypedData_kInt64, File::kStatSize);
-  if (Dart_IsError(returned_data)) {
-    Dart_PropagateError(returned_data);
-  }
+  ThrowIfError(returned_data);
   Dart_TypedData_Type data_type_unused;
   void* data_location;
   intptr_t data_length_unused;
   Dart_Handle status = Dart_TypedDataAcquireData(
       returned_data, &data_type_unused, &data_location, &data_length_unused);
-  if (Dart_IsError(status)) {
-    Dart_PropagateError(status);
-  }
+  ThrowIfError(status);
   memmove(data_location, stat_data, File::kStatSize * sizeof(int64_t));
   status = Dart_TypedDataReleaseData(returned_data);
-  if (Dart_IsError(status)) {
-    Dart_PropagateError(status);
-  }
+  ThrowIfError(status);
   Dart_SetReturnValue(args, returned_data);
 }
 
diff --git a/runtime/bin/file_system_watcher_android.cc b/runtime/bin/file_system_watcher_android.cc
index b138d435..0bef08c 100644
--- a/runtime/bin/file_system_watcher_android.cc
+++ b/runtime/bin/file_system_watcher_android.cc
@@ -123,10 +123,12 @@
       Dart_ListSetAt(event, 0, Dart_NewInteger(mask));
       Dart_ListSetAt(event, 1, Dart_NewInteger(e->cookie));
       if (e->len > 0) {
-        Dart_ListSetAt(
-            event, 2,
-            Dart_NewStringFromUTF8(reinterpret_cast<uint8_t*>(e->name),
-                                   strlen(e->name)));
+        Dart_Handle name = Dart_NewStringFromUTF8(
+            reinterpret_cast<uint8_t*>(e->name), strlen(e->name));
+        if (Dart_IsError(name)) {
+          return name;
+        }
+        Dart_ListSetAt(event, 2, name);
       } else {
         Dart_ListSetAt(event, 2, Dart_Null());
       }
diff --git a/runtime/bin/file_system_watcher_linux.cc b/runtime/bin/file_system_watcher_linux.cc
index a0387c0..c23c133 100644
--- a/runtime/bin/file_system_watcher_linux.cc
+++ b/runtime/bin/file_system_watcher_linux.cc
@@ -123,10 +123,12 @@
       Dart_ListSetAt(event, 0, Dart_NewInteger(mask));
       Dart_ListSetAt(event, 1, Dart_NewInteger(e->cookie));
       if (e->len > 0) {
-        Dart_ListSetAt(
-            event, 2,
-            Dart_NewStringFromUTF8(reinterpret_cast<uint8_t*>(e->name),
-                                   strlen(e->name)));
+        Dart_Handle name = Dart_NewStringFromUTF8(
+            reinterpret_cast<uint8_t*>(e->name), strlen(e->name));
+        if (Dart_IsError(name)) {
+          return name;
+        }
+        Dart_ListSetAt(event, 2, name);
       } else {
         Dart_ListSetAt(event, 2, Dart_Null());
       }
diff --git a/runtime/bin/file_system_watcher_macos.cc b/runtime/bin/file_system_watcher_macos.cc
index 9a4f87a..53ca879 100644
--- a/runtime/bin/file_system_watcher_macos.cc
+++ b/runtime/bin/file_system_watcher_macos.cc
@@ -376,9 +376,12 @@
     }
     Dart_ListSetAt(event, 0, Dart_NewInteger(mask));
     Dart_ListSetAt(event, 1, Dart_NewInteger(1));
-    Dart_ListSetAt(event, 2,
-                   Dart_NewStringFromUTF8(
-                       reinterpret_cast<uint8_t*>(e.data.path), path_len));
+    Dart_Handle name = Dart_NewStringFromUTF8(
+        reinterpret_cast<uint8_t*>(e.data.path), path_len);
+    if (Dart_IsError(name)) {
+      return name;
+    }
+    Dart_ListSetAt(event, 2, name);
     Dart_ListSetAt(event, 3, Dart_NewBoolean(true));
     Dart_ListSetAt(event, 4, Dart_NewInteger(path_id));
     Dart_ListSetAt(events, i, event);
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 32c310e..e75b1fa 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -86,11 +86,7 @@
 static CommandLineOptions* entry_points_files = NULL;
 
 // The environment provided through the command line using -D options.
-static dart::HashMap* environment = NULL;
-
-static void* GetHashmapKeyFromString(char* key) {
-  return reinterpret_cast<void*>(key);
-}
+static dart::SimpleHashMap* environment = NULL;
 
 static bool ProcessEnvironmentOption(const char* arg,
                                      CommandLineOptions* vm_options) {
@@ -98,36 +94,6 @@
                                                    &environment);
 }
 
-static Dart_Handle EnvironmentCallback(Dart_Handle name) {
-  uint8_t* utf8_array;
-  intptr_t utf8_len;
-  Dart_Handle result = Dart_Null();
-  Dart_Handle handle = Dart_StringToUTF8(name, &utf8_array, &utf8_len);
-  if (Dart_IsError(handle)) {
-    handle = Dart_ThrowException(
-        DartUtils::NewDartArgumentError(Dart_GetError(handle)));
-  } else {
-    char* name_chars = reinterpret_cast<char*>(malloc(utf8_len + 1));
-    memmove(name_chars, utf8_array, utf8_len);
-    name_chars[utf8_len] = '\0';
-    const char* value = NULL;
-    if (environment != NULL) {
-      HashMap::Entry* entry =
-          environment->Lookup(GetHashmapKeyFromString(name_chars),
-                              HashMap::StringHash(name_chars), false);
-      if (entry != NULL) {
-        value = reinterpret_cast<char*>(entry->value);
-      }
-    }
-    if (value != NULL) {
-      result = Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(value),
-                                      strlen(value));
-    }
-    free(name_chars);
-  }
-  return result;
-}
-
 static const char* kSnapshotKindNames[] = {
     "core",
     "core-jit",
@@ -1423,7 +1389,8 @@
   }
 
   Dart_EnterScope();
-  Dart_Handle result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+  Dart_Handle result =
+      Dart_SetEnvironmentCallback(DartUtils::EnvironmentCallback);
   CHECK_RESULT(result);
 
   // The root library has to be set to generate AOT snapshots, and sometimes we
@@ -1510,6 +1477,7 @@
     PrintUsage();
     return kErrorExitCode;
   }
+  DartUtils::SetEnvironment(environment);
 
   // Sniff the script to check if it is actually a dill file.
   uint8_t* kernel_buffer = NULL;
@@ -1656,7 +1624,7 @@
     return 0;
   }
 
-  result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+  result = Dart_SetEnvironmentCallback(DartUtils::EnvironmentCallback);
   CHECK_RESULT(result);
 
   // Load up the script before a snapshot is created.
@@ -1709,7 +1677,7 @@
       exit(kErrorExitCode);
     }
     Dart_EnterScope();
-    result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+    result = Dart_SetEnvironmentCallback(DartUtils::EnvironmentCallback);
     CHECK_RESULT(result);
 
     // Set up the library tag handler in such a manner that it will use the
diff --git a/runtime/bin/hashmap_test.cc b/runtime/bin/hashmap_test.cc
index 7234f41..307d21f 100644
--- a/runtime/bin/hashmap_test.cc
+++ b/runtime/bin/hashmap_test.cc
@@ -17,11 +17,12 @@
 class IntSet {
  public:
   explicit IntSet(IntKeyHash hash)
-      : hash_(hash), map_(HashMap::SamePointerValue, kInitialSize) {}
+      : hash_(hash), map_(SimpleHashMap::SamePointerValue, kInitialSize) {}
 
   void Insert(int x) {
     EXPECT_NE(0, x);  // 0 corresponds to (void*)NULL - illegal key value
-    HashMap::Entry* p = map_.Lookup(reinterpret_cast<void*>(x), hash_(x), true);
+    SimpleHashMap::Entry* p =
+        map_.Lookup(reinterpret_cast<void*>(x), hash_(x), true);
     EXPECT(p != NULL);  // insert is set!
     EXPECT_EQ(reinterpret_cast<void*>(x), p->key);
     // We don't care about p->value.
@@ -33,7 +34,7 @@
   }
 
   bool Present(int x) {
-    HashMap::Entry* p =
+    SimpleHashMap::Entry* p =
         map_.Lookup(reinterpret_cast<void*>(x), hash_(x), false);
     if (p != NULL) {
       EXPECT_EQ(reinterpret_cast<void*>(x), p->key);
@@ -45,7 +46,7 @@
 
   uint32_t occupancy() const {
     uint32_t count = 0;
-    for (HashMap::Entry* p = map_.Start(); p != NULL; p = map_.Next(p)) {
+    for (SimpleHashMap::Entry* p = map_.Start(); p != NULL; p = map_.Next(p)) {
       count++;
     }
     EXPECT_EQ(map_.occupancy_, count);
@@ -54,7 +55,7 @@
 
  private:
   IntKeyHash hash_;
-  HashMap map_;
+  SimpleHashMap map_;
 };
 
 static uint32_t WordHash(uint32_t key) {
@@ -166,7 +167,7 @@
   EXPECT_EQ(0u, set.occupancy());
 }
 
-VM_UNIT_TEST_CASE(HashMap_Basic) {
+VM_UNIT_TEST_CASE(SimpleHashMap_Basic) {
   TestSet(WordHash, 100);
   TestSet(Hash, 100);
   TestSet(CollisionHash1, 50);
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 5531dd5..2c18c3b 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -114,40 +114,6 @@
   return dart_arguments;
 }
 
-static void* GetHashmapKeyFromString(char* key) {
-  return reinterpret_cast<void*>(key);
-}
-
-static Dart_Handle EnvironmentCallback(Dart_Handle name) {
-  uint8_t* utf8_array;
-  intptr_t utf8_len;
-  Dart_Handle result = Dart_Null();
-  Dart_Handle handle = Dart_StringToUTF8(name, &utf8_array, &utf8_len);
-  if (Dart_IsError(handle)) {
-    handle = Dart_ThrowException(
-        DartUtils::NewDartArgumentError(Dart_GetError(handle)));
-  } else {
-    char* name_chars = reinterpret_cast<char*>(malloc(utf8_len + 1));
-    memmove(name_chars, utf8_array, utf8_len);
-    name_chars[utf8_len] = '\0';
-    const char* value = NULL;
-    if (Options::environment() != NULL) {
-      HashMap::Entry* entry = Options::environment()->Lookup(
-          GetHashmapKeyFromString(name_chars), HashMap::StringHash(name_chars),
-          false);
-      if (entry != NULL) {
-        value = reinterpret_cast<char*>(entry->value);
-      }
-    }
-    if (value != NULL) {
-      result = Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(value),
-                                      strlen(value));
-    }
-    free(name_chars);
-  }
-  return result;
-}
-
 #define SAVE_ERROR_AND_EXIT(result)                                            \
   *error = strdup(Dart_GetError(result));                                      \
   if (Dart_IsCompilationError(result)) {                                       \
@@ -330,7 +296,7 @@
 #endif
   }
 
-  result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+  result = Dart_SetEnvironmentCallback(DartUtils::EnvironmentCallback);
   CHECK_RESULT(result);
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
@@ -626,7 +592,7 @@
     result = Dart_CompileAll();
     CHECK_RESULT(result);
   }
-  result = Dart_SetEnvironmentCallback(EnvironmentCallback);
+  result = Dart_SetEnvironmentCallback(DartUtils::EnvironmentCallback);
   CHECK_RESULT(result);
   Dart_ExitScope();
   Dart_ExitIsolate();
@@ -1182,6 +1148,7 @@
       Platform::Exit(kErrorExitCode);
     }
   }
+  DartUtils::SetEnvironment(Options::environment());
 
   Loader::InitOnce();
 
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index f2e1e1f..9e7a323 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -227,7 +227,7 @@
 }
 // clang-format on
 
-dart::HashMap* Options::environment_ = NULL;
+dart::SimpleHashMap* Options::environment_ = NULL;
 bool Options::ProcessEnvironmentOption(const char* arg,
                                        CommandLineOptions* vm_options) {
   return OptionProcessor::ProcessEnvironmentOption(arg, vm_options,
@@ -236,7 +236,7 @@
 
 void Options::DestroyEnvironment() {
   if (environment_ != NULL) {
-    for (HashMap::Entry* p = environment_->Start(); p != NULL;
+    for (SimpleHashMap::Entry* p = environment_->Start(); p != NULL;
          p = environment_->Next(p)) {
       free(p->key);
       free(p->value);
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index a90fffd..53184a4 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -115,7 +115,7 @@
   static void SetDart2Options(CommandLineOptions* vm_options);
   static void SetDart1Options(CommandLineOptions* vm_options);
 
-  static dart::HashMap* environment() { return environment_; }
+  static dart::SimpleHashMap* environment() { return environment_; }
 
   static const char* vm_service_server_ip() { return vm_service_server_ip_; }
   static int vm_service_server_port() { return vm_service_server_port_; }
@@ -148,7 +148,7 @@
   ENUM_OPTIONS_LIST(ENUM_OPTION_DECL)
 #undef ENUM_OPTION_DECL
 
-  static dart::HashMap* environment_;
+  static dart::SimpleHashMap* environment_;
 
 // Frontend argument processing.
 #if !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/bin/options.cc b/runtime/bin/options.cc
index 5fc416d..f9652c6 100644
--- a/runtime/bin/options.cc
+++ b/runtime/bin/options.cc
@@ -41,13 +41,10 @@
   return false;
 }
 
-static void* GetHashmapKeyFromString(char* key) {
-  return reinterpret_cast<void*>(key);
-}
-
-bool OptionProcessor::ProcessEnvironmentOption(const char* arg,
-                                               CommandLineOptions* vm_options,
-                                               dart::HashMap** environment) {
+bool OptionProcessor::ProcessEnvironmentOption(
+    const char* arg,
+    CommandLineOptions* vm_options,
+    dart::SimpleHashMap** environment) {
   ASSERT(arg != NULL);
   ASSERT(environment != NULL);
   if (*arg == '\0') {
@@ -64,7 +61,7 @@
     return true;
   }
   if (*environment == NULL) {
-    *environment = new HashMap(&HashMap::SameStringValue, 4);
+    *environment = new SimpleHashMap(&SimpleHashMap::SameStringValue, 4);
   }
   // Split the name=value part of the -Dname=value argument.
   char* name;
@@ -85,9 +82,10 @@
   strncpy(name, arg, name_len);
   name[name_len] = '\0';
   value = strdup(equals_pos + 1);
-  HashMap::Entry* entry = (*environment)
-                              ->Lookup(GetHashmapKeyFromString(name),
-                                       HashMap::StringHash(name), true);
+  SimpleHashMap::Entry* entry =
+      (*environment)
+          ->Lookup(GetHashmapKeyFromString(name),
+                   SimpleHashMap::StringHash(name), true);
   ASSERT(entry != NULL);  // Lookup adds an entry if key not found.
   if (entry->value != NULL) {
     free(name);
diff --git a/runtime/bin/options.h b/runtime/bin/options.h
index d1d6088..e4edbcf 100644
--- a/runtime/bin/options.h
+++ b/runtime/bin/options.h
@@ -34,7 +34,7 @@
 
   static bool ProcessEnvironmentOption(const char* arg,
                                        CommandLineOptions* vm_options,
-                                       dart::HashMap** environment);
+                                       dart::SimpleHashMap** environment);
 
  private:
   static OptionProcessor* first_;
diff --git a/runtime/bin/platform.cc b/runtime/bin/platform.cc
index eff6dfb..20003a0 100644
--- a/runtime/bin/platform.cc
+++ b/runtime/bin/platform.cc
@@ -4,6 +4,7 @@
 
 #include "bin/platform.h"
 
+#include "bin/dartutils.h"
 #include "bin/file.h"
 #include "bin/utils.h"
 #include "include/dart_api.h"
@@ -16,7 +17,9 @@
 }
 
 void FUNCTION_NAME(Platform_OperatingSystem)(Dart_NativeArguments args) {
-  Dart_SetReturnValue(args, DartUtils::NewString(Platform::OperatingSystem()));
+  Dart_Handle str = DartUtils::NewString(Platform::OperatingSystem());
+  ThrowIfError(str);
+  Dart_SetReturnValue(args, str);
 }
 
 void FUNCTION_NAME(Platform_OperatingSystemVersion)(Dart_NativeArguments args) {
@@ -24,19 +27,25 @@
   if (version == NULL) {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   } else {
-    Dart_SetReturnValue(args, DartUtils::NewString(version));
+    Dart_Handle str = DartUtils::NewString(version);
+    ThrowIfError(str);
+    Dart_SetReturnValue(args, str);
   }
 }
 
 void FUNCTION_NAME(Platform_PathSeparator)(Dart_NativeArguments args) {
-  Dart_SetReturnValue(args, DartUtils::NewString(File::PathSeparator()));
+  Dart_Handle str = DartUtils::NewString(File::PathSeparator());
+  ThrowIfError(str);
+  Dart_SetReturnValue(args, str);
 }
 
 void FUNCTION_NAME(Platform_LocalHostname)(Dart_NativeArguments args) {
   const intptr_t HOSTNAME_LENGTH = 256;
   char hostname[HOSTNAME_LENGTH];
   if (Platform::LocalHostname(hostname, HOSTNAME_LENGTH)) {
-    Dart_SetReturnValue(args, DartUtils::NewString(hostname));
+    Dart_Handle str = DartUtils::NewString(hostname);
+    ThrowIfError(str);
+    Dart_SetReturnValue(args, str);
   } else {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
@@ -66,10 +75,8 @@
   Dart_Handle result = Dart_NewListOf(Dart_CoreType_String, end - 1);
   for (intptr_t i = 1; i < end; i++) {
     Dart_Handle str = DartUtils::NewString(argv[i]);
-    Dart_Handle error = Dart_ListSetAt(result, i - 1, str);
-    if (Dart_IsError(error)) {
-      Dart_PropagateError(error);
-    }
+    ThrowIfError(str);
+    ThrowIfError(Dart_ListSetAt(result, i - 1, str));
   }
   Dart_SetReturnValue(args, result);
 }
@@ -83,9 +90,7 @@
     Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
   } else {
     Dart_Handle result = Dart_NewList(count);
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     intptr_t result_idx = 0;
     for (intptr_t env_idx = 0; env_idx < count; env_idx++) {
       Dart_Handle str = DartUtils::NewString(env[env_idx]);
@@ -95,9 +100,7 @@
         continue;
       }
       Dart_Handle error = Dart_ListSetAt(result, result_idx, str);
-      if (Dart_IsError(error)) {
-        Dart_PropagateError(error);
-      }
+      ThrowIfError(error);
       result_idx++;
     }
     Dart_SetReturnValue(args, result);
diff --git a/runtime/bin/process.cc b/runtime/bin/process.cc
index 1c1191a..065b477 100644
--- a/runtime/bin/process.cc
+++ b/runtime/bin/process.cc
@@ -28,21 +28,15 @@
   ASSERT(Dart_IsList(strings));
   intptr_t len = 0;
   Dart_Handle result = Dart_ListLength(strings, &len);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
   // Protect against user-defined list implementations that can have
   // arbitrary length.
   if ((len < 0) || (len > kMaxArgumentListLength)) {
     result = DartUtils::SetIntegerField(status_handle, "_errorCode", 0);
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     result = DartUtils::SetStringField(status_handle, "_errorMessage",
                                        "Max argument list length exceeded");
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     return NULL;
   }
   *length = len;
@@ -51,19 +45,13 @@
       reinterpret_cast<char**>(Dart_ScopeAllocate(len * sizeof(*string_args)));
   for (int i = 0; i < len; i++) {
     Dart_Handle arg = Dart_ListGetAt(strings, i);
-    if (Dart_IsError(arg)) {
-      Dart_PropagateError(arg);
-    }
+    ThrowIfError(arg);
     if (!Dart_IsString(arg)) {
       result = DartUtils::SetIntegerField(status_handle, "_errorCode", 0);
-      if (Dart_IsError(result)) {
-        Dart_PropagateError(result);
-      }
+      ThrowIfError(result);
       result =
           DartUtils::SetStringField(status_handle, "_errorMessage", error_msg);
-      if (Dart_IsError(result)) {
-        Dart_PropagateError(result);
-      }
+      ThrowIfError(result);
       return NULL;
     }
     string_args[i] = const_cast<char*>(DartUtils::GetStringValue(arg));
@@ -100,14 +88,10 @@
   Dart_Handle result;
   if (!Dart_IsString(path_handle)) {
     result = DartUtils::SetIntegerField(status_handle, "_errorCode", 0);
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     result = DartUtils::SetStringField(status_handle, "_errorMessage",
                                        "Path must be a builtin string");
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     Dart_SetBooleanReturnValue(args, false);
     return;
   }
@@ -128,15 +112,11 @@
     working_directory = DartUtils::GetStringValue(working_directory_handle);
   } else if (!Dart_IsNull(working_directory_handle)) {
     result = DartUtils::SetIntegerField(status_handle, "_errorCode", 0);
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     result =
         DartUtils::SetStringField(status_handle, "_errorMessage",
                                   "WorkingDirectory must be a builtin string");
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     Dart_SetBooleanReturnValue(args, false);
     return;
   }
@@ -183,16 +163,12 @@
   } else {
     result =
         DartUtils::SetIntegerField(status_handle, "_errorCode", error_code);
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
     result = DartUtils::SetStringField(status_handle, "_errorMessage",
                                        os_error_message != NULL
                                            ? os_error_message
                                            : "Cannot get error message");
-    if (Dart_IsError(result)) {
-      Dart_PropagateError(result);
-    }
+    ThrowIfError(result);
   }
   Dart_SetBooleanReturnValue(args, error_code == 0);
 }
@@ -220,13 +196,9 @@
   exit_event->SetClosedFd();
   if (success) {
     Dart_Handle out = result.stdout_data();
-    if (Dart_IsError(out)) {
-      Dart_PropagateError(out);
-    }
+    ThrowIfError(out);
     Dart_Handle err = result.stderr_data();
-    if (Dart_IsError(err)) {
-      Dart_PropagateError(err);
-    }
+    ThrowIfError(err);
     Dart_Handle list = Dart_NewList(4);
     Dart_ListSetAt(list, 0, Dart_NewInteger(pid));
     Dart_ListSetAt(list, 1, Dart_NewInteger(result.exit_code()));
@@ -316,15 +288,11 @@
   Dart_Handle bytes = Dart_GetNativeArgument(args, 0);
   intptr_t bytes_length = 0;
   Dart_Handle result = Dart_ListLength(bytes, &bytes_length);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
   uint8_t* buffer = Dart_ScopeAllocate(bytes_length + 1);
   result = Dart_ListGetAsBytes(bytes, 0, buffer, bytes_length);
   buffer[bytes_length] = '\0';
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
   intptr_t len;
   char* str = StringUtils::ConsoleStringToUtf8(reinterpret_cast<char*>(buffer),
                                                bytes_length, &len);
@@ -333,6 +301,7 @@
         DartUtils::NewInternalError("SystemEncodingToString failed"));
   }
   result = Dart_NewStringFromUTF8(reinterpret_cast<const uint8_t*>(str), len);
+  ThrowIfError(result);
   Dart_SetReturnValue(args, result);
 }
 
@@ -342,9 +311,7 @@
   intptr_t utf8_len;
   Dart_Handle result =
       Dart_StringToUTF8(str, reinterpret_cast<uint8_t**>(&utf8), &utf8_len);
-  if (Dart_IsError(result)) {
-    Dart_PropagateError(result);
-  }
+  ThrowIfError(result);
   intptr_t system_len;
   const char* system_string =
       StringUtils::Utf8ToConsoleString(utf8, utf8_len, &system_len);
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index c22ee52..d8ee1bc 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -44,7 +44,7 @@
 
 ListeningSocketRegistry::OSSocket* ListeningSocketRegistry::LookupByPort(
     intptr_t port) {
-  HashMap::Entry* entry = sockets_by_port_.Lookup(
+  SimpleHashMap::Entry* entry = sockets_by_port_.Lookup(
       GetHashmapKeyFromIntptr(port), GetHashmapHashFromIntptr(port), false);
   if (entry == NULL) {
     return NULL;
@@ -53,7 +53,7 @@
 }
 
 void ListeningSocketRegistry::InsertByPort(intptr_t port, OSSocket* socket) {
-  HashMap::Entry* entry = sockets_by_port_.Lookup(
+  SimpleHashMap::Entry* entry = sockets_by_port_.Lookup(
       GetHashmapKeyFromIntptr(port), GetHashmapHashFromIntptr(port), true);
   ASSERT(entry != NULL);
   entry->value = reinterpret_cast<void*>(socket);
@@ -66,7 +66,7 @@
 
 ListeningSocketRegistry::OSSocket* ListeningSocketRegistry::LookupByFd(
     Socket* fd) {
-  HashMap::Entry* entry = sockets_by_fd_.Lookup(
+  SimpleHashMap::Entry* entry = sockets_by_fd_.Lookup(
       GetHashmapKeyFromIntptr(reinterpret_cast<intptr_t>(fd)),
       GetHashmapHashFromIntptr(reinterpret_cast<intptr_t>(fd)), false);
   if (entry == NULL) {
@@ -76,7 +76,7 @@
 }
 
 void ListeningSocketRegistry::InsertByFd(Socket* fd, OSSocket* socket) {
-  HashMap::Entry* entry = sockets_by_fd_.Lookup(
+  SimpleHashMap::Entry* entry = sockets_by_fd_.Lookup(
       GetHashmapKeyFromIntptr(reinterpret_cast<intptr_t>(fd)),
       GetHashmapHashFromIntptr(reinterpret_cast<intptr_t>(fd)), true);
   ASSERT(entry != NULL);
@@ -234,7 +234,7 @@
 void ListeningSocketRegistry::CloseAllSafe() {
   MutexLocker ml(mutex_);
 
-  for (HashMap::Entry* cursor = sockets_by_fd_.Start(); cursor != NULL;
+  for (SimpleHashMap::Entry* cursor = sockets_by_fd_.Start(); cursor != NULL;
        cursor = sockets_by_fd_.Next(cursor)) {
     CloseOneSafe(reinterpret_cast<OSSocket*>(cursor->value), false);
   }
diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h
index a521e53..05a25121 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.h
@@ -248,8 +248,8 @@
   bool CloseOneSafe(OSSocket* os_socket, bool update_hash_maps);
   void CloseAllSafe();
 
-  HashMap sockets_by_port_;
-  HashMap sockets_by_fd_;
+  SimpleHashMap sockets_by_port_;
+  SimpleHashMap sockets_by_fd_;
 
   Mutex* mutex_;
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 1a9b3d9..eef2f9fb 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -553,7 +553,7 @@
  * for each part.
  */
 
-#define DART_FLAGS_CURRENT_VERSION (0x00000005)
+#define DART_FLAGS_CURRENT_VERSION (0x00000006)
 
 typedef struct {
   int32_t version;
@@ -570,6 +570,7 @@
   bool strong;
   bool load_vmservice_library;
   bool sync_async;
+  bool unsafe_trust_strong_mode_types;
 } Dart_IsolateFlags;
 
 /**
diff --git a/runtime/lib/array.dart b/runtime/lib/array.dart
index 304877f..93fcbe6 100644
--- a/runtime/lib/array.dart
+++ b/runtime/lib/array.dart
@@ -201,11 +201,11 @@
   int _index;
   E _current;
 
-  _FixedSizeArrayIterator(List array)
+  _FixedSizeArrayIterator(List<E> array)
       : _array = array,
         _length = array.length,
         _index = 0 {
-    assert(array is _List || array is _ImmutableList);
+    assert(array is _List<E> || array is _ImmutableList<E>);
   }
 
   E get current => _current;
diff --git a/runtime/lib/errors_patch.dart b/runtime/lib/errors_patch.dart
index fb6aa86..3ed0f6d 100644
--- a/runtime/lib/errors_patch.dart
+++ b/runtime/lib/errors_patch.dart
@@ -45,7 +45,7 @@
       return condition;
     }
     if (condition is _Closure) {
-      return condition.call();
+      return (condition as dynamic)();
     }
     if (condition is Function) {
       condition = condition();
diff --git a/runtime/lib/internal_patch.dart b/runtime/lib/internal_patch.dart
index 38e7250..8446926 100644
--- a/runtime/lib/internal_patch.dart
+++ b/runtime/lib/internal_patch.dart
@@ -102,6 +102,12 @@
 _prependTypeArguments(functionTypeArguments, parentTypeArguments, parentLen,
     totalLen) native "Internal_prependTypeArguments";
 
+// Check that a set of type arguments satisfy the type parameter bounds on a
+// closure.
+@pragma("vm:entry-point")
+_boundsCheckForPartialInstantiation(closure, typeArgs)
+    native "Internal_boundsCheckForPartialInstantiation";
+
 // Called by IRRegExpMacroAssembler::GrowStack.
 Int32List _growRegExpStack(Int32List stack) {
   final newStack = new Int32List(stack.length * 2);
diff --git a/runtime/lib/object.cc b/runtime/lib/object.cc
index 3e01f83..7b0537f 100644
--- a/runtime/lib/object.cc
+++ b/runtime/lib/object.cc
@@ -473,6 +473,73 @@
       zone, parent_type_arguments, smi_parent_len.Value(), smi_len.Value());
 }
 
+// Check that a set of type arguments satisfy the type parameter bounds on a
+// closure.
+// Arg0: Closure object
+// Arg1: Type arguments to function
+DEFINE_NATIVE_ENTRY(Internal_boundsCheckForPartialInstantiation, 2) {
+  const Closure& closure =
+      Closure::CheckedHandle(zone, arguments->NativeArgAt(0));
+  const Function& target = Function::Handle(zone, closure.function());
+  const TypeArguments& bounds =
+      TypeArguments::Handle(zone, target.type_parameters());
+
+  // Either the bounds are all-dynamic or the function is not generic.
+  if (bounds.IsNull()) return Object::null();
+
+  const TypeArguments& type_args_to_check =
+      TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(1));
+
+  // This should be guaranteed by the front-end.
+  ASSERT(type_args_to_check.IsNull() ||
+         bounds.Length() <= type_args_to_check.Length());
+
+  // The bounds on the closure may need instantiation.
+  const TypeArguments& instantiator_type_args =
+      TypeArguments::Handle(zone, closure.instantiator_type_arguments());
+  const TypeArguments& function_type_args =
+      TypeArguments::Handle(zone, closure.function_type_arguments());
+
+  AbstractType& supertype = AbstractType::Handle(zone);
+  AbstractType& subtype = AbstractType::Handle(zone);
+  TypeParameter& parameter = TypeParameter::Handle(zone);
+  Error& bound_error = Error::Handle(zone);
+  for (intptr_t i = 0; i < bounds.Length(); ++i) {
+    parameter ^= bounds.TypeAt(i);
+    supertype = parameter.bound();
+    subtype = type_args_to_check.IsNull() ? Object::dynamic_type().raw()
+                                          : type_args_to_check.TypeAt(i);
+
+    ASSERT(!subtype.IsNull() && !subtype.IsMalformedOrMalbounded());
+    ASSERT(!supertype.IsNull() && !supertype.IsMalformedOrMalbounded());
+
+    // The supertype may not be instantiated.
+    if (!AbstractType::InstantiateAndTestSubtype(
+            &subtype, &supertype, &bound_error, instantiator_type_args,
+            function_type_args)) {
+      // Throw a dynamic type error.
+      TokenPosition location;
+      {
+        DartFrameIterator iterator(Thread::Current(),
+                                   StackFrameIterator::kNoCrossThreadIteration);
+        StackFrame* caller_frame = iterator.NextFrame();
+        ASSERT(caller_frame != NULL);
+        location = caller_frame->GetTokenPos();
+      }
+      String& bound_error_message = String::Handle(zone);
+      if (!bound_error.IsNull()) {
+        bound_error_message = String::New(bound_error.ToErrorCString());
+      }
+      String& parameter_name = String::Handle(zone, parameter.Name());
+      Exceptions::CreateAndThrowTypeError(location, subtype, supertype,
+                                          parameter_name, bound_error_message);
+      UNREACHABLE();
+    }
+  }
+
+  return Object::null();
+}
+
 DEFINE_NATIVE_ENTRY(InvocationMirror_unpackTypeArguments, 2) {
   const TypeArguments& type_arguments =
       TypeArguments::CheckedHandle(zone, arguments->NativeArgAt(0));
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 07a03d9..7fbaf49 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -106,6 +106,9 @@
 [ $compiler == dart2js || $browser ]
 *: SkipByDesign
 
+[ $compiler == dartk || $compiler == dartkp ]
+rewind_test: Pass, RuntimeError # Issue 34287
+
 # Skip all service tests because random reloads interfere.
 [ $hot_reload || $hot_reload_rollback ]
 *: SkipByDesign # The service tests should run without being reloaded.
diff --git a/runtime/platform/assert.cc b/runtime/platform/assert.cc
index 262548e..deac89e 100644
--- a/runtime/platform/assert.cc
+++ b/runtime/platform/assert.cc
@@ -39,7 +39,7 @@
   va_end(arguments);
 
   // Abort right away.
-  NOT_IN_PRODUCT(Dart_DumpNativeStackTrace(NULL));
+  Dart_DumpNativeStackTrace(NULL);
   OS::Abort();
 }
 
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 0959729..11c9d32 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -115,37 +115,12 @@
 #error Automatic target os detection failed.
 #endif
 
-// Setup product, release or debug build related macros.
-#if defined(PRODUCT) && defined(DEBUG)
-#error Both PRODUCT and DEBUG defined.
-#endif  // defined(PRODUCT) && defined(DEBUG)
-
-#if defined(PRODUCT)
-#define NOT_IN_PRODUCT(code)
-#else  // defined(PRODUCT)
-#define NOT_IN_PRODUCT(code) code
-#endif  // defined(PRODUCT)
-
 #if defined(DEBUG)
 #define DEBUG_ONLY(code) code
 #else  // defined(DEBUG)
 #define DEBUG_ONLY(code)
 #endif  // defined(DEBUG)
 
-#if defined(DART_PRECOMPILED_RUNTIME) && defined(DART_PRECOMPILER)
-#error DART_PRECOMPILED_RUNTIME and DART_PRECOMPILER are mutually exclusive
-#endif  // defined(DART_PRECOMPILED_RUNTIME) && defined(DART_PRECOMPILER)
-
-#if defined(DART_PRECOMPILED_RUNTIME) && defined(DART_NOSNAPSHOT)
-#error DART_PRECOMPILED_RUNTIME and DART_NOSNAPSHOT are mutually exclusive
-#endif  // defined(DART_PRECOMPILED_RUNTIME) && defined(DART_NOSNAPSHOT)
-
-#if defined(DART_PRECOMPILED_RUNTIME)
-#define NOT_IN_PRECOMPILED(code)
-#else
-#define NOT_IN_PRECOMPILED(code) code
-#endif  // defined(DART_PRECOMPILED_RUNTIME)
-
 namespace dart {
 
 struct simd128_value_t {
@@ -709,14 +684,6 @@
 #define STDERR_FILENO 2
 #endif
 
-// For checking deterministic graph generation, we can store instruction
-// tag in the ICData and check it when recreating the flow graph in
-// optimizing compiler. Enable it for other modes (product, release) if needed
-// for debugging.
-#if defined(DEBUG)
-#define TAG_IC_DATA
-#endif
-
 }  // namespace dart
 
 #endif  // RUNTIME_PLATFORM_GLOBALS_H_
diff --git a/runtime/platform/hashmap.cc b/runtime/platform/hashmap.cc
index d5dfba9..88c521e 100644
--- a/runtime/platform/hashmap.cc
+++ b/runtime/platform/hashmap.cc
@@ -8,16 +8,18 @@
 
 namespace dart {
 
-HashMap::HashMap(MatchFun match, uint32_t initial_capacity) {
+SimpleHashMap::SimpleHashMap(MatchFun match, uint32_t initial_capacity) {
   match_ = match;
   Initialize(initial_capacity);
 }
 
-HashMap::~HashMap() {
+SimpleHashMap::~SimpleHashMap() {
   delete[] map_;
 }
 
-HashMap::Entry* HashMap::Lookup(void* key, uint32_t hash, bool insert) {
+SimpleHashMap::Entry* SimpleHashMap::Lookup(void* key,
+                                            uint32_t hash,
+                                            bool insert) {
   // Find a matching entry.
   Entry* p = Probe(key, hash);
   if (p->key != NULL) {
@@ -44,7 +46,7 @@
   return NULL;
 }
 
-void HashMap::Remove(void* key, uint32_t hash) {
+void SimpleHashMap::Remove(void* key, uint32_t hash) {
   // Lookup the entry for the key to remove.
   Entry* candidate = Probe(key, hash);
   if (candidate->key == NULL) {
@@ -106,7 +108,7 @@
   occupancy_--;
 }
 
-void HashMap::Clear(ClearFun clear) {
+void SimpleHashMap::Clear(ClearFun clear) {
   // Mark all entries as empty.
   const Entry* end = map_end();
   for (Entry* p = map_; p < end; p++) {
@@ -118,11 +120,11 @@
   occupancy_ = 0;
 }
 
-HashMap::Entry* HashMap::Start() const {
+SimpleHashMap::Entry* SimpleHashMap::Start() const {
   return Next(map_ - 1);
 }
 
-HashMap::Entry* HashMap::Next(Entry* p) const {
+SimpleHashMap::Entry* SimpleHashMap::Next(Entry* p) const {
   const Entry* end = map_end();
   ASSERT(map_ - 1 <= p && p < end);
   for (p++; p < end; p++) {
@@ -133,7 +135,7 @@
   return NULL;
 }
 
-HashMap::Entry* HashMap::Probe(void* key, uint32_t hash) {
+SimpleHashMap::Entry* SimpleHashMap::Probe(void* key, uint32_t hash) {
   ASSERT(key != NULL);
 
   ASSERT(dart::Utils::IsPowerOfTwo(capacity_));
@@ -152,7 +154,7 @@
   return p;
 }
 
-void HashMap::Initialize(uint32_t capacity) {
+void SimpleHashMap::Initialize(uint32_t capacity) {
   ASSERT(dart::Utils::IsPowerOfTwo(capacity));
   map_ = new Entry[capacity];
   if (map_ == NULL) {
@@ -162,7 +164,7 @@
   occupancy_ = 0;
 }
 
-void HashMap::Resize() {
+void SimpleHashMap::Resize() {
   Entry* map = map_;
   uint32_t n = occupancy_;
 
diff --git a/runtime/platform/hashmap.h b/runtime/platform/hashmap.h
index be8278e..e3e9c5a 100644
--- a/runtime/platform/hashmap.h
+++ b/runtime/platform/hashmap.h
@@ -9,7 +9,7 @@
 
 namespace dart {
 
-class HashMap {
+class SimpleHashMap {
  public:
   typedef bool (*MatchFun)(void* key1, void* key2);
 
@@ -17,9 +17,9 @@
 
   // initial_capacity is the size of the initial hash map;
   // it must be a power of 2 (and thus must not be 0).
-  HashMap(MatchFun match, uint32_t initial_capacity);
+  SimpleHashMap(MatchFun match, uint32_t initial_capacity);
 
-  ~HashMap();
+  ~SimpleHashMap();
 
   static bool SamePointerValue(void* key1, void* key2) { return key1 == key2; }
 
@@ -43,7 +43,7 @@
                   reinterpret_cast<char*>(key2)) == 0;
   }
 
-  // HashMap entries are (key, value, hash) triplets.
+  // SimpleHashMap entries are (key, value, hash) triplets.
   // Some clients may not need to use the value slot
   // (e.g. implementers of sets, where the key is the value).
   struct Entry {
@@ -62,7 +62,7 @@
 
   // Removes the entry with matching key.
   //
-  // WARNING: This method cannot be called while iterating a `HashMap`
+  // WARNING: This method cannot be called while iterating a `SimpleHashMap`
   // otherwise the iteration might step over elements!
   void Remove(void* key, uint32_t hash);
 
@@ -101,7 +101,7 @@
   void Resize();
 
   friend class IntSet;  // From hashmap_test.cc
-  DISALLOW_COPY_AND_ASSIGN(HashMap);
+  DISALLOW_COPY_AND_ASSIGN(SimpleHashMap);
 };
 
 }  // namespace dart
diff --git a/runtime/platform/text_buffer.cc b/runtime/platform/text_buffer.cc
index 5717604..b1ef63a 100644
--- a/runtime/platform/text_buffer.cc
+++ b/runtime/platform/text_buffer.cc
@@ -150,8 +150,6 @@
   }
 }
 
-#ifndef PRODUCT
-
 void BufferFormatter::Print(const char* format, ...) {
   va_list args;
   va_start(args, format);
@@ -169,6 +167,4 @@
   }
 }
 
-#endif  // !PRODUCT
-
 }  // namespace dart
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index f41388e..960e7903 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -38,6 +38,7 @@
 [ $compiler == dart2analyzer ]
 dart/byte_array_optimized_test: CompileTimeError # int64
 dart/byte_array_test: CompileTimeError # int64
+dart/redirection_type_shuffling_test/00: CompileTimeError
 
 [ $compiler == dart2js ]
 dart/byte_array_optimized_test: Skip # compilers not aware of byte arrays
@@ -157,9 +158,6 @@
 [ $builder_tag == asan && $mode == debug && ($runtime == dart_precompiled || $runtime == vm) ]
 cc/Dart2JSCompileAll: SkipSlow # Timeout.
 
-[ $compiler == dart2analyzer && $strong ]
-dart/redirection_type_shuffling_test/00: CompileTimeError
-
 [ ($compiler == dartk || $compiler == dartkb) && $mode == debug && $runtime == vm ]
 cc/PrintJSON: Crash
 cc/Service_TokenStream: Crash
diff --git a/runtime/vm/allocation_test.cc b/runtime/vm/allocation_test.cc
index e01a09f..13e5e80 100644
--- a/runtime/vm/allocation_test.cc
+++ b/runtime/vm/allocation_test.cc
@@ -73,7 +73,7 @@
   *ptr = 3;
 }
 
-VM_UNIT_TEST_CASE(StackAllocatedDestruction) {
+ISOLATE_UNIT_TEST_CASE(StackAllocatedDestruction) {
   int data = 1;
   StackAllocatedDestructionHelper(&data);
   EXPECT_EQ(4, data);
@@ -89,7 +89,7 @@
   UNREACHABLE();
 }
 
-TEST_CASE(StackAllocatedLongJump) {
+ISOLATE_UNIT_TEST_CASE(StackAllocatedLongJump) {
   LongJumpScope jump;
   int data = 1;
   if (setjmp(*jump.Set()) == 0) {
@@ -114,7 +114,7 @@
   // Do not set data because the LongJump version does not return control here.
 }
 
-TEST_CASE(StackResourceDestruction) {
+ISOLATE_UNIT_TEST_CASE(StackResourceDestruction) {
   int data = 1;
   StackResourceDestructionHelper(&data);
   EXPECT_EQ(7, data);
@@ -138,7 +138,7 @@
   UNREACHABLE();
 }
 
-TEST_CASE(StackResourceLongJump) {
+ISOLATE_UNIT_TEST_CASE(StackResourceLongJump) {
   LongJumpScope* base = Thread::Current()->long_jump_base();
   {
     LongJumpScope jump;
diff --git a/runtime/vm/ast_printer_test.cc b/runtime/vm/ast_printer_test.cc
index 4385f84..64341cf 100644
--- a/runtime/vm/ast_printer_test.cc
+++ b/runtime/vm/ast_printer_test.cc
@@ -12,7 +12,7 @@
 
 #ifndef PRODUCT
 
-TEST_CASE(AstPrinter) {
+ISOLATE_UNIT_TEST_CASE(AstPrinter) {
   const TokenPosition kPos = TokenPosition::kNoSource;
   LocalVariable* v = new LocalVariable(
       kPos, kPos, String::ZoneHandle(Symbols::New(thread, "wurscht")),
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index c7cb303..3d5bf6f 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -666,6 +666,7 @@
   EXPECT_VALID(h_lib);
   Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL);
   EXPECT_VALID(h_result);
+  TransitionNativeToVM transition(thread);
   Instance& map = Instance::Handle();
   map ^= Api::UnwrapHandle(h_result);
   const intptr_t kLoopCount = 100;
diff --git a/runtime/vm/bitmap_test.cc b/runtime/vm/bitmap_test.cc
index 2d28f8b..b48a204 100644
--- a/runtime/vm/bitmap_test.cc
+++ b/runtime/vm/bitmap_test.cc
@@ -9,7 +9,7 @@
 
 namespace dart {
 
-TEST_CASE(BitmapBuilder) {
+ISOLATE_UNIT_TEST_CASE(BitmapBuilder) {
   // Test basic bit map builder operations.
   BitmapBuilder* builder1 = new BitmapBuilder();
   EXPECT_EQ(0, builder1->Length());
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 1fc543f..616abe6 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -313,6 +313,7 @@
   V(Internal_inquireIs64Bit, 0)                                                \
   V(Internal_extractTypeArguments, 2)                                          \
   V(Internal_prependTypeArguments, 4)                                          \
+  V(Internal_boundsCheckForPartialInstantiation, 2)                            \
   V(InvocationMirror_unpackTypeArguments, 2)                                   \
   V(NoSuchMethodError_existingMethodSignature, 3)                              \
   V(LinkedHashMap_getIndex, 1)                                                 \
diff --git a/runtime/vm/class_finalizer_test.cc b/runtime/vm/class_finalizer_test.cc
index 2ccd1d0..4ea8c25 100644
--- a/runtime/vm/class_finalizer_test.cc
+++ b/runtime/vm/class_finalizer_test.cc
@@ -21,7 +21,7 @@
   return cls.raw();
 }
 
-TEST_CASE(ClassFinalizer) {
+ISOLATE_UNIT_TEST_CASE(ClassFinalizer) {
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
   ObjectStore* object_store = isolate->object_store();
@@ -51,7 +51,7 @@
   EXPECT(ClassFinalizer::ProcessPendingClasses());
 }
 
-TEST_CASE(ClassFinalize_Cycles) {
+ISOLATE_UNIT_TEST_CASE(ClassFinalize_Cycles) {
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
   ObjectStore* object_store = isolate->object_store();
@@ -75,7 +75,7 @@
   return Library::New(url);
 }
 
-TEST_CASE(ClassFinalize_Resolve) {
+ISOLATE_UNIT_TEST_CASE(ClassFinalize_Resolve) {
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
   ObjectStore* object_store = isolate->object_store();
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index d9232fa..f799a8d 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -48,6 +48,10 @@
   tags = RawObject::SizeTag::update(size, tags);
   tags = RawObject::VMHeapObjectTag::update(is_vm_isolate, tags);
   tags = RawObject::CanonicalObjectTag::update(is_canonical, tags);
+  tags = RawObject::OldBit::update(true, tags);
+  tags = RawObject::OldAndNotMarkedBit::update(true, tags);
+  tags = RawObject::OldAndNotRememberedBit::update(true, tags);
+  tags = RawObject::NewBit::update(false, tags);
   raw->ptr()->tags_ = tags;
 #if defined(HASH_IN_OBJECT_HEADER)
   raw->ptr()->hash_ = 0;
@@ -5580,6 +5584,7 @@
   }
 
   thread()->isolate()->class_table()->CopySizesFromClassObjects();
+  heap_->old_space()->EvaluateSnapshotLoad();
 
 #if defined(DEBUG)
   Isolate* isolate = thread()->isolate();
diff --git a/runtime/vm/code_descriptors.cc b/runtime/vm/code_descriptors.cc
index 206c249..da77114 100644
--- a/runtime/vm/code_descriptors.cc
+++ b/runtime/vm/code_descriptors.cc
@@ -4,6 +4,7 @@
 
 #include "vm/code_descriptors.h"
 
+#include "vm/compiler/compiler_state.h"
 #include "vm/log.h"
 
 namespace dart {
@@ -14,8 +15,7 @@
                                    TokenPosition token_pos,
                                    intptr_t try_index) {
   ASSERT((kind == RawPcDescriptors::kRuntimeCall) ||
-         (kind == RawPcDescriptors::kOther) ||
-         (deopt_id != Thread::kNoDeoptId));
+         (kind == RawPcDescriptors::kOther) || (deopt_id != DeoptId::kNone));
 
   // When precompiling, we only use pc descriptors for exceptions.
   if (!FLAG_precompiled_mode || try_index != -1) {
diff --git a/runtime/vm/code_descriptors_test.cc b/runtime/vm/code_descriptors_test.cc
index 65f1890..457111b 100644
--- a/runtime/vm/code_descriptors_test.cc
+++ b/runtime/vm/code_descriptors_test.cc
@@ -266,7 +266,7 @@
   EXPECT(!result.IsError());
 }
 
-TEST_CASE(DescriptorList_TokenPositions) {
+ISOLATE_UNIT_TEST_CASE(DescriptorList_TokenPositions) {
   DescriptorList* descriptors = new DescriptorList(64);
   ASSERT(descriptors != NULL);
   const intptr_t token_positions[] = {
diff --git a/runtime/vm/compiler/aot/aot_call_specializer.cc b/runtime/vm/compiler/aot/aot_call_specializer.cc
index e59a7b3..d62497b 100644
--- a/runtime/vm/compiler/aot/aot_call_specializer.cc
+++ b/runtime/vm/compiler/aot/aot_call_specializer.cc
@@ -13,6 +13,7 @@
 #include "vm/compiler/backend/inliner.h"
 #include "vm/compiler/backend/range_analysis.h"
 #include "vm/compiler/cha.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/compiler/jit/jit_call_specializer.h"
@@ -283,7 +284,7 @@
 Value* AotCallSpecializer::PrepareStaticOpInput(Value* input,
                                                 intptr_t cid,
                                                 Instruction* call) {
-  ASSERT(I->strong() && FLAG_use_strong_mode_types);
+  ASSERT(I->can_use_strong_mode_types());
   ASSERT((cid == kDoubleCid) || (cid == kMintCid));
 
   const String& function_name =
@@ -302,7 +303,7 @@
       conversion = new (Z) SmiToDoubleInstr(input, call->token_pos());
     } else if (FlowGraphCompiler::SupportsUnboxedInt64() &&
                FlowGraphCompiler::CanConvertInt64ToDouble()) {
-      conversion = new (Z) Int64ToDoubleInstr(input, Thread::kNoDeoptId,
+      conversion = new (Z) Int64ToDoubleInstr(input, DeoptId::kNone,
                                               Instruction::kNotSpeculative);
     } else {
       UNREACHABLE();
@@ -320,7 +321,7 @@
 
 Value* AotCallSpecializer::PrepareReceiverOfDevirtualizedCall(Value* input,
                                                               intptr_t cid) {
-  ASSERT(I->strong() && FLAG_use_strong_mode_types);
+  ASSERT(I->can_use_strong_mode_types());
   ASSERT((cid == kDoubleCid) || (cid == kMintCid));
 
   // Can't assert !input->Type()->is_nullable() here as PushArgument receives
@@ -351,7 +352,7 @@
 
 bool AotCallSpecializer::TryOptimizeInstanceCallUsingStaticTypes(
     InstanceCallInstr* instr) {
-  ASSERT(I->strong() && FLAG_use_strong_mode_types);
+  ASSERT(I->can_use_strong_mode_types());
 
   const intptr_t receiver_index = instr->FirstArgIndex();
   const Token::Kind op_kind = instr->token_kind();
@@ -375,14 +376,14 @@
             right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
             replacement = new (Z) RelationalOpInstr(
                 instr->token_pos(), op_kind, left_value, right_value, kMintCid,
-                Thread::kNoDeoptId, Instruction::kNotSpeculative);
+                DeoptId::kNone, Instruction::kNotSpeculative);
 
           } else {
             // TODO(dartbug.com/30480): Figure out how to handle null in
             // equality comparisons.
             // replacement = new (Z) EqualityCompareInstr(
             //     instr->token_pos(), op_kind, left_value->CopyWithType(Z),
-            //     right_value->CopyWithType(Z), kMintCid, Thread::kNoDeoptId);
+            //     right_value->CopyWithType(Z), kMintCid, DeoptId::kNone);
             replacement = new (Z) CheckedSmiComparisonInstr(
                 instr->token_kind(), left_value->CopyWithType(Z),
                 right_value->CopyWithType(Z), instr);
@@ -396,7 +397,7 @@
               instr->token_pos(),
               (op_kind == Token::kEQ) ? Token::kEQ_STRICT : Token::kNE_STRICT,
               left_value->CopyWithType(Z), right_value->CopyWithType(Z),
-              /* number_check = */ false, Thread::kNoDeoptId);
+              /* number_check = */ false, DeoptId::kNone);
         } else {
           replacement = new (Z) CheckedSmiComparisonInstr(
               instr->token_kind(), left_value->CopyWithType(Z),
@@ -415,7 +416,7 @@
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
           replacement = new (Z) RelationalOpInstr(
               instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
-              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+              DeoptId::kNone, Instruction::kNotSpeculative);
         }
       }
       break;
@@ -444,7 +445,7 @@
             // TODO(dartbug.com/30480): Enable 64-bit integer shifts.
             // replacement = new ShiftInt64OpInstr(
             //     op_kind, left_value->CopyWithType(Z),
-            //     right_value->CopyWithType(Z), Thread::kNoDeoptId);
+            //     right_value->CopyWithType(Z), DeoptId::kNone);
             replacement =
                 new (Z) CheckedSmiOpInstr(op_kind, left_value->CopyWithType(Z),
                                           right_value->CopyWithType(Z), instr);
@@ -452,7 +453,7 @@
             left_value = PrepareStaticOpInput(left_value, kMintCid, instr);
             right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
             replacement = new (Z) BinaryInt64OpInstr(
-                op_kind, left_value, right_value, Thread::kNoDeoptId,
+                op_kind, left_value, right_value, DeoptId::kNone,
                 Instruction::kNotSpeculative);
           }
         } else {
@@ -472,7 +473,7 @@
           left_value = PrepareStaticOpInput(left_value, kDoubleCid, instr);
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
           replacement = new (Z) BinaryDoubleOpInstr(
-              op_kind, left_value, right_value, Thread::kNoDeoptId,
+              op_kind, left_value, right_value, DeoptId::kNone,
               instr->token_pos(), Instruction::kNotSpeculative);
         }
       }
@@ -498,7 +499,7 @@
 
 bool AotCallSpecializer::TryOptimizeStaticCallUsingStaticTypes(
     StaticCallInstr* instr) {
-  ASSERT(I->strong() && FLAG_use_strong_mode_types);
+  ASSERT(I->can_use_strong_mode_types());
   Definition* replacement = NULL;
 
   const String& name = String::Handle(Z, instr->function().name());
@@ -536,7 +537,7 @@
           right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
           replacement = new (Z) EqualityCompareInstr(
               instr->token_pos(), op_kind, left_value, right_value, kMintCid,
-              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+              DeoptId::kNone, Instruction::kNotSpeculative);
         }
         break;
       }
@@ -553,7 +554,7 @@
           right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
           replacement = new (Z) RelationalOpInstr(
               instr->token_pos(), op_kind, left_value, right_value, kMintCid,
-              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+              DeoptId::kNone, Instruction::kNotSpeculative);
         } else if (FlowGraphCompiler::SupportsUnboxedDoubles() &&
                    right_type->IsNullableDouble() &&
                    IsSupportedIntOperandForStaticDoubleOp(left_type)) {
@@ -561,7 +562,7 @@
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
           replacement = new (Z) RelationalOpInstr(
               instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
-              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+              DeoptId::kNone, Instruction::kNotSpeculative);
         }
         break;
       }
@@ -588,9 +589,9 @@
         if (right_type->IsNullableInt() && (op_kind != Token::kDIV)) {
           left_value = PrepareReceiverOfDevirtualizedCall(left_value, kMintCid);
           right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
-          replacement = new (Z) BinaryInt64OpInstr(
-              op_kind, left_value, right_value, Thread::kNoDeoptId,
-              Instruction::kNotSpeculative);
+          replacement = new (Z)
+              BinaryInt64OpInstr(op_kind, left_value, right_value,
+                                 DeoptId::kNone, Instruction::kNotSpeculative);
         } else if (FlowGraphCompiler::SupportsUnboxedDoubles() &&
                    right_type->IsNullableDouble() &&
                    IsSupportedIntOperandForStaticDoubleOp(left_type)) {
@@ -601,7 +602,7 @@
             left_value = PrepareStaticOpInput(left_value, kDoubleCid, instr);
             right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
             replacement = new (Z) BinaryDoubleOpInstr(
-                op_kind, left_value, right_value, Thread::kNoDeoptId,
+                op_kind, left_value, right_value, DeoptId::kNone,
                 instr->token_pos(), Instruction::kNotSpeculative);
           }
         }
@@ -612,7 +613,7 @@
         Value* left_value = instr->PushArgumentAt(receiver_index)->value();
         left_value = PrepareReceiverOfDevirtualizedCall(left_value, kMintCid);
         replacement = new (Z)
-            UnaryInt64OpInstr(Token::kNEGATE, left_value, Thread::kNoDeoptId,
+            UnaryInt64OpInstr(Token::kNEGATE, left_value, DeoptId::kNone,
                               Instruction::kNotSpeculative);
         break;
       }
@@ -625,8 +626,8 @@
         if (right_type->IsNullableInt()) {
           left_value = PrepareReceiverOfDevirtualizedCall(left_value, kMintCid);
           right_value = PrepareStaticOpInput(right_value, kMintCid, instr);
-          replacement = new (Z) ShiftInt64OpInstr(
-              op_kind, left_value, right_value, Thread::kNoDeoptId);
+          replacement = new (Z) ShiftInt64OpInstr(op_kind, left_value,
+                                                  right_value, DeoptId::kNone);
         }
         break;
       }
@@ -650,7 +651,7 @@
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
           replacement = new (Z) EqualityCompareInstr(
               instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
-              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+              DeoptId::kNone, Instruction::kNotSpeculative);
         }
         break;
       }
@@ -667,7 +668,7 @@
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
           replacement = new (Z) RelationalOpInstr(
               instr->token_pos(), op_kind, left_value, right_value, kDoubleCid,
-              Thread::kNoDeoptId, Instruction::kNotSpeculative);
+              DeoptId::kNone, Instruction::kNotSpeculative);
         }
         break;
       }
@@ -683,7 +684,7 @@
               PrepareReceiverOfDevirtualizedCall(left_value, kDoubleCid);
           right_value = PrepareStaticOpInput(right_value, kDoubleCid, instr);
           replacement = new (Z) BinaryDoubleOpInstr(
-              op_kind, left_value, right_value, Thread::kNoDeoptId,
+              op_kind, left_value, right_value, DeoptId::kNone,
               instr->token_pos(), Instruction::kNotSpeculative);
         }
         break;
@@ -762,7 +763,7 @@
   const ICData& unary_checks =
       ICData::ZoneHandle(Z, instr->ic_data()->AsUnaryClassChecks());
   const intptr_t number_of_checks = unary_checks.NumberOfChecks();
-  if (FLAG_use_strong_mode_types && I->strong()) {
+  if (I->can_use_strong_mode_types()) {
     // In AOT strong mode, we avoid deopting speculation.
     // TODO(ajcbik): replace this with actual analysis phase
     //               that determines if checks are removed later.
@@ -799,7 +800,7 @@
     }
   }
 
-  if (I->strong() && FLAG_use_strong_mode_types &&
+  if (I->can_use_strong_mode_types() &&
       TryOptimizeInstanceCallUsingStaticTypes(instr)) {
     return;
   }
@@ -910,7 +911,8 @@
   }
   if (!receiver_class.IsNull()) {
     GrowableArray<intptr_t> class_ids(6);
-    if (thread()->cha()->ConcreteSubclasses(receiver_class, &class_ids)) {
+    if (thread()->compiler_state().cha().ConcreteSubclasses(receiver_class,
+                                                            &class_ids)) {
       // First check if all subclasses end up calling the same method.
       // If this is the case we will replace instance call with a direct
       // static call.
@@ -960,7 +962,7 @@
           // Create an ICData and map all previously seen classes (< i) to
           // the computed single_target.
           ic_data = ICData::New(function, instr->function_name(),
-                                args_desc_array, Thread::kNoDeoptId,
+                                args_desc_array, DeoptId::kNone,
                                 /* args_tested = */ 1, ICData::kOptimized);
           for (intptr_t j = 0; j < i; j++) {
             ic_data.AddReceiverCheck(class_ids[j], single_target);
@@ -981,7 +983,7 @@
           // Create fake IC data with the resolved target.
           const ICData& ic_data = ICData::Handle(
               ICData::New(flow_graph()->function(), instr->function_name(),
-                          args_desc_array, Thread::kNoDeoptId,
+                          args_desc_array, DeoptId::kNone,
                           /* args_tested = */ 1, ICData::kOptimized));
           cls = single_target.Owner();
           ic_data.AddReceiverCheck(cls.id(), single_target);
@@ -1082,7 +1084,8 @@
       call->token_pos(), getter_name, Token::kGET, get_arguments,
       /*type_args_len=*/0,
       /*argument_names=*/Object::empty_array(),
-      /*checked_argument_count=*/1, thread()->GetNextDeoptId());
+      /*checked_argument_count=*/1,
+      thread()->compiler_state().GetNextDeoptId());
 
   // Arguments to the .call() are the same as arguments to the
   // original call (including type arguments), but receiver
@@ -1102,7 +1105,8 @@
   InstanceCallInstr* invoke_call = new (Z) InstanceCallInstr(
       call->token_pos(), Symbols::Call(), Token::kILLEGAL, call_arguments,
       call->type_args_len(), call->argument_names(),
-      /*checked_argument_count=*/1, thread()->GetNextDeoptId());
+      /*checked_argument_count=*/1,
+      thread()->compiler_state().GetNextDeoptId());
 
   // Insert all new instructions, except .call() invocation into the
   // graph.
@@ -1185,7 +1189,7 @@
     StrictCompareInstr* check_cid = new (Z)
         StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT,
                            new (Z) Value(left_cid), new (Z) Value(lower_cid),
-                           /* number_check = */ false, Thread::kNoDeoptId);
+                           /* number_check = */ false, DeoptId::kNone);
     ReplaceCall(call, check_cid);
     return true;
   }
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index e3b3919..aa25729 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -22,6 +22,7 @@
 #include "vm/compiler/backend/type_propagator.h"
 #include "vm/compiler/cha.h"
 #include "vm/compiler/compiler_pass.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart_entry.h"
@@ -883,7 +884,7 @@
         args_desc = ArgumentsDescriptor::New(0,  // No type argument vector.
                                              function.num_fixed_parameters());
         cids.Clear();
-        if (T->cha()->ConcreteSubclasses(cls, &cids)) {
+        if (CHA::ConcreteSubclasses(cls, &cids)) {
           for (intptr_t j = 0; j < cids.length(); ++j) {
             subcls ^= I->class_table()->At(cids[j]);
             if (subcls.is_allocated()) {
@@ -2832,17 +2833,13 @@
       true, FLAG_max_speculative_inlining_attempts);
 
   while (!done) {
-    const intptr_t prev_deopt_id = thread()->deopt_id();
-    thread()->set_deopt_id(0);
     LongJumpScope jump;
     const intptr_t val = setjmp(*jump.Set());
     if (val == 0) {
       FlowGraph* flow_graph = nullptr;
       ZoneGrowableArray<const ICData*>* ic_data_array = nullptr;
 
-      // Class hierarchy analysis is registered with the thread in the
-      // constructor and unregisters itself upon destruction.
-      CHA cha(thread());
+      CompilerState compiler_state(thread());
 
       // TimerScope needs an isolate to be properly terminated in case of a
       // LongJump.
@@ -2979,8 +2976,6 @@
       }
       is_compiled = false;
     }
-    // Reset global isolate state.
-    thread()->set_deopt_id(prev_deopt_id);
   }
   return is_compiled;
 }
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 6f6ffce..397c4e9 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -3007,8 +3007,8 @@
   }
 }
 
-void Assembler::LeaveFrame(RegList regs) {
-  ASSERT((regs & (1 << PC)) == 0);  // Must not pop PC.
+void Assembler::LeaveFrame(RegList regs, bool allow_pop_pc) {
+  ASSERT(allow_pop_pc || (regs & (1 << PC)) == 0);  // Must not pop PC.
   if ((regs & (1 << FP)) != 0) {
     // Use FP to set SP.
     sub(SP, FP, Operand(4 * NumRegsBelowFP(regs)));
@@ -3122,18 +3122,26 @@
   AddImmediate(SP, -extra_size);
 }
 
-void Assembler::LeaveDartFrame(RestorePP restore_pp) {
-  if (restore_pp == kRestoreCallerPP) {
-    ldr(PP,
-        Address(FP, compiler_frame_layout.saved_caller_pp_from_fp * kWordSize));
-    set_constant_pool_allowed(false);
-  }
+void Assembler::LeaveDartFrame() {
+  ldr(PP,
+      Address(FP, compiler_frame_layout.saved_caller_pp_from_fp * kWordSize));
+  set_constant_pool_allowed(false);
 
   // This will implicitly drop saved PP, PC marker due to restoring SP from FP
   // first.
   LeaveFrame((1 << FP) | (1 << LR));
 }
 
+void Assembler::LeaveDartFrameAndReturn() {
+  ldr(PP,
+      Address(FP, compiler_frame_layout.saved_caller_pp_from_fp * kWordSize));
+  set_constant_pool_allowed(false);
+
+  // This will implicitly drop saved PP, PC marker due to restoring SP from FP
+  // first.
+  LeaveFrame((1 << FP) | (1 << PC), /*allow_pop_pc=*/true);
+}
+
 void Assembler::EnterStubFrame() {
   EnterDartFrame(0);
 }
@@ -3272,6 +3280,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     LoadImmediate(IP, tags);
     str(IP, FieldAddress(instance_reg, Object::tags_offset()));
 
@@ -3318,6 +3327,7 @@
     uint32_t tags = 0;
     tags = RawObject::ClassIdTag::update(cid, tags);
     tags = RawObject::SizeTag::update(instance_size, tags);
+    tags = RawObject::NewBit::update(true, tags);
     LoadImmediate(temp2, tags);
     str(temp2, FieldAddress(instance, Array::tags_offset()));  // Store tags.
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 90d554c..6669caa 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -1010,7 +1010,7 @@
 
   // Function frame setup and tear down.
   void EnterFrame(RegList regs, intptr_t frame_space);
-  void LeaveFrame(RegList regs);
+  void LeaveFrame(RegList regs, bool allow_pop_pc = false);
   void Ret();
   void ReserveAlignedFrameSpace(intptr_t frame_space);
 
@@ -1026,7 +1026,22 @@
   // enable easy access to the RawInstruction object of code corresponding
   // to this frame.
   void EnterDartFrame(intptr_t frame_size);
-  void LeaveDartFrame(RestorePP restore_pp = kRestoreCallerPP);
+
+  void LeaveDartFrame();
+
+  // Leaves the frame and returns.
+  //
+  // The difference to "LeaveDartFrame(); Ret();" is that we return using
+  //
+  //   ldmia sp!, {fp, pc}
+  //
+  // instead of
+  //
+  //   ldmia sp!, {fp, lr}
+  //   blx lr
+  //
+  // This means that our return must go to ARM mode (and not thumb).
+  void LeaveDartFrameAndReturn();
 
   // Set up a Dart frame for a function compiled for on-stack replacement.
   // The frame layout is a normal Dart frame, but the frame is partially set
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 0d6db19..118f0d7 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1387,6 +1387,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     // Extends the 32 bit tags with zeros, which is the uninitialized
     // hash code.
     LoadImmediate(TMP, tags);
@@ -1433,6 +1434,7 @@
     uint32_t tags = 0;
     tags = RawObject::ClassIdTag::update(cid, tags);
     tags = RawObject::SizeTag::update(instance_size, tags);
+    tags = RawObject::NewBit::update(true, tags);
     // Extends the 32 bit tags with zeros, which is the uninitialized
     // hash code.
     LoadImmediate(temp2, tags);
diff --git a/runtime/vm/compiler/assembler/assembler_dbc_test.cc b/runtime/vm/compiler/assembler/assembler_dbc_test.cc
index fba04bd..26cc5a4 100644
--- a/runtime/vm/compiler/assembler/assembler_dbc_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_dbc_test.cc
@@ -6,19 +6,21 @@
 #if defined(TARGET_ARCH_DBC)
 
 #include "vm/compiler/assembler/assembler.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/stack_frame.h"
 #include "vm/unit_test.h"
 
 namespace dart {
 
 static RawObject* ExecuteTest(const Code& code) {
-  Thread* thread = Thread::Current();
-  TransitionToGenerated transition(thread);
   const intptr_t kTypeArgsLen = 0;
   const intptr_t kNumArgs = 0;
-  return Simulator::Current()->Call(
-      code, Array::Handle(ArgumentsDescriptor::New(kTypeArgsLen, kNumArgs)),
-      Array::Handle(Array::New(0)), thread);
+  const Array& args_desc =
+      Array::Handle(ArgumentsDescriptor::New(kTypeArgsLen, kNumArgs));
+  const Array& args = Array::Handle(Array::New(0));
+  Thread* thread = Thread::Current();
+  TransitionToGenerated transition(thread);
+  return Simulator::Current()->Call(code, args_desc, args, thread);
 }
 
 #define EXECUTE_TEST_CODE_INTPTR(code)                                         \
@@ -82,7 +84,7 @@
       Array::Handle(ArgumentsDescriptor::New(kTypeArgsLen, kNumArgs));
   const ICData& ic_data = ICData::Handle(ICData::New(
       dummy_instance_function, String::Handle(dummy_instance_function.name()),
-      dummy_arguments_descriptor, Thread::kNoDeoptId, 2, ICData::kInstance));
+      dummy_arguments_descriptor, DeoptId::kNone, 2, ICData::kInstance));
 
   // Wire up the Function in the ICData.
   GrowableArray<intptr_t> cids(2);
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index 88d0063..5e77c27 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -2233,6 +2233,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     movl(FieldAddress(instance_reg, Object::tags_offset()), Immediate(tags));
   } else {
     jmp(failure);
@@ -2277,6 +2278,7 @@
     uint32_t tags = 0;
     tags = RawObject::ClassIdTag::update(cid, tags);
     tags = RawObject::SizeTag::update(instance_size, tags);
+    tags = RawObject::NewBit::update(true, tags);
     movl(FieldAddress(instance, Object::tags_offset()), Immediate(tags));
   } else {
     jmp(failure);
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 5ce6565..07f946f 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -1705,6 +1705,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     // Extends the 32 bit tags with zeros, which is the uninitialized
     // hash code.
     MoveImmediate(FieldAddress(instance_reg, Object::tags_offset()),
@@ -1751,6 +1752,7 @@
     uint32_t tags = 0;
     tags = RawObject::ClassIdTag::update(cid, tags);
     tags = RawObject::SizeTag::update(instance_size, tags);
+    tags = RawObject::NewBit::update(true, tags);
     // Extends the 32 bit tags with zeros, which is the uninitialized
     // hash code.
     movq(FieldAddress(instance, Array::tags_offset()), Immediate(tags));
diff --git a/runtime/vm/compiler/assembler/disassembler_test.cc b/runtime/vm/compiler/assembler/disassembler_test.cc
index 86f6371..fa208ec 100644
--- a/runtime/vm/compiler/assembler/disassembler_test.cc
+++ b/runtime/vm/compiler/assembler/disassembler_test.cc
@@ -13,7 +13,7 @@
 // method on DBC assembler.
 #if !defined(PRODUCT) && !defined(TARGET_ARCH_DBC)
 
-TEST_CASE(Disassembler) {
+ISOLATE_UNIT_TEST_CASE(Disassembler) {
   ObjectPoolWrapper object_pool_wrapper;
   Assembler assembler(&object_pool_wrapper);
 
diff --git a/runtime/vm/compiler/backend/block_scheduler.cc b/runtime/vm/compiler/backend/block_scheduler.cc
index acc0378..7b26cd6 100644
--- a/runtime/vm/compiler/backend/block_scheduler.cc
+++ b/runtime/vm/compiler/backend/block_scheduler.cc
@@ -62,7 +62,7 @@
   if (Compiler::IsBackgroundCompilation() && ic_data_array.IsNull()) {
     // Deferred loading cleared ic_data_array.
     Compiler::AbortBackgroundCompilation(
-        Thread::kNoDeoptId, "BlockScheduler: ICData array cleared");
+        DeoptId::kNone, "BlockScheduler: ICData array cleared");
   }
   if (ic_data_array.IsNull()) {
     DEBUG_ASSERT(Isolate::Current()->HasAttemptedReload());
diff --git a/runtime/vm/compiler/backend/branch_optimizer.cc b/runtime/vm/compiler/backend/branch_optimizer.cc
index 78615fc..7eeda64 100644
--- a/runtime/vm/compiler/backend/branch_optimizer.cc
+++ b/runtime/vm/compiler/backend/branch_optimizer.cc
@@ -65,8 +65,8 @@
   // Convert a target block into a join block.  Branches will be duplicated
   // so the former true and false targets become joins of the control flows
   // from all the duplicated branches.
-  JoinEntryInstr* join = new (zone) JoinEntryInstr(
-      target->block_id(), target->try_index(), Thread::kNoDeoptId);
+  JoinEntryInstr* join = new (zone)
+      JoinEntryInstr(target->block_id(), target->try_index(), DeoptId::kNone);
   join->InheritDeoptTarget(zone, target);
   join->LinkTo(target->next());
   join->set_last_instruction(target->last_instruction());
@@ -82,7 +82,7 @@
   ComparisonInstr* new_comparison =
       comparison->CopyWithNewOperands(new_left, new_right);
   BranchInstr* new_branch =
-      new (zone) BranchInstr(new_comparison, Thread::kNoDeoptId);
+      new (zone) BranchInstr(new_comparison, DeoptId::kNone);
   return new_branch;
 }
 
@@ -182,24 +182,21 @@
 
         // Connect the branch to the true and false joins, via empty target
         // blocks.
-        TargetEntryInstr* true_target =
-            new (zone) TargetEntryInstr(flow_graph->max_block_id() + 1,
-                                        block->try_index(), Thread::kNoDeoptId);
+        TargetEntryInstr* true_target = new (zone) TargetEntryInstr(
+            flow_graph->max_block_id() + 1, block->try_index(), DeoptId::kNone);
         true_target->InheritDeoptTarget(zone, join_true);
-        TargetEntryInstr* false_target =
-            new (zone) TargetEntryInstr(flow_graph->max_block_id() + 2,
-                                        block->try_index(), Thread::kNoDeoptId);
+        TargetEntryInstr* false_target = new (zone) TargetEntryInstr(
+            flow_graph->max_block_id() + 2, block->try_index(), DeoptId::kNone);
         false_target->InheritDeoptTarget(zone, join_false);
         flow_graph->set_max_block_id(flow_graph->max_block_id() + 2);
         *new_branch->true_successor_address() = true_target;
         *new_branch->false_successor_address() = false_target;
-        GotoInstr* goto_true =
-            new (zone) GotoInstr(join_true, Thread::kNoDeoptId);
+        GotoInstr* goto_true = new (zone) GotoInstr(join_true, DeoptId::kNone);
         goto_true->InheritDeoptTarget(zone, join_true);
         true_target->LinkTo(goto_true);
         true_target->set_last_instruction(goto_true);
         GotoInstr* goto_false =
-            new (zone) GotoInstr(join_false, Thread::kNoDeoptId);
+            new (zone) GotoInstr(join_false, DeoptId::kNone);
         goto_false->InheritDeoptTarget(zone, join_false);
         false_target->LinkTo(goto_false);
         false_target->set_last_instruction(goto_false);
@@ -302,9 +299,9 @@
 
           ComparisonInstr* new_comparison = comparison->CopyWithNewOperands(
               comparison->left()->Copy(zone), comparison->right()->Copy(zone));
-          IfThenElseInstr* if_then_else = new (zone)
-              IfThenElseInstr(new_comparison, if_true->Copy(zone),
-                              if_false->Copy(zone), Thread::kNoDeoptId);
+          IfThenElseInstr* if_then_else =
+              new (zone) IfThenElseInstr(new_comparison, if_true->Copy(zone),
+                                         if_false->Copy(zone), DeoptId::kNone);
           flow_graph->InsertBefore(branch, if_then_else, NULL,
                                    FlowGraph::kValue);
 
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 7850d4e..4d88f97 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -237,6 +237,8 @@
 
 void ConstantPropagator::VisitCheckClass(CheckClassInstr* instr) {}
 
+void ConstantPropagator::VisitCheckCondition(CheckConditionInstr* instr) {}
+
 void ConstantPropagator::VisitCheckClassId(CheckClassIdInstr* instr) {}
 
 void ConstantPropagator::VisitGuardFieldClass(GuardFieldClassInstr* instr) {}
@@ -1300,7 +1302,7 @@
         JoinEntryInstr* join = if_true->AsJoinEntry();
         if (join->phis() == NULL) {
           GotoInstr* jump =
-              new (Z) GotoInstr(if_true->AsJoinEntry(), Thread::kNoDeoptId);
+              new (Z) GotoInstr(if_true->AsJoinEntry(), DeoptId::kNone);
           jump->InheritDeoptTarget(Z, branch);
 
           Instruction* previous = branch->previous();
@@ -1442,8 +1444,8 @@
         ASSERT(reachable_->Contains(if_false->preorder_number()));
         ASSERT(if_false->parallel_move() == NULL);
         ASSERT(if_false->loop_info() == NULL);
-        join = new (Z) JoinEntryInstr(
-            if_false->block_id(), if_false->try_index(), Thread::kNoDeoptId);
+        join = new (Z) JoinEntryInstr(if_false->block_id(),
+                                      if_false->try_index(), DeoptId::kNone);
         join->InheritDeoptTarget(Z, if_false);
         if_false->UnuseAllInputs();
         next = if_false->next();
@@ -1451,7 +1453,7 @@
         ASSERT(if_true->parallel_move() == NULL);
         ASSERT(if_true->loop_info() == NULL);
         join = new (Z) JoinEntryInstr(if_true->block_id(), if_true->try_index(),
-                                      Thread::kNoDeoptId);
+                                      DeoptId::kNone);
         join->InheritDeoptTarget(Z, if_true);
         if_true->UnuseAllInputs();
         next = if_true->next();
@@ -1462,7 +1464,7 @@
         // Drop the comparison, which does not have side effects as long
         // as it is a strict compare (the only one we can determine is
         // constant with the current analysis).
-        GotoInstr* jump = new (Z) GotoInstr(join, Thread::kNoDeoptId);
+        GotoInstr* jump = new (Z) GotoInstr(join, DeoptId::kNone);
         jump->InheritDeoptTarget(Z, branch);
 
         Instruction* previous = branch->previous();
diff --git a/runtime/vm/compiler/backend/flow_graph.cc b/runtime/vm/compiler/backend/flow_graph.cc
index a6f8c52..e92b110 100644
--- a/runtime/vm/compiler/backend/flow_graph.cc
+++ b/runtime/vm/compiler/backend/flow_graph.cc
@@ -12,6 +12,7 @@
 #include "vm/compiler/backend/il_printer.h"
 #include "vm/compiler/backend/range_analysis.h"
 #include "vm/compiler/cha.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/growable_array.h"
 #include "vm/object_store.h"
@@ -435,7 +436,7 @@
   if (function().IsDynamicFunction() && IsReceiver(receiver->definition())) {
     // Call receiver is callee receiver: calling "this.g()" in f().
     receiver_class = function().Owner();
-  } else if (FLAG_use_strong_mode_types && isolate()->strong()) {
+  } else if (isolate()->can_use_strong_mode_types()) {
     // In strong mode, get the receiver's compile type. Note that
     // we allow nullable types, which may result in just generating
     // a null check rather than the more elaborate class check
@@ -507,8 +508,8 @@
   // has a null value are excluded above (to avoid throwing an exception
   // on something valid, like null.hashCode).
   intptr_t subclass_count = 0;
-  if (!thread()->cha()->HasOverride(receiver_class, method_name,
-                                    &subclass_count)) {
+  CHA& cha = thread()->compiler_state().cha();
+  if (!cha.HasOverride(receiver_class, method_name, &subclass_count)) {
     if (FLAG_trace_cha) {
       THR_Print(
           "  **(CHA) Instance call needs no class check since there "
@@ -516,7 +517,7 @@
           method_name.ToCString(), receiver_class.ToCString());
     }
     if (FLAG_use_cha_deopt) {
-      thread()->cha()->AddToGuardedClasses(receiver_class, subclass_count);
+      cha.AddToGuardedClasses(receiver_class, subclass_count);
     }
     return receiver_maybe_null ? ToCheck::kCheckNull : ToCheck::kNoCheck;
   }
@@ -535,6 +536,30 @@
       CheckClassInstr(new (zone()) Value(to_check), deopt_id, cids, token_pos);
 }
 
+void FlowGraph::AddExactnessGuard(InstanceCallInstr* call,
+                                  intptr_t receiver_cid) {
+  const Class& cls = Class::Handle(
+      zone(), Isolate::Current()->class_table()->At(receiver_cid));
+
+  Definition* load_type_args = new (zone())
+      LoadFieldInstr(call->Receiver()->CopyWithType(),
+                     NativeFieldDesc::GetTypeArgumentsFieldFor(zone(), cls),
+                     call->token_pos());
+  InsertBefore(call, load_type_args, call->env(), FlowGraph::kValue);
+
+  const AbstractType& type =
+      AbstractType::Handle(zone(), call->ic_data()->StaticReceiverType());
+  ASSERT(!type.IsNull());
+  const TypeArguments& args = TypeArguments::Handle(zone(), type.arguments());
+  Instruction* guard = new (zone()) CheckConditionInstr(
+      new StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT,
+                             new (zone()) Value(load_type_args),
+                             new (zone()) Value(GetConstant(args)),
+                             /*needs_number_check=*/false, call->deopt_id()),
+      call->deopt_id());
+  InsertBefore(call, guard, call->env(), FlowGraph::kEffect);
+}
+
 bool FlowGraph::VerifyUseLists() {
   // Verify the initial definitions.
   for (intptr_t i = 0; i < graph_entry_->initial_definitions()->length(); ++i) {
@@ -1091,7 +1116,7 @@
       if (parsed_function().has_arg_desc_var()) {
         Definition* defn =
             new SpecialParameterInstr(SpecialParameterInstr::kArgDescriptor,
-                                      Thread::kNoDeoptId, graph_entry_);
+                                      DeoptId::kNone, graph_entry_);
         AllocateSSAIndexes(defn);
         AddToInitialDefinitions(defn);
         env[ArgumentDescriptorEnvIndex()] = defn;
@@ -1169,10 +1194,10 @@
       Definition* param = nullptr;
       if (raw_exception_var_envindex == i) {
         param = new SpecialParameterInstr(SpecialParameterInstr::kException,
-                                          Thread::kNoDeoptId, catch_entry);
+                                          DeoptId::kNone, catch_entry);
       } else if (raw_stacktrace_var_envindex == i) {
         param = new SpecialParameterInstr(SpecialParameterInstr::kStackTrace,
-                                          Thread::kNoDeoptId, catch_entry);
+                                          DeoptId::kNone, catch_entry);
       } else {
         param = new (zone()) ParameterInstr(i, block_entry);
       }
@@ -1290,8 +1315,7 @@
           captured_parameters_->Add(index);
         }
 
-        if ((phi != NULL) && isolate()->strong() &&
-            FLAG_use_strong_mode_types) {
+        if ((phi != NULL) && isolate()->can_use_strong_mode_types()) {
           // Assign type to Phi if it doesn't have a type yet.
           // For a Phi to appear in the local variable it either was placed
           // there as incoming value by renaming or it was stored there by
@@ -1627,7 +1651,7 @@
   if (IsUnboxedInteger(from) && IsUnboxedInteger(to)) {
     const intptr_t deopt_id = (to == kUnboxedInt32) && (deopt_target != NULL)
                                   ? deopt_target->DeoptimizationTarget()
-                                  : Thread::kNoDeoptId;
+                                  : DeoptId::kNone;
     converted = new (Z)
         UnboxedIntConverterInstr(from, to, use->CopyWithType(), deopt_id);
   } else if ((from == kUnboxedInt32) && (to == kUnboxedDouble)) {
@@ -1636,13 +1660,13 @@
              CanConvertInt64ToDouble()) {
     const intptr_t deopt_id = (deopt_target != NULL)
                                   ? deopt_target->DeoptimizationTarget()
-                                  : Thread::kNoDeoptId;
+                                  : DeoptId::kNone;
     ASSERT(CanUnboxDouble());
     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()
-                                  : Thread::kNoDeoptId;
+                                  : DeoptId::kNone;
     converted = UnboxInstr::Create(to, use->CopyWithType(), deopt_id,
                                    use->instruction()->speculative_mode());
   } else if ((to == kTagged) && Boxing::Supports(from)) {
@@ -1654,7 +1678,7 @@
     // trigger a deoptimization if executed. See #12417 for a discussion.
     const intptr_t deopt_id = (deopt_target != NULL)
                                   ? deopt_target->DeoptimizationTarget()
-                                  : Thread::kNoDeoptId;
+                                  : DeoptId::kNone;
     ASSERT(Boxing::Supports(from));
     ASSERT(Boxing::Supports(to));
     Definition* boxed = BoxInstr::Create(from, use->CopyWithType());
@@ -2254,7 +2278,7 @@
     // Replace Mint op with Smi op.
     BinarySmiOpInstr* smi_op = new (Z) BinarySmiOpInstr(
         Token::kBIT_AND, new (Z) Value(left_instr), new (Z) Value(right_instr),
-        Thread::kNoDeoptId);  // BIT_AND cannot deoptimize.
+        DeoptId::kNone);  // BIT_AND cannot deoptimize.
     bit_and_instr->ReplaceWith(smi_op, current_iterator);
   }
 }
@@ -2346,7 +2370,7 @@
 static TargetEntryInstr* NewTarget(FlowGraph* graph, Instruction* inherit) {
   TargetEntryInstr* target = new (graph->zone())
       TargetEntryInstr(graph->allocate_block_id(),
-                       inherit->GetBlock()->try_index(), Thread::kNoDeoptId);
+                       inherit->GetBlock()->try_index(), DeoptId::kNone);
   target->InheritDeoptTarget(graph->zone(), inherit);
   return target;
 }
@@ -2354,7 +2378,7 @@
 static JoinEntryInstr* NewJoin(FlowGraph* graph, Instruction* inherit) {
   JoinEntryInstr* join = new (graph->zone())
       JoinEntryInstr(graph->allocate_block_id(),
-                     inherit->GetBlock()->try_index(), Thread::kNoDeoptId);
+                     inherit->GetBlock()->try_index(), DeoptId::kNone);
   join->InheritDeoptTarget(graph->zone(), inherit);
   return join;
 }
@@ -2362,7 +2386,7 @@
 static GotoInstr* NewGoto(FlowGraph* graph,
                           JoinEntryInstr* target,
                           Instruction* inherit) {
-  GotoInstr* got = new (graph->zone()) GotoInstr(target, Thread::kNoDeoptId);
+  GotoInstr* got = new (graph->zone()) GotoInstr(target, DeoptId::kNone);
   got->InheritDeoptTarget(graph->zone(), inherit);
   return got;
 }
@@ -2370,7 +2394,7 @@
 static BranchInstr* NewBranch(FlowGraph* graph,
                               ComparisonInstr* cmp,
                               Instruction* inherit) {
-  BranchInstr* bra = new (graph->zone()) BranchInstr(cmp, Thread::kNoDeoptId);
+  BranchInstr* bra = new (graph->zone()) BranchInstr(cmp, DeoptId::kNone);
   bra->InheritDeoptTarget(graph->zone(), inherit);
   return bra;
 }
@@ -2452,7 +2476,7 @@
   StrictCompareInstr* circuit = new (zone()) StrictCompareInstr(
       inherit->token_pos(), Token::kEQ_STRICT, new (zone()) Value(phi),
       new (zone()) Value(GetConstant(Bool::True())), false,
-      Thread::kNoDeoptId);  // don't inherit
+      DeoptId::kNone);  // don't inherit
 
   // Return new blocks through the second diamond.
   return NewDiamond(mid_point, inherit, circuit, b_true, b_false);
diff --git a/runtime/vm/compiler/backend/flow_graph.h b/runtime/vm/compiler/backend/flow_graph.h
index a587613..37445e6 100644
--- a/runtime/vm/compiler/backend/flow_graph.h
+++ b/runtime/vm/compiler/backend/flow_graph.h
@@ -178,6 +178,8 @@
                                 intptr_t deopt_id,
                                 TokenPosition token_pos);
 
+  void AddExactnessGuard(InstanceCallInstr* call, intptr_t receiver_cid);
+
   intptr_t current_ssa_temp_index() const { return current_ssa_temp_index_; }
   void set_current_ssa_temp_index(intptr_t index) {
     current_ssa_temp_index_ = index;
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 6574c5e..ad396ce 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -149,7 +149,7 @@
     // No need to collect extra ICData objects created during compilation.
     deopt_id_to_ic_data_ = nullptr;
   } else {
-    const intptr_t len = thread()->deopt_id();
+    const intptr_t len = thread()->compiler_state().deopt_id();
     deopt_id_to_ic_data_->EnsureLength(len, nullptr);
   }
   ASSERT(assembler != NULL);
@@ -425,10 +425,10 @@
   AddCurrentDescriptor(kind, deopt_id, token_pos);
   RecordSafepoint(locs);
   EmitCatchEntryState();
-  if (deopt_id != Thread::kNoDeoptId) {
+  if (deopt_id != DeoptId::kNone) {
     // Marks either the continuation point in unoptimized code or the
     // deoptimization point in optimized code, after call.
-    const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+    const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
     if (is_optimizing()) {
       AddDeoptIndexAtCall(deopt_id_after);
     } else {
@@ -1147,7 +1147,7 @@
                                               RawPcDescriptors::Kind kind,
                                               LocationSummary* locs) {
   GenerateCall(token_pos, stub_entry, kind, locs);
-  const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+  const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
   if (is_optimizing()) {
     AddDeoptIndexAtCall(deopt_id_after);
   } else {
@@ -1157,6 +1157,34 @@
   }
 }
 
+static const StubEntry* StubEntryFor(const ICData& ic_data, bool optimized) {
+  switch (ic_data.NumArgsTested()) {
+    case 1:
+#if defined(TARGET_ARCH_X64)
+      if (ic_data.IsTrackingExactness()) {
+        if (optimized) {
+          return StubCode::
+              OneArgOptimizedCheckInlineCacheWithExactnessCheck_entry();
+        } else {
+          return StubCode::OneArgCheckInlineCacheWithExactnessCheck_entry();
+        }
+      }
+#else
+      // TODO(dartbug.com/34170) Port exactness tracking to other platforms.
+      ASSERT(!ic_data.IsTrackingExactness());
+#endif
+      return optimized ? StubCode::OneArgOptimizedCheckInlineCache_entry()
+                       : StubCode::OneArgCheckInlineCache_entry();
+    case 2:
+      ASSERT(!ic_data.IsTrackingExactness());
+      return optimized ? StubCode::TwoArgsOptimizedCheckInlineCache_entry()
+                       : StubCode::TwoArgsCheckInlineCache_entry();
+    default:
+      UNIMPLEMENTED();
+      return nullptr;
+  }
+}
+
 void FlowGraphCompiler::GenerateInstanceCall(intptr_t deopt_id,
                                              TokenPosition token_pos,
                                              LocationSummary* locs,
@@ -1174,20 +1202,8 @@
     // Emit IC call that will count and thus may need reoptimization at
     // function entry.
     ASSERT(may_reoptimize() || flow_graph().IsCompiledForOsr());
-    switch (ic_data.NumArgsTested()) {
-      case 1:
-        EmitOptimizedInstanceCall(
-            *StubCode::OneArgOptimizedCheckInlineCache_entry(), ic_data,
-            deopt_id, token_pos, locs, entry_kind);
-        return;
-      case 2:
-        EmitOptimizedInstanceCall(
-            *StubCode::TwoArgsOptimizedCheckInlineCache_entry(), ic_data,
-            deopt_id, token_pos, locs, entry_kind);
-        return;
-      default:
-        UNIMPLEMENTED();
-    }
+    EmitOptimizedInstanceCall(*StubEntryFor(ic_data, /*optimized=*/true),
+                              ic_data, deopt_id, token_pos, locs, entry_kind);
     return;
   }
 
@@ -1200,18 +1216,8 @@
     return;
   }
 
-  switch (ic_data.NumArgsTested()) {
-    case 1:
-      EmitInstanceCall(*StubCode::OneArgCheckInlineCache_entry(), ic_data,
-                       deopt_id, token_pos, locs);
-      break;
-    case 2:
-      EmitInstanceCall(*StubCode::TwoArgsCheckInlineCache_entry(), ic_data,
-                       deopt_id, token_pos, locs);
-      break;
-    default:
-      UNIMPLEMENTED();
-  }
+  EmitInstanceCall(*StubEntryFor(ic_data, /*optimized=*/false), ic_data,
+                   deopt_id, token_pos, locs);
 }
 
 void FlowGraphCompiler::GenerateStaticCall(intptr_t deopt_id,
@@ -1645,7 +1651,8 @@
     intptr_t deopt_id,
     const String& target_name,
     const Array& arguments_descriptor,
-    intptr_t num_args_tested) {
+    intptr_t num_args_tested,
+    const AbstractType& receiver_type) {
   if ((deopt_id_to_ic_data_ != NULL) &&
       ((*deopt_id_to_ic_data_)[deopt_id] != NULL)) {
     const ICData* res = (*deopt_id_to_ic_data_)[deopt_id];
@@ -1655,12 +1662,13 @@
     ASSERT(res->TypeArgsLen() ==
            ArgumentsDescriptor(arguments_descriptor).TypeArgsLen());
     ASSERT(!res->is_static_call());
+    ASSERT(res->StaticReceiverType() == receiver_type.raw());
     return res;
   }
   const ICData& ic_data = ICData::ZoneHandle(
       zone(), ICData::New(parsed_function().function(), target_name,
                           arguments_descriptor, deopt_id, num_args_tested,
-                          ICData::kInstance));
+                          ICData::kInstance, receiver_type));
 #if defined(TAG_IC_DATA)
   ic_data.set_tag(ICData::Tag::kInstanceCall);
 #endif
@@ -1761,7 +1769,8 @@
   if (!LookupMethodFor(cid, selector, args_desc, &fn)) return NULL;
 
   CallTargets* targets = new (zone) CallTargets(zone);
-  targets->Add(new (zone) TargetInfo(cid, cid, &fn, /* count = */ 1));
+  targets->Add(new (zone) TargetInfo(cid, cid, &fn, /* count = */ 1,
+                                     StaticTypeExactnessState::NotTracking()));
 
   return targets;
 }
@@ -2200,7 +2209,7 @@
     __ CallRuntime(runtime_entry_, num_args_);
   }
   // Can't query deopt_id() without checking if instruction can deoptimize...
-  intptr_t deopt_id = Thread::kNoDeoptId;
+  intptr_t deopt_id = DeoptId::kNone;
   if (instruction()->CanDeoptimize() ||
       instruction()->CanBecomeDeoptimizationTarget()) {
     deopt_id = instruction()->deopt_id();
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 71d04b0..7baed3c 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -699,7 +699,8 @@
   const ICData* GetOrAddInstanceCallICData(intptr_t deopt_id,
                                            const String& target_name,
                                            const Array& arguments_descriptor,
-                                           intptr_t num_args_tested);
+                                           intptr_t num_args_tested,
+                                           const AbstractType& receiver_type);
 
   const ICData* GetOrAddStaticCallICData(intptr_t deopt_id,
                                          const Function& target,
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 8762e1b..cd5b029 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -118,7 +118,7 @@
     // For any outer environment the deopt id is that of the call instruction
     // which is recorded in the outer environment.
     builder->AddReturnAddress(current->function(),
-                              Thread::ToDeoptAfter(current->deopt_id()),
+                              DeoptId::ToDeoptAfter(current->deopt_id()),
                               slot_ix++);
 
     // The values of outgoing arguments can be changed from the inlined call so
@@ -890,16 +890,25 @@
 //   R4: arguments descriptor array.
 void FlowGraphCompiler::CompileGraph() {
   InitCompiler();
-#ifdef DART_PRECOMPILER
-  const Function& function = parsed_function().function();
-  if (function.IsDynamicFunction()) {
-    SpecialStatsBegin(CombinedCodeStatistics::kTagCheckedEntry);
-    __ MonomorphicCheckedEntry();
-    SpecialStatsEnd(CombinedCodeStatistics::kTagCheckedEntry);
-  }
-#endif  // DART_PRECOMPILER
+  if (FLAG_precompiled_mode) {
+    const Function& function = parsed_function().function();
+    if (function.IsDynamicFunction()) {
+      SpecialStatsBegin(CombinedCodeStatistics::kTagCheckedEntry);
+      __ MonomorphicCheckedEntry();
+      SpecialStatsEnd(CombinedCodeStatistics::kTagCheckedEntry);
+    }
 
-  __ set_constant_pool_allowed(true);
+    // For JIT we have multiple entrypoints functionality which moved the
+    // intrinsification as well as the setup of the frame to the
+    // [TargetEntryInstr::EmitNativeCode].
+    if (TryIntrinsify()) {
+      // Skip regular code generation.
+      return;
+    }
+    EmitFrameEntry();
+    ASSERT(__ constant_pool_allowed());
+  }
+
   VisitBlocks();
 
   __ bkpt(0);
@@ -912,7 +921,7 @@
                                      RawPcDescriptors::Kind kind,
                                      LocationSummary* locs) {
   __ BranchLink(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
   AddStubCallTarget(Code::ZoneHandle(stub_entry.code()));
 }
 
@@ -921,7 +930,7 @@
                                               RawPcDescriptors::Kind kind,
                                               LocationSummary* locs) {
   __ BranchLinkPatchable(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
 }
 
 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
@@ -1036,7 +1045,7 @@
   __ blx(LR);
 
   RecordSafepoint(locs, slow_path_argument_count);
-  const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+  const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
   if (FLAG_precompiled_mode) {
     // Megamorphic calls may occur in slow path stubs.
     // If valid use try_index argument.
@@ -1044,14 +1053,12 @@
       try_index = CurrentTryIndex();
     }
     AddDescriptor(RawPcDescriptors::kOther, assembler()->CodeSize(),
-                  Thread::kNoDeoptId, token_pos, try_index);
+                  DeoptId::kNone, token_pos, try_index);
   } else if (is_optimizing()) {
-    AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
-                         token_pos);
+    AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
     AddDeoptIndexAtCall(deopt_id_after);
   } else {
-    AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
-                         token_pos);
+    AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
     // Add deoptimization continuation point after the call and before the
     // arguments are removed.
     AddCurrentDescriptor(RawPcDescriptors::kDeopt, deopt_id_after, token_pos);
@@ -1077,7 +1084,7 @@
   __ LoadUniqueObject(R9, ic_data);
   __ blx(LR);
 
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, RawPcDescriptors::kOther,
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, RawPcDescriptors::kOther,
                        locs);
   __ Drop(ic_data.CountWithTypeArgs());
 }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 358afcf..99af7c4 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -115,7 +115,7 @@
     // For any outer environment the deopt id is that of the call instruction
     // which is recorded in the outer environment.
     builder->AddReturnAddress(current->function(),
-                              Thread::ToDeoptAfter(current->deopt_id()),
+                              DeoptId::ToDeoptAfter(current->deopt_id()),
                               slot_ix++);
 
     // The values of outgoing arguments can be changed from the inlined call so
@@ -842,18 +842,26 @@
 //   R4: arguments descriptor array.
 void FlowGraphCompiler::CompileGraph() {
   InitCompiler();
-#ifdef DART_PRECOMPILER
-  const Function& function = parsed_function().function();
-  if (function.IsDynamicFunction()) {
-    __ MonomorphicCheckedEntry();
-  }
-#endif  // DART_PRECOMPILER
 
+  if (FLAG_precompiled_mode) {
+    const Function& function = parsed_function().function();
+    if (function.IsDynamicFunction()) {
+      SpecialStatsBegin(CombinedCodeStatistics::kTagCheckedEntry);
+      __ MonomorphicCheckedEntry();
+      SpecialStatsEnd(CombinedCodeStatistics::kTagCheckedEntry);
+    }
+  }
+
+  // For JIT we have multiple entrypoints functionality which moved the
+  // intrinsification as well as the setup of the frame to the
+  // [TargetEntryInstr::EmitNativeCode].
+  //
+  // Though this has not been implemented on ARM64, which is why this code here
+  // is outside the "ifdef DART_PRECOMPILER".
   if (TryIntrinsify()) {
     // Skip regular code generation.
     return;
   }
-
   EmitFrameEntry();
   ASSERT(assembler()->constant_pool_allowed());
 
@@ -892,7 +900,7 @@
                                      RawPcDescriptors::Kind kind,
                                      LocationSummary* locs) {
   __ BranchLink(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
   AddStubCallTarget(Code::ZoneHandle(stub_entry.code()));
 }
 
@@ -901,7 +909,7 @@
                                               RawPcDescriptors::Kind kind,
                                               LocationSummary* locs) {
   __ BranchLinkPatchable(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
 }
 
 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
@@ -1013,7 +1021,7 @@
   __ blr(LR);
 
   RecordSafepoint(locs, slow_path_argument_count);
-  const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+  const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
   if (FLAG_precompiled_mode) {
     // Megamorphic calls may occur in slow path stubs.
     // If valid use try_index argument.
@@ -1021,14 +1029,12 @@
       try_index = CurrentTryIndex();
     }
     AddDescriptor(RawPcDescriptors::kOther, assembler()->CodeSize(),
-                  Thread::kNoDeoptId, token_pos, try_index);
+                  DeoptId::kNone, token_pos, try_index);
   } else if (is_optimizing()) {
-    AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
-                         token_pos);
+    AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
     AddDeoptIndexAtCall(deopt_id_after);
   } else {
-    AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
-                         token_pos);
+    AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
     // Add deoptimization continuation point after the call and before the
     // arguments are removed.
     AddCurrentDescriptor(RawPcDescriptors::kDeopt, deopt_id_after, token_pos);
@@ -1053,7 +1059,7 @@
   __ LoadUniqueObject(R5, ic_data);
   __ blr(TMP);
 
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, RawPcDescriptors::kOther,
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, RawPcDescriptors::kOther,
                        locs);
   __ Drop(ic_data.CountWithTypeArgs());
 }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc b/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
index 9a9e90f..8dcebb4 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_dbc.cc
@@ -129,7 +129,7 @@
     // For any outer environment the deopt id is that of the call instruction
     // which is recorded in the outer environment.
     builder->AddReturnAddress(current->function(),
-                              Thread::ToDeoptAfter(current->deopt_id()),
+                              DeoptId::ToDeoptAfter(current->deopt_id()),
                               slot_ix++);
 
     builder->AddPcMarker(previous->function(), slot_ix++);
@@ -179,7 +179,7 @@
   RecordSafepoint(locs);
   // Marks either the continuation point in unoptimized code or the
   // deoptimization point in optimized code, after call.
-  const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+  const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
   if (is_optimizing()) {
     // Return/ReturnTOS instruction drops incoming arguments so
     // we have to drop outgoing arguments from the innermost environment.
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index 69dae4c..41c287c 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -116,7 +116,7 @@
     // For any outer environment the deopt id is that of the call instruction
     // which is recorded in the outer environment.
     builder->AddReturnAddress(current->function(),
-                              Thread::ToDeoptAfter(current->deopt_id()),
+                              DeoptId::ToDeoptAfter(current->deopt_id()),
                               slot_ix++);
 
     // The values of outgoing arguments can be changed from the inlined call so
@@ -851,7 +851,7 @@
                                      RawPcDescriptors::Kind kind,
                                      LocationSummary* locs) {
   __ Call(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
   AddStubCallTarget(Code::ZoneHandle(stub_entry.code()));
 }
 
@@ -967,9 +967,9 @@
   __ call(Address(THR, Thread::megamorphic_call_checked_entry_offset()));
   __ call(EBX);
 
-  AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId, token_pos);
+  AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
   RecordSafepoint(locs, slow_path_argument_count);
-  const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+  const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
   // Precompilation not implemented on ia32 platform.
   ASSERT(!FLAG_precompiled_mode);
   if (is_optimizing()) {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 3259e3e..4542805 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -115,7 +115,7 @@
     // For any outer environment the deopt id is that of the call instruction
     // which is recorded in the outer environment.
     builder->AddReturnAddress(current->function(),
-                              Thread::ToDeoptAfter(current->deopt_id()),
+                              DeoptId::ToDeoptAfter(current->deopt_id()),
                               slot_ix++);
 
     // The values of outgoing arguments can be changed from the inlined call so
@@ -880,14 +880,25 @@
 
 void FlowGraphCompiler::CompileGraph() {
   InitCompiler();
-#ifdef DART_PRECOMPILER
-  const Function& function = parsed_function().function();
-  if (function.IsDynamicFunction()) {
-    __ MonomorphicCheckedEntry();
-  }
-#endif  // DART_PRECOMPILER
 
-  __ set_constant_pool_allowed(true);
+  if (FLAG_precompiled_mode) {
+    const Function& function = parsed_function().function();
+    if (function.IsDynamicFunction()) {
+      SpecialStatsBegin(CombinedCodeStatistics::kTagCheckedEntry);
+      __ MonomorphicCheckedEntry();
+      SpecialStatsEnd(CombinedCodeStatistics::kTagCheckedEntry);
+    }
+
+    // For JIT we have multiple entrypoints functionality which moved the
+    // intrinsification to the [TargetEntryInstr::EmitNativeCode].
+    if (TryIntrinsify()) {
+      // Skip regular code generation.
+      return;
+    }
+    EmitFrameEntry();
+    ASSERT(__ constant_pool_allowed());
+  }
+
   ASSERT(!block_order().is_empty());
   VisitBlocks();
 
@@ -901,7 +912,7 @@
                                      RawPcDescriptors::Kind kind,
                                      LocationSummary* locs) {
   __ Call(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
   AddStubCallTarget(Code::ZoneHandle(stub_entry.code()));
 }
 
@@ -910,7 +921,7 @@
                                               RawPcDescriptors::Kind kind,
                                               LocationSummary* locs) {
   __ CallPatchable(stub_entry);
-  EmitCallsiteMetadata(token_pos, Thread::kNoDeoptId, kind, locs);
+  EmitCallsiteMetadata(token_pos, DeoptId::kNone, kind, locs);
 }
 
 void FlowGraphCompiler::GenerateDartCall(intptr_t deopt_id,
@@ -1026,7 +1037,7 @@
   __ call(Address(THR, Thread::megamorphic_call_checked_entry_offset()));
 
   RecordSafepoint(locs, slow_path_argument_count);
-  const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
+  const intptr_t deopt_id_after = DeoptId::ToDeoptAfter(deopt_id);
   if (FLAG_precompiled_mode) {
     // Megamorphic calls may occur in slow path stubs.
     // If valid use try_index argument.
@@ -1034,14 +1045,12 @@
       try_index = CurrentTryIndex();
     }
     AddDescriptor(RawPcDescriptors::kOther, assembler()->CodeSize(),
-                  Thread::kNoDeoptId, token_pos, try_index);
+                  DeoptId::kNone, token_pos, try_index);
   } else if (is_optimizing()) {
-    AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
-                         token_pos);
+    AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
     AddDeoptIndexAtCall(deopt_id_after);
   } else {
-    AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
-                         token_pos);
+    AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone, token_pos);
     // Add deoptimization continuation point after the call and before the
     // arguments are removed.
     AddCurrentDescriptor(RawPcDescriptors::kDeopt, deopt_id_after, token_pos);
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 2efd036..145fc3d 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -477,7 +477,7 @@
     const ZoneGrowableArray<const ICData*>& ic_data_array) const {
   // The deopt_id can be outside the range of the IC data array for
   // computations added in the optimizing compiler.
-  ASSERT(deopt_id_ != Thread::kNoDeoptId);
+  ASSERT(deopt_id_ != DeoptId::kNone);
   if (deopt_id_ < ic_data_array.length()) {
     const ICData* result = ic_data_array[deopt_id_];
 #if defined(TAG_IC_DATA)
@@ -636,8 +636,8 @@
     }
     if (include_targets) {
       Function& function = Function::ZoneHandle(zone, ic_data.GetTargetAt(i));
-      cid_ranges_.Add(new (zone)
-                          TargetInfo(id, id, &function, ic_data.GetCountAt(i)));
+      cid_ranges_.Add(new (zone) TargetInfo(
+          id, id, &function, ic_data.GetCountAt(i), ic_data.GetExactnessAt(i)));
     } else {
       cid_ranges_.Add(new (zone) CidRange(id, id));
     }
@@ -1002,6 +1002,7 @@
   // Check that the value is not an incorrect Integer representation.
   ASSERT(!value.IsMint() || !Smi::IsValid(Mint::Cast(value).AsInt64Value()));
   ASSERT(!value.IsField() || Field::Cast(value).IsOriginal());
+  ASSERT(value.IsSmi() || value.IsOld());
 }
 
 bool ConstantInstr::AttributesEqual(Instruction* other) const {
@@ -1045,7 +1046,7 @@
                                  intptr_t osr_id)
     : BlockEntryInstr(0,
                       CatchClauseNode::kInvalidTryIndex,
-                      Thread::Current()->GetNextDeoptId()),
+                      CompilerState::Current().GetNextDeoptId()),
       parsed_function_(parsed_function),
       normal_entry_(normal_entry),
       catch_entries_(),
@@ -1321,7 +1322,7 @@
                                           Definition* call,
                                           Definition* result) {
   ASSERT(call->env() != NULL);
-  deopt_id_ = Thread::ToDeoptAfter(call->deopt_id_);
+  deopt_id_ = DeoptId::ToDeoptAfter(call->deopt_id_);
   call->env()->DeepCopyAfterTo(
       flow_graph->zone(), this, call->ArgumentCount(),
       flow_graph->constant_dead(),
@@ -1536,8 +1537,8 @@
       // we can simply jump to the beginning of the block.
       ASSERT(instr->previous() == this);
 
-      GotoInstr* goto_join =
-          new GotoInstr(AsJoinEntry(), Thread::Current()->GetNextDeoptId());
+      GotoInstr* goto_join = new GotoInstr(
+          AsJoinEntry(), CompilerState::Current().GetNextDeoptId());
       goto_join->CopyDeoptIdFrom(*parent);
       graph_entry->normal_entry()->LinkTo(goto_join);
       return true;
@@ -1753,7 +1754,7 @@
 }
 
 void Instruction::Goto(JoinEntryInstr* entry) {
-  LinkTo(new GotoInstr(entry, Thread::Current()->GetNextDeoptId()));
+  LinkTo(new GotoInstr(entry, CompilerState::Current().GetNextDeoptId()));
 }
 
 bool UnboxedIntConverterInstr::ComputeCanDeoptimize() const {
@@ -2267,7 +2268,7 @@
       case Token::kBIT_XOR:
         replacement = new BinarySmiOpInstr(
             op_kind(), new Value(left()->definition()),
-            new Value(right()->definition()), Thread::kNoDeoptId);
+            new Value(right()->definition()), DeoptId::kNone);
       default:
         break;
     }
@@ -2293,7 +2294,7 @@
 
   if ((left_type->ToCid() == kSmiCid) && (right_type->ToCid() == kSmiCid)) {
     op_cid = kSmiCid;
-  } else if (Isolate::Current()->strong() && FLAG_use_strong_mode_types &&
+  } else if (Isolate::Current()->can_use_strong_mode_types() &&
              FlowGraphCompiler::SupportsUnboxedInt64() &&
              // TODO(dartbug.com/30480): handle nullable types here
              left_type->IsNullableInt() && !left_type->is_nullable() &&
@@ -2307,11 +2308,11 @@
     if (Token::IsRelationalOperator(kind())) {
       replacement = new RelationalOpInstr(
           token_pos(), kind(), left()->CopyWithType(), right()->CopyWithType(),
-          op_cid, Thread::kNoDeoptId, speculative_mode);
+          op_cid, DeoptId::kNone, speculative_mode);
     } else if (Token::IsEqualityOperator(kind())) {
       replacement = new EqualityCompareInstr(
           token_pos(), kind(), left()->CopyWithType(), right()->CopyWithType(),
-          op_cid, Thread::kNoDeoptId, speculative_mode);
+          op_cid, DeoptId::kNone, speculative_mode);
     }
     if (replacement != NULL) {
       if (FLAG_trace_strong_mode_types && (op_cid == kMintCid)) {
@@ -2451,7 +2452,7 @@
           // the code generator deal with throw on slowpath.
           break;
         }
-        ASSERT(GetDeoptId() != Thread::kNoDeoptId);
+        ASSERT(GetDeoptId() != DeoptId::kNone);
         DeoptimizeInstr* deopt =
             new DeoptimizeInstr(ICData::kDeoptBinarySmiOp, GetDeoptId());
         flow_graph->InsertBefore(this, deopt, env(), FlowGraph::kEffect);
@@ -2461,22 +2462,24 @@
       break;
 
     case Token::kSHL: {
-      const intptr_t kMaxShift = RepresentationBits(representation()) - 1;
+      const intptr_t result_bits = RepresentationBits(representation());
       if (rhs == 0) {
         return left()->definition();
-      } else if ((rhs < 0) || (rhs >= kMaxShift)) {
-        if ((rhs < 0) || !is_truncating()) {
-          // Instruction will always throw on negative rhs operand.
-          if (!CanDeoptimize()) {
-            // For non-speculative operations (no deopt), let
-            // the code generator deal with throw on slowpath.
-            break;
-          }
-          ASSERT(GetDeoptId() != Thread::kNoDeoptId);
-          DeoptimizeInstr* deopt =
-              new DeoptimizeInstr(ICData::kDeoptBinarySmiOp, GetDeoptId());
-          flow_graph->InsertBefore(this, deopt, env(), FlowGraph::kEffect);
+      } else if ((rhs >= kBitsPerInt64) ||
+                 ((rhs >= result_bits) && is_truncating())) {
+        return CreateConstantResult(flow_graph, Integer::Handle(Smi::New(0)));
+      } else if ((rhs < 0) || ((rhs >= result_bits) && !is_truncating())) {
+        // Instruction will always throw on negative rhs operand or
+        // deoptimize on large rhs operand.
+        if (!CanDeoptimize()) {
+          // For non-speculative operations (no deopt), let
+          // the code generator deal with throw on slowpath.
+          break;
         }
+        ASSERT(GetDeoptId() != DeoptId::kNone);
+        DeoptimizeInstr* deopt =
+            new DeoptimizeInstr(ICData::kDeoptBinarySmiOp, GetDeoptId());
+        flow_graph->InsertBefore(this, deopt, env(), FlowGraph::kEffect);
         // Replace with zero since it overshifted or always throws.
         return CreateConstantResult(flow_graph, Integer::Handle(Smi::New(0)));
       }
@@ -2636,10 +2639,11 @@
     } else if (LoadFieldInstr* load_array = array->AsLoadField()) {
       // For arrays with guarded lengths, replace the length load
       // with a constant.
-      const Field* field = load_array->field();
-      if ((field != nullptr) && (field->guarded_list_length() >= 0)) {
-        return flow_graph->GetConstant(
-            Smi::Handle(Smi::New(field->guarded_list_length())));
+      if (const Field* field = load_array->field()) {
+        if (field->guarded_list_length() >= 0) {
+          return flow_graph->GetConstant(
+              Smi::Handle(Smi::New(field->guarded_list_length())));
+        }
       }
     }
   } else if (native_field() != nullptr &&
@@ -2648,6 +2652,9 @@
     if (StaticCallInstr* call = array->AsStaticCall()) {
       if (call->is_known_list_constructor()) {
         return call->ArgumentAt(0);
+      } else if (call->function().recognized_kind() ==
+                 MethodRecognizer::kLinkedHashMap_getData) {
+        return flow_graph->constant_null();
       }
     } else if (CreateArrayInstr* create_array = array->AsCreateArray()) {
       return create_array->element_type()->definition();
@@ -2659,6 +2666,11 @@
           field->static_type_exactness_state().IsTriviallyExact()) {
         return flow_graph->GetConstant(TypeArguments::Handle(
             AbstractType::Handle(field->type()).arguments()));
+      } else if (const NativeFieldDesc* native_field =
+                     load_array->native_field()) {
+        if (native_field == NativeFieldDesc::LinkedHashMap_data()) {
+          return flow_graph->constant_null();
+        }
       }
     }
   }
@@ -2667,7 +2679,9 @@
   if (instance()->BindsToConstant()) {
     Object& result = Object::Handle();
     if (Evaluate(instance()->BoundConstant(), &result)) {
-      return flow_graph->GetConstant(result);
+      if (result.IsSmi() || result.IsOld()) {
+        return flow_graph->GetConstant(result);
+      }
     }
   }
 
@@ -2925,8 +2939,7 @@
       UnboxedIntConverterInstr* converter = new UnboxedIntConverterInstr(
           from_representation, representation(),
           box_defn->value()->CopyWithType(),
-          (representation() == kUnboxedInt32) ? GetDeoptId()
-                                              : Thread::kNoDeoptId);
+          (representation() == kUnboxedInt32) ? GetDeoptId() : DeoptId::kNone);
       // TODO(vegorov): marking resulting converter as truncating when
       // unboxing can't deoptimize is a workaround for the missing
       // deoptimization environment when we insert converter after
@@ -3016,7 +3029,7 @@
 
     UnboxedIntConverterInstr* converter = new UnboxedIntConverterInstr(
         box_defn->from(), representation(), box_defn->value()->CopyWithType(),
-        (to() == kUnboxedInt32) ? GetDeoptId() : Thread::kNoDeoptId);
+        (to() == kUnboxedInt32) ? GetDeoptId() : DeoptId::kNone);
     if ((representation() == kUnboxedInt32) && is_truncating()) {
       converter->mark_truncating();
     }
@@ -3280,7 +3293,7 @@
   set_operation_cid(kObjectCid);
 #ifdef DEBUG
   ASSERT(cid_results[0] == kSmiCid);
-  if (deopt_id == Thread::kNoDeoptId) {
+  if (deopt_id == DeoptId::kNone) {
     // The entry for Smi can be special, but all other entries have
     // to match in the no-deopt case.
     for (intptr_t i = 4; i < cid_results.length(); i += 2) {
@@ -3306,7 +3319,7 @@
   }
 
   if (!CanDeoptimize()) {
-    ASSERT(deopt_id() == Thread::kNoDeoptId);
+    ASSERT(deopt_id() == DeoptId::kNone);
     return (data[data.length() - 1] == true_result)
                ? flow_graph->GetConstant(Bool::False())
                : flow_graph->GetConstant(Bool::True());
@@ -3481,15 +3494,17 @@
   // class-ids in that case.
   for (int idx = 0; idx < length; idx++) {
     int lower_limit_cid = (idx == 0) ? -1 : targets[idx - 1].cid_end;
-    const Function& target = *targets.TargetAt(idx)->target;
+    auto target_info = targets.TargetAt(idx);
+    const Function& target = *target_info->target;
     if (MethodRecognizer::PolymorphicTarget(target)) continue;
-    for (int i = targets[idx].cid_start - 1; i > lower_limit_cid; i--) {
+    for (int i = target_info->cid_start - 1; i > lower_limit_cid; i--) {
       bool class_is_abstract = false;
       if (FlowGraphCompiler::LookupMethodFor(i, name, args_desc, &fn,
                                              &class_is_abstract) &&
           fn.raw() == target.raw()) {
         if (!class_is_abstract) {
-          targets[idx].cid_start = i;
+          target_info->cid_start = i;
+          target_info->exactness = StaticTypeExactnessState::NotTracking();
         }
       } else {
         break;
@@ -3503,22 +3518,24 @@
   for (int idx = 0; idx < length; idx++) {
     int upper_limit_cid =
         (idx == length - 1) ? max_cid : targets[idx + 1].cid_start;
-    const Function& target = *targets.TargetAt(idx)->target;
+    auto target_info = targets.TargetAt(idx);
+    const Function& target = *target_info->target;
     if (MethodRecognizer::PolymorphicTarget(target)) continue;
     // The code below makes attempt to avoid spreading class-id range
     // into a suffix that consists purely of abstract classes to
     // shorten the range.
     // However such spreading is beneficial when it allows to
     // merge to consequtive ranges.
-    intptr_t cid_end_including_abstract = targets[idx].cid_end;
-    for (int i = targets[idx].cid_end + 1; i < upper_limit_cid; i++) {
+    intptr_t cid_end_including_abstract = target_info->cid_end;
+    for (int i = target_info->cid_end + 1; i < upper_limit_cid; i++) {
       bool class_is_abstract = false;
       if (FlowGraphCompiler::LookupMethodFor(i, name, args_desc, &fn,
                                              &class_is_abstract) &&
           fn.raw() == target.raw()) {
         cid_end_including_abstract = i;
         if (!class_is_abstract) {
-          targets[idx].cid_end = i;
+          target_info->cid_end = i;
+          target_info->exactness = StaticTypeExactnessState::NotTracking();
         }
       } else {
         break;
@@ -3528,11 +3545,12 @@
     // Check if we have a suffix that consists of abstract classes
     // and expand into it if that would allow us to merge this
     // range with subsequent range.
-    if ((cid_end_including_abstract > targets[idx].cid_end) &&
+    if ((cid_end_including_abstract > target_info->cid_end) &&
         (idx < length - 1) &&
         ((cid_end_including_abstract + 1) == targets[idx + 1].cid_start) &&
         (target.raw() == targets.TargetAt(idx + 1)->target->raw())) {
-      targets[idx].cid_end = cid_end_including_abstract;
+      target_info->cid_end = cid_end_including_abstract;
+      target_info->exactness = StaticTypeExactnessState::NotTracking();
     }
   }
   targets.MergeIntoRanges();
@@ -3552,6 +3570,7 @@
         !MethodRecognizer::PolymorphicTarget(target)) {
       TargetAt(dest)->cid_end = TargetAt(src)->cid_end;
       TargetAt(dest)->count += TargetAt(src)->count;
+      TargetAt(dest)->exactness = StaticTypeExactnessState::NotTracking();
     } else {
       dest++;
       if (src != dest) {
@@ -3603,16 +3622,26 @@
 void TargetEntryInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   __ Bind(compiler->GetJumpLabel(this));
 
+  // In the AOT compiler we want to reduce code size, so generate no
+  // fall-through code in [FlowGraphCompiler::CompileGraph()].
+  // (As opposed to here where we don't check for the return value of
+  // [Intrinsify]).
+  if (!FLAG_precompiled_mode) {
 #if defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_ARM)
-  if (compiler->flow_graph().IsEntryPoint(this)) {
-    __ set_constant_pool_allowed(false);
-    // TODO(#34162): Don't emit more code if 'TryIntrinsify' returns 'true'
-    // (meaning the function was fully intrinsified).
-    compiler->TryIntrinsify();
-    compiler->EmitPrologue();
-    ASSERT(__ constant_pool_allowed());
-  }
+    if (compiler->flow_graph().IsEntryPoint(this)) {
+      // NOTE: Because in JIT X64/ARM mode the graph can have multiple
+      // entrypoints, so we generate several times the same intrinsification &
+      // frame setup.  That's why we cannot rely on the constant pool being
+      // `false` when we come in here.
+      __ set_constant_pool_allowed(false);
+      // TODO(#34162): Don't emit more code if 'TryIntrinsify' returns 'true'
+      // (meaning the function was fully intrinsified).
+      compiler->TryIntrinsify();
+      compiler->EmitPrologue();
+      ASSERT(__ constant_pool_allowed());
+    }
 #endif
+  }
 
   if (!compiler->is_optimizing()) {
 #if !defined(TARGET_ARCH_DBC)
@@ -3914,9 +3943,27 @@
       (ic_data() == NULL)) {
     const Array& arguments_descriptor =
         Array::Handle(zone, GetArgumentsDescriptor());
+
+    AbstractType& static_receiver_type = AbstractType::Handle(zone);
+
+#if defined(TARGET_ARCH_X64)
+    // Enable static type exactness tracking for the callsite by setting
+    // static receiver type on the ICData.
+    if (checked_argument_count() == 1) {
+      if (static_receiver_type_ != nullptr &&
+          static_receiver_type_->HasResolvedTypeClass()) {
+        const Class& cls =
+            Class::Handle(zone, static_receiver_type_->type_class());
+        if (cls.IsGeneric() && !cls.IsFutureOrClass()) {
+          static_receiver_type = static_receiver_type_->raw();
+        }
+      }
+    }
+#endif
+
     call_ic_data = compiler->GetOrAddInstanceCallICData(
         deopt_id(), function_name(), arguments_descriptor,
-        checked_argument_count());
+        checked_argument_count(), static_receiver_type);
   } else {
     call_ic_data = &ICData::ZoneHandle(zone, ic_data()->raw());
   }
@@ -3940,7 +3987,7 @@
                                    token_pos());
     bool is_smi_two_args_op = false;
     const StubEntry* stub_entry = TwoArgsSmiOpInlineCacheEntry(token_kind());
-    if (stub_entry != NULL) {
+    if (stub_entry != nullptr) {
       // We have a dedicated inline cache stub for this operation, add an
       // an initial Smi/Smi check with count 0.
       is_smi_two_args_op = call_ic_data->AddSmiSmiCheckForFastSmiStubs();
@@ -4513,7 +4560,7 @@
                                const ParsedFunction& parsed_function) {
   Environment* env =
       new (zone) Environment(definitions.length(), fixed_parameter_count,
-                             Thread::kNoDeoptId, parsed_function, NULL);
+                             DeoptId::kNone, parsed_function, NULL);
   for (intptr_t i = 0; i < definitions.length(); ++i) {
     env->values_.Add(new (zone) Value(definitions[i]));
   }
@@ -4617,7 +4664,7 @@
 ComparisonInstr* StrictCompareInstr::CopyWithNewOperands(Value* new_left,
                                                          Value* new_right) {
   return new StrictCompareInstr(token_pos(), kind(), new_left, new_right,
-                                needs_number_check(), Thread::kNoDeoptId);
+                                needs_number_check(), DeoptId::kNone);
 }
 
 ComparisonInstr* TestSmiInstr::CopyWithNewOperands(Value* new_left,
@@ -4684,6 +4731,17 @@
   return true;
 }
 
+Instruction* CheckConditionInstr::Canonicalize(FlowGraph* graph) {
+  if (StrictCompareInstr* strict_compare = comparison()->AsStrictCompare()) {
+    if ((InputAt(0)->definition()->OriginalDefinition() ==
+         InputAt(1)->definition()->OriginalDefinition()) &&
+        strict_compare->kind() == Token::kEQ_STRICT) {
+      return nullptr;
+    }
+  }
+  return this;
+}
+
 bool CheckArrayBoundInstr::IsFixedLengthArrayType(intptr_t cid) {
   return LoadFieldInstr::IsFixedLengthArrayCid(cid);
 }
diff --git a/runtime/vm/compiler/backend/il.h b/runtime/vm/compiler/backend/il.h
index d767ec2..46cfc60 100644
--- a/runtime/vm/compiler/backend/il.h
+++ b/runtime/vm/compiler/backend/il.h
@@ -8,6 +8,7 @@
 #include "vm/allocation.h"
 #include "vm/ast.h"
 #include "vm/compiler/backend/locations.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/compiler/method_recognizer.h"
 #include "vm/flags.h"
 #include "vm/growable_array.h"
@@ -553,6 +554,7 @@
   M(CheckClassId, kNoGC)                                                       \
   M(CheckSmi, kNoGC)                                                           \
   M(CheckNull, kNoGC)                                                          \
+  M(CheckCondition, kNoGC)                                                     \
   M(Constant, kNoGC)                                                           \
   M(UnboxedConstant, kNoGC)                                                    \
   M(CheckEitherNonSmi, kNoGC)                                                  \
@@ -674,14 +676,17 @@
   TargetInfo(intptr_t cid_start_arg,
              intptr_t cid_end_arg,
              const Function* target_arg,
-             intptr_t count_arg)
+             intptr_t count_arg,
+             StaticTypeExactnessState exactness)
       : CidRange(cid_start_arg, cid_end_arg),
         target(target_arg),
-        count(count_arg) {
+        count(count_arg),
+        exactness(exactness) {
     ASSERT(target->IsZoneHandle());
   }
   const Function* target;
   intptr_t count;
+  StaticTypeExactnessState exactness;
 };
 
 // A set of class-ids, arranged in ranges. Used for the CheckClass
@@ -771,7 +776,7 @@
     kNotSpeculative
   };
 
-  explicit Instruction(intptr_t deopt_id = Thread::kNoDeoptId)
+  explicit Instruction(intptr_t deopt_id = DeoptId::kNone)
       : deopt_id_(deopt_id),
         lifetime_position_(kNoPlaceId),
         previous_(NULL),
@@ -955,7 +960,7 @@
   // to.
   virtual intptr_t DeoptimizationTarget() const {
     UNREACHABLE();
-    return Thread::kNoDeoptId;
+    return DeoptId::kNone;
   }
 
   // Returns a replacement for the instruction or NULL if the instruction can
@@ -1070,6 +1075,7 @@
  private:
   friend class BranchInstr;      // For RawSetInputAt.
   friend class IfThenElseInstr;  // For RawSetInputAt.
+  friend class CheckConditionInstr;  // For RawSetInputAt.
 
   virtual void RawSetInputAt(intptr_t i, Value* value) = 0;
 
@@ -1131,7 +1137,7 @@
 class TemplateInstruction
     : public CSETrait<Instruction, PureInstruction>::Base {
  public:
-  explicit TemplateInstruction(intptr_t deopt_id = Thread::kNoDeoptId)
+  explicit TemplateInstruction(intptr_t deopt_id = DeoptId::kNone)
       : CSETrait<Instruction, PureInstruction>::Base(deopt_id), inputs_() {}
 
   virtual intptr_t InputCount() const { return N; }
@@ -1835,7 +1841,7 @@
 // Abstract super-class of all instructions that define a value (Bind, Phi).
 class Definition : public Instruction {
  public:
-  explicit Definition(intptr_t deopt_id = Thread::kNoDeoptId);
+  explicit Definition(intptr_t deopt_id = DeoptId::kNone);
 
   // Overridden by definitions that have call counts.
   virtual intptr_t CallCount() const {
@@ -2017,7 +2023,7 @@
           template <typename Impure, typename Pure> class CSETrait = NoCSE>
 class TemplateDefinition : public CSETrait<Definition, PureDefinition>::Base {
  public:
-  explicit TemplateDefinition(intptr_t deopt_id = Thread::kNoDeoptId)
+  explicit TemplateDefinition(intptr_t deopt_id = DeoptId::kNone)
       : CSETrait<Definition, PureDefinition>::Base(deopt_id), inputs_() {}
 
   virtual intptr_t InputCount() const { return N; }
@@ -2631,7 +2637,7 @@
  protected:
   ComparisonInstr(TokenPosition token_pos,
                   Token::Kind kind,
-                  intptr_t deopt_id = Thread::kNoDeoptId)
+                  intptr_t deopt_id = DeoptId::kNone)
       : Definition(deopt_id),
         token_pos_(token_pos),
         kind_(kind),
@@ -2663,7 +2669,7 @@
  public:
   TemplateComparison(TokenPosition token_pos,
                      Token::Kind kind,
-                     intptr_t deopt_id = Thread::kNoDeoptId)
+                     intptr_t deopt_id = DeoptId::kNone)
       : CSETrait<ComparisonInstr, PureComparison>::Base(token_pos,
                                                         kind,
                                                         deopt_id),
@@ -3329,6 +3335,11 @@
   intptr_t checked_argument_count() const { return checked_argument_count_; }
   const Function& interface_target() const { return interface_target_; }
 
+  void set_static_receiver_type(const AbstractType* receiver_type) {
+    ASSERT(receiver_type != nullptr && receiver_type->IsInstantiated());
+    static_receiver_type_ = receiver_type;
+  }
+
   bool has_unique_selector() const { return has_unique_selector_; }
   void set_has_unique_selector(bool b) { has_unique_selector_ = b; }
 
@@ -3387,6 +3398,8 @@
   bool has_unique_selector_;
   Code::EntryKind entry_kind_ = Code::EntryKind::kNormal;
 
+  const AbstractType* static_receiver_type_ = nullptr;
+
   DISALLOW_COPY_AND_ASSIGN(InstanceCallInstr);
 };
 
@@ -3458,6 +3471,8 @@
   CompileType* result_type() const { return instance_call()->result_type(); }
   intptr_t result_cid() const { return instance_call()->result_cid(); }
 
+  Code::EntryKind entry_kind() const { return instance_call()->entry_kind(); }
+
   PRINT_OPERANDS_TO_SUPPORT
 
  private:
@@ -3563,7 +3578,7 @@
   virtual Definition* Canonicalize(FlowGraph* flow_graph);
 
   virtual bool ComputeCanDeoptimize() const {
-    return GetDeoptId() != Thread::kNoDeoptId;
+    return GetDeoptId() != DeoptId::kNone;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -3826,6 +3841,7 @@
     if (call->result_type() != NULL) {
       new_call->result_type_ = call->result_type();
     }
+    new_call->set_entry_kind(call->entry_kind());
     return new_call;
   }
 
@@ -4075,7 +4091,7 @@
                   bool link_lazily,
                   TokenPosition position,
                   PushArgumentsArray* args)
-      : TemplateDartCall(Thread::kNoDeoptId,
+      : TemplateDartCall(DeoptId::kNone,
                          0,
                          Array::null_array(),
                          args,
@@ -4465,7 +4481,7 @@
   bool aligned() const { return alignment_ == kAlignedAccess; }
 
   virtual bool ComputeCanDeoptimize() const {
-    return GetDeoptId() != Thread::kNoDeoptId;
+    return GetDeoptId() != DeoptId::kNone;
   }
 
   virtual Representation representation() const;
@@ -4746,7 +4762,7 @@
 // either reside in new space or be in the store buffer.
 class AllocationInstr : public Definition {
  public:
-  explicit AllocationInstr(intptr_t deopt_id = Thread::kNoDeoptId)
+  explicit AllocationInstr(intptr_t deopt_id = DeoptId::kNone)
       : Definition(deopt_id) {}
 
   // TODO(sjindel): Update these conditions when the incremental write barrier
@@ -4762,7 +4778,7 @@
 template <intptr_t N, typename ThrowsTrait>
 class TemplateAllocation : public AllocationInstr {
  public:
-  explicit TemplateAllocation(intptr_t deopt_id = Thread::kNoDeoptId)
+  explicit TemplateAllocation(intptr_t deopt_id = DeoptId::kNone)
       : AllocationInstr(deopt_id), inputs_() {}
 
   virtual intptr_t InputCount() const { return N; }
@@ -5512,7 +5528,7 @@
   virtual CompileType ComputeType() const;
 
   virtual bool ComputeCanDeoptimize() const { return false; }
-  virtual intptr_t DeoptimizationTarget() const { return Thread::kNoDeoptId; }
+  virtual intptr_t DeoptimizationTarget() const { return DeoptId::kNone; }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
@@ -7387,6 +7403,52 @@
   DISALLOW_COPY_AND_ASSIGN(GenericCheckBoundInstr);
 };
 
+// Instruction evaluates the given comparison and deoptimizes if it evaluates
+// to false.
+class CheckConditionInstr : public Instruction {
+ public:
+  CheckConditionInstr(ComparisonInstr* comparison, intptr_t deopt_id)
+      : Instruction(deopt_id), comparison_(comparison) {
+    ASSERT(comparison->ArgumentCount() == 0);
+    ASSERT(comparison->env() == nullptr);
+    for (intptr_t i = comparison->InputCount() - 1; i >= 0; --i) {
+      comparison->InputAt(i)->set_instruction(this);
+    }
+  }
+
+  ComparisonInstr* comparison() const { return comparison_; }
+
+  DECLARE_INSTRUCTION(CheckCondition)
+
+  virtual bool ComputeCanDeoptimize() const { return true; }
+
+  virtual Instruction* Canonicalize(FlowGraph* flow_graph);
+
+  virtual bool AllowsCSE() const { return true; }
+  virtual bool HasUnknownSideEffects() const { return false; }
+
+  virtual bool AttributesEqual(Instruction* other) const {
+    return other->Cast<CheckConditionInstr>()->comparison()->AttributesEqual(
+        comparison());
+  }
+
+  virtual intptr_t InputCount() const { return comparison()->InputCount(); }
+  virtual Value* InputAt(intptr_t i) const { return comparison()->InputAt(i); }
+
+  virtual bool MayThrow() const { return false; }
+
+  PRINT_OPERANDS_TO_SUPPORT
+
+ private:
+  virtual void RawSetInputAt(intptr_t i, Value* value) {
+    comparison()->RawSetInputAt(i, value);
+  }
+
+  ComparisonInstr* comparison_;
+
+  DISALLOW_COPY_AND_ASSIGN(CheckConditionInstr);
+};
+
 class UnboxedIntConverterInstr : public TemplateDefinition<1, NoThrow> {
  public:
   UnboxedIntConverterInstr(Representation from,
diff --git a/runtime/vm/compiler/backend/il_arm.cc b/runtime/vm/compiler/backend/il_arm.cc
index 44982d3..2d80341 100644
--- a/runtime/vm/compiler/backend/il_arm.cc
+++ b/runtime/vm/compiler/backend/il_arm.cc
@@ -138,8 +138,7 @@
   __ Bind(&stack_ok);
 #endif
   ASSERT(__ constant_pool_allowed());
-  __ LeaveDartFrame();  // Disallows constant pool use.
-  __ Ret();
+  __ LeaveDartFrameAndReturn();  // Disallows constant pool use.
   // This ReturnInstr may be emitted out of order by the optimizer. The next
   // block may be a target expecting a properly set constant pool pointer.
   __ set_constant_pool_allowed(true);
@@ -2009,15 +2008,8 @@
   }
 }
 
-LocationSummary* GuardFieldTypeInstr::MakeLocationSummary(Zone* zone,
-                                                          bool opt) const {
-  UNREACHABLE();
-  return nullptr;
-}
-
-void GuardFieldTypeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNREACHABLE();
-}
+DEFINE_UNIMPLEMENTED_INSTRUCTION(GuardFieldTypeInstr)
+DEFINE_UNIMPLEMENTED_INSTRUCTION(CheckConditionInstr)
 
 class BoxAllocationSlowPath : public TemplateSlowPathCode<Instruction> {
  public:
@@ -2965,7 +2957,7 @@
                                 catch_handler_types_, needs_stacktrace());
   // On lazy deoptimization we patch the optimized code here to enter the
   // deoptimization stub.
-  const intptr_t deopt_id = Thread::ToDeoptAfter(GetDeoptId());
+  const intptr_t deopt_id = DeoptId::ToDeoptAfter(GetDeoptId());
   if (compiler->is_optimizing()) {
     compiler->AddDeoptIndexAtCall(deopt_id);
   } else {
diff --git a/runtime/vm/compiler/backend/il_arm64.cc b/runtime/vm/compiler/backend/il_arm64.cc
index 6fb2171..de564df 100644
--- a/runtime/vm/compiler/backend/il_arm64.cc
+++ b/runtime/vm/compiler/backend/il_arm64.cc
@@ -1567,15 +1567,8 @@
   __ Bind(&done);
 }
 
-LocationSummary* GuardFieldTypeInstr::MakeLocationSummary(Zone* zone,
-                                                          bool opt) const {
-  UNREACHABLE();
-  return nullptr;
-}
-
-void GuardFieldTypeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNREACHABLE();
-}
+DEFINE_UNIMPLEMENTED_INSTRUCTION(GuardFieldTypeInstr)
+DEFINE_UNIMPLEMENTED_INSTRUCTION(CheckConditionInstr)
 
 LocationSummary* GuardFieldClassInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
@@ -2659,7 +2652,7 @@
                                 catch_handler_types_, needs_stacktrace());
   // On lazy deoptimization we patch the optimized code here to enter the
   // deoptimization stub.
-  const intptr_t deopt_id = Thread::ToDeoptAfter(GetDeoptId());
+  const intptr_t deopt_id = DeoptId::ToDeoptAfter(GetDeoptId());
   if (compiler->is_optimizing()) {
     compiler->AddDeoptIndexAtCall(deopt_id);
   } else {
diff --git a/runtime/vm/compiler/backend/il_dbc.cc b/runtime/vm/compiler/backend/il_dbc.cc
index ec66ff9..61f92fc 100644
--- a/runtime/vm/compiler/backend/il_dbc.cc
+++ b/runtime/vm/compiler/backend/il_dbc.cc
@@ -30,20 +30,21 @@
 
 // List of instructions that are still unimplemented by DBC backend.
 #define FOR_EACH_UNIMPLEMENTED_INSTRUCTION(M)                                  \
-  M(LoadCodeUnits)                                                             \
   M(BinaryInt32Op)                                                             \
-  M(Int32ToDouble)                                                             \
-  M(DoubleToInteger)                                                           \
+  M(BinaryUint32Op)                                                            \
   M(BoxInt64)                                                                  \
-  M(TruncDivMod)                                                               \
+  M(CheckCondition)                                                            \
+  M(DoubleToInteger)                                                           \
+  M(ExtractNthOutput)                                                          \
   M(GuardFieldClass)                                                           \
   M(GuardFieldLength)                                                          \
   M(GuardFieldType)                                                            \
   M(IfThenElse)                                                                \
-  M(ExtractNthOutput)                                                          \
-  M(BinaryUint32Op)                                                            \
+  M(Int32ToDouble)                                                             \
+  M(LoadCodeUnits)                                                             \
   M(ShiftUint32Op)                                                             \
   M(SpeculativeShiftUint32Op)                                                  \
+  M(TruncDivMod)                                                               \
   M(UnaryUint32Op)                                                             \
   M(UnboxedIntConverter)
 
@@ -990,7 +991,7 @@
       __ object_pool_wrapper().FindImmediate(static_cast<uword>(argc_tag));
   __ NativeCall(trampoline_kidx, target_kidx, argc_tag_kidx);
   compiler->RecordSafepoint(locs());
-  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                  token_pos());
 }
 
@@ -1039,15 +1040,15 @@
       }
       __ PushConstant(cls());
       __ AllocateT();
-      compiler->AddCurrentDescriptor(RawPcDescriptors::kOther,
-                                     Thread::kNoDeoptId, token_pos());
+      compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
+                                     token_pos());
       compiler->RecordSafepoint(locs());
       __ PopLocal(locs()->out(0).reg());
     } else {
       __ PushConstant(cls());
       __ AllocateT();
-      compiler->AddCurrentDescriptor(RawPcDescriptors::kOther,
-                                     Thread::kNoDeoptId, token_pos());
+      compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
+                                     token_pos());
       compiler->RecordSafepoint(locs());
     }
   } else if (compiler->is_optimizing()) {
@@ -1068,14 +1069,14 @@
     }
     const intptr_t kidx = __ AddConstant(cls());
     __ Allocate(kidx);
-    compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+    compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                    token_pos());
     compiler->RecordSafepoint(locs());
     __ PopLocal(locs()->out(0).reg());
   } else {
     const intptr_t kidx = __ AddConstant(cls());
     __ Allocate(kidx);
-    compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+    compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                    token_pos());
     compiler->RecordSafepoint(locs());
   }
@@ -1140,7 +1141,7 @@
   ASSERT(!compiler->is_optimizing());
   __ AllocateContext(num_context_variables());
   compiler->RecordSafepoint(locs());
-  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                  token_pos());
 }
 
@@ -1153,7 +1154,7 @@
                                   num_context_variables());
   __ AllocateContext(num_context_variables());
   compiler->RecordSafepoint(locs());
-  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                  token_pos());
   __ PopLocal(locs()->out(0).reg());
 }
@@ -1167,7 +1168,7 @@
   }
   __ CloneContext();
   compiler->RecordSafepoint(locs());
-  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                  token_pos());
   if (compiler->is_optimizing()) {
     __ PopLocal(locs()->out(0).reg());
@@ -1182,7 +1183,7 @@
                                 catch_handler_types_, needs_stacktrace());
   // On lazy deoptimization we patch the optimized code here to enter the
   // deoptimization stub.
-  const intptr_t deopt_id = Thread::ToDeoptAfter(GetDeoptId());
+  const intptr_t deopt_id = DeoptId::ToDeoptAfter(GetDeoptId());
   if (compiler->is_optimizing()) {
     compiler->AddDeoptIndexAtCall(deopt_id);
   } else {
@@ -1629,7 +1630,7 @@
   }
   const intptr_t kidx = __ AddConstant(compiler->double_class());
   __ Allocate(kidx);
-  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId,
+  compiler->AddCurrentDescriptor(RawPcDescriptors::kOther, DeoptId::kNone,
                                  token_pos());
   compiler->RecordSafepoint(locs());
   __ PopLocal(out);
diff --git a/runtime/vm/compiler/backend/il_ia32.cc b/runtime/vm/compiler/backend/il_ia32.cc
index e6d79eb..18f3279 100644
--- a/runtime/vm/compiler/backend/il_ia32.cc
+++ b/runtime/vm/compiler/backend/il_ia32.cc
@@ -1442,15 +1442,8 @@
   }
 }
 
-LocationSummary* GuardFieldTypeInstr::MakeLocationSummary(Zone* zone,
-                                                          bool opt) const {
-  UNREACHABLE();
-  return nullptr;
-}
-
-void GuardFieldTypeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNREACHABLE();
-}
+DEFINE_UNIMPLEMENTED_INSTRUCTION(GuardFieldTypeInstr)
+DEFINE_UNIMPLEMENTED_INSTRUCTION(CheckConditionInstr)
 
 LocationSummary* GuardFieldClassInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
@@ -2541,7 +2534,7 @@
                                 catch_handler_types_, needs_stacktrace());
   // On lazy deoptimization we patch the optimized code here to enter the
   // deoptimization stub.
-  const intptr_t deopt_id = Thread::ToDeoptAfter(GetDeoptId());
+  const intptr_t deopt_id = DeoptId::ToDeoptAfter(GetDeoptId());
   if (compiler->is_optimizing()) {
     compiler->AddDeoptIndexAtCall(deopt_id);
   } else {
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index 322e888..ed6af4d 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -149,6 +149,10 @@
       String::Handle(dst_type.Name()).ToCString(), dst_name.ToCString());
 }
 
+static const char* TypeToUserVisibleName(const AbstractType& type) {
+  return String::Handle(type.UserVisibleName()).ToCString();
+}
+
 void CompileType::PrintTo(BufferFormatter* f) const {
   const char* type_name = "?";
   if ((cid_ != kIllegalCid) && (cid_ != kDynamicCid)) {
@@ -156,7 +160,7 @@
         Class::Handle(Isolate::Current()->class_table()->At(cid_));
     type_name = String::Handle(cls.ScrubbedName()).ToCString();
   } else if (type_ != NULL && !type_->IsDynamicType()) {
-    type_name = type_->ToCString();
+    type_name = TypeToUserVisibleName(*type_);
   } else if (!is_nullable()) {
     type_name = "!null";
   }
@@ -174,7 +178,7 @@
 static void PrintTargetsHelper(BufferFormatter* f,
                                const CallTargets& targets,
                                intptr_t num_checks_to_print) {
-  f->Print(" IC[");
+  f->Print(" Targets[");
   f->Print("%" Pd ": ", targets.length());
   Function& target = Function::Handle();
   if ((num_checks_to_print == FlowGraphPrinter::kPrintAll) ||
@@ -183,8 +187,9 @@
   }
   for (intptr_t i = 0; i < num_checks_to_print; i++) {
     const CidRange& range = targets[i];
-    const intptr_t count = targets.TargetAt(i)->count;
-    target ^= targets.TargetAt(i)->target->raw();
+    const auto target_info = targets.TargetAt(i);
+    const intptr_t count = target_info->count;
+    target ^= target_info->target->raw();
     if (i > 0) {
       f->Print(" | ");
     }
@@ -200,6 +205,10 @@
                String::Handle(cls.Name()).ToCString());
       f->Print(" cnt:%" Pd " trgt:'%s'", count, target.ToQualifiedCString());
     }
+
+    if (target_info->exactness.IsTracking()) {
+      f->Print(" %s", target_info->exactness.ToCString());
+    }
   }
   if (num_checks_to_print < targets.length()) {
     f->Print("...");
@@ -240,6 +249,10 @@
                               const ICData& ic_data,
                               intptr_t num_checks_to_print) {
   f->Print(" IC[");
+  if (ic_data.IsTrackingExactness()) {
+    f->Print("(%s) ",
+             AbstractType::Handle(ic_data.StaticReceiverType()).ToCString());
+  }
   f->Print("%" Pd ": ", ic_data.NumberOfChecks());
   Function& target = Function::Handle();
   if ((num_checks_to_print == FlowGraphPrinter::kPrintAll) ||
@@ -262,6 +275,9 @@
       f->Print("%s", String::Handle(cls.Name()).ToCString());
     }
     f->Print(" cnt:%" Pd " trgt:'%s'", count, target.ToQualifiedCString());
+    if (ic_data.IsTrackingExactness()) {
+      f->Print(" %s", ic_data.GetExactnessAt(i).ToCString());
+    }
   }
   if (num_checks_to_print < ic_data.NumberOfChecks()) {
     f->Print("...");
@@ -324,7 +340,7 @@
 }
 
 void Instruction::PrintTo(BufferFormatter* f) const {
-  if (GetDeoptId() != Thread::kNoDeoptId) {
+  if (GetDeoptId() != DeoptId::kNone) {
     f->Print("%s:%" Pd "(", DebugName(), GetDeoptId());
   } else {
     f->Print("%s(", DebugName());
@@ -343,7 +359,7 @@
 void Definition::PrintTo(BufferFormatter* f) const {
   PrintUse(f, *this);
   if (HasSSATemp() || HasTemp()) f->Print(" <- ");
-  if (GetDeoptId() != Thread::kNoDeoptId) {
+  if (GetDeoptId() != DeoptId::kNone) {
     f->Print("%s:%" Pd "(", DebugName(), GetDeoptId());
   } else {
     f->Print("%s(", DebugName());
@@ -459,7 +475,8 @@
 
 void AssertAssignableInstr::PrintOperandsTo(BufferFormatter* f) const {
   value()->PrintTo(f);
-  f->Print(", %s, '%s',", dst_type().ToCString(), dst_name().ToCString());
+  f->Print(", %s, '%s',", TypeToUserVisibleName(dst_type()),
+           dst_name().ToCString());
   f->Print(" instantiator_type_args(");
   instantiator_type_arguments()->PrintTo(f);
   f->Print("), function_type_args(");
@@ -468,8 +485,8 @@
 }
 
 void AssertSubtypeInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("%s, %s, '%s',", sub_type().ToCString(), super_type().ToCString(),
-           dst_name().ToCString());
+  f->Print("%s, %s, '%s',", TypeToUserVisibleName(sub_type()),
+           TypeToUserVisibleName(super_type()), dst_name().ToCString());
   f->Print(" instantiator_type_args(");
   instantiator_type_arguments()->PrintTo(f);
   f->Print("), function_type_args(");
@@ -545,10 +562,10 @@
   }
   f->Print("] ");
   if (CanDeoptimize()) {
-    ASSERT(deopt_id() != Thread::kNoDeoptId);
+    ASSERT(deopt_id() != DeoptId::kNone);
     f->Print("else deoptimize ");
   } else {
-    ASSERT(deopt_id() == Thread::kNoDeoptId);
+    ASSERT(deopt_id() == DeoptId::kNone);
     f->Print("else %s ", cid_results()[length - 1] != 0 ? "false" : "true");
   }
 }
@@ -822,6 +839,10 @@
   }
 }
 
+void CheckConditionInstr::PrintOperandsTo(BufferFormatter* f) const {
+  comparison()->PrintOperandsTo(f);
+}
+
 void InvokeMathCFunctionInstr::PrintOperandsTo(BufferFormatter* f) const {
   f->Print("%s, ", MethodRecognizer::KindToCString(recognized_kind_));
   Definition::PrintOperandsTo(f);
@@ -1054,7 +1075,7 @@
     parallel_move()->PrintTo(f);
     f->Print(" ");
   }
-  if (GetDeoptId() != Thread::kNoDeoptId) {
+  if (GetDeoptId() != DeoptId::kNone) {
     f->Print("goto:%" Pd " B%" Pd "", GetDeoptId(), successor()->block_id());
   } else {
     f->Print("goto: B%" Pd "", successor()->block_id());
@@ -1062,7 +1083,7 @@
 }
 
 void IndirectGotoInstr::PrintTo(BufferFormatter* f) const {
-  if (GetDeoptId() != Thread::kNoDeoptId) {
+  if (GetDeoptId() != DeoptId::kNone) {
     f->Print("igoto:%" Pd "(", GetDeoptId());
   } else {
     f->Print("igoto:(");
diff --git a/runtime/vm/compiler/backend/il_test.cc b/runtime/vm/compiler/backend/il_test.cc
index 8fb8da0..bf20fb6 100644
--- a/runtime/vm/compiler/backend/il_test.cc
+++ b/runtime/vm/compiler/backend/il_test.cc
@@ -9,19 +9,19 @@
 
 TEST_CASE(InstructionTests) {
   TargetEntryInstr* target_instr = new TargetEntryInstr(
-      1, CatchClauseNode::kInvalidTryIndex, Thread::kNoDeoptId);
+      1, CatchClauseNode::kInvalidTryIndex, DeoptId::kNone);
   EXPECT(target_instr->IsBlockEntry());
   EXPECT(!target_instr->IsDefinition());
   SpecialParameterInstr* context = new SpecialParameterInstr(
-      SpecialParameterInstr::kContext, Thread::kNoDeoptId, target_instr);
+      SpecialParameterInstr::kContext, DeoptId::kNone, target_instr);
   EXPECT(context->IsDefinition());
   EXPECT(!context->IsBlockEntry());
   EXPECT(context->GetBlock() == target_instr);
 }
 
 TEST_CASE(OptimizationTests) {
-  JoinEntryInstr* join = new JoinEntryInstr(
-      1, CatchClauseNode::kInvalidTryIndex, Thread::kNoDeoptId);
+  JoinEntryInstr* join =
+      new JoinEntryInstr(1, CatchClauseNode::kInvalidTryIndex, DeoptId::kNone);
 
   Definition* def1 = new PhiInstr(join, 0);
   Definition* def2 = new PhiInstr(join, 0);
diff --git a/runtime/vm/compiler/backend/il_x64.cc b/runtime/vm/compiler/backend/il_x64.cc
index b6fbb07..313be83 100644
--- a/runtime/vm/compiler/backend/il_x64.cc
+++ b/runtime/vm/compiler/backend/il_x64.cc
@@ -2657,7 +2657,7 @@
                                 catch_handler_types_, needs_stacktrace());
   // On lazy deoptimization we patch the optimized code here to enter the
   // deoptimization stub.
-  const intptr_t deopt_id = Thread::ToDeoptAfter(GetDeoptId());
+  const intptr_t deopt_id = DeoptId::ToDeoptAfter(GetDeoptId());
   if (compiler->is_optimizing()) {
     compiler->AddDeoptIndexAtCall(deopt_id);
   } else {
@@ -5220,6 +5220,24 @@
   }
 }
 
+LocationSummary* CheckConditionInstr::MakeLocationSummary(Zone* zone,
+                                                          bool opt) const {
+  comparison()->InitializeLocationSummary(zone, opt);
+  comparison()->locs()->set_out(0, Location::NoLocation());
+  return comparison()->locs();
+}
+
+void CheckConditionInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  Label if_true;
+  Label* if_false = compiler->AddDeoptStub(deopt_id(), ICData::kDeoptUnknown);
+  BranchLabels labels = {&if_true, if_false, &if_true};
+  Condition true_condition = comparison()->EmitComparisonCode(compiler, labels);
+  if (true_condition != INVALID_CONDITION) {
+    __ j(NegateCondition(true_condition), if_false);
+  }
+  __ Bind(&if_true);
+}
+
 LocationSummary* CheckArrayBoundInstr::MakeLocationSummary(Zone* zone,
                                                            bool opt) const {
   const intptr_t kNumInputs = 2;
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 6988601..ccacbd2 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -117,11 +117,6 @@
     }                                                                          \
   } while (false)
 
-// Is compilation and isolate in strong mode?
-static bool CanUseStrongModeTypes(FlowGraph* flow_graph) {
-  return FLAG_use_strong_mode_types && flow_graph->isolate()->strong();
-}
-
 // Test and obtain Smi value.
 static bool IsSmiValue(Value* val, intptr_t* int_val) {
   if (val->BindsToConstant() && val->BoundConstant().IsSmi()) {
@@ -762,13 +757,15 @@
     while (collected_call_sites_->HasCalls()) {
       TRACE_INLINING(
           THR_Print("  Depth %" Pd " ----------\n", inlining_depth_));
+      if (FLAG_print_inlining_tree) {
+        THR_Print("**Depth % " Pd " calls to inline %" Pd " (threshold % " Pd
+                  ")\n",
+                  inlining_depth_, collected_call_sites_->NumCalls(),
+                  static_cast<intptr_t>(FLAG_max_inlined_per_depth));
+      }
       if (collected_call_sites_->NumCalls() > FLAG_max_inlined_per_depth) {
         break;
       }
-      if (FLAG_print_inlining_tree) {
-        THR_Print("**Depth % " Pd " calls to inline %" Pd "\n", inlining_depth_,
-                  collected_call_sites_->NumCalls());
-      }
       // Swap collected and inlining arrays and clear the new collecting array.
       call_sites_temp = collected_call_sites_;
       collected_call_sites_ = inlining_call_sites_;
@@ -908,11 +905,11 @@
       return false;
     }
 
-    // Save and clear deopt id.
-    const intptr_t prev_deopt_id = thread()->deopt_id();
-    thread()->set_deopt_id(0);
     Error& error = Error::Handle();
     {
+      // Save and clear deopt id.
+      DeoptIdScope deopt_id_scope(thread(), 0);
+
       // Install bailout jump.
       LongJumpScope jump;
       if (setjmp(*jump.Set()) == 0) {
@@ -928,7 +925,7 @@
             // Loading occured while parsing. We need to abort here because
             // state changed while compiling.
             Compiler::AbortBackgroundCompilation(
-                Thread::kNoDeoptId, "Loading occured while parsing in inliner");
+                DeoptId::kNone, "Loading occured while parsing in inliner");
           }
         }
 
@@ -939,7 +936,7 @@
         function.RestoreICDataMap(ic_data_array, clone_ic_data);
         if (Compiler::IsBackgroundCompilation() &&
             (function.ic_data_array() == Array::null())) {
-          Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+          Compiler::AbortBackgroundCompilation(DeoptId::kNone,
                                                "ICData cleared while inlining");
         }
 
@@ -1080,6 +1077,14 @@
           DEBUG_ASSERT(callee_graph->VerifyUseLists());
         }
 
+        if (FLAG_support_il_printer && trace_inlining() &&
+            (FLAG_print_flow_graph || FLAG_print_flow_graph_optimized)) {
+          THR_Print("Callee graph for inlining %s (unoptimized)\n",
+                    function.ToFullyQualifiedCString());
+          FlowGraphPrinter printer(*callee_graph);
+          printer.PrintBlocks();
+        }
+
         {
           CSTAT_TIMER_SCOPE(thread(), graphinliner_opt_timer);
           // TODO(fschneider): Improve suppression of speculative inlining.
@@ -1128,11 +1133,6 @@
             callee_graph->TryOptimizePatterns();
             DEBUG_ASSERT(callee_graph->VerifyUseLists());
 
-            // This optimization must be performed before inlining to ensure
-            // that the receiver of the function is detected (since it will just
-            // be some regular variable after inlining).
-            MarkCallsOnReceiverUnchecked(callee_graph);
-
             callee_graph->Canonicalize();
           }
         }
@@ -1167,7 +1167,6 @@
               (size > FLAG_inlining_constant_arguments_max_size_threshold)) {
             function.set_is_inlinable(false);
           }
-          thread()->set_deopt_id(prev_deopt_id);
           TRACE_INLINING(
               THR_Print("     Bailout: heuristics (%s) with "
                         "code size:  %" Pd ", "
@@ -1198,7 +1197,6 @@
         if (is_recursive_call) {
           inlined_recursive_call_ = true;
         }
-        thread()->set_deopt_id(prev_deopt_id);
 
         call_data->callee_graph = callee_graph;
         call_data->parameter_stubs = param_stubs;
@@ -1238,7 +1236,6 @@
           if (error.raw() == Object::background_compilation_error().raw()) {
             // Fall through to exit the compilation, and retry it later.
           } else {
-            thread()->set_deopt_id(prev_deopt_id);
             TRACE_INLINING(
                 THR_Print("     Bailout: %s\n", error.ToErrorCString()));
             PRINT_INLINING_TREE("Bailout", &call_data->caller, &function, call);
@@ -1670,9 +1667,9 @@
         }
         // Create a new target with the join as unconditional successor.
         TargetEntryInstr* new_target = new TargetEntryInstr(
-            AllocateBlockId(), old_target->try_index(), Thread::kNoDeoptId);
+            AllocateBlockId(), old_target->try_index(), DeoptId::kNone);
         new_target->InheritDeoptTarget(zone(), new_join);
-        GotoInstr* new_goto = new (Z) GotoInstr(new_join, Thread::kNoDeoptId);
+        GotoInstr* new_goto = new (Z) GotoInstr(new_join, DeoptId::kNone);
         new_goto->InheritDeoptTarget(zone(), new_join);
         new_target->LinkTo(new_goto);
         new_target->set_last_instruction(new_goto);
@@ -1771,7 +1768,7 @@
         new (Z) InlineExitCollector(owner_->caller_graph(), call_);
     ReturnInstr* result = new (Z)
         ReturnInstr(call_->instance_call()->token_pos(),
-                    new (Z) Value(last->AsDefinition()), Thread::kNoDeoptId);
+                    new (Z) Value(last->AsDefinition()), DeoptId::kNone);
     owner_->caller_graph()->AppendTo(
         last, result,
         call_->env(),  // Return can become deoptimization target.
@@ -1801,7 +1798,7 @@
 
   // Start with a fresh target entry.
   TargetEntryInstr* entry = new (Z) TargetEntryInstr(
-      AllocateBlockId(), try_idx, Thread::Current()->GetNextDeoptId());
+      AllocateBlockId(), try_idx, CompilerState::Current().GetNextDeoptId());
   entry->InheritDeoptTarget(zone(), call_);
 
   // This function uses a cursor (a pointer to the 'current' instruction) to
@@ -1866,7 +1863,7 @@
         // the join.
         JoinEntryInstr* join = callee_entry->AsJoinEntry();
         ASSERT(join->dominator() != NULL);
-        GotoInstr* goto_join = new GotoInstr(join, Thread::kNoDeoptId);
+        GotoInstr* goto_join = new GotoInstr(join, DeoptId::kNone);
         goto_join->InheritDeoptTarget(zone(), join);
         cursor->LinkTo(goto_join);
         current_block->set_last_instruction(goto_join);
@@ -1899,13 +1896,13 @@
             new Value(load_cid), new Value(cid_constant_end), kSmiCid,
             call_->deopt_id());
         BranchInstr* branch_top = upper_limit_branch =
-            new BranchInstr(compare_top, Thread::kNoDeoptId);
+            new BranchInstr(compare_top, DeoptId::kNone);
         branch_top->InheritDeoptTarget(zone(), call_);
         cursor = AppendInstruction(cursor, branch_top);
         current_block->set_last_instruction(branch_top);
 
-        TargetEntryInstr* below_target = new TargetEntryInstr(
-            AllocateBlockId(), try_idx, Thread::kNoDeoptId);
+        TargetEntryInstr* below_target =
+            new TargetEntryInstr(AllocateBlockId(), try_idx, DeoptId::kNone);
         below_target->InheritDeoptTarget(zone(), call_);
         current_block->AddDominatedBlock(below_target);
         cursor = current_block = below_target;
@@ -1915,13 +1912,13 @@
             call_->instance_call()->token_pos(), Token::kGTE,
             new Value(load_cid), new Value(cid_constant), kSmiCid,
             call_->deopt_id());
-        branch = new BranchInstr(compare_bottom, Thread::kNoDeoptId);
+        branch = new BranchInstr(compare_bottom, DeoptId::kNone);
       } else {
         StrictCompareInstr* compare = new StrictCompareInstr(
             call_->instance_call()->token_pos(), Token::kEQ_STRICT,
             new Value(load_cid), new Value(cid_constant),
-            /* number_check = */ false, Thread::kNoDeoptId);
-        branch = new BranchInstr(compare, Thread::kNoDeoptId);
+            /* number_check = */ false, DeoptId::kNone);
+        branch = new BranchInstr(compare, DeoptId::kNone);
       }
 
       branch->InheritDeoptTarget(zone(), call_);
@@ -1952,10 +1949,10 @@
         JoinEntryInstr* join = callee_entry->AsJoinEntry();
         ASSERT(join != NULL);
         ASSERT(join->dominator() != NULL);
-        true_target = new TargetEntryInstr(AllocateBlockId(), try_idx,
-                                           Thread::kNoDeoptId);
+        true_target =
+            new TargetEntryInstr(AllocateBlockId(), try_idx, DeoptId::kNone);
         true_target->InheritDeoptTarget(zone(), join);
-        GotoInstr* goto_join = new GotoInstr(join, Thread::kNoDeoptId);
+        GotoInstr* goto_join = new GotoInstr(join, DeoptId::kNone);
         goto_join->InheritDeoptTarget(zone(), join);
         true_target->LinkTo(goto_join);
         true_target->set_last_instruction(goto_join);
@@ -1967,7 +1964,7 @@
       // fall-through code below for non-inlined variants.
 
       TargetEntryInstr* false_target =
-          new TargetEntryInstr(AllocateBlockId(), try_idx, Thread::kNoDeoptId);
+          new TargetEntryInstr(AllocateBlockId(), try_idx, DeoptId::kNone);
       false_target->InheritDeoptTarget(zone(), call_);
       *branch->false_successor_address() = false_target;
       cid_test_entry_block->AddDominatedBlock(false_target);
@@ -1978,14 +1975,14 @@
         // If we tested against a range of Cids there are two different tests
         // that can go to the no-cid-match target.
         JoinEntryInstr* join =
-            new JoinEntryInstr(AllocateBlockId(), try_idx, Thread::kNoDeoptId);
-        TargetEntryInstr* false_target2 = new TargetEntryInstr(
-            AllocateBlockId(), try_idx, Thread::kNoDeoptId);
+            new JoinEntryInstr(AllocateBlockId(), try_idx, DeoptId::kNone);
+        TargetEntryInstr* false_target2 =
+            new TargetEntryInstr(AllocateBlockId(), try_idx, DeoptId::kNone);
         *upper_limit_branch->false_successor_address() = false_target2;
         cid_test_entry_block->AddDominatedBlock(false_target2);
         cid_test_entry_block->AddDominatedBlock(join);
-        GotoInstr* goto_1 = new GotoInstr(join, Thread::kNoDeoptId);
-        GotoInstr* goto_2 = new GotoInstr(join, Thread::kNoDeoptId);
+        GotoInstr* goto_1 = new GotoInstr(join, DeoptId::kNone);
+        GotoInstr* goto_2 = new GotoInstr(join, DeoptId::kNone);
         false_target->LinkTo(goto_1);
         false_target2->LinkTo(goto_2);
         false_target->set_last_instruction(goto_1);
@@ -2020,7 +2017,7 @@
     fallback_call->set_total_call_count(call_->CallCount());
     ReturnInstr* fallback_return =
         new ReturnInstr(call_->instance_call()->token_pos(),
-                        new Value(fallback_call), Thread::kNoDeoptId);
+                        new Value(fallback_call), DeoptId::kNone);
     fallback_return->InheritDeoptTargetAfter(owner_->caller_graph(), call_,
                                              fallback_call);
     AppendInstruction(AppendInstruction(cursor, fallback_call),
@@ -2361,20 +2358,20 @@
 
   Definition* array = receiver;
   Definition* index = call->ArgumentAt(1);
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   Instruction* cursor = *entry;
 
   array_cid = PrepareInlineIndexedOp(flow_graph, call, array_cid, &array, index,
                                      &cursor, can_speculate);
 
-  intptr_t deopt_id = Thread::kNoDeoptId;
+  intptr_t deopt_id = DeoptId::kNone;
   if ((array_cid == kTypedDataInt32ArrayCid) ||
       (array_cid == kTypedDataUint32ArrayCid)) {
     // Deoptimization may be needed if result does not always fit in a Smi.
-    deopt_id = (kSmiBits >= 32) ? Thread::kNoDeoptId : call->deopt_id();
+    deopt_id = (kSmiBits >= 32) ? DeoptId::kNone : call->deopt_id();
   }
 
   // Array load and return.
@@ -2383,14 +2380,14 @@
       LoadIndexedInstr(new (Z) Value(array), new (Z) Value(index), index_scale,
                        array_cid, kAlignedAccess, deopt_id, call->token_pos());
   *last = load;
-  cursor = flow_graph->AppendTo(
-      cursor, load, deopt_id != Thread::kNoDeoptId ? call->env() : NULL,
-      FlowGraph::kValue);
+  cursor = flow_graph->AppendTo(cursor, load,
+                                deopt_id != DeoptId::kNone ? call->env() : NULL,
+                                FlowGraph::kValue);
 
   if (array_cid == kTypedDataFloat32ArrayCid) {
     *last = new (Z) FloatToDoubleInstr(new (Z) Value(load), deopt_id);
     flow_graph->AppendTo(cursor, *last,
-                         deopt_id != Thread::kNoDeoptId ? call->env() : NULL,
+                         deopt_id != DeoptId::kNone ? call->env() : NULL,
                          FlowGraph::kValue);
   }
   return true;
@@ -2403,6 +2400,7 @@
                              Definition* receiver,
                              TokenPosition token_pos,
                              const Cids* value_check,
+                             FlowGraphInliner::ExactnessInfo* exactness,
                              TargetEntryInstr** entry,
                              Instruction** last) {
   intptr_t array_cid = MethodRecognizer::MethodKindToReceiverCid(kind);
@@ -2411,9 +2409,9 @@
   Definition* index = call->ArgumentAt(1);
   Definition* stored_value = call->ArgumentAt(2);
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   Instruction* cursor = *entry;
   if (flow_graph->isolate()->argument_type_checks() &&
@@ -2476,12 +2474,18 @@
         // TODO(fschneider): Add support for other array types.
         UNREACHABLE();
     }
-    AssertAssignableInstr* assert_value = new (Z) AssertAssignableInstr(
-        token_pos, new (Z) Value(stored_value), new (Z) Value(type_args),
-        new (Z) Value(flow_graph->constant_null()),  // Function type arguments.
-        value_type, Symbols::Value(), call->deopt_id());
-    cursor = flow_graph->AppendTo(cursor, assert_value, call->env(),
-                                  FlowGraph::kValue);
+
+    if (exactness != nullptr && exactness->is_exact) {
+      exactness->emit_exactness_guard = true;
+    } else {
+      AssertAssignableInstr* assert_value = new (Z) AssertAssignableInstr(
+          token_pos, new (Z) Value(stored_value), new (Z) Value(type_args),
+          new (Z)
+              Value(flow_graph->constant_null()),  // Function type arguments.
+          value_type, Symbols::Value(), call->deopt_id());
+      cursor = flow_graph->AppendTo(cursor, assert_value, call->env(),
+                                    FlowGraph::kValue);
+    }
   }
 
   array_cid = PrepareInlineIndexedOp(flow_graph, call, array_cid, &array, index,
@@ -2548,9 +2552,9 @@
   Definition* left = receiver;
   Definition* right = call->ArgumentAt(1);
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   // Arguments are checked. No need for class check.
   BinaryDoubleOpInstr* double_bin_op = new (Z)
@@ -2572,9 +2576,9 @@
     return false;
   }
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   // Arguments are checked. No need for class check.
 
@@ -2594,9 +2598,9 @@
   Definition* left = receiver;
   Definition* right = call->ArgumentAt(1);
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   // Right arguments is known to be smi: other._bitAndFromSmi(this);
   BinarySmiOpInstr* smi_op =
@@ -2618,9 +2622,9 @@
   Definition* array = receiver;
   Definition* value = call->ArgumentAt(1);
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
 
   // This is an internal method, no need to check argument types.
@@ -2751,8 +2755,8 @@
                                  intptr_t view_cid) {
   return new (Z) LoadIndexedInstr(new (Z) Value(array), new (Z) Value(index),
                                   1,  // Index scale
-                                  view_cid, kUnalignedAccess,
-                                  Thread::kNoDeoptId, call->token_pos());
+                                  view_cid, kUnalignedAccess, DeoptId::kNone,
+                                  call->token_pos());
 }
 
 static bool InlineByteArrayBaseLoad(FlowGraph* flow_graph,
@@ -2770,23 +2774,24 @@
   // For Dart2, both issues are resolved in the inlined code.
   if (array_cid == kDynamicCid) {
     ASSERT(call->IsStaticCall());
-    if (!CanUseStrongModeTypes(flow_graph)) {
+    if (!flow_graph->isolate()->can_use_strong_mode_types()) {
       return false;
     }
   }
 
   Definition* array = receiver;
   Definition* index = call->ArgumentAt(1);
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   Instruction* cursor = *entry;
 
   // All getters that go through InlineByteArrayBaseLoad() have explicit
   // bounds checks in all their clients in the library, so we can omit yet
   // another inlined bounds check when compiling for Dart2 (resolves (A)).
-  const bool needs_bounds_check = !CanUseStrongModeTypes(flow_graph);
+  const bool needs_bounds_check =
+      !flow_graph->isolate()->can_use_strong_mode_types();
   if (needs_bounds_check) {
     PrepareInlineTypedArrayBoundsCheck(flow_graph, call, array_cid, view_cid,
                                        array, index, &cursor);
@@ -2810,13 +2815,13 @@
     ASSERT(block_external->next() == array);
     flow_graph->InsertAfter(
         block_external->next(), load1,
-        call->deopt_id() != Thread::kNoDeoptId ? call->env() : nullptr,
+        call->deopt_id() != DeoptId::kNone ? call->env() : nullptr,
         FlowGraph::kValue);
     LoadIndexedInstr* load2 =
         NewLoad(flow_graph, call, receiver, index, view_cid);
     flow_graph->InsertAfter(
         block_internal, load2,
-        call->deopt_id() != Thread::kNoDeoptId ? call->env() : nullptr,
+        call->deopt_id() != DeoptId::kNone ? call->env() : nullptr,
         FlowGraph::kValue);
     // Construct phi of external and internal load.
     *last = flow_graph->AddPhi(cursor->AsJoinEntry(), load1, load2);
@@ -2826,14 +2831,14 @@
     LoadIndexedInstr* load = NewLoad(flow_graph, call, array, index, view_cid);
     flow_graph->AppendTo(
         cursor, load,
-        call->deopt_id() != Thread::kNoDeoptId ? call->env() : nullptr,
+        call->deopt_id() != DeoptId::kNone ? call->env() : nullptr,
         FlowGraph::kValue);
     cursor = *last = load;
   }
 
   if (view_cid == kTypedDataFloat32ArrayCid) {
     *last = new (Z) FloatToDoubleInstr(new (Z) Value((*last)->AsDefinition()),
-                                       Thread::kNoDeoptId);
+                                       DeoptId::kNone);
     flow_graph->AppendTo(cursor, *last, nullptr, FlowGraph::kValue);
   }
   return true;
@@ -2867,23 +2872,24 @@
   // For Dart2, both issues are resolved in the inlined code.
   if (array_cid == kDynamicCid) {
     ASSERT(call->IsStaticCall());
-    if (!CanUseStrongModeTypes(flow_graph)) {
+    if (!flow_graph->isolate()->can_use_strong_mode_types()) {
       return false;
     }
   }
 
   Definition* array = receiver;
   Definition* index = call->ArgumentAt(1);
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   Instruction* cursor = *entry;
 
   // All setters that go through InlineByteArrayBaseLoad() have explicit
   // bounds checks in all their clients in the library, so we can omit yet
   // another inlined bounds check when compiling for Dart2 (resolves (A)).
-  const bool needs_bounds_check = !CanUseStrongModeTypes(flow_graph);
+  const bool needs_bounds_check =
+      !flow_graph->isolate()->can_use_strong_mode_types();
   if (needs_bounds_check) {
     PrepareInlineTypedArrayBoundsCheck(flow_graph, call, array_cid, view_cid,
                                        array, index, &cursor);
@@ -2915,7 +2921,8 @@
     case kTypedDataFloat64ArrayCid: {
       // Check that value is always double. In AOT Dart2, we use
       // an explicit null check and non-speculative unboxing.
-      if (FLAG_precompiled_mode && CanUseStrongModeTypes(flow_graph)) {
+      if (FLAG_precompiled_mode &&
+          flow_graph->isolate()->can_use_strong_mode_types()) {
         needs_null_check = true;
       } else {
         value_check = Cids::CreateMonomorphic(Z, kDoubleCid);
@@ -2937,8 +2944,8 @@
       // StoreIndexedInstr takes unboxed int64, so value is
       // checked when unboxing. In AOT Dart2, we use an
       // explicit null check and non-speculative unboxing.
-      needs_null_check =
-          FLAG_precompiled_mode && CanUseStrongModeTypes(flow_graph);
+      needs_null_check = FLAG_precompiled_mode &&
+                         flow_graph->isolate()->can_use_strong_mode_types();
       break;
     default:
       // Array cids are already checked in the caller.
@@ -3022,12 +3029,12 @@
     flow_graph->InsertAfter(
         block_external->next(),
         NewStore(flow_graph, call, array, index, stored_value, view_cid),
-        call->deopt_id() != Thread::kNoDeoptId ? call->env() : nullptr,
+        call->deopt_id() != DeoptId::kNone ? call->env() : nullptr,
         FlowGraph::kEffect);
     flow_graph->InsertAfter(
         block_internal,
         NewStore(flow_graph, call, receiver, index, stored_value, view_cid),
-        call->deopt_id() != Thread::kNoDeoptId ? call->env() : nullptr,
+        call->deopt_id() != DeoptId::kNone ? call->env() : nullptr,
         FlowGraph::kEffect);
     *last = cursor;
   } else {
@@ -3037,7 +3044,7 @@
         NewStore(flow_graph, call, array, index, stored_value, view_cid);
     flow_graph->AppendTo(
         cursor, store,
-        call->deopt_id() != Thread::kNoDeoptId ? call->env() : nullptr,
+        call->deopt_id() != DeoptId::kNone ? call->env() : nullptr,
         FlowGraph::kEffect);
     *last = store;
   }
@@ -3076,7 +3083,7 @@
 
   LoadIndexedInstr* load_indexed = new (Z) LoadIndexedInstr(
       new (Z) Value(str), new (Z) Value(index), Instance::ElementSizeFor(cid),
-      cid, kAlignedAccess, Thread::kNoDeoptId, call->token_pos());
+      cid, kAlignedAccess, DeoptId::kNone, call->token_pos());
 
   cursor = flow_graph->AppendTo(cursor, load_indexed, NULL, FlowGraph::kValue);
   ASSERT(cursor == load_indexed);
@@ -3095,9 +3102,9 @@
   Definition* str = receiver;
   Definition* index = call->ArgumentAt(1);
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
 
   *last = PrepareInlineStringIndexOp(flow_graph, call, cid, str, index, *entry);
@@ -3127,9 +3134,9 @@
   Definition* str = receiver;
   Definition* index = call->ArgumentAt(1);
 
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
 
   *last = PrepareInlineStringIndexOp(flow_graph, call, cid, str, index, *entry);
@@ -3149,10 +3156,12 @@
   const intptr_t receiver_cid = class_ids[0];
   TargetEntryInstr* entry = nullptr;
   Instruction* last = nullptr;
+  auto exactness = call->ic_data()->GetExactnessAt(0);
+  ExactnessInfo exactness_info{exactness.IsExact(), false};
   if (FlowGraphInliner::TryInlineRecognizedMethod(
           flow_graph, receiver_cid, target, call,
           call->Receiver()->definition(), call->token_pos(), call->ic_data(),
-          &entry, &last, policy)) {
+          &entry, &last, policy, &exactness_info)) {
     // Determine if inlining instance methods needs a check.
     FlowGraph::ToCheck check = FlowGraph::ToCheck::kNoCheck;
     if (MethodRecognizer::PolymorphicTarget(target)) {
@@ -3184,6 +3193,10 @@
         break;
     }
 
+    if (exactness_info.emit_exactness_guard && exactness.IsTriviallyExact()) {
+      flow_graph->AddExactnessGuard(call, receiver_cid);
+    }
+
     // Remove the original push arguments.
     for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
       PushArgumentInstr* push = call->PushArgumentAt(i);
@@ -3305,9 +3318,9 @@
   if (!ShouldInlineSimd()) {
     return false;
   }
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   Instruction* cursor = *entry;
   switch (kind) {
@@ -3360,10 +3373,9 @@
       *last = SimdOpInstr::CreateFromCall(Z, kind, receiver, call);
       break;
   }
-  flow_graph->AppendTo(
-      cursor, *last,
-      call->deopt_id() != Thread::kNoDeoptId ? call->env() : NULL,
-      FlowGraph::kValue);
+  flow_graph->AppendTo(cursor, *last,
+                       call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
+                       FlowGraph::kValue);
   return true;
 }
 
@@ -3375,9 +3387,9 @@
   if (!CanUnboxDouble()) {
     return false;
   }
-  *entry = new (Z)
-      TargetEntryInstr(flow_graph->allocate_block_id(),
-                       call->GetBlock()->try_index(), Thread::kNoDeoptId);
+  *entry =
+      new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
   (*entry)->InheritDeoptTarget(Z, call);
   Instruction* cursor = *entry;
 
@@ -3399,10 +3411,9 @@
       break;
     }
   }
-  flow_graph->AppendTo(
-      cursor, *last,
-      call->deopt_id() != Thread::kNoDeoptId ? call->env() : NULL,
-      FlowGraph::kValue);
+  flow_graph->AppendTo(cursor, *last,
+                       call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
+                       FlowGraph::kValue);
   return true;
 }
 
@@ -3412,7 +3423,7 @@
                               Definition* y) {
   BinaryInt64OpInstr* mul = new (Z)
       BinaryInt64OpInstr(Token::kMUL, new (Z) Value(x), new (Z) Value(y),
-                         Thread::kNoDeoptId, Instruction::kNotSpeculative);
+                         DeoptId::kNone, Instruction::kNotSpeculative);
   return flow_graph->AppendTo(cursor, mul, nullptr, FlowGraph::kValue);
 }
 
@@ -3441,7 +3452,7 @@
       // Lazily construct entry only in this case.
       *entry = new (Z)
           TargetEntryInstr(flow_graph->allocate_block_id(),
-                           call->GetBlock()->try_index(), Thread::kNoDeoptId);
+                           call->GetBlock()->try_index(), DeoptId::kNone);
       (*entry)->InheritDeoptTarget(Z, call);
       Definition* x_def = x->definition();
       Definition* square =
@@ -3483,7 +3494,8 @@
     const ICData* ic_data,
     TargetEntryInstr** entry,
     Instruction** last,
-    SpeculativeInliningPolicy* policy) {
+    SpeculativeInliningPolicy* policy,
+    FlowGraphInliner::ExactnessInfo* exactness) {
   const bool can_speculate = policy->IsAllowedForInlining(call->deopt_id());
 
   const MethodRecognizer::Kind kind = MethodRecognizer::RecognizeKind(target);
@@ -3546,7 +3558,8 @@
     case MethodRecognizer::kObjectArraySetIndexedUnchecked:
     case MethodRecognizer::kGrowableArraySetIndexedUnchecked:
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, /* value_check = */ NULL, entry, last);
+                              token_pos, /* value_check = */ NULL, exactness,
+                              entry, last);
     case MethodRecognizer::kInt8ArraySetIndexed:
     case MethodRecognizer::kUint8ArraySetIndexed:
     case MethodRecognizer::kUint8ClampedArraySetIndexed:
@@ -3561,14 +3574,15 @@
       }
       Cids* value_check = Cids::CreateMonomorphic(Z, kSmiCid);
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, value_check, entry, last);
+                              token_pos, value_check, exactness, entry, last);
     }
     case MethodRecognizer::kInt32ArraySetIndexed:
     case MethodRecognizer::kUint32ArraySetIndexed: {
       // Value check not needed for Int32 and Uint32 arrays because they
       // implicitly contain unboxing instructions which check for right type.
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, /* value_check = */ NULL, entry, last);
+                              token_pos, /* value_check = */ NULL, exactness,
+                              entry, last);
     }
     case MethodRecognizer::kInt64ArraySetIndexed:
     case MethodRecognizer::kUint64ArraySetIndexed:
@@ -3576,7 +3590,8 @@
         return false;
       }
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, /* value_check = */ NULL, entry, last);
+                              token_pos, /* value_check = */ NULL, exactness,
+                              entry, last);
     case MethodRecognizer::kFloat32ArraySetIndexed:
     case MethodRecognizer::kFloat64ArraySetIndexed: {
       if (!CanUnboxDouble()) {
@@ -3584,7 +3599,7 @@
       }
       Cids* value_check = Cids::CreateMonomorphic(Z, kDoubleCid);
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, value_check, entry, last);
+                              token_pos, value_check, exactness, entry, last);
     }
     case MethodRecognizer::kFloat32x4ArraySetIndexed: {
       if (!ShouldInlineSimd()) {
@@ -3592,7 +3607,7 @@
       }
       Cids* value_check = Cids::CreateMonomorphic(Z, kFloat32x4Cid);
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, value_check, entry, last);
+                              token_pos, value_check, exactness, entry, last);
     }
     case MethodRecognizer::kFloat64x2ArraySetIndexed: {
       if (!ShouldInlineSimd()) {
@@ -3600,7 +3615,7 @@
       }
       Cids* value_check = Cids::CreateMonomorphic(Z, kFloat64x2Cid);
       return InlineSetIndexed(flow_graph, kind, target, call, receiver,
-                              token_pos, value_check, entry, last);
+                              token_pos, value_check, exactness, entry, last);
     }
     case MethodRecognizer::kByteArrayBaseGetInt8:
       return InlineByteArrayBaseLoad(flow_graph, call, receiver, receiver_cid,
@@ -3851,7 +3866,7 @@
     case MethodRecognizer::kObjectConstructor: {
       *entry = new (Z)
           TargetEntryInstr(flow_graph->allocate_block_id(),
-                           call->GetBlock()->try_index(), Thread::kNoDeoptId);
+                           call->GetBlock()->try_index(), DeoptId::kNone);
       (*entry)->InheritDeoptTarget(Z, call);
       ASSERT(!call->HasUses());
       *last = NULL;  // Empty body.
@@ -3869,13 +3884,13 @@
       const auto num_elements = new (Z) Value(call->ArgumentAt(1));
       *entry = new (Z)
           TargetEntryInstr(flow_graph->allocate_block_id(),
-                           call->GetBlock()->try_index(), Thread::kNoDeoptId);
+                           call->GetBlock()->try_index(), DeoptId::kNone);
       (*entry)->InheritDeoptTarget(Z, call);
       *last = new (Z) CreateArrayInstr(call->token_pos(), type, num_elements,
                                        call->deopt_id());
       flow_graph->AppendTo(
           *entry, *last,
-          call->deopt_id() != Thread::kNoDeoptId ? call->env() : NULL,
+          call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
           FlowGraph::kValue);
       return true;
     }
@@ -3886,15 +3901,15 @@
       if (IsSmiValue(num_elements, &length)) {
         if (length >= 0 && length <= Array::kMaxElements) {
           Value* type = new (Z) Value(call->ArgumentAt(0));
-          *entry = new (Z) TargetEntryInstr(flow_graph->allocate_block_id(),
-                                            call->GetBlock()->try_index(),
-                                            Thread::kNoDeoptId);
+          *entry = new (Z)
+              TargetEntryInstr(flow_graph->allocate_block_id(),
+                               call->GetBlock()->try_index(), DeoptId::kNone);
           (*entry)->InheritDeoptTarget(Z, call);
           *last = new (Z) CreateArrayInstr(call->token_pos(), type,
                                            num_elements, call->deopt_id());
           flow_graph->AppendTo(
               *entry, *last,
-              call->deopt_id() != Thread::kNoDeoptId ? call->env() : NULL,
+              call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
               FlowGraph::kValue);
           return true;
         }
@@ -3923,12 +3938,12 @@
       if (!type.IsNull()) {
         *entry = new (Z)
             TargetEntryInstr(flow_graph->allocate_block_id(),
-                             call->GetBlock()->try_index(), Thread::kNoDeoptId);
+                             call->GetBlock()->try_index(), DeoptId::kNone);
         (*entry)->InheritDeoptTarget(Z, call);
         *last = new (Z) ConstantInstr(type);
         flow_graph->AppendTo(
             *entry, *last,
-            call->deopt_id() != Thread::kNoDeoptId ? call->env() : NULL,
+            call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
             FlowGraph::kValue);
         return true;
       }
@@ -3940,7 +3955,7 @@
       // range.
       *entry = new (Z)
           TargetEntryInstr(flow_graph->allocate_block_id(),
-                           call->GetBlock()->try_index(), Thread::kNoDeoptId);
+                           call->GetBlock()->try_index(), DeoptId::kNone);
       (*entry)->InheritDeoptTarget(Z, call);
       Definition* str = call->ArgumentAt(0);
       Definition* index = call->ArgumentAt(1);
@@ -3953,7 +3968,7 @@
                                     call->deopt_id(), call->token_pos());
       flow_graph->AppendTo(
           *entry, *last,
-          call->deopt_id() != Thread::kNoDeoptId ? call->env() : NULL,
+          call->deopt_id() != DeoptId::kNone ? call->env() : NULL,
           FlowGraph::kEffect);
       return true;
     }
diff --git a/runtime/vm/compiler/backend/inliner.h b/runtime/vm/compiler/backend/inliner.h
index 542f8c4..da043a7 100644
--- a/runtime/vm/compiler/backend/inliner.h
+++ b/runtime/vm/compiler/backend/inliner.h
@@ -110,6 +110,11 @@
     return speculative_policy_;
   }
 
+  struct ExactnessInfo {
+    const bool is_exact;
+    bool emit_exactness_guard;
+  };
+
   static bool TryReplaceInstanceCallWithInline(
       FlowGraph* flow_graph,
       ForwardInstructionIterator* iterator,
@@ -131,7 +136,8 @@
                                         const ICData* ic_data,
                                         TargetEntryInstr** entry,
                                         Instruction** last,
-                                        SpeculativeInliningPolicy* policy);
+                                        SpeculativeInliningPolicy* policy,
+                                        ExactnessInfo* exactness = nullptr);
 
  private:
   friend class CallSiteInliner;
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index 95e5a72..2319532 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -983,7 +983,7 @@
     for (intptr_t i = 0; i < non_positive_symbols.length(); i++) {
       CheckArrayBoundInstr* precondition = new CheckArrayBoundInstr(
           new Value(max_smi), new Value(non_positive_symbols[i]),
-          Thread::kNoDeoptId);
+          DeoptId::kNone);
       precondition->mark_generalized();
       precondition = scheduler_.Emit(precondition, check);
       if (precondition == NULL) {
@@ -997,7 +997,7 @@
 
     CheckArrayBoundInstr* new_check = new CheckArrayBoundInstr(
         new Value(UnwrapConstraint(check->length()->definition())),
-        new Value(upper_bound), Thread::kNoDeoptId);
+        new Value(upper_bound), DeoptId::kNone);
     new_check->mark_generalized();
     if (new_check->IsRedundant(array_length)) {
       if (FLAG_trace_range_analysis) {
@@ -1035,7 +1035,7 @@
                                  Definition* left,
                                  Definition* right) {
     return new BinarySmiOpInstr(op_kind, new Value(left), new Value(right),
-                                Thread::kNoDeoptId);
+                                DeoptId::kNone);
   }
 
   BinarySmiOpInstr* MakeBinaryOp(Token::Kind op_kind,
diff --git a/runtime/vm/compiler/backend/type_propagator.cc b/runtime/vm/compiler/backend/type_propagator.cc
index 4b58b36..b5aaa95 100644
--- a/runtime/vm/compiler/backend/type_propagator.cc
+++ b/runtime/vm/compiler/backend/type_propagator.cc
@@ -8,7 +8,7 @@
 
 #include "vm/bit_vector.h"
 #include "vm/compiler/backend/il_printer.h"
-#include "vm/compiler/cha.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/object_store.h"
 #include "vm/regexp_assembler.h"
 #include "vm/resolver.h"
@@ -695,7 +695,7 @@
     } else if (type_->HasResolvedTypeClass()) {
       const Class& type_class = Class::Handle(type_->type_class());
       Thread* thread = Thread::Current();
-      CHA* cha = thread->cha();
+      CHA& cha = thread->compiler_state().cha();
       // Don't infer a cid from an abstract type since there can be multiple
       // compatible classes with different cids.
       if (!type_class.is_abstract() && !CHA::IsImplemented(type_class) &&
@@ -710,7 +710,7 @@
                       type_class.ToCString());
           }
           if (FLAG_use_cha_deopt) {
-            cha->AddToGuardedClasses(type_class, /*subclass_count=*/0);
+            cha.AddToGuardedClasses(type_class, /*subclass_count=*/0);
           }
           cid_ = type_class.id();
         } else {
@@ -968,8 +968,9 @@
                   type_class.ToCString());
             }
             if (FLAG_use_cha_deopt) {
-              thread->cha()->AddToGuardedClasses(type_class,
-                                                 /*subclass_count=*/0);
+              thread->compiler_state().cha().AddToGuardedClasses(
+                  type_class,
+                  /*subclass_count=*/0);
             }
             cid = type_class.id();
           }
@@ -980,7 +981,7 @@
     return CompileType(CompileType::kNonNullable, cid, &type);
   }
 
-  if (Isolate::Current()->strong() && FLAG_use_strong_mode_types) {
+  if (Isolate::Current()->can_use_strong_mode_types()) {
     LocalScope* scope = graph_entry->parsed_function().node_sequence()->scope();
     // Note: in catch-blocks we have ParameterInstr for each local variable
     // not only for normal parameters.
@@ -1132,7 +1133,7 @@
     return *inferred_type;
   }
 
-  if (Isolate::Current()->strong() && FLAG_use_strong_mode_types) {
+  if (Isolate::Current()->can_use_strong_mode_types()) {
     const Function& target = interface_target();
     if (!target.IsNull()) {
       const AbstractType& result_type =
@@ -1165,7 +1166,7 @@
     }
   }
 
-  if (Isolate::Current()->strong() && FLAG_use_strong_mode_types) {
+  if (Isolate::Current()->can_use_strong_mode_types()) {
     CompileType* type = instance_call()->Type();
     TraceStrongModeType(this, type);
     return *type;
@@ -1188,8 +1189,7 @@
   }
 
   const Isolate* isolate = Isolate::Current();
-  if ((isolate->strong() && FLAG_use_strong_mode_types) ||
-      isolate->type_checks()) {
+  if ((isolate->can_use_strong_mode_types()) || isolate->type_checks()) {
     const AbstractType& result_type =
         AbstractType::ZoneHandle(function().result_type());
     // TODO(dartbug.com/30480): instantiate generic result_type if possible.
@@ -1208,8 +1208,7 @@
 
 CompileType LoadLocalInstr::ComputeType() const {
   const Isolate* isolate = Isolate::Current();
-  if ((isolate->strong() && FLAG_use_strong_mode_types) ||
-      isolate->type_checks()) {
+  if (isolate->can_use_strong_mode_types() || isolate->type_checks()) {
     const AbstractType& local_type = local().type();
     TraceStrongModeType(this, local_type);
     return CompileType::FromAbstractType(local_type);
@@ -1245,8 +1244,7 @@
   AbstractType* abstract_type = NULL;
   const Field& field = this->StaticField();
   const Isolate* isolate = Isolate::Current();
-  if ((isolate->strong() && FLAG_use_strong_mode_types) ||
-      isolate->type_checks()) {
+  if (isolate->can_use_strong_mode_types() || isolate->type_checks()) {
     cid = kIllegalCid;
     abstract_type = &AbstractType::ZoneHandle(field.type());
     TraceStrongModeType(this, *abstract_type);
@@ -1301,7 +1299,7 @@
 
   const Isolate* isolate = Isolate::Current();
   CompileType compile_type_annotation = CompileType::None();
-  if ((isolate->strong() && FLAG_use_strong_mode_types) ||
+  if (isolate->can_use_strong_mode_types() ||
       (isolate->type_checks() &&
        (type().IsFunctionType() || type().HasResolvedTypeClass()))) {
     const AbstractType* abstract_type = &type();
@@ -1381,7 +1379,7 @@
 }
 
 CompileType CheckedSmiOpInstr::ComputeType() const {
-  if (Isolate::Current()->strong() && FLAG_use_strong_mode_types) {
+  if (Isolate::Current()->can_use_strong_mode_types()) {
     if (left()->Type()->IsNullableInt() && right()->Type()->IsNullableInt()) {
       const AbstractType& abstract_type =
           AbstractType::ZoneHandle(Type::IntType());
@@ -1398,7 +1396,7 @@
 }
 
 CompileType CheckedSmiComparisonInstr::ComputeType() const {
-  if (Isolate::Current()->strong() && FLAG_use_strong_mode_types) {
+  if (Isolate::Current()->can_use_strong_mode_types()) {
     CompileType* type = call()->Type();
     TraceStrongModeType(this, type);
     return *type;
diff --git a/runtime/vm/compiler/call_specializer.cc b/runtime/vm/compiler/call_specializer.cc
index aff0b3a..b119b07 100644
--- a/runtime/vm/compiler/call_specializer.cc
+++ b/runtime/vm/compiler/call_specializer.cc
@@ -8,6 +8,7 @@
 #include "vm/compiler/backend/flow_graph_compiler.h"
 #include "vm/compiler/backend/inliner.h"
 #include "vm/compiler/cha.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/cpu.h"
 
 namespace dart {
@@ -352,7 +353,7 @@
                                    intptr_t deopt_id,
                                    Environment* deopt_environment,
                                    Instruction* insert_before) {
-  ASSERT(I->strong() && FLAG_use_strong_mode_types);
+  ASSERT(I->can_use_strong_mode_types());
   if (to_check->Type()->is_nullable()) {
     CheckNullInstr* check_null =
         new (Z) CheckNullInstr(to_check->CopyWithType(Z), function_name,
@@ -557,7 +558,7 @@
         StrictCompareInstr* comp = new (Z)
             StrictCompareInstr(call->token_pos(), Token::kEQ_STRICT,
                                new (Z) Value(left), new (Z) Value(right),
-                               /* number_check = */ false, Thread::kNoDeoptId);
+                               /* number_check = */ false, DeoptId::kNone);
         ReplaceCall(call, comp);
         return true;
       }
@@ -958,6 +959,18 @@
       break;
   }
 
+  // True if we can use unchecked entry into the setter.
+  bool is_unchecked_call = false;
+  if (!FLAG_precompiled_mode) {
+    if (unary_ic_data.NumberOfChecks() == 1 &&
+        unary_ic_data.GetExactnessAt(0).IsExact()) {
+      if (unary_ic_data.GetExactnessAt(0).IsTriviallyExact()) {
+        flow_graph()->AddExactnessGuard(instr, unary_ic_data.GetCidAt(0));
+      }
+      is_unchecked_call = true;
+    }
+  }
+
   if (I->use_field_guards()) {
     if (field.guarded_cid() != kDynamicCid) {
       InsertBefore(instr,
@@ -1003,10 +1016,13 @@
         needs_check = true;
       } else if (is_generic_covariant) {
         // If field is generic covariant then we don't need to check it
-        // if we know that actual type arguments match static type arguments
-        // e.g. if this is an invocation on this (an instance we are storing
-        // into is also a receiver of a surrounding method).
-        needs_check = !flow_graph_->IsReceiver(instr->ArgumentAt(0));
+        // if the invocation was marked as unchecked (e.g. receiver of
+        // the invocation is also the receiver of the surrounding method).
+        // Note: we can't use flow_graph()->IsReceiver() for this optimization
+        // because strong mode only gives static guarantees at the AST level
+        // not at the SSA level.
+        needs_check = !(is_unchecked_call ||
+                        (instr->entry_kind() == Code::EntryKind::kUnchecked));
       } else {
         // The rest of the stores are checked statically (we are not at
         // a dynamic invocation).
@@ -1295,7 +1311,8 @@
             type_class.ToCString());
       }
       if (FLAG_use_cha_deopt) {
-        thread()->cha()->AddToGuardedClasses(type_class, /*subclass_count=*/0);
+        thread()->compiler_state().cha().AddToGuardedClasses(
+            type_class, /*subclass_count=*/0);
       }
     } else {
       return false;
@@ -1326,7 +1343,7 @@
 bool CallSpecializer::TryOptimizeInstanceOfUsingStaticTypes(
     InstanceCallInstr* call,
     const AbstractType& type) {
-  ASSERT(I->strong() && FLAG_use_strong_mode_types);
+  ASSERT(I->can_use_strong_mode_types());
   ASSERT(Token::IsTypeTestOperator(call->token_kind()));
 
   if (type.IsDynamicType() || type.IsObjectType() || !type.IsInstantiated()) {
@@ -1342,7 +1359,7 @@
         type.IsNullType() ? Token::kEQ_STRICT : Token::kNE_STRICT,
         left_value->CopyWithType(Z),
         new (Z) Value(flow_graph()->constant_null()),
-        /* number_check = */ false, Thread::kNoDeoptId);
+        /* number_check = */ false, DeoptId::kNone);
     if (FLAG_trace_strong_mode_types) {
       THR_Print("[Strong mode] replacing %s with %s (%s < %s)\n",
                 call->ToCString(), replacement->ToCString(),
@@ -1374,7 +1391,7 @@
     type = AbstractType::Cast(call->ArgumentAt(3)->AsConstant()->value()).raw();
   }
 
-  if (I->strong() && FLAG_use_strong_mode_types &&
+  if (I->can_use_strong_mode_types() &&
       TryOptimizeInstanceOfUsingStaticTypes(call, type)) {
     return;
   }
@@ -1388,7 +1405,7 @@
 
     StrictCompareInstr* check_cid = new (Z) StrictCompareInstr(
         call->token_pos(), Token::kEQ_STRICT, new (Z) Value(left_cid),
-        new (Z) Value(cid), /* number_check = */ false, Thread::kNoDeoptId);
+        new (Z) Value(cid), /* number_check = */ false, DeoptId::kNone);
     ReplaceCall(call, check_cid);
     return;
   }
@@ -1415,7 +1432,7 @@
         }
         TestCidsInstr* test_cids = new (Z) TestCidsInstr(
             call->token_pos(), Token::kIS, new (Z) Value(left), *results,
-            can_deopt ? call->deopt_id() : Thread::kNoDeoptId);
+            can_deopt ? call->deopt_id() : DeoptId::kNone);
         // Remove type.
         ReplaceCall(call, test_cids);
         return;
@@ -1626,7 +1643,7 @@
     }
   }
 
-  if (I->strong() && FLAG_use_strong_mode_types &&
+  if (I->can_use_strong_mode_types() &&
       TryOptimizeStaticCallUsingStaticTypes(call)) {
     return;
   }
diff --git a/runtime/vm/compiler/cha.h b/runtime/vm/compiler/cha.h
index ea49315..3dce752 100644
--- a/runtime/vm/compiler/cha.h
+++ b/runtime/vm/compiler/cha.h
@@ -17,20 +17,10 @@
 class ZoneGrowableArray;
 class String;
 
-class CHA : public StackResource {
+class CHA : public ValueObject {
  public:
   explicit CHA(Thread* thread)
-      : StackResource(thread),
-        thread_(thread),
-        guarded_classes_(thread->zone(), 1),
-        previous_(thread->cha()) {
-    thread->set_cha(this);
-  }
-
-  ~CHA() {
-    ASSERT(thread_->cha() == this);
-    thread_->set_cha(previous_);
-  }
+      : thread_(thread), guarded_classes_(thread->zone(), 1) {}
 
   // Returns true if the class has subclasses.
   static bool HasSubclasses(const Class& cls);
@@ -39,7 +29,8 @@
   // Collect the concrete subclasses of 'cls' into 'class_ids'. Return true if
   // the result is valid (may be invalid because we don't track the subclasses
   // of classes allocated in the VM isolate or class Object).
-  bool ConcreteSubclasses(const Class& cls, GrowableArray<intptr_t>* class_ids);
+  static bool ConcreteSubclasses(const Class& cls,
+                                 GrowableArray<intptr_t>* class_ids);
 
   // Return true if the class is implemented by some other class.
   static bool IsImplemented(const Class& cls);
@@ -81,7 +72,6 @@
   };
 
   GrowableArray<GuardedClassInfo> guarded_classes_;
-  CHA* previous_;
 };
 
 }  // namespace dart
diff --git a/runtime/vm/compiler/cha_test.cc b/runtime/vm/compiler/cha_test.cc
index 81025d9..1cd26e9 100644
--- a/runtime/vm/compiler/cha_test.cc
+++ b/runtime/vm/compiler/cha_test.cc
@@ -28,6 +28,8 @@
       "}\n";
 
   TestCase::LoadTestScript(kScriptChars, NULL);
+
+  TransitionNativeToVM transition(thread);
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   const String& name = String::Handle(String::New(TestCase::url()));
   const Library& lib = Library::Handle(Library::LookupLibrary(thread, name));
diff --git a/runtime/vm/compiler/compiler_pass.cc b/runtime/vm/compiler/compiler_pass.cc
index b33a4cb..e9587e6 100644
--- a/runtime/vm/compiler/compiler_pass.cc
+++ b/runtime/vm/compiler/compiler_pass.cc
@@ -219,9 +219,6 @@
   INVOKE_PASS(SetOuterInliningId);
   INVOKE_PASS(TypePropagation);
   INVOKE_PASS(ApplyClassIds);
-  if (mode == kJIT) {
-    INVOKE_PASS(MarkCallsOnReceiverUnchecked);
-  }
   INVOKE_PASS(Inlining);
   INVOKE_PASS(TypePropagation);
   INVOKE_PASS(ApplyClassIds);
@@ -434,48 +431,6 @@
 COMPILER_PASS(WriteBarrierElimination,
               { WriteBarrierElimination(flow_graph); });
 
-void MarkCallsOnReceiverUnchecked(FlowGraph* flow_graph) {
-  if (flow_graph->function().is_static() ||
-      !flow_graph->function().IsDynamicFunction() ||
-      flow_graph->function().kind() ==
-          RawFunction::kDynamicInvocationForwarder) {
-    return;
-  }
-  for (BlockIterator block_it = flow_graph->reverse_postorder_iterator();
-       !block_it.Done(); block_it.Advance()) {
-    BlockEntryInstr* block = block_it.Current();
-    for (ForwardInstructionIterator it(block); !it.Done(); it.Advance()) {
-      Instruction* current = it.Current();
-      if (StaticCallInstr* instr = current->AsStaticCall()) {
-        if (instr->FirstArgIndex() < instr->ArgumentCount()) {
-          Value* receiver = instr->Receiver();
-          if (flow_graph->IsReceiver(receiver->definition())) {
-            auto& target = instr->function();
-            ASSERT(target.kind() != RawFunction::kDynamicInvocationForwarder);
-            if (!target.is_static() && target.IsDynamicFunction()) {
-              instr->set_entry_kind(Code::EntryKind::kUnchecked);
-            }
-          }
-        }
-      } else if (InstanceCallInstr* instr = current->AsInstanceCall()) {
-        Value* receiver = instr->Receiver();
-        if (flow_graph->IsReceiver(receiver->definition())) {
-          instr->set_entry_kind(Code::EntryKind::kUnchecked);
-        }
-      } else if (PolymorphicInstanceCallInstr* instr =
-                     current->AsPolymorphicInstanceCall()) {
-        Value* receiver = instr->Receiver();
-        if (flow_graph->IsReceiver(receiver->definition())) {
-          instr->instance_call()->set_entry_kind(Code::EntryKind::kUnchecked);
-        }
-      }
-    }
-  }
-}
-
-COMPILER_PASS(MarkCallsOnReceiverUnchecked,
-              { MarkCallsOnReceiverUnchecked(flow_graph); });
-
 COMPILER_PASS(FinalizeGraph, {
   // Compute and store graph informations (call & instruction counts)
   // to be later used by the inliner.
diff --git a/runtime/vm/compiler/compiler_pass.h b/runtime/vm/compiler/compiler_pass.h
index e9301be..92c2bfc 100644
--- a/runtime/vm/compiler/compiler_pass.h
+++ b/runtime/vm/compiler/compiler_pass.h
@@ -43,8 +43,7 @@
   V(TryOptimizePatterns)                                                       \
   V(TypePropagation)                                                           \
   V(WidenSmiToInt32)                                                           \
-  V(WriteBarrierElimination)                                                   \
-  V(MarkCallsOnReceiverUnchecked)
+  V(WriteBarrierElimination)
 
 class AllocationSinking;
 class BlockScheduler;
@@ -170,8 +169,6 @@
   intptr_t flags_;
 };
 
-void MarkCallsOnReceiverUnchecked(FlowGraph* flow_graph);
-
 }  // namespace dart
 
 #endif
diff --git a/runtime/vm/compiler/compiler_sources.gni b/runtime/vm/compiler/compiler_sources.gni
index 62b132c..a3f399d 100644
--- a/runtime/vm/compiler/compiler_sources.gni
+++ b/runtime/vm/compiler/compiler_sources.gni
@@ -75,6 +75,7 @@
   "cha.h",
   "compiler_pass.cc",
   "compiler_pass.h",
+  "compiler_state.h",
   "frontend/base_flow_graph_builder.cc",
   "frontend/base_flow_graph_builder.h",
   "frontend/bytecode_reader.cc",
diff --git a/runtime/vm/compiler/compiler_state.h b/runtime/vm/compiler/compiler_state.h
new file mode 100644
index 0000000..320a174
--- /dev/null
+++ b/runtime/vm/compiler/compiler_state.h
@@ -0,0 +1,107 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef RUNTIME_VM_COMPILER_COMPILER_STATE_H_
+#define RUNTIME_VM_COMPILER_COMPILER_STATE_H_
+
+#include "vm/compiler/cha.h"
+#include "vm/thread.h"
+
+namespace dart {
+
+// Deoptimization Id logic.
+//
+// Deoptimization ids are used to refer to deoptimization points, at which
+// control can enter unoptimized code from the optimized version of the code.
+//
+// Note: any instruction that does a call has two deoptimization points,
+// one before the call and one after the call - so that we could deoptimize
+// to either before or after the call depending on whether the same call
+// already occured in the optimized code (and potentially produced
+// observable side-effects) or not.
+//
+// To simplify implementation we always allocate two deopt ids (one for before
+// point and one for the after point).
+class DeoptId : public AllStatic {
+ public:
+  static constexpr intptr_t kNone = -1;
+
+  static inline intptr_t Next(intptr_t deopt_id) { return deopt_id + kStep; }
+
+  static inline intptr_t ToDeoptAfter(intptr_t deopt_id) {
+    ASSERT(IsDeoptBefore(deopt_id));
+    return deopt_id + kAfterOffset;
+  }
+
+  static inline bool IsDeoptBefore(intptr_t deopt_id) {
+    return (deopt_id % kStep) == kBeforeOffset;
+  }
+
+  static inline bool IsDeoptAfter(intptr_t deopt_id) {
+    return (deopt_id % kStep) == kAfterOffset;
+  }
+
+ private:
+  static constexpr intptr_t kStep = 2;
+  static constexpr intptr_t kBeforeOffset = 0;
+  static constexpr intptr_t kAfterOffset = 1;
+};
+
+// Global compiler state attached to the thread.
+class CompilerState : public StackResource {
+ public:
+  explicit CompilerState(Thread* thread) : StackResource(thread), cha_(thread) {
+    previous_ = thread->SetCompilerState(this);
+  }
+
+  ~CompilerState() {
+    ASSERT(&thread()->compiler_state() == this);
+    thread()->SetCompilerState(previous_);
+  }
+
+  CHA& cha() { return cha_; }
+
+  intptr_t deopt_id() const { return deopt_id_; }
+  void set_deopt_id(int value) {
+    ASSERT(value >= 0);
+    deopt_id_ = value;
+  }
+
+  intptr_t GetNextDeoptId() {
+    ASSERT(deopt_id_ != DeoptId::kNone);
+    const intptr_t id = deopt_id_;
+    deopt_id_ = DeoptId::Next(deopt_id_);
+    return id;
+  }
+
+  static CompilerState& Current() {
+    return Thread::Current()->compiler_state();
+  }
+
+ private:
+  CHA cha_;
+  intptr_t deopt_id_ = 0;
+
+  CompilerState* previous_;
+};
+
+class DeoptIdScope : public StackResource {
+ public:
+  DeoptIdScope(Thread* thread, intptr_t deopt_id)
+      : StackResource(thread),
+        prev_deopt_id_(thread->compiler_state().deopt_id()) {
+    thread->compiler_state().set_deopt_id(deopt_id);
+  }
+
+  ~DeoptIdScope() { thread()->compiler_state().set_deopt_id(prev_deopt_id_); }
+
+ private:
+  const intptr_t prev_deopt_id_;
+
+  DISALLOW_COPY_AND_ASSIGN(DeoptIdScope);
+};
+
+}  // namespace dart
+
+#endif  // RUNTIME_VM_COMPILER_COMPILER_STATE_H_
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
index 30432db..55e3531 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.cc
@@ -315,7 +315,7 @@
   Value* array = Pop();
   LoadIndexedInstr* instr = new (Z)
       LoadIndexedInstr(array, index, index_scale, kArrayCid, kAlignedAccess,
-                       Thread::kNoDeoptId, TokenPosition::kNoSource);
+                       DeoptId::kNone, TokenPosition::kNoSource);
   Push(instr);
   return Fragment(instr);
 }
@@ -445,7 +445,7 @@
   StoreIndexedInstr* store = new (Z) StoreIndexedInstr(
       Pop(),  // Array.
       index, value, emit_store_barrier, Instance::ElementSizeFor(class_id),
-      class_id, kAlignedAccess, Thread::kNoDeoptId, TokenPosition::kNoSource);
+      class_id, kAlignedAccess, DeoptId::kNone, TokenPosition::kNoSource);
   Push(store);
   return Fragment(store);
 }
@@ -645,7 +645,7 @@
 }
 
 Fragment BaseFlowGraphBuilder::AssertBool(TokenPosition position) {
-  if (FLAG_omit_strong_type_checks) {
+  if (!I->should_emit_strong_mode_checks()) {
     return Fragment();
   }
   Value* value = Pop();
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index c1418a7..190635c 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -220,7 +220,7 @@
   Fragment TailCall(const Code& code);
 
   intptr_t GetNextDeoptId() {
-    intptr_t deopt_id = thread_->GetNextDeoptId();
+    intptr_t deopt_id = thread_->compiler_state().GetNextDeoptId();
     if (context_level_array_ != NULL) {
       intptr_t level = context_depth_;
       context_level_array_->Add(deopt_id);
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.cc b/runtime/vm/compiler/frontend/bytecode_reader.cc
index aab0242..3f244f7 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.cc
+++ b/runtime/vm/compiler/frontend/bytecode_reader.cc
@@ -210,7 +210,7 @@
         }
         obj = ICData::New(function, name,
                           array,  // Arguments descriptor.
-                          Thread::kNoDeoptId, checked_argument_count,
+                          DeoptId::kNone, checked_argument_count,
                           ICData::RebindRule::kInstance);
 #if defined(TAG_IC_DATA)
         ICData::Cast(obj).set_tag(ICData::Tag::kInstanceCall);
@@ -254,7 +254,7 @@
         array ^= pool.ObjectAt(arg_desc_index);
         obj = ICData::New(function, name,
                           array,  // Arguments descriptor.
-                          Thread::kNoDeoptId, num_args_checked,
+                          DeoptId::kNone, num_args_checked,
                           ICData::RebindRule::kStatic);
         ICData::Cast(obj).AddTarget(Function::Cast(elem));
 #if defined(TAG_IC_DATA)
@@ -567,10 +567,10 @@
         handler_types.SetAt(i, handler_type);
       }
       pc_descriptors_list->AddDescriptor(RawPcDescriptors::kOther, start_pc,
-                                         Thread::kNoDeoptId,
+                                         DeoptId::kNone,
                                          TokenPosition::kNoSource, try_index);
       pc_descriptors_list->AddDescriptor(RawPcDescriptors::kOther, end_pc,
-                                         Thread::kNoDeoptId,
+                                         DeoptId::kNone,
                                          TokenPosition::kNoSource, -1);
 
       exception_handlers_list->AddHandler(
@@ -591,8 +591,9 @@
   }
 }
 
-RawTypedData* BytecodeMetadataHelper::NativeEntry(const Function& function,
-                                                  const String& external_name) {
+RawNativeEntryData* BytecodeMetadataHelper::NativeEntry(
+    const Function& function,
+    const String& external_name) {
   Zone* zone = helper_->zone_;
   MethodRecognizer::Kind kind = MethodRecognizer::RecognizeKind(function);
   // This list of recognized methods must be kept in sync with the list of
@@ -652,23 +653,12 @@
     }
     argc_tag = NativeArguments::ComputeArgcTag(function);
   }
-  // TODO(regis): Introduce a new VM class subclassing Object and containing
-  // these four untagged values.
-#ifdef ARCH_IS_32_BIT
-  const TypedData& native_entry = TypedData::Handle(
-      zone, TypedData::New(kTypedDataUint32ArrayCid, 4, Heap::kOld));
-  native_entry.SetUint32(0 << 2, static_cast<uint32_t>(kind));
-  native_entry.SetUint32(1 << 2, reinterpret_cast<uint32_t>(trampoline));
-  native_entry.SetUint32(2 << 2, reinterpret_cast<uint32_t>(native_function));
-  native_entry.SetUint32(3 << 2, static_cast<uint32_t>(argc_tag));
-#else
-  const TypedData& native_entry = TypedData::Handle(
-      zone, TypedData::New(kTypedDataUint64ArrayCid, 4, Heap::kOld));
-  native_entry.SetUint64(0 << 3, static_cast<uint64_t>(kind));
-  native_entry.SetUint64(1 << 3, reinterpret_cast<uint64_t>(trampoline));
-  native_entry.SetUint64(2 << 3, reinterpret_cast<uint64_t>(native_function));
-  native_entry.SetUint64(3 << 3, static_cast<uint64_t>(argc_tag));
-#endif
+  const NativeEntryData& native_entry =
+      NativeEntryData::Handle(zone, NativeEntryData::New());
+  native_entry.set_kind(kind);
+  native_entry.set_trampoline(trampoline);
+  native_entry.set_native_function(native_function);
+  native_entry.set_argc_tag(argc_tag);
   return native_entry.raw();
 }
 
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.h b/runtime/vm/compiler/frontend/bytecode_reader.h
index a257f25..6d3ed1f 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.h
+++ b/runtime/vm/compiler/frontend/bytecode_reader.h
@@ -33,8 +33,8 @@
                            intptr_t from_index);
   RawCode* ReadBytecode(const ObjectPool& pool);
   void ReadExceptionsTable(const Code& bytecode);
-  RawTypedData* NativeEntry(const Function& function,
-                            const String& external_name);
+  RawNativeEntryData* NativeEntry(const Function& function,
+                                  const String& external_name);
 
   TypeTranslator& type_translator_;
   ActiveClass* const active_class_;
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder.cc b/runtime/vm/compiler/frontend/flow_graph_builder.cc
index 4d93fdf..bba0ace 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder.cc
@@ -164,7 +164,7 @@
 }
 
 intptr_t FlowGraphBuilder::GetNextDeoptId() const {
-  intptr_t deopt_id = thread()->GetNextDeoptId();
+  intptr_t deopt_id = thread()->compiler_state().GetNextDeoptId();
   if (context_level_array_ != NULL) {
     intptr_t level = context_level();
     context_level_array_->Add(deopt_id);
@@ -427,8 +427,8 @@
     // Create a join of the returns.
     intptr_t join_id = caller_graph_->max_block_id() + 1;
     caller_graph_->set_max_block_id(join_id);
-    JoinEntryInstr* join = new (Z)
-        JoinEntryInstr(join_id, try_index, Thread::Current()->GetNextDeoptId());
+    JoinEntryInstr* join = new (Z) JoinEntryInstr(
+        join_id, try_index, CompilerState::Current().GetNextDeoptId());
 
     // The dominator set of the join is the intersection of the dominator
     // sets of all the predecessors.  If we keep the dominator sets ordered
@@ -447,7 +447,7 @@
     for (intptr_t i = 0; i < num_exits; ++i) {
       // Add the control-flow edge.
       GotoInstr* goto_instr =
-          new (Z) GotoInstr(join, Thread::Current()->GetNextDeoptId());
+          new (Z) GotoInstr(join, CompilerState::Current().GetNextDeoptId());
       goto_instr->InheritDeoptTarget(zone(), ReturnAt(i));
       LastInstructionAt(i)->LinkTo(goto_instr);
       ExitBlockAt(i)->set_last_instruction(LastInstructionAt(i)->next());
@@ -533,18 +533,18 @@
     // by the constant propagation.
     TargetEntryInstr* false_block = new (Z) TargetEntryInstr(
         caller_graph_->allocate_block_id(), call_block->try_index(),
-        Thread::Current()->GetNextDeoptId());
+        CompilerState::Current().GetNextDeoptId());
     false_block->InheritDeoptTargetAfter(caller_graph_, call_, NULL);
     false_block->LinkTo(call_->next());
     call_block->ReplaceAsPredecessorWith(false_block);
 
     ConstantInstr* true_const = caller_graph_->GetConstant(Bool::True());
-    BranchInstr* branch = new (Z)
-        BranchInstr(new (Z) StrictCompareInstr(
-                        TokenPosition::kNoSource, Token::kEQ_STRICT,
-                        new (Z) Value(true_const), new (Z) Value(true_const),
-                        false, Thread::Current()->GetNextDeoptId()),
-                    Thread::Current()->GetNextDeoptId());  // No number check.
+    BranchInstr* branch = new (Z) BranchInstr(
+        new (Z) StrictCompareInstr(TokenPosition::kNoSource, Token::kEQ_STRICT,
+                                   new (Z) Value(true_const),
+                                   new (Z) Value(true_const), false,
+                                   CompilerState::Current().GetNextDeoptId()),
+        CompilerState::Current().GetNextDeoptId());  // No number check.
     branch->InheritDeoptTarget(zone(), call_);
     *branch->true_successor_address() = callee_entry;
     *branch->false_successor_address() = false_block;
@@ -2192,7 +2192,7 @@
   {
     LocalVariable* tmp_var = EnterTempLocalScope(array_val);
     const intptr_t class_id = kArrayCid;
-    const intptr_t deopt_id = Thread::kNoDeoptId;
+    const intptr_t deopt_id = DeoptId::kNone;
     for (int i = 0; i < node->length(); ++i) {
       Value* array = Bind(new (Z) LoadLocalInstr(*tmp_var, node->token_pos()));
       Value* index = Bind(new (Z) ConstantInstr(Smi::ZoneHandle(Z, Smi::New(i)),
@@ -3490,12 +3490,14 @@
 
   if (isolate()->use_field_guards()) {
     store_value = Bind(BuildStoreExprTemp(store_value, token_pos));
-    GuardFieldClassInstr* guard_field_class = new (Z) GuardFieldClassInstr(
-        store_value, node->field(), thread()->GetNextDeoptId());
+    GuardFieldClassInstr* guard_field_class = new (Z)
+        GuardFieldClassInstr(store_value, node->field(),
+                             thread()->compiler_state().GetNextDeoptId());
     AddInstruction(guard_field_class);
     store_value = Bind(BuildLoadExprTemp(token_pos));
-    GuardFieldLengthInstr* guard_field_length = new (Z) GuardFieldLengthInstr(
-        store_value, node->field(), thread()->GetNextDeoptId());
+    GuardFieldLengthInstr* guard_field_length = new (Z)
+        GuardFieldLengthInstr(store_value, node->field(),
+                              thread()->compiler_state().GetNextDeoptId());
     AddInstruction(guard_field_length);
     store_value = Bind(BuildLoadExprTemp(token_pos));
   }
diff --git a/runtime/vm/compiler/frontend/flow_graph_builder_test.cc b/runtime/vm/compiler/frontend/flow_graph_builder_test.cc
index 84eb098..4b591c9 100644
--- a/runtime/vm/compiler/frontend/flow_graph_builder_test.cc
+++ b/runtime/vm/compiler/frontend/flow_graph_builder_test.cc
@@ -35,9 +35,12 @@
     EXPECT(thread_ != NULL);
     EXPECT(isolate_ != NULL);
     EXPECT(script_ != NULL);
-    Dart_Handle lib = TestCase::LoadTestScript(script, NULL);
-    EXPECT_VALID(lib);
-    root_lib_ ^= Api::UnwrapHandle(lib);
+    {
+      TransitionVMToNative transition(thread);
+      Dart_Handle lib = TestCase::LoadTestScript(script, NULL);
+      EXPECT_VALID(lib);
+      root_lib_ ^= Api::UnwrapHandle(lib);
+    }
     EXPECT(!root_lib_.IsNull());
     root_script_ ^=
         root_lib_.LookupScript(String::Handle(String::New(USER_TEST_URI)));
@@ -60,6 +63,7 @@
         new ParsedFunction(thread_, Function::ZoneHandle(function.raw()));
     Parser::ParseFunction(parsed_function);
     parsed_function->AllocateVariables();
+    CompilerState state(thread_);
     FlowGraphBuilder builder(*parsed_function, *ic_data_array,
                              /* not building var desc */ NULL,
                              /* not inlining */ NULL, Compiler::kNoOSRDeoptId);
@@ -280,7 +284,7 @@
   GrowableArray<BlockEntryInstr*>* blocks_;
 };
 
-TEST_CASE(SourcePosition_InstanceCalls) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_InstanceCalls) {
   const char* kScript =
       "var x = 5;\n"
       "var y = 5;\n"
@@ -300,7 +304,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_If) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_If) {
   const char* kScript =
       "var x = 5;\n"
       "var y = 5;\n"
@@ -328,7 +332,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_ForLoop) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_ForLoop) {
   const char* kScript =
       "var x = 0;\n"
       "var y = 5;\n"
@@ -358,7 +362,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_While) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_While) {
   const char* kScript =
       "var x = 0;\n"
       "var y = 5;\n"
@@ -406,7 +410,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_WhileContinueBreak) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_WhileContinueBreak) {
   const char* kScript =
       "var x = 0;\n"
       "var y = 5;\n"
@@ -445,7 +449,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_LoadIndexed) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_LoadIndexed) {
   const char* kScript =
       "var x = 0;\n"
       "var z = new List(3);\n"
@@ -483,7 +487,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_StoreIndexed) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_StoreIndexed) {
   const char* kScript =
       "var x = 0;\n"
       "var z = new List(4);\n"
@@ -526,7 +530,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_BitwiseOperations) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_BitwiseOperations) {
   const char* kScript =
       "var x = 0;\n"
       "var y = 1;\n"
@@ -575,7 +579,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_IfElse) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_IfElse) {
   const char* kScript =
       "var x = 5;\n"
       "var y = 5;\n"
@@ -604,7 +608,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_Switch) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_Switch) {
   const char* kScript =
       "var x = 5;\n"
       "var y = 5;\n"
@@ -648,7 +652,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_TryCatchFinally) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_TryCatchFinally) {
   const char* kScript =
       "var x = 5;\n"
       "var y = 5;\n"
@@ -699,7 +703,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_InstanceFields) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_InstanceFields) {
   const char* kScript =
       "class A {\n"
       "  var x;\n"
@@ -728,7 +732,7 @@
   spt.EnsureSourcePositions();
 }
 
-TEST_CASE(SourcePosition_Async) {
+ISOLATE_UNIT_TEST_CASE(SourcePosition_Async) {
   const char* kScript =
       "import 'dart:async';\n"
       "var x = 5;\n"
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 0cac1db..ca6e29d 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -800,7 +800,7 @@
     loop += condition;
 
     Instruction* entry =
-        new (Z) GotoInstr(join, Thread::Current()->GetNextDeoptId());
+        new (Z) GotoInstr(join, CompilerState::Current().GetNextDeoptId());
     body += Fragment(entry, loop_exit);
   }
 
@@ -937,7 +937,7 @@
     TypeChecksToBuild mode,
     Fragment* explicit_checks,
     Fragment* implicit_checks) {
-  if (FLAG_omit_strong_type_checks) return;
+  if (!I->should_emit_strong_mode_checks()) return;
 
   FunctionNodeHelper function_node_helper(this);
   function_node_helper.SetNext(FunctionNodeHelper::kTypeParameters);
@@ -1567,10 +1567,6 @@
   F += CheckStackOverflowInPrologue(dart_function);
   F += DebugStepCheckInPrologue(dart_function, token_position);
   F += SetAsyncStackTrace(dart_function);
-  // TODO(#34162): We can remove the default type handling (and
-  // shorten the prologue type handling sequence) for non-dynamic invocations of
-  // regular methods.
-  F += TypeArgumentsHandling(dart_function, type_parameters_offset);
   return F;
 }
 
@@ -1709,7 +1705,8 @@
     const Function& dart_function,
     const Fragment& implicit_type_checks,
     const Fragment& first_time_prologue,
-    const Fragment& every_time_prologue) {
+    const Fragment& every_time_prologue,
+    const Fragment& type_args_handling) {
   ASSERT(!dart_function.IsImplicitClosureFunction());
   if (!dart_function.MayHaveUncheckedEntryPoint(I) ||
       implicit_type_checks.is_empty()) {
@@ -1729,7 +1726,7 @@
   // TODO(#34162): For regular closures we can often avoid the
   // PrologueBuilder-prologue on non-dynamic invocations.
   if (!PrologueBuilder::HasEmptyPrologue(dart_function) ||
-      !first_time_prologue.is_empty() ||
+      !type_args_handling.is_empty() || !first_time_prologue.is_empty() ||
       !(every_time_prologue.entry == every_time_prologue.current ||
         every_time_prologue.current->previous() == every_time_prologue.entry)) {
     return UncheckedEntryPointStyle::kSharedWithVariable;
@@ -1782,6 +1779,12 @@
   const Fragment first_time_prologue = BuildFirstTimePrologue(
       dart_function, first_parameter, type_parameters_offset);
 
+  // TODO(#34162): We can remove the default type handling (and
+  // shorten the prologue type handling sequence) for non-dynamic invocations of
+  // regular methods.
+  const Fragment type_args_handling =
+      TypeArgumentsHandling(dart_function, type_parameters_offset);
+
   Fragment explicit_type_checks;
   Fragment implicit_type_checks;
   CheckArgumentTypesAsNecessary(dart_function, type_parameters_offset,
@@ -1790,9 +1793,9 @@
   const Fragment body =
       BuildFunctionBody(dart_function, first_parameter, is_constructor);
 
-  auto extra_entry_point_style =
-      ChooseEntryPointStyle(dart_function, implicit_type_checks,
-                            first_time_prologue, every_time_prologue);
+  auto extra_entry_point_style = ChooseEntryPointStyle(
+      dart_function, implicit_type_checks, first_time_prologue,
+      every_time_prologue, type_args_handling);
 
   Fragment function(instruction_cursor);
   if (yield_continuations().is_empty()) {
@@ -1800,12 +1803,14 @@
     switch (extra_entry_point_style) {
       case UncheckedEntryPointStyle::kNone: {
         function += every_time_prologue + first_time_prologue +
-                    implicit_type_checks + explicit_type_checks + body;
+                    type_args_handling + implicit_type_checks +
+                    explicit_type_checks + body;
         break;
       }
       case UncheckedEntryPointStyle::kSeparate: {
         ASSERT(instruction_cursor == normal_entry);
         ASSERT(first_time_prologue.is_empty());
+        ASSERT(type_args_handling.is_empty());
 
         const Fragment prologue_copy = BuildEveryTimePrologue(
             dart_function, token_position, type_parameters_offset);
@@ -1822,6 +1827,7 @@
         Fragment prologue(normal_entry, instruction_cursor);
         prologue += every_time_prologue;
         prologue += first_time_prologue;
+        prologue += type_args_handling;
         prologue += explicit_type_checks;
         extra_entry = BuildSharedUncheckedEntryPoint(
             /*shared_prologue_linked_in=*/prologue,
@@ -1837,9 +1843,15 @@
     // If the function's body contains any yield points, build switch statement
     // that selects a continuation point based on the value of :await_jump_var.
     ASSERT(explicit_type_checks.is_empty());
+
+    // If the function is generic, type_args_handling might require access to
+    // (possibly captured) 'this' for preparing default type arguments, in which
+    // case we can't run it before the 'first_time_prologue'.
+    ASSERT(!dart_function.IsGeneric());
+
     // TODO(#34162): We can probably ignore the implicit checks
     // here as well since the arguments are passed from generated code.
-    function += every_time_prologue +
+    function += every_time_prologue + type_args_handling +
                 CompleteBodyWithYieldContinuations(first_time_prologue +
                                                    implicit_type_checks + body);
   }
@@ -2440,10 +2452,13 @@
     const Array& argument_names,
     intptr_t checked_argument_count,
     const Function& interface_target,
-    const InferredTypeMetadata* result_type) {
+    const InferredTypeMetadata* result_type,
+    bool use_unchecked_entry,
+    const CallSiteAttributesMetadata* call_site_attrs) {
   return flow_graph_builder_->InstanceCall(
       position, name, kind, type_args_len, argument_count, argument_names,
-      checked_argument_count, interface_target, result_type);
+      checked_argument_count, interface_target, result_type,
+      use_unchecked_entry, call_site_attrs);
 }
 
 Fragment StreamingFlowGraphBuilder::ThrowException(TokenPosition position) {
@@ -2772,8 +2787,13 @@
     BranchInstr* branch;
     if (stack()->definition()->IsStrictCompare() &&
         stack()->definition() == instructions.current) {
-      branch = new (Z) BranchInstr(Pop()->definition()->AsStrictCompare(),
-                                   flow_graph_builder_->GetNextDeoptId());
+      StrictCompareInstr* compare = Pop()->definition()->AsStrictCompare();
+      if (negate) {
+        compare->NegateComparison();
+        negate = false;
+      }
+      branch =
+          new (Z) BranchInstr(compare, flow_graph_builder_->GetNextDeoptId());
       branch->comparison()->ClearTempIndex();
       ASSERT(instructions.current->previous() != nullptr);
       instructions.current = instructions.current->previous();
@@ -2783,10 +2803,12 @@
       Value* right_value = Pop();
       Value* left_value = Pop();
       StrictCompareInstr* compare = new (Z) StrictCompareInstr(
-          TokenPosition::kNoSource, Token::kEQ_STRICT, left_value, right_value,
-          false, flow_graph_builder_->GetNextDeoptId());
+          TokenPosition::kNoSource,
+          negate ? Token::kNE_STRICT : Token::kEQ_STRICT, left_value,
+          right_value, false, flow_graph_builder_->GetNextDeoptId());
       branch =
           new (Z) BranchInstr(compare, flow_graph_builder_->GetNextDeoptId());
+      negate = false;
     }
     instructions <<= branch;
 
@@ -2981,16 +3003,32 @@
 
   const DirectCallMetadata direct_call =
       direct_call_metadata_helper_.GetDirectTargetForPropertySet(offset);
+  const CallSiteAttributesMetadata call_site_attributes =
+      call_site_attributes_metadata_helper_.GetCallSiteAttributes(offset);
+
+  // True if callee can skip argument type checks.
+  bool is_unchecked_call = false;
+#ifndef TARGET_ARCH_DBC
+  if (call_site_attributes.receiver_type != nullptr &&
+      call_site_attributes.receiver_type->HasResolvedTypeClass() &&
+      !Class::Handle(call_site_attributes.receiver_type->type_class())
+           .IsGeneric()) {
+    is_unchecked_call = true;
+  }
+#endif
 
   Fragment instructions(MakeTemp());
   LocalVariable* variable = MakeTemporary();
 
   const TokenPosition position = ReadPosition();  // read position.
-  if (p != NULL) *p = position;
+  if (p != nullptr) *p = position;
 
+  if (PeekTag() == kThisExpression) {
+    is_unchecked_call = true;
+  }
   instructions += BuildExpression();  // read receiver.
 
-  LocalVariable* receiver = NULL;
+  LocalVariable* receiver = nullptr;
   if (direct_call.check_receiver_for_null_) {
     // Duplicate receiver for CheckNull before it is consumed by PushArgument.
     receiver = MakeTemporary();
@@ -3020,25 +3058,29 @@
   }
 
   if (!direct_call.target_.IsNull()) {
+    // TODO(#34162): Pass 'is_unchecked_call' down if/when we feature multiple
+    // entry-points in AOT.
     ASSERT(FLAG_precompiled_mode);
     instructions +=
         StaticCall(position, direct_call.target_, 2, Array::null_array(),
-                   ICData::kNoRebind, /* result_type = */ NULL);
+                   ICData::kNoRebind, /*result_type=*/nullptr);
   } else {
     const intptr_t kTypeArgsLen = 0;
     const intptr_t kNumArgsChecked = 1;
 
     const String* mangled_name = &setter_name;
-    if (!FLAG_precompiled_mode && I->strong() &&
-        !FLAG_omit_strong_type_checks && H.IsRoot(itarget_name)) {
+    if (!FLAG_precompiled_mode && I->should_emit_strong_mode_checks() &&
+        H.IsRoot(itarget_name)) {
       mangled_name = &String::ZoneHandle(
           Z, Function::CreateDynamicInvocationForwarderName(setter_name));
     }
 
-    instructions +=
-        InstanceCall(position, *mangled_name, Token::kSET, kTypeArgsLen, 2,
-                     Array::null_array(), kNumArgsChecked, *interface_target,
-                     /* result_type = */ NULL);
+    instructions += InstanceCall(
+        position, *mangled_name, Token::kSET, kTypeArgsLen, 2,
+        Array::null_array(), kNumArgsChecked, *interface_target,
+        /*result_type=*/nullptr,
+        /*use_unchecked_entry=*/!FLAG_precompiled_mode && is_unchecked_call,
+        &call_site_attributes);
   }
 
   instructions += Drop();  // Drop result of the setter invocation.
@@ -3455,11 +3497,8 @@
       direct_call_metadata_helper_.GetDirectTargetForMethodInvocation(offset);
   const InferredTypeMetadata result_type =
       inferred_type_metadata_helper_.GetInferredType(offset);
-
-#ifndef TARGET_ARCH_DBC
   const CallSiteAttributesMetadata call_site_attributes =
       call_site_attributes_metadata_helper_.GetCallSiteAttributes(offset);
-#endif
 
   const Tag receiver_tag = PeekTag();  // peek tag for receiver.
   if (IsNumberLiteral(receiver_tag) &&
@@ -3497,12 +3536,19 @@
   }
 
   bool is_unchecked_closure_call = false;
+  bool is_unchecked_call = false;
 #ifndef TARGET_ARCH_DBC
-  if (call_site_attributes.receiver_type != nullptr &&
-      call_site_attributes.receiver_type->IsFunctionType()) {
-    AlternativeReadingScope alt(&reader_);
-    SkipExpression();  // skip receiver
-    is_unchecked_closure_call = ReadNameAsMethodName().Equals(Symbols::Call());
+  if (call_site_attributes.receiver_type != nullptr) {
+    if (call_site_attributes.receiver_type->IsFunctionType()) {
+      AlternativeReadingScope alt(&reader_);
+      SkipExpression();  // skip receiver
+      is_unchecked_closure_call =
+          ReadNameAsMethodName().Equals(Symbols::Call());
+    } else if (call_site_attributes.receiver_type->HasResolvedTypeClass() &&
+               !Class::Handle(call_site_attributes.receiver_type->type_class())
+                    .IsGeneric()) {
+      is_unchecked_call = true;
+    }
   }
 #endif
 
@@ -3533,6 +3579,11 @@
     type_args_len = list_length;
   }
 
+  // Take note of whether the invocation is against the receiver of the current
+  // function: in this case, we may skip some type checks in the callee.
+  if (PeekTag() == kThisExpression) {
+    is_unchecked_call = true;
+  }
   instructions += BuildExpression();  // read receiver.
 
   const String& name = ReadNameAsMethodName();  // read name.
@@ -3622,6 +3673,8 @@
         B->ClosureCall(position, type_args_len, argument_count, argument_names,
                        /*use_unchecked_entry=*/true);
   } else if (!direct_call.target_.IsNull()) {
+    // TODO(#34162): Pass 'is_unchecked_call' down if/when we feature multiple
+    // entry-points in AOT.
     ASSERT(FLAG_precompiled_mode);
     instructions += StaticCall(position, direct_call.target_, argument_count,
                                argument_names, ICData::kNoRebind, &result_type,
@@ -3633,17 +3686,20 @@
     //     at the entry because the parameter is marked covariant, neither of
     //     those cases require a dynamic invocation forwarder;
     //   * we assume that all closures are entered in a checked way.
-    if (!FLAG_precompiled_mode && I->strong() &&
-        !FLAG_omit_strong_type_checks &&
+    if (!FLAG_precompiled_mode && I->should_emit_strong_mode_checks() &&
         (name.raw() != Symbols::EqualOperator().raw()) &&
         (name.raw() != Symbols::Call().raw()) && H.IsRoot(itarget_name)) {
       mangled_name = &String::ZoneHandle(
           Z, Function::CreateDynamicInvocationForwarderName(name));
     }
-    instructions +=
-        InstanceCall(position, *mangled_name, token_kind, type_args_len,
-                     argument_count, argument_names, checked_argument_count,
-                     *interface_target, &result_type);
+
+    // TODO(#34162): Pass 'is_unchecked_call' down if/when we feature multiple
+    // entry-points in AOT.
+    instructions += InstanceCall(
+        position, *mangled_name, token_kind, type_args_len, argument_count,
+        argument_names, checked_argument_count, *interface_target, &result_type,
+        /*use_unchecked_entry=*/!FLAG_precompiled_mode && is_unchecked_call,
+        &call_site_attributes);
   }
 
   // Drop temporaries preserving result on the top of the stack.
@@ -4709,14 +4765,35 @@
       Class::ZoneHandle(Z, I->object_store()->closure_class()), 0);
   LocalVariable* new_closure = MakeTemporary();
 
-  instructions += LoadLocal(new_closure);
-
   intptr_t num_type_args = ReadListLength();
   const TypeArguments& type_args = T.BuildTypeArguments(num_type_args);
   instructions += TranslateInstantiatedTypeArguments(type_args);
+  LocalVariable* type_args_vec = MakeTemporary();
+
+  // Check the bounds.
+  //
+  // TODO(sjindel): Only perform this check for instance tearoffs, not for
+  // tearoffs against local or top-level functions.
+  instructions += LoadLocal(original_closure);
+  instructions += PushArgument();
+  instructions += LoadLocal(type_args_vec);
+  instructions += PushArgument();
+  const Library& dart_internal = Library::Handle(Z, Library::InternalLibrary());
+  const Function& bounds_check_function = Function::ZoneHandle(
+      Z, dart_internal.LookupFunctionAllowPrivate(
+             Symbols::BoundsCheckForPartialInstantiation()));
+  ASSERT(!bounds_check_function.IsNull());
+  instructions += StaticCall(TokenPosition::kNoSource, bounds_check_function, 2,
+                             ICData::kStatic);
+  instructions += Drop();
+
+  instructions += LoadLocal(new_closure);
+  instructions += LoadLocal(type_args_vec);
   instructions += StoreInstanceField(TokenPosition::kNoSource,
                                      Closure::delayed_type_arguments_offset());
 
+  instructions += Drop();  // Drop type args.
+
   // Copy over the target function.
   instructions += LoadLocal(new_closure);
   instructions += LoadLocal(original_closure);
@@ -4745,7 +4822,7 @@
   instructions +=
       StoreInstanceField(TokenPosition::kNoSource, Closure::context_offset());
 
-  instructions += DropTempsPreserveTop(1);  // drop old closure
+  instructions += DropTempsPreserveTop(1);  // Drop old closure.
 
   return instructions;
 }
@@ -4964,8 +5041,9 @@
   condition.IfTrueGoto(flow_graph_builder_, join);
 
   loop_depth_dec();
-  return Fragment(new (Z) GotoInstr(join, Thread::Current()->GetNextDeoptId()),
-                  condition.CreateFalseSuccessor(flow_graph_builder_));
+  return Fragment(
+      new (Z) GotoInstr(join, CompilerState::Current().GetNextDeoptId()),
+      condition.CreateFalseSuccessor(flow_graph_builder_));
 }
 
 Fragment StreamingFlowGraphBuilder::BuildForStatement() {
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index c4aecce..3992163 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -148,7 +148,8 @@
       const Function& dart_function,
       const Fragment& implicit_type_checks,
       const Fragment& first_time_prologue,
-      const Fragment& every_time_prologue);
+      const Fragment& every_time_prologue,
+      const Fragment& type_args_handling);
 
   void RecordUncheckedEntryPoint(TargetEntryInstr* extra_entry);
 
@@ -227,15 +228,18 @@
                         Token::Kind kind,
                         intptr_t argument_count,
                         intptr_t checked_argument_count = 1);
-  Fragment InstanceCall(TokenPosition position,
-                        const String& name,
-                        Token::Kind kind,
-                        intptr_t type_args_len,
-                        intptr_t argument_count,
-                        const Array& argument_names,
-                        intptr_t checked_argument_count,
-                        const Function& interface_target,
-                        const InferredTypeMetadata* result_type = NULL);
+  Fragment InstanceCall(
+      TokenPosition position,
+      const String& name,
+      Token::Kind kind,
+      intptr_t type_args_len,
+      intptr_t argument_count,
+      const Array& argument_names,
+      intptr_t checked_argument_count,
+      const Function& interface_target,
+      const InferredTypeMetadata* result_type = nullptr,
+      bool use_unchecked_entry = false,
+      const CallSiteAttributesMetadata* call_site_attrs = nullptr);
 
   enum TypeChecksToBuild {
     kCheckAllTypeParameterBounds,
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 53d17b4..a68d9b9 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -353,7 +353,9 @@
     const Array& argument_names,
     intptr_t checked_argument_count,
     const Function& interface_target,
-    const InferredTypeMetadata* result_type) {
+    const InferredTypeMetadata* result_type,
+    bool use_unchecked_entry,
+    const CallSiteAttributesMetadata* call_site_attrs) {
   const intptr_t total_count = argument_count + (type_args_len > 0 ? 1 : 0);
   ArgumentArray arguments = GetArguments(total_count);
   InstanceCallInstr* call = new (Z)
@@ -363,6 +365,13 @@
   if ((result_type != NULL) && !result_type->IsTrivial()) {
     call->SetResultType(Z, result_type->ToCompileType(Z));
   }
+  if (use_unchecked_entry) {
+    call->set_entry_kind(Code::EntryKind::kUnchecked);
+  }
+  if (call_site_attrs != nullptr && call_site_attrs->receiver_type != nullptr &&
+      call_site_attrs->receiver_type->IsInstantiated()) {
+    call->set_static_receiver_type(call_site_attrs->receiver_type);
+  }
   Push(call);
   return Fragment(call);
 }
@@ -1053,7 +1062,7 @@
   if (dst_type.IsMalformed()) {
     return ThrowTypeError();
   }
-  if (FLAG_omit_strong_type_checks) {
+  if (!I->should_emit_strong_mode_checks()) {
     return Fragment();
   }
   if (!dst_type.IsDynamicType() && !dst_type.IsObjectType() &&
@@ -1071,7 +1080,7 @@
                                             const AbstractType& dst_type,
                                             const String& dst_name,
                                             AssertAssignableInstr::Kind kind) {
-  if (FLAG_omit_strong_type_checks) {
+  if (!I->should_emit_strong_mode_checks()) {
     return Fragment();
   }
 
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index 49332d5..9f6b524 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -92,20 +92,26 @@
   Fragment TryCatch(int try_handler_index);
   Fragment CheckStackOverflowInPrologue(TokenPosition position);
   Fragment CloneContext(intptr_t num_context_variables);
-  Fragment InstanceCall(TokenPosition position,
-                        const String& name,
-                        Token::Kind kind,
-                        intptr_t type_args_len,
-                        intptr_t argument_count,
-                        const Array& argument_names,
-                        intptr_t checked_argument_count,
-                        const Function& interface_target,
-                        const InferredTypeMetadata* result_type = NULL);
+
+  Fragment InstanceCall(
+      TokenPosition position,
+      const String& name,
+      Token::Kind kind,
+      intptr_t type_args_len,
+      intptr_t argument_count,
+      const Array& argument_names,
+      intptr_t checked_argument_count,
+      const Function& interface_target,
+      const InferredTypeMetadata* result_type = nullptr,
+      bool use_unchecked_entry = false,
+      const CallSiteAttributesMetadata* call_site_attrs = nullptr);
+
   Fragment ClosureCall(TokenPosition position,
                        intptr_t type_args_len,
                        intptr_t argument_count,
                        const Array& argument_names,
                        bool use_unchecked_entry = false);
+
   Fragment RethrowException(TokenPosition position, int catch_try_index);
   Fragment LoadClassId();
   Fragment LoadField(intptr_t offset, intptr_t class_id = kDynamicCid);
@@ -166,7 +172,7 @@
 
   LocalVariable* LookupVariable(intptr_t kernel_offset);
 
-  bool IsCompiledForOsr() { return osr_id_ != Thread::kNoDeoptId; }
+  bool IsCompiledForOsr() { return osr_id_ != DeoptId::kNone; }
 
   TranslationHelper translation_helper_;
   Thread* thread_;
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index cac95bc..3dd63b8 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -956,6 +956,8 @@
 
   void ReadUntilFunctionNode();
 
+  Tag PeekTag(uint8_t* payload = NULL);
+
  protected:
   const Script& script() const { return script_; }
 
@@ -1020,7 +1022,6 @@
   void SkipLibraryTypedef();
   TokenPosition ReadPosition(bool record = true);
   Tag ReadTag(uint8_t* payload = NULL);
-  Tag PeekTag(uint8_t* payload = NULL);
   uint8_t ReadFlags() { return reader_.ReadFlags(); }
 
   intptr_t SourceTableSize();
diff --git a/runtime/vm/compiler/intrinsifier.cc b/runtime/vm/compiler/intrinsifier.cc
index 9afbe0b..0d8fb526 100644
--- a/runtime/vm/compiler/intrinsifier.cc
+++ b/runtime/vm/compiler/intrinsifier.cc
@@ -227,7 +227,7 @@
   intptr_t block_id = builder.AllocateBlockId();
   TargetEntryInstr* normal_entry =
       new TargetEntryInstr(block_id, CatchClauseNode::kInvalidTryIndex,
-                           Thread::Current()->GetNextDeoptId());
+                           CompilerState::Current().GetNextDeoptId());
   GraphEntryInstr* graph_entry = new GraphEntryInstr(
       parsed_function, normal_entry, Compiler::kNoOSRDeoptId);
   FlowGraph* graph =
@@ -372,7 +372,7 @@
         current_(entry),
         fall_through_env_(new Environment(0,
                                           0,
-                                          Thread::kNoDeoptId,
+                                          DeoptId::kNone,
                                           flow_graph->parsed_function(),
                                           NULL)) {}
 
@@ -400,8 +400,8 @@
   }
 
   void AddIntrinsicReturn(Value* value) {
-    ReturnInstr* instr =
-        new ReturnInstr(TokenPos(), value, Thread::Current()->GetNextDeoptId());
+    ReturnInstr* instr = new ReturnInstr(
+        TokenPos(), value, CompilerState::Current().GetNextDeoptId());
     AddInstruction(instr);
     entry_->set_last_instruction(instr);
   }
@@ -420,7 +420,7 @@
 
   Definition* AddUnboxInstr(Representation rep, Value* value, bool is_checked) {
     Definition* unboxed_value =
-        AddDefinition(UnboxInstr::Create(rep, value, Thread::kNoDeoptId));
+        AddDefinition(UnboxInstr::Create(rep, value, DeoptId::kNone));
     if (is_checked) {
       // The type of |value| has already been checked and it is safe to
       // adjust reaching type. This is done manually because there is no type
@@ -446,7 +446,7 @@
   Definition* InvokeMathCFunctionHelper(MethodRecognizer::Kind recognized_kind,
                                         ZoneGrowableArray<Value*>* args) {
     InvokeMathCFunctionInstr* invoke_math_c_function =
-        new InvokeMathCFunctionInstr(args, Thread::kNoDeoptId, recognized_kind,
+        new InvokeMathCFunctionInstr(args, DeoptId::kNone, recognized_kind,
                                      TokenPos());
     AddDefinition(invoke_math_c_function);
     return invoke_math_c_function;
@@ -466,7 +466,7 @@
       new Value(array), length_offset, Type::ZoneHandle(Type::SmiType()),
       TokenPosition::kNoSource));
   builder->AddInstruction(new CheckArrayBoundInstr(
-      new Value(length), new Value(index), Thread::kNoDeoptId));
+      new Value(length), new Value(index), DeoptId::kNone));
 }
 
 static bool IntrinsifyArrayGetIndexed(FlowGraph* flow_graph,
@@ -495,7 +495,7 @@
   Definition* result = builder.AddDefinition(new LoadIndexedInstr(
       new Value(array), new Value(index),
       Instance::ElementSizeFor(array_cid),  // index scale
-      array_cid, kAlignedAccess, Thread::kNoDeoptId, builder.TokenPos()));
+      array_cid, kAlignedAccess, DeoptId::kNone, builder.TokenPos()));
   // Box and/or convert result if necessary.
   switch (array_cid) {
     case kTypedDataInt32ArrayCid:
@@ -510,7 +510,7 @@
       break;
     case kTypedDataFloat32ArrayCid:
       result = builder.AddDefinition(
-          new FloatToDoubleInstr(new Value(result), Thread::kNoDeoptId));
+          new FloatToDoubleInstr(new Value(result), DeoptId::kNone));
     // Fall through.
     case kTypedDataFloat64ArrayCid:
       result = builder.AddDefinition(
@@ -580,8 +580,8 @@
     case kExternalTypedDataUint8ClampedArrayCid:
     case kTypedDataInt16ArrayCid:
     case kTypedDataUint16ArrayCid:
-      builder.AddInstruction(new CheckSmiInstr(
-          new Value(value), Thread::kNoDeoptId, builder.TokenPos()));
+      builder.AddInstruction(new CheckSmiInstr(new Value(value), DeoptId::kNone,
+                                               builder.TokenPos()));
       break;
     case kTypedDataInt32ArrayCid:
     case kExternalTypedDataInt32ArrayCid:
@@ -625,14 +625,13 @@
       }
       Zone* zone = flow_graph->zone();
       Cids* value_check = Cids::CreateMonomorphic(zone, value_check_cid);
-      builder.AddInstruction(
-          new CheckClassInstr(new Value(value), Thread::kNoDeoptId,
-                              *value_check, builder.TokenPos()));
+      builder.AddInstruction(new CheckClassInstr(
+          new Value(value), DeoptId::kNone, *value_check, builder.TokenPos()));
       value = builder.AddUnboxInstr(rep, new Value(value),
                                     /* is_checked = */ true);
       if (array_cid == kTypedDataFloat32ArrayCid) {
         value = builder.AddDefinition(
-            new DoubleToFloatInstr(new Value(value), Thread::kNoDeoptId));
+            new DoubleToFloatInstr(new Value(value), DeoptId::kNone));
       }
       break;
     }
@@ -650,7 +649,7 @@
   builder.AddInstruction(new StoreIndexedInstr(
       new Value(array), new Value(index), new Value(value), kNoStoreBarrier,
       Instance::ElementSizeFor(array_cid),  // index scale
-      array_cid, kAlignedAccess, Thread::kNoDeoptId, builder.TokenPos()));
+      array_cid, kAlignedAccess, DeoptId::kNone, builder.TokenPos()));
   // Return null.
   Definition* null_def = builder.AddNullDefinition();
   builder.AddIntrinsicReturn(new Value(null_def));
@@ -777,7 +776,7 @@
 
   Definition* result = builder.AddDefinition(new LoadIndexedInstr(
       new Value(str), new Value(index), Instance::ElementSizeFor(cid), cid,
-      kAlignedAccess, Thread::kNoDeoptId, builder.TokenPos()));
+      kAlignedAccess, DeoptId::kNone, builder.TokenPos()));
   builder.AddIntrinsicReturn(new Value(result));
   return true;
 }
@@ -815,8 +814,8 @@
 
   Cids* value_check = Cids::CreateMonomorphic(zone, cid);
   // Check argument. Receiver (left) is known to be a Float32x4.
-  builder.AddInstruction(new CheckClassInstr(
-      new Value(right), Thread::kNoDeoptId, *value_check, builder.TokenPos()));
+  builder.AddInstruction(new CheckClassInstr(new Value(right), DeoptId::kNone,
+                                             *value_check, builder.TokenPos()));
   Definition* left_simd = builder.AddUnboxInstr(rep, new Value(left),
                                                 /* is_checked = */ true);
 
@@ -825,7 +824,7 @@
 
   Definition* unboxed_result = builder.AddDefinition(SimdOpInstr::Create(
       SimdOpInstr::KindForOperator(cid, kind), new Value(left_simd),
-      new Value(right_simd), Thread::kNoDeoptId));
+      new Value(right_simd), DeoptId::kNone));
   Definition* result =
       builder.AddDefinition(BoxInstr::Create(rep, new Value(unboxed_result)));
   builder.AddIntrinsicReturn(new Value(result));
@@ -860,8 +859,8 @@
       builder.AddUnboxInstr(kUnboxedFloat32x4, new Value(receiver),
                             /* is_checked = */ true);
 
-  Definition* unboxed_result = builder.AddDefinition(SimdOpInstr::Create(
-      kind, new Value(unboxed_receiver), Thread::kNoDeoptId));
+  Definition* unboxed_result = builder.AddDefinition(
+      SimdOpInstr::Create(kind, new Value(unboxed_receiver), DeoptId::kNone));
 
   Definition* result = builder.AddDefinition(
       BoxInstr::Create(kUnboxedDouble, new Value(unboxed_result)));
@@ -956,7 +955,7 @@
   Definition* result = builder.AddDefinition(new LoadIndexedInstr(
       new Value(backing_store), new Value(index),
       Instance::ElementSizeFor(kArrayCid),  // index scale
-      kArrayCid, kAlignedAccess, Thread::kNoDeoptId, builder.TokenPos()));
+      kArrayCid, kAlignedAccess, DeoptId::kNone, builder.TokenPos()));
   builder.AddIntrinsicReturn(new Value(result));
   return true;
 }
@@ -998,7 +997,7 @@
       new Value(backing_store), new Value(index), new Value(value),
       kEmitStoreBarrier,
       Instance::ElementSizeFor(kArrayCid),  // index scale
-      kArrayCid, kAlignedAccess, Thread::kNoDeoptId, builder.TokenPos()));
+      kArrayCid, kAlignedAccess, DeoptId::kNone, builder.TokenPos()));
   // Return null.
   Definition* null_def = builder.AddNullDefinition();
   builder.AddIntrinsicReturn(new Value(null_def));
@@ -1015,8 +1014,8 @@
   Zone* zone = flow_graph->zone();
 
   Cids* value_check = Cids::CreateMonomorphic(zone, kArrayCid);
-  builder.AddInstruction(new CheckClassInstr(
-      new Value(data), Thread::kNoDeoptId, *value_check, builder.TokenPos()));
+  builder.AddInstruction(new CheckClassInstr(new Value(data), DeoptId::kNone,
+                                             *value_check, builder.TokenPos()));
 
   builder.AddInstruction(new StoreInstanceFieldInstr(
       GrowableObjectArray::data_offset(), new Value(growable_array),
@@ -1035,8 +1034,8 @@
   Definition* length = builder.AddParameter(1);
   Definition* growable_array = builder.AddParameter(2);
 
-  builder.AddInstruction(new CheckSmiInstr(
-      new Value(length), Thread::kNoDeoptId, builder.TokenPos()));
+  builder.AddInstruction(
+      new CheckSmiInstr(new Value(length), DeoptId::kNone, builder.TokenPos()));
   builder.AddInstruction(new StoreInstanceFieldInstr(
       GrowableObjectArray::length_offset(), new Value(growable_array),
       new Value(length), kNoStoreBarrier, builder.TokenPos()));
@@ -1058,7 +1057,7 @@
       builder.AddUnboxInstr(kUnboxedDouble, new Value(receiver),
                             /* is_checked = */ true);
   Definition* unboxed_result = builder.AddDefinition(new UnaryDoubleOpInstr(
-      Token::kNEGATE, new Value(unboxed_value), Thread::kNoDeoptId));
+      Token::kNEGATE, new Value(unboxed_value), DeoptId::kNone));
   Definition* result = builder.AddDefinition(
       BoxInstr::Create(kUnboxedDouble, new Value(unboxed_result)));
   builder.AddIntrinsicReturn(new Value(result));
diff --git a/runtime/vm/compiler/intrinsifier_arm.cc b/runtime/vm/compiler/intrinsifier_arm.cc
index 9256dc6..7c0ff38 100644
--- a/runtime/vm/compiler/intrinsifier_arm.cc
+++ b/runtime/vm/compiler/intrinsifier_arm.cc
@@ -201,7 +201,10 @@
     __ mov(R3, Operand(0), HI);                                                \
                                                                                \
     /* Get the class index and insert it into the tags. */                     \
-    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));                 \
+    uint32_t tags = 0;                                                         \
+    tags = RawObject::ClassIdTag::update(cid, tags);                           \
+    tags = RawObject::NewBit::update(true, tags);                              \
+    __ LoadImmediate(TMP, tags);                                               \
     __ orr(R3, R3, Operand(TMP));                                              \
     __ str(R3, FieldAddress(R0, type_name::tags_offset())); /* Tags. */        \
   }                                                                            \
@@ -2003,7 +2006,10 @@
 
     // Get the class index and insert it into the tags.
     // R3: size and bit tags.
-    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ LoadImmediate(TMP, tags);
     __ orr(R3, R3, Operand(TMP));
     __ str(R3, FieldAddress(R0, String::tags_offset()));  // Store tags.
   }
diff --git a/runtime/vm/compiler/intrinsifier_arm64.cc b/runtime/vm/compiler/intrinsifier_arm64.cc
index ff9ef0e..79b3412 100644
--- a/runtime/vm/compiler/intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/intrinsifier_arm64.cc
@@ -213,7 +213,10 @@
     __ csel(R2, ZR, R2, HI);                                                   \
                                                                                \
     /* Get the class index and insert it into the tags. */                     \
-    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));                 \
+    uint32_t tags = 0;                                                         \
+    tags = RawObject::ClassIdTag::update(cid, tags);                           \
+    tags = RawObject::NewBit::update(true, tags);                              \
+    __ LoadImmediate(TMP, tags);                                               \
     __ orr(R2, R2, Operand(TMP));                                              \
     __ str(R2, FieldAddress(R0, type_name::tags_offset())); /* Tags. */        \
   }                                                                            \
@@ -2075,7 +2078,10 @@
     // Get the class index and insert it into the tags.
     // R2: size and bit tags.
     // This also clears the hash, which is in the high word of the tags.
-    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ LoadImmediate(TMP, tags);
     __ orr(R2, R2, Operand(TMP));
     __ str(R2, FieldAddress(R0, String::tags_offset()));  // Store tags.
   }
diff --git a/runtime/vm/compiler/intrinsifier_ia32.cc b/runtime/vm/compiler/intrinsifier_ia32.cc
index 931cdbf..0e6e8cc 100644
--- a/runtime/vm/compiler/intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/intrinsifier_ia32.cc
@@ -203,7 +203,10 @@
     __ Bind(&done);                                                            \
                                                                                \
     /* Get the class index and insert it into the tags. */                     \
-    __ orl(EDI, Immediate(RawObject::ClassIdTag::encode(cid)));                \
+    uint32_t tags = 0;                                                         \
+    tags = RawObject::ClassIdTag::update(cid, tags);                           \
+    tags = RawObject::NewBit::update(true, tags);                              \
+    __ orl(EDI, Immediate(tags));                                              \
     __ movl(FieldAddress(EAX, type_name::tags_offset()), EDI); /* Tags. */     \
   }                                                                            \
   /* Set the length field. */                                                  \
@@ -1995,7 +1998,10 @@
     __ Bind(&done);
 
     // Get the class index and insert it into the tags.
-    __ orl(EDI, Immediate(RawObject::ClassIdTag::encode(cid)));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ orl(EDI, Immediate(tags));
     __ movl(FieldAddress(EAX, String::tags_offset()), EDI);  // Tags.
   }
 
diff --git a/runtime/vm/compiler/intrinsifier_x64.cc b/runtime/vm/compiler/intrinsifier_x64.cc
index 0d41621..b3bd008 100644
--- a/runtime/vm/compiler/intrinsifier_x64.cc
+++ b/runtime/vm/compiler/intrinsifier_x64.cc
@@ -199,7 +199,10 @@
     __ Bind(&done);                                                            \
                                                                                \
     /* Get the class index and insert it into the tags. */                     \
-    __ orq(RDI, Immediate(RawObject::ClassIdTag::encode(cid)));                \
+    uint32_t tags = 0;                                                         \
+    tags = RawObject::ClassIdTag::update(cid, tags);                           \
+    tags = RawObject::NewBit::update(true, tags);                              \
+    __ orq(RDI, Immediate(tags));                                              \
     __ movq(FieldAddress(RAX, type_name::tags_offset()), RDI); /* Tags. */     \
   }                                                                            \
   /* Set the length field. */                                                  \
@@ -2017,7 +2020,10 @@
 
     // Get the class index and insert it into the tags.
     // This also clears the hash, which is in the high bits of the tags.
-    __ orq(RDI, Immediate(RawObject::ClassIdTag::encode(cid)));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ orq(RDI, Immediate(tags));
     __ movq(FieldAddress(RAX, String::tags_offset()), RDI);  // Tags.
   }
 
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index aad6e73..371fafa 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -23,6 +23,7 @@
 #include "vm/compiler/backend/type_propagator.h"
 #include "vm/compiler/cha.h"
 #include "vm/compiler/compiler_pass.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/compiler/frontend/flow_graph_builder.h"
 #include "vm/compiler/frontend/kernel_to_il.h"
 #include "vm/compiler/jit/jit_call_specializer.h"
@@ -133,18 +134,6 @@
                     precompilation,
                     "Precompilation mode");
 
-static void UnsafeModeHandler(bool value) {
-  if (value) {
-    FLAG_omit_strong_type_checks = true;
-    FLAG_use_strong_mode_types = false;
-  }
-}
-
-DEFINE_FLAG_HANDLER(UnsafeModeHandler,
-                    experimental_unsafe_mode_use_at_your_own_risk,
-                    "Omit runtime strong mode type checks and disable "
-                    "optimizations based on types.");
-
 #ifndef DART_PRECOMPILED_RUNTIME
 
 bool UseKernelFrontEndFor(ParsedFunction* parsed_function) {
@@ -688,7 +677,10 @@
           THR_Print("--> FAIL: Loading invalidation.");
         }
       }
-      if (!thread()->cha()->IsConsistentWithCurrentHierarchy()) {
+      if (!thread()
+               ->compiler_state()
+               .cha()
+               .IsConsistentWithCurrentHierarchy()) {
         code_is_valid = false;
         if (trace_compiler) {
           THR_Print("--> FAIL: Class hierarchy has new subclasses.");
@@ -718,7 +710,7 @@
       // The generated code was compiled under certain assumptions about
       // class hierarchy and field types. Register these dependencies
       // to ensure that the code will be deoptimized if they are violated.
-      thread()->cha()->RegisterDependencies(code);
+      thread()->compiler_state().cha().RegisterDependencies(code);
 
       const ZoneGrowableArray<const Field*>& guarded_fields =
           *flow_graph->parsed_function().guarded_fields();
@@ -753,7 +745,7 @@
   if (!isolate()->background_compiler()->is_running()) {
     // The background compiler is being stopped.
     Compiler::AbortBackgroundCompilation(
-        Thread::kNoDeoptId, "Background compilation is being stopped");
+        DeoptId::kNone, "Background compilation is being stopped");
   }
 }
 
@@ -788,16 +780,12 @@
   Code* volatile result = &Code::ZoneHandle(zone);
   while (!done) {
     *result = Code::null();
-    const intptr_t prev_deopt_id = thread()->deopt_id();
-    thread()->set_deopt_id(0);
     LongJumpScope jump;
     if (setjmp(*jump.Set()) == 0) {
       FlowGraph* flow_graph = nullptr;
       ZoneGrowableArray<const ICData*>* ic_data_array = nullptr;
 
-      // Class hierarchy analysis is registered with the thread in the
-      // constructor and unregisters itself upon destruction.
-      CHA cha(thread());
+      CompilerState compiler_state(thread());
 
       // TimerScope needs an isolate to be properly terminated in case of a
       // LongJump.
@@ -825,7 +813,7 @@
           if (Compiler::IsBackgroundCompilation() &&
               (function.ic_data_array() == Array::null())) {
             Compiler::AbortBackgroundCompilation(
-                Thread::kNoDeoptId, "RestoreICDataMap: ICData array cleared.");
+                DeoptId::kNone, "RestoreICDataMap: ICData array cleared.");
           }
         }
 
@@ -968,8 +956,6 @@
         thread()->clear_sticky_error();
       }
     }
-    // Reset global isolate state.
-    thread()->set_deopt_id(prev_deopt_id);
   }
   return result->raw();
 }
@@ -1029,7 +1015,7 @@
         // Loading occured while parsing. We need to abort here because state
         // changed while compiling.
         Compiler::AbortBackgroundCompilation(
-            Thread::kNoDeoptId,
+            DeoptId::kNone,
             "Invalidated state during parsing because of script loading");
       }
     }
@@ -1366,8 +1352,7 @@
   ASSERT(!function.IsIrregexpFunction());
   // In background compilation, parser can produce 'errors": bailouts
   // if state changed while compiling in background.
-  const intptr_t prev_deopt_id = Thread::Current()->deopt_id();
-  Thread::Current()->set_deopt_id(0);
+  CompilerState state(Thread::Current());
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
     ZoneGrowableArray<const ICData*>* ic_data_array =
@@ -1399,7 +1384,6 @@
     // Only possible with background compilation.
     ASSERT(Compiler::IsBackgroundCompilation());
   }
-  Thread::Current()->set_deopt_id(prev_deopt_id);
 }
 
 RawError* Compiler::CompileAllFunctions(const Class& cls) {
@@ -1844,7 +1828,7 @@
   // TODO(srdjan): Checking different strategy for collecting garbage
   // accumulated by background compiler.
   if (isolate_->heap()->NeedsGarbageCollection()) {
-    isolate_->heap()->CollectAllGarbage();
+    isolate_->heap()->CollectMostGarbage();
   }
   {
     MonitorLocker ml(queue_monitor_);
diff --git a/runtime/vm/compiler/jit/compiler.h b/runtime/vm/compiler/jit/compiler.h
index 38946f1..68ef8d1 100644
--- a/runtime/vm/compiler/jit/compiler.h
+++ b/runtime/vm/compiler/jit/compiler.h
@@ -6,6 +6,7 @@
 #define RUNTIME_VM_COMPILER_JIT_COMPILER_H_
 
 #include "vm/allocation.h"
+#include "vm/compiler/compiler_state.h"
 #include "vm/growable_array.h"
 #include "vm/runtime_entry.h"
 #include "vm/thread_pool.h"
@@ -79,7 +80,7 @@
 
 class Compiler : public AllStatic {
  public:
-  static const intptr_t kNoOSRDeoptId = Thread::kNoDeoptId;
+  static const intptr_t kNoOSRDeoptId = DeoptId::kNone;
 
   static bool IsBackgroundCompilation();
   // The result for a function may change if debugging gets turned on/off.
diff --git a/runtime/vm/compiler/jit/jit_call_specializer.cc b/runtime/vm/compiler/jit/jit_call_specializer.cc
index aabe9ac..aa95f7c 100644
--- a/runtime/vm/compiler/jit/jit_call_specializer.cc
+++ b/runtime/vm/compiler/jit/jit_call_specializer.cc
@@ -50,6 +50,20 @@
   return false;
 }
 
+void JitCallSpecializer::ReplaceWithStaticCall(InstanceCallInstr* instr,
+                                               const ICData& unary_checks,
+                                               const Function& target) {
+  StaticCallInstr* call = StaticCallInstr::FromCall(Z, instr, target);
+  if (unary_checks.NumberOfChecks() == 1 &&
+      unary_checks.GetExactnessAt(0).IsExact()) {
+    if (unary_checks.GetExactnessAt(0).IsTriviallyExact()) {
+      flow_graph()->AddExactnessGuard(instr, unary_checks.GetCidAt(0));
+    }
+    call->set_entry_kind(Code::EntryKind::kUnchecked);
+  }
+  instr->ReplaceWith(call, current_iterator());
+}
+
 // Tries to optimize instance call by replacing it with a faster instruction
 // (e.g, binary op, field load, ..).
 // TODO(dartbug.com/30635) Evaluate how much this can be shared with
@@ -134,8 +148,7 @@
         Function::ZoneHandle(Z, unary_checks.GetTargetAt(0));
     if (flow_graph()->CheckForInstanceCall(instr, target.kind()) ==
         FlowGraph::ToCheck::kNoCheck) {
-      StaticCallInstr* call = StaticCallInstr::FromCall(Z, instr, target);
-      instr->ReplaceWith(call, current_iterator());
+      ReplaceWithStaticCall(instr, unary_checks, target);
       return;
     }
   }
@@ -160,8 +173,7 @@
     // Call can still deoptimize, do not detach environment from instr.
     const Function& target =
         Function::ZoneHandle(Z, unary_checks.GetTargetAt(0));
-    StaticCallInstr* call = StaticCallInstr::FromCall(Z, instr, target);
-    instr->ReplaceWith(call, current_iterator());
+    ReplaceWithStaticCall(instr, unary_checks, target);
   } else {
     PolymorphicInstanceCallInstr* call =
         new (Z) PolymorphicInstanceCallInstr(instr, targets,
@@ -199,7 +211,7 @@
       if (Compiler::IsBackgroundCompilation()) {
         isolate()->AddDeoptimizingBoxedField(field);
         Compiler::AbortBackgroundCompilation(
-            Thread::kNoDeoptId, "Unboxing instance field while compiling");
+            DeoptId::kNone, "Unboxing instance field while compiling");
         UNREACHABLE();
       }
       if (FLAG_trace_optimization || FLAG_trace_field_guards) {
diff --git a/runtime/vm/compiler/jit/jit_call_specializer.h b/runtime/vm/compiler/jit/jit_call_specializer.h
index 67713cb..bbb00e3 100644
--- a/runtime/vm/compiler/jit/jit_call_specializer.h
+++ b/runtime/vm/compiler/jit/jit_call_specializer.h
@@ -34,6 +34,10 @@
                               intptr_t num_context_variables,
                               Value* context_value);
 
+  void ReplaceWithStaticCall(InstanceCallInstr* instr,
+                             const ICData& unary_checks,
+                             const Function& target);
+
   DISALLOW_COPY_AND_ASSIGN(JitCallSpecializer);
 };
 
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 6bf1cd1..9b50641 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -426,17 +426,17 @@
 #endif  // !PRODUCT
 
 TEST_CASE(DartAPI_ErrorHandleTypes) {
-  const String& compile_message = String::Handle(String::New("CompileError"));
-  const String& fatal_message = String::Handle(String::New("FatalError"));
-
   Dart_Handle not_error = NewString("NotError");
-  Dart_Handle api_error = Api::NewError("Api%s", "Error");
+  Dart_Handle api_error = Dart_NewApiError("ApiError");
   Dart_Handle exception_error =
       Dart_NewUnhandledExceptionError(NewString("ExceptionError"));
-  Dart_Handle compile_error =
-      Api::NewHandle(thread, LanguageError::New(compile_message));
-  Dart_Handle fatal_error =
-      Api::NewHandle(thread, UnwindError::New(fatal_message));
+  Dart_Handle compile_error = Dart_NewCompilationError("CompileError");
+  Dart_Handle fatal_error;
+  {
+    TransitionNativeToVM transition(thread);
+    const String& fatal_message = String::Handle(String::New("FatalError"));
+    fatal_error = Api::NewHandle(thread, UnwindError::New(fatal_message));
+  }
 
   EXPECT_VALID(not_error);
   EXPECT(Dart_IsError(api_error));
@@ -481,8 +481,7 @@
 
   // Test with an API Error.
   const char* kApiError = "Api Error Exception Test.";
-  Dart_Handle api_error = Api::NewHandle(
-      thread, ApiError::New(String::Handle(String::New(kApiError))));
+  Dart_Handle api_error = Dart_NewApiError(kApiError);
   Dart_Handle exception_error = Dart_NewUnhandledExceptionError(api_error);
   EXPECT(!Dart_IsApiError(exception_error));
   EXPECT(Dart_IsUnhandledExceptionError(exception_error));
@@ -493,9 +492,7 @@
 
   // Test with a Compilation Error.
   const char* kCompileError = "CompileError Exception Test.";
-  const String& compile_message = String::Handle(String::New(kCompileError));
-  Dart_Handle compile_error =
-      Api::NewHandle(thread, LanguageError::New(compile_message));
+  Dart_Handle compile_error = Dart_NewCompilationError(kCompileError);
   exception_error = Dart_NewUnhandledExceptionError(compile_error);
   EXPECT(!Dart_IsApiError(exception_error));
   EXPECT(Dart_IsUnhandledExceptionError(exception_error));
@@ -505,18 +502,20 @@
   EXPECT_STREQ(kCompileError, exception_cstr);
 
   // Test with a Fatal Error.
-  const String& fatal_message =
-      String::Handle(String::New("FatalError Exception Test."));
-  Dart_Handle fatal_error =
-      Api::NewHandle(thread, UnwindError::New(fatal_message));
+  Dart_Handle fatal_error;
+  {
+    TransitionNativeToVM transition(thread);
+    const String& fatal_message =
+        String::Handle(String::New("FatalError Exception Test."));
+    fatal_error = Api::NewHandle(thread, UnwindError::New(fatal_message));
+  }
   exception_error = Dart_NewUnhandledExceptionError(fatal_error);
   EXPECT(Dart_IsError(exception_error));
   EXPECT(!Dart_IsUnhandledExceptionError(exception_error));
 
   // Test with a Regular object.
   const char* kRegularString = "Regular String Exception Test.";
-  Dart_Handle obj = Api::NewHandle(thread, String::New(kRegularString));
-  exception_error = Dart_NewUnhandledExceptionError(obj);
+  exception_error = Dart_NewUnhandledExceptionError(NewString(kRegularString));
   EXPECT(!Dart_IsApiError(exception_error));
   EXPECT(Dart_IsUnhandledExceptionError(exception_error));
   EXPECT(Dart_IsString(Dart_ErrorGetException(exception_error)));
@@ -2688,7 +2687,11 @@
   {
     EXPECT(thread->api_top_scope() != NULL);
     HANDLESCOPE(thread);
-    const String& str1 = String::Handle(String::New("Test String"));
+    String& str1 = String::Handle();
+    {
+      TransitionNativeToVM transition(thread);
+      str1 = String::New("Test String");
+    }
     Dart_Handle ref = Api::NewHandle(thread, str1.raw());
     String& str2 = String::Handle();
     str2 ^= Api::UnwrapHandle(ref);
@@ -2714,12 +2717,12 @@
   {
     CHECK_API_SCOPE(thread);
     HANDLESCOPE(thread);
-    Dart_Handle ref1 = Api::NewHandle(thread, String::New(kTestString1));
+    Dart_Handle ref1 = Dart_NewStringFromCString(kTestString1);
     for (int i = 0; i < 1000; i++) {
       handles[i] = Dart_NewPersistentHandle(ref1);
     }
     Dart_EnterScope();
-    Dart_Handle ref2 = Api::NewHandle(thread, String::New(kTestString2));
+    Dart_Handle ref2 = Dart_NewStringFromCString(kTestString2);
     for (int i = 1000; i < 2000; i++) {
       handles[i] = Dart_NewPersistentHandle(ref2);
     }
@@ -2812,14 +2815,14 @@
   String& str = String::Handle();
 
   // Start with a known persistent handle.
-  Dart_Handle ref1 = Api::NewHandle(T, String::New(kTestString1));
+  Dart_Handle ref1 = Dart_NewStringFromCString(kTestString1);
   Dart_PersistentHandle obj = Dart_NewPersistentHandle(ref1);
   EXPECT(state->IsValidPersistentHandle(obj));
   str ^= PersistentHandle::Cast(obj)->raw();
   EXPECT(str.Equals(kTestString1));
 
   // Now create another local handle and assign it to the persistent handle.
-  Dart_Handle ref2 = Api::NewHandle(T, String::New(kTestString2));
+  Dart_Handle ref2 = Dart_NewStringFromCString(kTestString2);
   Dart_SetPersistentHandle(obj, ref2);
   str ^= PersistentHandle::Cast(obj)->raw();
   EXPECT(str.Equals(kTestString2));
@@ -2829,6 +2832,18 @@
   EXPECT(Dart_IsNull(obj));
 }
 
+static Dart_Handle AllocateNewString(const char* c_str) {
+  Thread* thread = Thread::Current();
+  TransitionNativeToVM transition(thread);
+  return Api::NewHandle(thread, String::New(c_str, Heap::kNew));
+}
+
+static Dart_Handle AllocateOldString(const char* c_str) {
+  Thread* thread = Thread::Current();
+  TransitionNativeToVM transition(thread);
+  return Api::NewHandle(thread, String::New(c_str, Heap::kOld));
+}
+
 static Dart_Handle AsHandle(Dart_PersistentHandle weak) {
   return Dart_HandleFromPersistent(weak);
 }
@@ -2851,6 +2866,10 @@
 }
 
 TEST_CASE(DartAPI_WeakPersistentHandle) {
+  // GCs due to allocations or weak handle creation can cause early promotion
+  // and interfer with the scenario this test is verifying.
+  NoHeapGrowthControlScope force_growth;
+
   Dart_Handle local_new_ref = Dart_Null();
   weak_new_ref = Dart_NewWeakPersistentHandle(local_new_ref, NULL, 0,
                                               WeakPersistentHandleCallback);
@@ -2863,17 +2882,12 @@
     Dart_EnterScope();
 
     // Create an object in new space.
-    Dart_Handle new_ref = NewString("new string");
+    Dart_Handle new_ref = AllocateNewString("new string");
     EXPECT_VALID(new_ref);
 
     // Create an object in old space.
-    Dart_Handle old_ref;
-    {
-      CHECK_API_SCOPE(thread);
-      HANDLESCOPE(thread);
-      old_ref = Api::NewHandle(thread, String::New("old string", Heap::kOld));
-      EXPECT_VALID(old_ref);
-    }
+    Dart_Handle old_ref = AllocateOldString("old string");
+    EXPECT_VALID(old_ref);
 
     // Create a weak ref to the new space object.
     weak_new_ref = Dart_NewWeakPersistentHandle(new_ref, NULL, 0,
@@ -2891,6 +2905,7 @@
       TransitionNativeToVM transition(thread);
       // Garbage collect new space.
       GCTestHelper::CollectNewSpace();
+      GCTestHelper::WaitForGCTasks();
     }
 
     // Nothing should be invalidated or cleared.
@@ -2911,6 +2926,7 @@
       TransitionNativeToVM transition(thread);
       // Garbage collect old space.
       Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+      GCTestHelper::WaitForGCTasks();
     }
 
     // Nothing should be invalidated or cleared.
@@ -2967,6 +2983,7 @@
     // Garbage collect one last time to revisit deleted handles.
     Isolate::Current()->heap()->CollectGarbage(Heap::kNew);
     Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
+    GCTestHelper::WaitForGCTasks();
   }
 }
 
@@ -3156,14 +3173,14 @@
   // Check that external allocation in old space can trigger GC.
   Isolate* isolate = Isolate::Current();
   Dart_EnterScope();
-  Dart_Handle live = Api::NewHandle(thread, String::New("live", Heap::kOld));
+  Dart_Handle live = AllocateOldString("live");
   EXPECT_VALID(live);
   Dart_WeakPersistentHandle weak = NULL;
   EXPECT_EQ(0, isolate->heap()->ExternalInWords(Heap::kOld));
   const intptr_t kSmallExternalSize = 1 * KB;
   {
     Dart_EnterScope();
-    Dart_Handle dead = Api::NewHandle(thread, String::New("dead", Heap::kOld));
+    Dart_Handle dead = AllocateOldString("dead");
     EXPECT_VALID(dead);
     weak = Dart_NewWeakPersistentHandle(dead, NULL, kSmallExternalSize,
                                         NopCallback);
@@ -3241,8 +3258,7 @@
     CHECK_API_SCOPE(thread);
     HANDLESCOPE(thread);
 
-    Dart_Handle local =
-        Api::NewHandle(thread, String::New("strongly reachable", Heap::kOld));
+    Dart_Handle local = AllocateOldString("strongly reachable");
     strong = Dart_NewPersistentHandle(local);
     strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
 
@@ -3252,21 +3268,21 @@
     EXPECT_VALID(AsHandle(strong_weak));
     EXPECT(Dart_IdentityEquals(AsHandle(strong), AsHandle(strong_weak)))
 
-    weak1 = Dart_NewWeakPersistentHandle(
-        Api::NewHandle(thread, String::New("weakly reachable 1", Heap::kOld)),
-        NULL, 0, ImplicitReferencesCallback);
+    weak1 =
+        Dart_NewWeakPersistentHandle(AllocateOldString("weakly reachable 1"),
+                                     NULL, 0, ImplicitReferencesCallback);
     EXPECT(!Dart_IsNull(AsHandle(weak1)));
     EXPECT_VALID(AsHandle(weak1));
 
-    weak2 = Dart_NewWeakPersistentHandle(
-        Api::NewHandle(thread, String::New("weakly reachable 2", Heap::kOld)),
-        NULL, 0, ImplicitReferencesCallback);
+    weak2 =
+        Dart_NewWeakPersistentHandle(AllocateOldString("weakly reachable 2"),
+                                     NULL, 0, ImplicitReferencesCallback);
     EXPECT(!Dart_IsNull(AsHandle(weak2)));
     EXPECT_VALID(AsHandle(weak2));
 
-    weak3 = Dart_NewWeakPersistentHandle(
-        Api::NewHandle(thread, String::New("weakly reachable 3", Heap::kOld)),
-        NULL, 0, ImplicitReferencesCallback);
+    weak3 =
+        Dart_NewWeakPersistentHandle(AllocateOldString("weakly reachable 3"),
+                                     NULL, 0, ImplicitReferencesCallback);
     EXPECT(!Dart_IsNull(AsHandle(weak3)));
     EXPECT_VALID(AsHandle(weak3));
   }
@@ -3306,8 +3322,7 @@
     CHECK_API_SCOPE(thread);
     HANDLESCOPE(thread);
 
-    Dart_Handle local =
-        Api::NewHandle(thread, String::New("strongly reachable", Heap::kOld));
+    Dart_Handle local = AllocateOldString("strongly reachable");
     strong = Dart_NewPersistentHandle(local);
     strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
 
@@ -3317,21 +3332,21 @@
     EXPECT_VALID(AsHandle(strong_weak));
     EXPECT(Dart_IdentityEquals(AsHandle(strong), AsHandle(strong_weak)))
 
-    weak1 = Dart_NewWeakPersistentHandle(
-        Api::NewHandle(thread, String::New("weakly reachable 1", Heap::kNew)),
-        NULL, 0, ImplicitReferencesCallback);
+    weak1 =
+        Dart_NewWeakPersistentHandle(AllocateNewString("weakly reachable 1"),
+                                     NULL, 0, ImplicitReferencesCallback);
     EXPECT(!Dart_IsNull(AsHandle(weak1)));
     EXPECT_VALID(AsHandle(weak1));
 
-    weak2 = Dart_NewWeakPersistentHandle(
-        Api::NewHandle(thread, String::New("weakly reachable 2", Heap::kNew)),
-        NULL, 0, ImplicitReferencesCallback);
+    weak2 =
+        Dart_NewWeakPersistentHandle(AllocateNewString("weakly reachable 2"),
+                                     NULL, 0, ImplicitReferencesCallback);
     EXPECT(!Dart_IsNull(AsHandle(weak2)));
     EXPECT_VALID(AsHandle(weak2));
 
-    weak3 = Dart_NewWeakPersistentHandle(
-        Api::NewHandle(thread, String::New("weakly reachable 3", Heap::kNew)),
-        NULL, 0, ImplicitReferencesCallback);
+    weak3 =
+        Dart_NewWeakPersistentHandle(AllocateNewString("weakly reachable 3"),
+                                     NULL, 0, ImplicitReferencesCallback);
     EXPECT(!Dart_IsNull(AsHandle(weak3)));
     EXPECT_VALID(AsHandle(weak3));
   }
@@ -4924,6 +4939,7 @@
 static Dart_Handle PrivateLibName(Dart_Handle lib, const char* str) {
   EXPECT(Dart_IsLibrary(lib));
   Thread* thread = Thread::Current();
+  TransitionNativeToVM transition(thread);
   const Library& library_obj = Api::UnwrapLibraryHandle(thread->zone(), lib);
   const String& name = String::Handle(String::New(str));
   return Api::NewHandle(thread, library_obj.PrivateName(name));
@@ -6407,24 +6423,28 @@
   result = Dart_LoadLibrary(url, Dart_Null(), source, 0, 0);
   EXPECT_VALID(result);
 
-  const char* patchNames[] = {"main library patch", "patch class only",
-                              "patch no class"};
-  const char* patches[] = {kPatchChars, kPatchClassOnlyChars,
-                           kPatchNoClassChars};
-  const String& lib_url = String::Handle(String::New("theLibrary"));
+  {
+    TransitionNativeToVM transition(thread);
+    const char* patchNames[] = {"main library patch", "patch class only",
+                                "patch no class"};
+    const char* patches[] = {kPatchChars, kPatchClassOnlyChars,
+                             kPatchNoClassChars};
+    const String& lib_url = String::Handle(String::New("theLibrary"));
 
-  const Library& lib = Library::Handle(Library::LookupLibrary(thread, lib_url));
+    const Library& lib =
+        Library::Handle(Library::LookupLibrary(thread, lib_url));
 
-  for (int i = 0; i < 3; i++) {
-    const String& patch_url = String::Handle(String::New(patchNames[i]));
-    const String& patch_source = String::Handle(String::New(patches[i]));
-    const Script& patch_script = Script::Handle(
-        Script::New(patch_url, patch_source, RawScript::kPatchTag));
+    for (int i = 0; i < 3; i++) {
+      const String& patch_url = String::Handle(String::New(patchNames[i]));
+      const String& patch_source = String::Handle(String::New(patches[i]));
+      const Script& patch_script = Script::Handle(
+          Script::New(patch_url, patch_source, RawScript::kPatchTag));
 
-    const Error& err = Error::Handle(lib.Patch(patch_script));
-    if (!err.IsNull()) {
-      OS::PrintErr("Patching error: %s\n", err.ToErrorCString());
-      EXPECT(false);
+      const Error& err = Error::Handle(lib.Patch(patch_script));
+      if (!err.IsNull()) {
+        OS::PrintErr("Patching error: %s\n", err.ToErrorCString());
+        EXPECT(false);
+      }
     }
   }
   result = Dart_SetNativeResolver(result, &PatchNativeResolver, NULL);
@@ -6484,9 +6504,17 @@
   EXPECT_VALID(Dart_IntegerToInt64(result, &value));
   EXPECT_EQ(8, value);
 
-  // Make sure all source files show up in the patched library.
-  const Array& lib_scripts = Array::Handle(lib.LoadedScripts());
-  EXPECT_EQ(4, lib_scripts.Length());
+  {
+    TransitionNativeToVM transition(thread);
+    // Make sure all source files show up in the patched library.
+    const String& lib_url = String::Handle(String::New("theLibrary"));
+
+    const Library& lib =
+        Library::Handle(Library::LookupLibrary(thread, lib_url));
+
+    const Array& lib_scripts = Array::Handle(lib.LoadedScripts());
+    EXPECT_EQ(4, lib_scripts.Length());
+  }
 }
 
 static void MyNativeFunction1(Dart_NativeArguments args) {
@@ -6827,15 +6855,18 @@
   EXPECT_VALID(lib);
   Library& lib_obj = Library::Handle();
   lib_obj ^= Api::UnwrapHandle(lib);
-  EXPECT_STREQ("foo:///main.dart", String::Handle(lib_obj.url()).ToCString());
-  const Array& lib_scripts = Array::Handle(lib_obj.LoadedScripts());
-  Script& script = Script::Handle();
-  String& uri = String::Handle();
-  for (intptr_t i = 0; i < lib_scripts.Length(); i++) {
-    script ^= lib_scripts.At(i);
-    uri = script.url();
-    const char* uri_str = uri.ToCString();
-    EXPECT(strstr(uri_str, "foo:///") == uri_str);
+  {
+    TransitionNativeToVM transition(thread);
+    EXPECT_STREQ("foo:///main.dart", String::Handle(lib_obj.url()).ToCString());
+    const Array& lib_scripts = Array::Handle(lib_obj.LoadedScripts());
+    Script& script = Script::Handle();
+    String& uri = String::Handle();
+    for (intptr_t i = 0; i < lib_scripts.Length(); i++) {
+      script ^= lib_scripts.At(i);
+      uri = script.url();
+      const char* uri_str = uri.ToCString();
+      EXPECT(strstr(uri_str, "foo:///") == uri_str);
+    }
   }
   result = Dart_FinalizeLoading(false);
   EXPECT_VALID(result);
@@ -8006,7 +8037,7 @@
 // by one.
 TEST_CASE(DartAPI_OneOldSpacePeer) {
   Isolate* isolate = Isolate::Current();
-  Dart_Handle str = Api::NewHandle(thread, String::New("str", Heap::kOld));
+  Dart_Handle str = AllocateOldString("str");
   EXPECT_VALID(str);
   EXPECT(Dart_IsString(str));
   EXPECT_EQ(0, isolate->heap()->PeerCount());
@@ -8043,7 +8074,7 @@
     Thread* T = Thread::Current();
     CHECK_API_SCOPE(T);
     HANDLESCOPE(T);
-    Dart_Handle str = Api::NewHandle(T, String::New("str", Heap::kOld));
+    Dart_Handle str = AllocateOldString("str");
     EXPECT_VALID(str);
     EXPECT(Dart_IsString(str));
     EXPECT_EQ(0, isolate->heap()->PeerCount());
@@ -8077,7 +8108,7 @@
 // by two.
 TEST_CASE(DartAPI_TwoOldSpacePeers) {
   Isolate* isolate = Isolate::Current();
-  Dart_Handle s1 = Api::NewHandle(thread, String::New("s1", Heap::kOld));
+  Dart_Handle s1 = AllocateOldString("s1");
   EXPECT_VALID(s1);
   EXPECT(Dart_IsString(s1));
   EXPECT_EQ(0, isolate->heap()->PeerCount());
@@ -8090,7 +8121,7 @@
   o1 = &o1;
   EXPECT_VALID(Dart_GetPeer(s1, &o1));
   EXPECT(o1 == reinterpret_cast<void*>(&p1));
-  Dart_Handle s2 = Api::NewHandle(thread, String::New("s2", Heap::kOld));
+  Dart_Handle s2 = AllocateOldString("s2");
   EXPECT_VALID(s2);
   EXPECT(Dart_IsString(s2));
   EXPECT_EQ(1, isolate->heap()->PeerCount());
@@ -8125,7 +8156,7 @@
     Thread* T = Thread::Current();
     CHECK_API_SCOPE(T);
     HANDLESCOPE(T);
-    Dart_Handle s1 = Api::NewHandle(T, String::New("s1", Heap::kOld));
+    Dart_Handle s1 = AllocateOldString("s1");
     EXPECT_VALID(s1);
     EXPECT(Dart_IsString(s1));
     EXPECT_EQ(0, isolate->heap()->PeerCount());
@@ -8138,7 +8169,7 @@
     o1 = &o1;
     EXPECT_VALID(Dart_GetPeer(s1, &o1));
     EXPECT(o1 == reinterpret_cast<void*>(&p1));
-    Dart_Handle s2 = Api::NewHandle(T, String::New("s2", Heap::kOld));
+    Dart_Handle s2 = AllocateOldString("s2");
     EXPECT_VALID(s2);
     EXPECT(Dart_IsString(s2));
     EXPECT_EQ(1, isolate->heap()->PeerCount());
diff --git a/runtime/vm/dart_entry_test.cc b/runtime/vm/dart_entry_test.cc
index 2e8f5c5..496c1a0 100644
--- a/runtime/vm/dart_entry_test.cc
+++ b/runtime/vm/dart_entry_test.cc
@@ -16,7 +16,7 @@
 
 namespace dart {
 
-TEST_CASE(DartEntry) {
+ISOLATE_UNIT_TEST_CASE(DartEntry) {
   const char* kScriptChars =
       "class A {\n"
       "  static foo() { return 42; }\n"
@@ -42,7 +42,7 @@
   EXPECT_EQ(Smi::New(42), retval.raw());
 }
 
-TEST_CASE(InvokeStatic_CompileError) {
+ISOLATE_UNIT_TEST_CASE(InvokeStatic_CompileError) {
   const char* kScriptChars =
       "class A {\n"
       "  static foo() { return ++++; }\n"
@@ -66,7 +66,7 @@
   EXPECT_SUBSTRING("++++", Error::Cast(retval).ToErrorCString());
 }
 
-TEST_CASE(InvokeDynamic_CompileError) {
+ISOLATE_UNIT_TEST_CASE(InvokeDynamic_CompileError) {
   const char* kScriptChars =
       "class A {\n"
       "  foo() { return ++++; }\n"
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index f1cdf09..306cf6f 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -250,7 +250,7 @@
       token_pos_initialized_(false),
       token_pos_(TokenPosition::kNoSource),
       try_index_(-1),
-      deopt_id_(Thread::kNoDeoptId),
+      deopt_id_(DeoptId::kNone),
       line_number_(-1),
       column_number_(-1),
       context_level_(-1),
@@ -700,7 +700,7 @@
 
     GetVarDescriptors();
     intptr_t deopt_id = DeoptId();
-    if (deopt_id == Thread::kNoDeoptId) {
+    if (deopt_id == DeoptId::kNone) {
       PrintDescriptorsError("Missing deopt id");
     }
     intptr_t var_desc_len = var_descriptors_.Length();
diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc
index 153f2ae..9529569 100644
--- a/runtime/vm/deferred_objects.cc
+++ b/runtime/vm/deferred_objects.cc
@@ -108,7 +108,7 @@
 // Check that deopt_id exists.
 // TODO(vegorov): verify after deoptimization targets as well.
 #ifdef DEBUG
-  ASSERT(Thread::IsDeoptAfter(deopt_id_) ||
+  ASSERT(DeoptId::IsDeoptAfter(deopt_id_) ||
          (code.GetPcForDeoptId(deopt_id_, RawPcDescriptors::kDeopt) != 0));
 #endif
 
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 06641ab..ec6fa74 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -862,7 +862,7 @@
       static_cast<DeoptRetAddressInstr*>(instr);
   // The following assert may trigger when displaying a backtrace
   // from the simulator.
-  ASSERT(Thread::IsDeoptAfter(ret_address_instr->deopt_id()));
+  ASSERT(DeoptId::IsDeoptAfter(ret_address_instr->deopt_id()));
   ASSERT(!object_table.IsNull());
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 440bbe8..83c1162 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -55,6 +55,9 @@
 //   D(name, type, default_value, comment)
 //   C(name, precompiled_value, product_value, type, default_value, comment)
 #define FLAG_LIST(P, R, D, C)                                                  \
+  P(experimental_unsafe_mode_use_at_your_own_risk, bool, false,                \
+    "Omit runtime strong mode type checks and disable optimizations based on " \
+    "types.")                                                                  \
   P(abort_on_oom, bool, false,                                                 \
     "Abort if memory allocation fails - use only with --old-gen-heap-size")    \
   C(async_debugger, false, false, bool, true,                                  \
@@ -129,7 +132,6 @@
     "Max size of new gen semi space in MB")                                    \
   P(new_gen_semi_initial_size, int, (kWordSize <= 4) ? 1 : 2,                  \
     "Initial size of new gen semi space in MB")                                \
-  P(omit_strong_type_checks, bool, false, "Omit strong mode type checks.")     \
   P(optimization_counter_threshold, int, USING_KBC ? -1 : 30000,               \
     "Function's usage-counter value before it is optimized, -1 means never")   \
   P(old_gen_heap_size, int, kDefaultMaxOldGenHeapSize,                         \
diff --git a/runtime/vm/globals.h b/runtime/vm/globals.h
index 4fa43f2..a261211 100644
--- a/runtime/vm/globals.h
+++ b/runtime/vm/globals.h
@@ -49,10 +49,42 @@
   ((sizeof(array) / sizeof(*(array))) /                                        \
    static_cast<intptr_t>(!(sizeof(array) % sizeof(*(array)))))  // NOLINT
 
+#if defined(PRODUCT) && defined(DEBUG)
+#error Both PRODUCT and DEBUG defined.
+#endif  // defined(PRODUCT) && defined(DEBUG)
+
+#if defined(PRODUCT)
+#define NOT_IN_PRODUCT(code)
+#else  // defined(PRODUCT)
+#define NOT_IN_PRODUCT(code) code
+#endif  // defined(PRODUCT)
+
+#if defined(DART_PRECOMPILED_RUNTIME) && defined(DART_PRECOMPILER)
+#error DART_PRECOMPILED_RUNTIME and DART_PRECOMPILER are mutually exclusive
+#endif  // defined(DART_PRECOMPILED_RUNTIME) && defined(DART_PRECOMPILER)
+
+#if defined(DART_PRECOMPILED_RUNTIME) && defined(DART_NOSNAPSHOT)
+#error DART_PRECOMPILED_RUNTIME and DART_NOSNAPSHOT are mutually exclusive
+#endif  // defined(DART_PRECOMPILED_RUNTIME) && defined(DART_NOSNAPSHOT)
+
+#if defined(DART_PRECOMPILED_RUNTIME)
+#define NOT_IN_PRECOMPILED(code)
+#else
+#define NOT_IN_PRECOMPILED(code) code
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
+
 #if defined(ARCH_IS_64_BIT)
 #define HASH_IN_OBJECT_HEADER 1
 #endif
 
+// For checking deterministic graph generation, we can store instruction
+// tag in the ICData and check it when recreating the flow graph in
+// optimizing compiler. Enable it for other modes (product, release) if needed
+// for debugging.
+#if defined(DEBUG)
+#define TAG_IC_DATA
+#endif
+
 // The expression OFFSET_OF(type, field) computes the byte-offset of
 // the specified field relative to the containing type.
 //
diff --git a/runtime/vm/guard_field_test.cc b/runtime/vm/guard_field_test.cc
index 0feabcc..4170370 100644
--- a/runtime/vm/guard_field_test.cc
+++ b/runtime/vm/guard_field_test.cc
@@ -63,6 +63,7 @@
   Dart_Handle lib = TestCase::LoadTestScript(script_chars, NULL);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
+  TransitionNativeToVM transition(thread);
   Field& f1 = Field::ZoneHandle(LookupField(lib, "A", "f1"));
   Field& f2 = Field::ZoneHandle(LookupField(lib, "A", "f2"));
   Field& f3 = Field::ZoneHandle(LookupField(lib, "A", "f3"));
@@ -113,6 +114,7 @@
   Dart_Handle lib = TestCase::LoadTestScript(script_chars, NULL);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
+  TransitionNativeToVM transition(thread);
   Field& f1 = Field::ZoneHandle(LookupField(lib, "A", "f1"));
   Field& f2 = Field::ZoneHandle(LookupField(lib, "A", "f2"));
   Field& f3 = Field::ZoneHandle(LookupField(lib, "A", "f3"));
@@ -165,6 +167,7 @@
   Dart_Handle lib = TestCase::LoadTestScript(script_chars, NULL);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
+  TransitionNativeToVM transition(thread);
   Field& f1 = Field::ZoneHandle(LookupField(lib, "A", "f1"));
   Field& f2 = Field::ZoneHandle(LookupField(lib, "A", "f2"));
   Field& f3 = Field::ZoneHandle(LookupField(lib, "A", "f3"));
@@ -220,6 +223,7 @@
       "}\n";
   Dart_Handle lib = TestCase::LoadTestScript(script_chars, NULL);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+  TransitionNativeToVM transition(thread);
   EXPECT_VALID(result);
   Field& f1 = Field::ZoneHandle(LookupField(lib, "A", "f1"));
   Field& f2 = Field::ZoneHandle(LookupField(lib, "A", "f2"));
@@ -269,6 +273,7 @@
   Dart_Handle lib = TestCase::LoadTestScript(script_chars, NULL);
   Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
+  TransitionNativeToVM transition(thread);
   Field& f3 = Field::ZoneHandle(LookupField(lib, "A", "f3"));
   const intptr_t no_length = Field::kNoFixedLength;
   EXPECT_EQ(no_length, f3.guarded_list_length());
diff --git a/runtime/vm/hash_table_test.cc b/runtime/vm/hash_table_test.cc
index 88858d3..aeb8d55 100644
--- a/runtime/vm/hash_table_test.cc
+++ b/runtime/vm/hash_table_test.cc
@@ -53,7 +53,7 @@
   EXPECT_EQ(0, num_deleted);
 }
 
-TEST_CASE(HashTable) {
+ISOLATE_UNIT_TEST_CASE(HashTable) {
   typedef HashTable<TestTraits, 2, 1> Table;
   Table table(Thread::Current()->zone(), HashTables::New<Table>(5));
   // Ensure that we did get at least 5 entries.
@@ -243,14 +243,14 @@
   actual.Release();
 }
 
-TEST_CASE(Sets) {
+ISOLATE_UNIT_TEST_CASE(Sets) {
   for (intptr_t initial_capacity = 0; initial_capacity < 32;
        ++initial_capacity) {
     TestSet<UnorderedHashSet<TestTraits> >(initial_capacity, false);
   }
 }
 
-TEST_CASE(Maps) {
+ISOLATE_UNIT_TEST_CASE(Maps) {
   for (intptr_t initial_capacity = 0; initial_capacity < 32;
        ++initial_capacity) {
     TestMap<UnorderedHashMap<TestTraits> >(initial_capacity, false);
diff --git a/runtime/vm/heap/become.cc b/runtime/vm/heap/become.cc
index 7c611aa..59bf1ff 100644
--- a/runtime/vm/heap/become.cc
+++ b/runtime/vm/heap/become.cc
@@ -26,6 +26,11 @@
   uint32_t tags = 0;
   tags = RawObject::SizeTag::update(size, tags);
   tags = RawObject::ClassIdTag::update(kForwardingCorpse, tags);
+  bool is_old = (addr & kNewObjectAlignmentOffset) == kOldObjectAlignmentOffset;
+  tags = RawObject::OldBit::update(is_old, tags);
+  tags = RawObject::OldAndNotMarkedBit::update(is_old, tags);
+  tags = RawObject::OldAndNotRememberedBit::update(is_old, tags);
+  tags = RawObject::NewBit::update(!is_old, tags);
 
   result->tags_ = tags;
   if (size > RawObject::SizeTag::kMaxSizeTag) {
@@ -94,7 +99,7 @@
 
   void VisitingObject(RawObject* obj) {
     visiting_object_ = obj;
-    if ((obj != NULL) && obj->IsRemembered()) {
+    if ((obj != NULL) && obj->IsOldObject() && obj->IsRemembered()) {
       ASSERT(!obj->IsForwardingCorpse());
       ASSERT(!obj->IsFreeListElement());
       thread_->StoreBufferAddObjectGC(obj);
diff --git a/runtime/vm/heap/freelist.cc b/runtime/vm/heap/freelist.cc
index e4f690f..39caeb0 100644
--- a/runtime/vm/heap/freelist.cc
+++ b/runtime/vm/heap/freelist.cc
@@ -24,9 +24,11 @@
   uint32_t tags = 0;
   tags = RawObject::SizeTag::update(size, tags);
   tags = RawObject::ClassIdTag::update(kFreeListElement, tags);
-  // All words in a freelist element header should look like Smis.
-  ASSERT(!reinterpret_cast<RawObject*>(tags)->IsHeapObject());
-
+  ASSERT((addr & kNewObjectAlignmentOffset) == kOldObjectAlignmentOffset);
+  tags = RawObject::OldBit::update(true, tags);
+  tags = RawObject::OldAndNotMarkedBit::update(true, tags);
+  tags = RawObject::OldAndNotRememberedBit::update(true, tags);
+  tags = RawObject::NewBit::update(false, tags);
   result->tags_ = tags;
 #if defined(HASH_IN_OBJECT_HEADER)
   // Clearing this is mostly for neatness. The identityHashCode
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 9a281b0..de9911f 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -95,8 +95,9 @@
     if (addr != 0) {
       return addr;
     }
-    // All GC tasks finished without allocating successfully. Run a full GC.
-    CollectAllGarbage();
+    // All GC tasks finished without allocating successfully. Collect both
+    // generations.
+    CollectMostGarbage();
     addr = old_space_.TryAllocate(size, type);
     if (addr != 0) {
       return addr;
@@ -144,7 +145,7 @@
     ASSERT(space == kOld);
     old_space_.AllocateExternal(cid, size);
     if (old_space_.NeedsGarbageCollection()) {
-      CollectAllGarbage(kExternal);
+      CollectMostGarbage(kExternal);
     }
   }
 }
@@ -460,6 +461,12 @@
   }
 }
 
+void Heap::CollectMostGarbage(GCReason reason) {
+  Thread* thread = Thread::Current();
+  CollectNewSpaceGarbage(thread, reason);
+  CollectOldSpaceGarbage(thread, kMarkSweep, reason);
+}
+
 void Heap::CollectAllGarbage(GCReason reason) {
   Thread* thread = Thread::Current();
 
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index d4c2cf1..7f2689d 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -114,13 +114,24 @@
   void NotifyIdle(int64_t deadline);
   void NotifyLowMemory();
 
+  // Collect a single generation.
   void CollectGarbage(Space space);
   void CollectGarbage(GCType type, GCReason reason);
+
+  // Collect both generations by performing a scavenge followed by a
+  // mark-sweep. This function may not collect all unreachable objects. Because
+  // mark-sweep treats new space as roots, a cycle between unreachable old and
+  // new objects will not be collected until the new objects are promoted.
+  // Verification based on heap iteration should instead use CollectAllGarbage.
+  void CollectMostGarbage(GCReason reason = kFull);
+
+  // Collect both generations by performing an evacuation followed by a
+  // mark-sweep. This function will collect all unreachable objects.
   void CollectAllGarbage(GCReason reason = kFull);
+
   bool NeedsGarbageCollection() const {
     return old_space_.NeedsGarbageCollection();
   }
-
   void WaitForSweeperTasks(Thread* thread);
 
   // Enables growth control on the page space heaps.  This should be
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index e2f2379..c332320 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -253,7 +253,7 @@
   virtual bool FindObject(RawObject* obj) const { return false; }
 };
 
-TEST_CASE(FindObject) {
+ISOLATE_UNIT_TEST_CASE(FindObject) {
   Isolate* isolate = Isolate::Current();
   Heap* heap = isolate->heap();
   Heap::Space spaces[2] = {Heap::kOld, Heap::kNew};
@@ -272,7 +272,7 @@
   }
 }
 
-TEST_CASE(IterateReadOnly) {
+ISOLATE_UNIT_TEST_CASE(IterateReadOnly) {
   const String& obj = String::Handle(String::New("x", Heap::kOld));
   Heap* heap = Thread::Current()->isolate()->heap();
   EXPECT(heap->Contains(RawObject::ToAddr(obj.raw())));
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index 0d13154..17dba99 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -1372,7 +1372,36 @@
       after.CombinedCapacityInWords() + 2 * kPageSizeInWords;
 
   if (FLAG_log_growth) {
-    THR_Print("%s: threshold=%" Pd "kB, idle_threshold=%" Pd "kB\n",
+    THR_Print("%s: threshold=%" Pd "kB, idle_threshold=%" Pd "kB, reason=gc\n",
+              heap_->isolate()->name(), gc_threshold_in_words_ / KBInWords,
+              idle_gc_threshold_in_words_ / KBInWords);
+  }
+}
+
+void PageSpaceController::EvaluateSnapshotLoad(SpaceUsage after) {
+  // Number of pages we can allocate and still be within the desired growth
+  // ratio.
+  intptr_t growth_in_pages =
+      (static_cast<intptr_t>(after.CombinedCapacityInWords() /
+                             desired_utilization_) -
+       (after.CombinedCapacityInWords())) /
+      kPageSizeInWords;
+
+  // Apply growth cap.
+  growth_in_pages =
+      Utils::Minimum(static_cast<intptr_t>(heap_growth_max_), growth_in_pages);
+
+  // Save final threshold compared before growing.
+  gc_threshold_in_words_ =
+      after.CombinedCapacityInWords() + (kPageSizeInWords * growth_in_pages);
+
+  // Set a tight idle threshold.
+  idle_gc_threshold_in_words_ =
+      after.CombinedCapacityInWords() + 2 * kPageSizeInWords;
+
+  if (FLAG_log_growth) {
+    THR_Print("%s: threshold=%" Pd "kB, idle_threshold=%" Pd
+              "kB, reason=snapshot\n",
               heap_->isolate()->name(), gc_threshold_in_words_ / KBInWords,
               idle_gc_threshold_in_words_ / KBInWords);
   }
diff --git a/runtime/vm/heap/pages.h b/runtime/vm/heap/pages.h
index 5db4eb9..f6b6d96 100644
--- a/runtime/vm/heap/pages.h
+++ b/runtime/vm/heap/pages.h
@@ -159,6 +159,7 @@
                                  SpaceUsage after,
                                  int64_t start,
                                  int64_t end);
+  void EvaluateSnapshotLoad(SpaceUsage after);
 
   int64_t last_code_collection_in_us() { return last_code_collection_in_us_; }
   void set_last_code_collection_in_us(int64_t t) {
@@ -232,6 +233,9 @@
   bool NeedsGarbageCollection() const {
     return page_space_controller_.NeedsGarbageCollection(usage_);
   }
+  void EvaluateSnapshotLoad() {
+    page_space_controller_.EvaluateSnapshotLoad(usage_);
+  }
 
   int64_t UsedInWords() const { return usage_.used_in_words; }
   int64_t CapacityInWords() const {
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index b9ca038..de48b25 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -38,7 +38,7 @@
 // objects. The kMarkBit does not intersect with the target address because of
 // object alignment.
 enum {
-  kForwardingMask = 1 << RawObject::kMarkBit,
+  kForwardingMask = 1 << RawObject::kOldAndNotMarkedBit,
   kNotForwarded = 0,
   kForwarded = kForwardingMask,
 };
@@ -110,6 +110,7 @@
     thread_->StoreBufferAddObjectGC(visiting_old_object_);
   }
 
+  DART_FORCE_INLINE
   void ScavengePointer(RawObject** p) {
     // ScavengePointer cannot be called recursively.
     RawObject* raw_obj = *p;
@@ -166,6 +167,18 @@
       // Copy the object to the new location.
       memmove(reinterpret_cast<void*>(new_addr),
               reinterpret_cast<void*>(raw_addr), size);
+
+      RawObject* new_obj = RawObject::FromAddr(new_addr);
+      if (new_obj->IsOldObject()) {
+        // Promoted: update age/barrier tags.
+        uint32_t tags = new_obj->ptr()->tags_;
+        tags = RawObject::OldBit::update(true, tags);
+        tags = RawObject::OldAndNotMarkedBit::update(true, tags);
+        tags = RawObject::OldAndNotRememberedBit::update(true, tags);
+        tags = RawObject::NewBit::update(false, tags);
+        new_obj->ptr()->tags_ = tags;
+      }
+
       // Remember forwarding address.
       ForwardTo(raw_addr, new_addr);
     }
@@ -885,6 +898,7 @@
   }
 
   // Prepare for a scavenge.
+  FlushTLS();
   SpaceUsage usage_before = GetCurrentUsage();
   intptr_t promo_candidate_words =
       (survivor_end_ - FirstObjectStart()) / kWordSize;
diff --git a/runtime/vm/heap/verifier.cc b/runtime/vm/heap/verifier.cc
index 808036c..29bbe385 100644
--- a/runtime/vm/heap/verifier.cc
+++ b/runtime/vm/heap/verifier.cc
@@ -26,14 +26,14 @@
     } else {
       switch (mark_expectation_) {
         case kForbidMarked:
-          if (raw_obj->IsMarked()) {
+          if (raw_obj->IsOldObject() && raw_obj->IsMarked()) {
             FATAL1("Marked object encountered %#" Px "\n", raw_addr);
           }
           break;
         case kAllowMarked:
           break;
         case kRequireMarked:
-          if (!raw_obj->IsMarked()) {
+          if (raw_obj->IsOldObject() && !raw_obj->IsMarked()) {
             FATAL1("Unmarked object encountered %#" Px "\n", raw_addr);
           }
           break;
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index e3cacc7..28dda6a 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -260,7 +260,10 @@
     // Write object header with the mark and VM heap bits set.
     uword marked_tags = obj.raw()->ptr()->tags_;
     marked_tags = RawObject::VMHeapObjectTag::update(true, marked_tags);
-    marked_tags = RawObject::MarkBit::update(true, marked_tags);
+    marked_tags = RawObject::OldBit::update(true, marked_tags);
+    marked_tags = RawObject::OldAndNotMarkedBit::update(false, marked_tags);
+    marked_tags = RawObject::OldAndNotRememberedBit::update(true, marked_tags);
+    marked_tags = RawObject::NewBit::update(false, marked_tags);
 #if defined(HASH_IN_OBJECT_HEADER)
     marked_tags |= static_cast<uword>(obj.raw()->ptr()->hash_) << 32;
 #endif
@@ -346,7 +349,11 @@
       // Write Instructions with the mark and VM heap bits set.
       uword marked_tags = insns.raw_ptr()->tags_;
       marked_tags = RawObject::VMHeapObjectTag::update(true, marked_tags);
-      marked_tags = RawObject::MarkBit::update(true, marked_tags);
+      marked_tags = RawObject::OldBit::update(true, marked_tags);
+      marked_tags = RawObject::OldAndNotMarkedBit::update(false, marked_tags);
+      marked_tags =
+          RawObject::OldAndNotRememberedBit::update(true, marked_tags);
+      marked_tags = RawObject::NewBit::update(false, marked_tags);
 #if defined(HASH_IN_OBJECT_HEADER)
       // Can't use GetObjectTagsAndHash because the update methods discard the
       // high bits.
@@ -555,7 +562,10 @@
     // Write Instructions with the mark and VM heap bits set.
     uword marked_tags = insns.raw_ptr()->tags_;
     marked_tags = RawObject::VMHeapObjectTag::update(true, marked_tags);
-    marked_tags = RawObject::MarkBit::update(true, marked_tags);
+    marked_tags = RawObject::OldBit::update(true, marked_tags);
+    marked_tags = RawObject::OldAndNotMarkedBit::update(false, marked_tags);
+    marked_tags = RawObject::OldAndNotRememberedBit::update(true, marked_tags);
+    marked_tags = RawObject::NewBit::update(false, marked_tags);
 #if defined(HASH_IN_OBJECT_HEADER)
     // Can't use GetObjectTagsAndHash because the update methods discard the
     // high bits.
diff --git a/runtime/vm/interpreter.cc b/runtime/vm/interpreter.cc
index 7563e2a..a12afa7 100644
--- a/runtime/vm/interpreter.cc
+++ b/runtime/vm/interpreter.cc
@@ -330,6 +330,7 @@
       uword tags = 0;
       tags = RawObject::ClassIdTag::update(kDoubleCid, tags);
       tags = RawObject::SizeTag::update(instance_size, tags);
+      tags = RawObject::NewBit::update(true, tags);
       // Also writes zero in the hash_ field.
       *reinterpret_cast<uword*>(start + Double::tags_offset()) = tags;
       *reinterpret_cast<double*>(start + Double::value_offset()) = value;
@@ -1694,15 +1695,16 @@
 AssertAssignableCallRuntime:
   // TODO(regis): Modify AssertAssignable bytecode to expect arguments in same
   // order as the TypeCheck runtime call, so this copying can be avoided.
-  call_top[1] = args[0];  // instance
-  call_top[2] = args[3];  // type
-  call_top[3] = args[1];  // instantiator type args
-  call_top[4] = args[2];  // function type args
-  call_top[5] = args[4];  // name
-  call_top[6] = cache;
-  call_top[7] = Smi::New(kTypeCheckFromInline);
-  Exit(thread, FP, call_top + 8, pc);
-  NativeArguments native_args(thread, 7, call_top + 1, call_top + 1);
+  call_top[1] = 0;        // Unused result.
+  call_top[2] = args[0];  // Instance.
+  call_top[3] = args[3];  // Type.
+  call_top[4] = args[1];  // Instantiator type args.
+  call_top[5] = args[2];  // Function type args.
+  call_top[6] = args[4];  // Name.
+  call_top[7] = cache;
+  call_top[8] = Smi::New(kTypeCheckFromInline);
+  Exit(thread, FP, call_top + 9, pc);
+  NativeArguments native_args(thread, 7, call_top + 2, call_top + 1);
   return InvokeRuntime(thread, this, DRT_TypeCheck, native_args);
 }
 
@@ -2085,8 +2087,10 @@
   {
     BYTECODE(CheckStack, A);
     {
-      // Using the interpreter stack limit and not the thread stack limit.
-      if (reinterpret_cast<uword>(SP) >= stack_limit()) {
+      // Check the interpreter's own stack limit for actual interpreter's stack
+      // overflows, and also the thread's stack limit for scheduled interrupts.
+      if (reinterpret_cast<uword>(SP) >= stack_limit() ||
+          thread->HasScheduledInterrupts()) {
         Exit(thread, FP, SP + 1, pc);
         NativeArguments args(thread, 0, NULL, NULL);
         INVOKE_RUNTIME(DRT_StackOverflow, args);
@@ -2480,12 +2484,9 @@
 
   {
     BYTECODE(NativeCall, __D);
-    RawTypedData* native_entry = static_cast<RawTypedData*>(LOAD_CONSTANT(rD));
-    // TODO(regis): Introduce a new VM class subclassing Object and containing
-    // the four untagged values currently stored as TypeData array elements.
-    MethodRecognizer::Kind kind =
-        static_cast<MethodRecognizer::Kind>(*(reinterpret_cast<uintptr_t*>(
-            native_entry->ptr()->data() + (0 << kWordSizeLog2))));
+    RawNativeEntryData* native_entry =
+        static_cast<RawNativeEntryData*>(LOAD_CONSTANT(rD));
+    MethodRecognizer::Kind kind = native_entry->ptr()->kind_;
     switch (kind) {
       case MethodRecognizer::kObjectEquals: {
         SP[-1] = SP[-1] == SP[0] ? Bool::True().raw() : Bool::False().raw();
@@ -2570,8 +2571,9 @@
       } break;
       case MethodRecognizer::kLinkedHashMap_setIndex: {
         RawInstance* instance = reinterpret_cast<RawInstance*>(SP[-1]);
-        reinterpret_cast<RawObject**>(
-            instance->ptr())[LinkedHashMap::index_offset() / kWordSize] = SP[0];
+        instance->StorePointer(reinterpret_cast<RawObject**>(instance->ptr()) +
+                                   LinkedHashMap::index_offset() / kWordSize,
+                               SP[0]);
         *--SP = null_value;
       } break;
       case MethodRecognizer::kLinkedHashMap_getData: {
@@ -2581,8 +2583,9 @@
       } break;
       case MethodRecognizer::kLinkedHashMap_setData: {
         RawInstance* instance = reinterpret_cast<RawInstance*>(SP[-1]);
-        reinterpret_cast<RawObject**>(
-            instance->ptr())[LinkedHashMap::data_offset() / kWordSize] = SP[0];
+        instance->StorePointer(reinterpret_cast<RawObject**>(instance->ptr()) +
+                                   LinkedHashMap::data_offset() / kWordSize,
+                               SP[0]);
         *--SP = null_value;
       } break;
       case MethodRecognizer::kLinkedHashMap_getHashMask: {
@@ -2622,16 +2625,9 @@
         *--SP = null_value;
       } break;
       default: {
-        NativeFunctionWrapper trampoline =
-            reinterpret_cast<NativeFunctionWrapper>(
-                *(reinterpret_cast<uintptr_t*>(native_entry->ptr()->data() +
-                                               (1 << kWordSizeLog2))));
-        Dart_NativeFunction function = reinterpret_cast<Dart_NativeFunction>(
-            *(reinterpret_cast<uintptr_t*>(native_entry->ptr()->data() +
-                                           (2 << kWordSizeLog2))));
-        intptr_t argc_tag =
-            static_cast<intptr_t>(*(reinterpret_cast<uintptr_t*>(
-                native_entry->ptr()->data() + (3 << kWordSizeLog2))));
+        NativeFunctionWrapper trampoline = native_entry->ptr()->trampoline_;
+        NativeFunction function = native_entry->ptr()->native_function_;
+        intptr_t argc_tag = native_entry->ptr()->argc_tag_;
         const intptr_t num_arguments =
             NativeArguments::ArgcBits::decode(argc_tag);
 
@@ -2641,7 +2637,8 @@
         RawObject** return_slot = SP;
         Exit(thread, FP, SP, pc);
         NativeArguments args(thread, argc_tag, incoming_args, return_slot);
-        INVOKE_NATIVE(trampoline, function,
+        INVOKE_NATIVE(trampoline,
+                      reinterpret_cast<Dart_NativeFunction>(function),
                       reinterpret_cast<Dart_NativeArguments>(&args));
 
         *(SP - num_arguments) = *return_slot;
@@ -3657,6 +3654,7 @@
       uint32_t tags = 0;
       tags = RawObject::ClassIdTag::update(kContextCid, tags);
       tags = RawObject::SizeTag::update(instance_size, tags);
+      tags = RawObject::NewBit::update(true, tags);
       // Also writes 0 in the hash_ field of the header.
       *reinterpret_cast<uword*>(start + Array::tags_offset()) = tags;
       *reinterpret_cast<uword*>(start + Context::num_variables_offset()) =
@@ -3693,13 +3691,13 @@
 
   {
     BYTECODE(AllocateOpt, A_D);
-    const uword tags =
-        static_cast<uword>(Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD))));
+    uint32_t tags = Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD)));
     const intptr_t instance_size = RawObject::SizeTag::decode(tags);
     const uword start =
         thread->heap()->new_space()->TryAllocateInTLAB(thread, instance_size);
     if (LIKELY(start != 0)) {
       // Writes both the tags and the initial identity hash on 64 bit platforms.
+      tags = RawObject::NewBit::update(true, tags);
       *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
       for (intptr_t current_offset = sizeof(RawInstance);
            current_offset < instance_size; current_offset += kWordSize) {
@@ -3725,7 +3723,7 @@
 
   {
     BYTECODE(AllocateTOpt, A_D);
-    const uword tags = Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD)));
+    uint32_t tags = Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD)));
     const intptr_t instance_size = RawObject::SizeTag::decode(tags);
     const uword start =
         thread->heap()->new_space()->TryAllocateInTLAB(thread, instance_size);
@@ -3733,6 +3731,7 @@
       RawObject* type_args = SP[0];
       const intptr_t type_args_offset = KernelBytecode::DecodeD(*pc);
       // Writes both the tags and the initial identity hash on 64 bit platforms.
+      tags = RawObject::NewBit::update(true, tags);
       *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
       for (intptr_t current_offset = sizeof(RawInstance);
            current_offset < instance_size; current_offset += kWordSize) {
@@ -3776,6 +3775,7 @@
             tags = RawObject::SizeTag::update(instance_size, tags);
           }
           tags = RawObject::ClassIdTag::update(cid, tags);
+          tags = RawObject::NewBit::update(true, tags);
           // Writes both the tags and the initial identity hash on 64 bit
           // platforms.
           *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 5614bdd9..f8f7835 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -150,7 +150,10 @@
   V(NONPRODUCT, use_field_guards, UseFieldGuards, use_field_guards,            \
     FLAG_use_field_guards)                                                     \
   V(NONPRODUCT, use_osr, UseOsr, use_osr, FLAG_use_osr)                        \
-  V(PRECOMPILER, obfuscate, Obfuscate, obfuscate, false_by_default)
+  V(PRECOMPILER, obfuscate, Obfuscate, obfuscate, false_by_default)            \
+  V(PRODUCT, unsafe_trust_strong_mode_types, UnsafeTrustStrongModeTypes,       \
+    unsafe_trust_strong_mode_types,                                            \
+    FLAG_experimental_unsafe_mode_use_at_your_own_risk)
 
 class Isolate : public BaseIsolate {
  public:
@@ -697,6 +700,11 @@
     isolate_flags_ = IsKernelIsolateBit::update(value, isolate_flags_);
   }
 
+  bool can_use_strong_mode_types() const {
+    return strong() && FLAG_use_strong_mode_types &&
+           !unsafe_trust_strong_mode_types();
+  }
+
   bool should_load_vmservice() const {
     return ShouldLoadVmServiceBit::decode(isolate_flags_);
   }
@@ -752,8 +760,12 @@
 
   // Convenience flag tester indicating whether incoming function arguments
   // should be type checked.
-  bool argument_type_checks() {
-    return (strong() && !FLAG_omit_strong_type_checks) || type_checks();
+  bool argument_type_checks() const {
+    return should_emit_strong_mode_checks() || type_checks();
+  }
+
+  bool should_emit_strong_mode_checks() const {
+    return strong() && !unsafe_trust_strong_mode_types();
   }
 
   static void KillAllIsolates(LibMsgId msg_id);
@@ -875,7 +887,8 @@
   V(UseOsr)                                                                    \
   V(Obfuscate)                                                                 \
   V(CompactionInProgress)                                                      \
-  V(ShouldLoadVmService)
+  V(ShouldLoadVmService)                                                       \
+  V(UnsafeTrustStrongModeTypes)
 
   // Isolate specific flags.
   enum FlagBits {
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
index 9f56a44..171292f 100644
--- a/runtime/vm/isolate_reload_test.cc
+++ b/runtime/vm/isolate_reload_test.cc
@@ -2301,7 +2301,7 @@
                SimpleInvokeStr(lib, "main"));
 }
 
-TEST_CASE(IsolateReload_DirectSubclasses_Success) {
+ISOLATE_UNIT_TEST_CASE(IsolateReload_DirectSubclasses_Success) {
   Object& new_subclass = Object::Handle();
   String& name = String::Handle();
 
@@ -2323,9 +2323,12 @@
       "  return 1;\n"
       "}\n";
 
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  EXPECT_EQ(1, SimpleInvoke(lib, "main"));
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    EXPECT_EQ(1, SimpleInvoke(lib, "main"));
+  }
 
   // Iterator has one non-core subclass.
   subclasses = iterator_cls.direct_subclasses();
@@ -2345,9 +2348,12 @@
       "  return 2;\n"
       "}\n";
 
-  lib = TestCase::ReloadTestScript(kReloadScript);
-  EXPECT_VALID(lib);
-  EXPECT_EQ(2, SimpleInvoke(lib, "main"));
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::ReloadTestScript(kReloadScript);
+    EXPECT_VALID(lib);
+    EXPECT_EQ(2, SimpleInvoke(lib, "main"));
+  }
 
   // Iterator still has only one non-core subclass (AIterator is gone).
   subclasses = iterator_cls.direct_subclasses();
@@ -2359,7 +2365,7 @@
   EXPECT_STREQ("BIterator", name.ToCString());
 }
 
-TEST_CASE(IsolateReload_DirectSubclasses_GhostSubclass) {
+ISOLATE_UNIT_TEST_CASE(IsolateReload_DirectSubclasses_GhostSubclass) {
   Object& new_subclass = Object::Handle();
   String& name = String::Handle();
 
@@ -2381,9 +2387,12 @@
       "  return 1;\n"
       "}\n";
 
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  EXPECT_EQ(1, SimpleInvoke(lib, "main"));
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    EXPECT_EQ(1, SimpleInvoke(lib, "main"));
+  }
 
   // Iterator has one new subclass.
   subclasses = iterator_cls.direct_subclasses();
@@ -2401,9 +2410,12 @@
       "  return 2;\n"
       "}\n";
 
-  lib = TestCase::ReloadTestScript(kReloadScript);
-  EXPECT_VALID(lib);
-  EXPECT_EQ(2, SimpleInvoke(lib, "main"));
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::ReloadTestScript(kReloadScript);
+    EXPECT_VALID(lib);
+    EXPECT_EQ(2, SimpleInvoke(lib, "main"));
+  }
 
   // Iterator has two non-core subclasses.
   subclasses = iterator_cls.direct_subclasses();
@@ -2420,7 +2432,7 @@
 }
 
 // Make sure that we restore the direct subclass info when we revert.
-TEST_CASE(IsolateReload_DirectSubclasses_Failure) {
+ISOLATE_UNIT_TEST_CASE(IsolateReload_DirectSubclasses_Failure) {
   Object& new_subclass = Object::Handle();
   String& name = String::Handle();
 
@@ -2447,9 +2459,12 @@
       "  return 1;\n"
       "}\n";
 
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  EXPECT_EQ(1, SimpleInvoke(lib, "main"));
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    EXPECT_EQ(1, SimpleInvoke(lib, "main"));
+  }
 
   // Iterator has one non-core subclass...
   EXPECT_EQ(saved_subclass_count + 1, subclasses.Length());
@@ -2473,11 +2488,14 @@
       "  return 2;\n"
       "}\n";
 
-  lib = TestCase::ReloadTestScript(kReloadScript);
-  if (TestCase::UsingDartFrontend()) {
-    EXPECT_ERROR(lib, "Expected ';' after this");
-  } else {
-    EXPECT_ERROR(lib, "unexpected token");
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::ReloadTestScript(kReloadScript);
+    if (TestCase::UsingDartFrontend()) {
+      EXPECT_ERROR(lib, "Expected ';' after this");
+    } else {
+      EXPECT_ERROR(lib, "unexpected token");
+    }
   }
 
   // If we don't clean up the subclasses, we would find BIterator in
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index ea23d2c..5a85178 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -95,6 +95,7 @@
     api_flags.use_dart_frontend = true;
     api_flags.reify_generic_functions = true;
     api_flags.strong = true;
+    api_flags.unsafe_trust_strong_mode_types = false;
     api_flags.sync_async = true;
 #if !defined(DART_PRECOMPILER) && !defined(TARGET_ARCH_DBC) &&                 \
     !defined(DART_USE_INTERPRETER)
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 17f062d..a7dd4cd 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -1385,6 +1385,12 @@
                               true,   // is_method
                               false,  // is_closure
                               &function_node_helper);
+
+    if (library.is_dart_scheme() &&
+        H.IsPrivate(constructor_helper.canonical_name_)) {
+      function.set_is_reflectable(false);
+    }
+
     if (constructor_helper.IsSynthetic()) {
       function.set_is_debuggable(false);
     }
@@ -1603,8 +1609,11 @@
     expression_evaluation_function_ = function.raw();
   }
   function.set_kernel_offset(procedure_offset);
-  function.set_is_reflectable(function.is_reflectable() &&
-                              library.raw() != Library::InternalLibrary());
+  if ((library.is_dart_scheme() &&
+       H.IsPrivate(procedure_helper.canonical_name_)) ||
+      (function.is_static() && (library.raw() == Library::InternalLibrary()))) {
+    function.set_is_reflectable(false);
+  }
 
   ActiveMemberScope active_member(&active_class_, &function);
 
diff --git a/runtime/vm/longjump_test.cc b/runtime/vm/longjump_test.cc
index 2d62383..bc58a24 100644
--- a/runtime/vm/longjump_test.cc
+++ b/runtime/vm/longjump_test.cc
@@ -15,7 +15,7 @@
   UNREACHABLE();
 }
 
-TEST_CASE(LongJump) {
+ISOLATE_UNIT_TEST_CASE(LongJump) {
   LongJumpScope* base = Thread::Current()->long_jump_base();
   {
     LongJumpScope jump;
diff --git a/runtime/vm/native_arguments.h b/runtime/vm/native_arguments.h
index ea9d33c..782fc6e 100644
--- a/runtime/vm/native_arguments.h
+++ b/runtime/vm/native_arguments.h
@@ -213,6 +213,7 @@
   friend class Api;
   friend class BootstrapNatives;
   friend class Interpreter;
+  friend class NativeEntryData;
   friend class Simulator;
 
 #if defined(TARGET_ARCH_DBC) || defined(DART_USE_INTERPRETER)
diff --git a/runtime/vm/native_entry.cc b/runtime/vm/native_entry.cc
index 8b033c5..648d734 100644
--- a/runtime/vm/native_entry.cc
+++ b/runtime/vm/native_entry.cc
@@ -94,6 +94,7 @@
 void NativeEntry::PropagateErrors(NativeArguments* arguments) {
   Thread* thread = arguments->thread();
   thread->UnwindScopes(thread->top_exit_frame_info());
+  TransitionNativeToVM transition(thread);
 
   // The thread->zone() is different here than before we unwound.
   const Object& error =
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index d6fd7cb..c7cdf97 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -101,36 +101,11 @@
 #error RAW_NULL should not be defined.
 #endif
 #define RAW_NULL kHeapObjectTag
-Object* Object::null_object_ = NULL;
-Array* Object::null_array_ = NULL;
-String* Object::null_string_ = NULL;
-Instance* Object::null_instance_ = NULL;
-Function* Object::null_function_ = NULL;
-TypeArguments* Object::null_type_arguments_ = NULL;
-TypeArguments* Object::empty_type_arguments_ = NULL;
-Array* Object::empty_array_ = NULL;
-Array* Object::zero_array_ = NULL;
-ContextScope* Object::empty_context_scope_ = NULL;
-ObjectPool* Object::empty_object_pool_ = NULL;
-PcDescriptors* Object::empty_descriptors_ = NULL;
-LocalVarDescriptors* Object::empty_var_descriptors_ = NULL;
-ExceptionHandlers* Object::empty_exception_handlers_ = NULL;
-Array* Object::extractor_parameter_types_ = NULL;
-Array* Object::extractor_parameter_names_ = NULL;
-Instance* Object::sentinel_ = NULL;
-Instance* Object::transition_sentinel_ = NULL;
-Instance* Object::unknown_constant_ = NULL;
-Instance* Object::non_constant_ = NULL;
-Bool* Object::bool_true_ = NULL;
-Bool* Object::bool_false_ = NULL;
-Smi* Object::smi_illegal_cid_ = NULL;
-LanguageError* Object::snapshot_writer_error_ = NULL;
-LanguageError* Object::branch_offset_error_ = NULL;
-LanguageError* Object::speculative_inlining_error_ = NULL;
-LanguageError* Object::background_compilation_error_ = NULL;
-Array* Object::vm_isolate_snapshot_object_table_ = NULL;
-Type* Object::dynamic_type_ = NULL;
-Type* Object::void_type_ = NULL;
+
+#define DEFINE_SHARED_READONLY_HANDLE(Type, name)                              \
+  Type* Object::name##_ = nullptr;
+SHARED_READONLY_HANDLES_LIST(DEFINE_SHARED_READONLY_HANDLE)
+#undef DEFINE_SHARED_READONLY_HANDLE
 
 RawObject* Object::null_ = reinterpret_cast<RawObject*>(RAW_NULL);
 RawClass* Object::class_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
@@ -145,6 +120,8 @@
 RawClass* Object::signature_data_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
 RawClass* Object::redirection_data_class_ =
     reinterpret_cast<RawClass*>(RAW_NULL);
+RawClass* Object::native_entry_data_class_ =
+    reinterpret_cast<RawClass*>(RAW_NULL);
 RawClass* Object::field_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
 RawClass* Object::literal_token_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
 RawClass* Object::token_stream_class_ = reinterpret_cast<RawClass*>(RAW_NULL);
@@ -495,36 +472,10 @@
   Heap* heap = isolate->heap();
 
   // Allocate the read only object handles here.
-  null_object_ = Object::ReadOnlyHandle();
-  null_array_ = Array::ReadOnlyHandle();
-  null_string_ = String::ReadOnlyHandle();
-  null_instance_ = Instance::ReadOnlyHandle();
-  null_function_ = Function::ReadOnlyHandle();
-  null_type_arguments_ = TypeArguments::ReadOnlyHandle();
-  empty_type_arguments_ = TypeArguments::ReadOnlyHandle();
-  empty_array_ = Array::ReadOnlyHandle();
-  zero_array_ = Array::ReadOnlyHandle();
-  empty_context_scope_ = ContextScope::ReadOnlyHandle();
-  empty_object_pool_ = ObjectPool::ReadOnlyHandle();
-  empty_descriptors_ = PcDescriptors::ReadOnlyHandle();
-  empty_var_descriptors_ = LocalVarDescriptors::ReadOnlyHandle();
-  empty_exception_handlers_ = ExceptionHandlers::ReadOnlyHandle();
-  extractor_parameter_types_ = Array::ReadOnlyHandle();
-  extractor_parameter_names_ = Array::ReadOnlyHandle();
-  sentinel_ = Instance::ReadOnlyHandle();
-  transition_sentinel_ = Instance::ReadOnlyHandle();
-  unknown_constant_ = Instance::ReadOnlyHandle();
-  non_constant_ = Instance::ReadOnlyHandle();
-  bool_true_ = Bool::ReadOnlyHandle();
-  bool_false_ = Bool::ReadOnlyHandle();
-  smi_illegal_cid_ = Smi::ReadOnlyHandle();
-  snapshot_writer_error_ = LanguageError::ReadOnlyHandle();
-  branch_offset_error_ = LanguageError::ReadOnlyHandle();
-  speculative_inlining_error_ = LanguageError::ReadOnlyHandle();
-  background_compilation_error_ = LanguageError::ReadOnlyHandle();
-  vm_isolate_snapshot_object_table_ = Array::ReadOnlyHandle();
-  dynamic_type_ = Type::ReadOnlyHandle();
-  void_type_ = Type::ReadOnlyHandle();
+#define INITIALIZE_SHARED_READONLY_HANDLE(Type, name)                          \
+  name##_ = Type::ReadOnlyHandle();
+  SHARED_READONLY_HANDLES_LIST(INITIALIZE_SHARED_READONLY_HANDLE)
+#undef INITIALIZE_SHARED_READONLY_HANDLE
 
   *null_object_ = Object::null();
   *null_array_ = Array::null();
@@ -533,6 +484,7 @@
   *null_function_ = Function::null();
   *null_type_arguments_ = TypeArguments::null();
   *empty_type_arguments_ = TypeArguments::null();
+  *null_abstract_type_ = AbstractType::null();
 
   // Initialize the empty and zero array handles to null_ in order to be able to
   // check if the empty and zero arrays were allocated (RAW_NULL is not
@@ -632,6 +584,9 @@
   cls = Class::New<RedirectionData>();
   redirection_data_class_ = cls.raw();
 
+  cls = Class::New<NativeEntryData>();
+  native_entry_data_class_ = cls.raw();
+
   cls = Class::New<Field>();
   field_class_ = cls.raw();
 
@@ -1072,6 +1027,7 @@
   SET_CLASS_NAME(closure_data, ClosureData);
   SET_CLASS_NAME(signature_data, SignatureData);
   SET_CLASS_NAME(redirection_data, RedirectionData);
+  SET_CLASS_NAME(native_entry_data, NativeEntryData);
   SET_CLASS_NAME(field, Field);
   SET_CLASS_NAME(literal_token, LiteralToken);
   SET_CLASS_NAME(token_stream, TokenStream);
@@ -1212,6 +1168,16 @@
       new_tags = RawObject::SizeTag::update(leftover_size, new_tags);
       new_tags = RawObject::VMHeapObjectTag::update(obj.raw()->IsVMHeapObject(),
                                                     new_tags);
+      const bool is_old = obj.raw()->IsOldObject();
+      new_tags = RawObject::OldBit::update(is_old, new_tags);
+      new_tags = RawObject::OldAndNotMarkedBit::update(is_old, new_tags);
+      new_tags = RawObject::OldAndNotRememberedBit::update(is_old, new_tags);
+      new_tags = RawObject::NewBit::update(!is_old, new_tags);
+      // On architectures with a relaxed memory model, the concurrent marker may
+      // observe the write of the filler object's header before observing the
+      // new array length, and so treat it as a pointer. Ensure it is a Smi so
+      // the marker won't dereference it.
+      ASSERT((new_tags & kSmiTagMask) == kSmiTag);
       uint32_t tags = raw->ptr()->tags_;
       uint32_t old_tags;
       // TODO(iposva): Investigate whether CompareAndSwapWord is necessary.
@@ -1234,6 +1200,16 @@
       new_tags = RawObject::SizeTag::update(leftover_size, new_tags);
       new_tags = RawObject::VMHeapObjectTag::update(
           obj.raw()->ptr()->IsVMHeapObject(), new_tags);
+      const bool is_old = obj.raw()->IsOldObject();
+      new_tags = RawObject::OldBit::update(is_old, new_tags);
+      new_tags = RawObject::OldAndNotMarkedBit::update(is_old, new_tags);
+      new_tags = RawObject::OldAndNotRememberedBit::update(is_old, new_tags);
+      new_tags = RawObject::NewBit::update(!is_old, new_tags);
+      // On architectures with a relaxed memory model, the concurrent marker may
+      // observe the write of the filler object's header before observing the
+      // new array length, and so treat it as a pointer. Ensure it is a Smi so
+      // the marker won't dereference it.
+      ASSERT((new_tags & kSmiTagMask) == kSmiTag);
       uint32_t tags = raw->ptr()->tags_;
       uint32_t old_tags;
       // TODO(iposva): Investigate whether CompareAndSwapWord is necessary.
@@ -2001,6 +1977,12 @@
   tags = RawObject::ClassIdTag::update(class_id, tags);
   tags = RawObject::SizeTag::update(size, tags);
   tags = RawObject::VMHeapObjectTag::update(is_vm_object, tags);
+  const bool is_old =
+      (address & kNewObjectAlignmentOffset) == kOldObjectAlignmentOffset;
+  tags = RawObject::OldBit::update(is_old, tags);
+  tags = RawObject::OldAndNotMarkedBit::update(is_old, tags);
+  tags = RawObject::OldAndNotRememberedBit::update(is_old, tags);
+  tags = RawObject::NewBit::update(!is_old, tags);
   reinterpret_cast<RawObject*>(address)->tags_ = tags;
 #if defined(HASH_IN_OBJECT_HEADER)
   reinterpret_cast<RawObject*>(address)->hash_ = 0;
@@ -2034,10 +2016,11 @@
 RawObject* Object::Allocate(intptr_t cls_id, intptr_t size, Heap::Space space) {
   ASSERT(Utils::IsAligned(size, kObjectAlignment));
   Thread* thread = Thread::Current();
-  Isolate* isolate = thread->isolate();
   // New space allocation allowed only in mutator thread (Dart thread);
   ASSERT(thread->IsMutatorThread() || (space != Heap::kNew));
+  ASSERT(thread->execution_state() == Thread::kThreadInVM);
   ASSERT(thread->no_callback_scope_depth() == 0);
+  Isolate* isolate = thread->isolate();
   Heap* heap = isolate->heap();
 
   uword address = heap->Allocate(size, space);
@@ -2111,7 +2094,7 @@
   NoSafepointScope no_safepoint;
   // TODO(koda): This will trip when we start allocating black.
   // Revisit code below at that point, to account for the new write barrier.
-  ASSERT(!raw_clone->IsMarked());
+  ASSERT(!(raw_clone->IsOldObject() && raw_clone->IsMarked()));
   // Copy the body of the original into the clone.
   uword orig_addr = RawObject::ToAddr(orig.raw());
   uword clone_addr = RawObject::ToAddr(raw_clone);
@@ -3631,7 +3614,7 @@
     return Error::null();
   }
   if (Compiler::IsBackgroundCompilation()) {
-    Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+    Compiler::AbortBackgroundCompilation(DeoptId::kNone,
                                          "Class finalization while compiling");
   }
   ASSERT(thread->IsMutatorThread());
@@ -3936,6 +3919,8 @@
       return Symbols::SignatureData().raw();
     case kRedirectionDataCid:
       return Symbols::RedirectionData().raw();
+    case kNativeEntryDataCid:
+      return Symbols::NativeEntryData().raw();
     case kFieldCid:
       return Symbols::Field().raw();
     case kLiteralTokenCid:
@@ -7147,11 +7132,50 @@
 
   Function& sig = Function::Handle(Function::NewSignatureFunction(
       owner, parent, TokenPosition::kNoSource, space));
+  AbstractType& type = AbstractType::Handle(zone);
+
+  // Copy the type parameters and instantiate their bounds (if necessary).
   if (!delete_type_parameters) {
-    sig.set_type_parameters(TypeArguments::Handle(zone, type_parameters()));
+    const TypeArguments& type_params =
+        TypeArguments::Handle(zone, type_parameters());
+    if (!type_params.IsNull()) {
+      TypeArguments& instantiated_type_params = TypeArguments::Handle(zone);
+      TypeParameter& type_param = TypeParameter::Handle(zone);
+      Class& cls = Class::Handle(zone);
+      String& param_name = String::Handle(zone);
+      for (intptr_t i = 0; i < type_params.Length(); ++i) {
+        type_param ^= type_params.TypeAt(i);
+        type = type_param.bound();
+        if (!type.IsInstantiated(kAny, num_free_fun_type_params)) {
+          type = type.InstantiateFrom(
+              instantiator_type_arguments, function_type_arguments,
+              num_free_fun_type_params, NULL, NULL, NULL, space);
+          cls = type_param.parameterized_class();
+          param_name = type_param.name();
+          ASSERT(type_param.IsFinalized());
+          type_param ^=
+              TypeParameter::New(cls, sig, type_param.index(), param_name, type,
+                                 type_param.token_pos());
+          type_param.SetIsFinalized();
+          if (instantiated_type_params.IsNull()) {
+            instantiated_type_params = TypeArguments::New(type_params.Length());
+            for (intptr_t j = 0; j < i; ++j) {
+              type = type_params.TypeAt(j);
+              instantiated_type_params.SetTypeAt(j, type);
+            }
+          }
+          instantiated_type_params.SetTypeAt(i, type_param);
+        } else if (!instantiated_type_params.IsNull()) {
+          instantiated_type_params.SetTypeAt(i, type_param);
+        }
+      }
+      sig.set_type_parameters(instantiated_type_params.IsNull()
+                                  ? type_params
+                                  : instantiated_type_params);
+    }
   }
 
-  AbstractType& type = AbstractType::Handle(zone, result_type());
+  type = result_type();
   if (!type.IsInstantiated(kAny, num_free_fun_type_params)) {
     type = type.InstantiateFrom(
         instantiator_type_arguments, function_type_arguments,
@@ -7904,6 +7928,15 @@
       return false;
     }
   }
+  TypeArguments& type_params = TypeArguments::Handle(type_parameters());
+  TypeParameter& type_param = TypeParameter::Handle();
+  for (intptr_t i = 0; i < type_params.Length(); ++i) {
+    type_param ^= type_params.TypeAt(i);
+    type = type_param.bound();
+    if (!type.IsInstantiated(genericity, num_free_fun_type_params, trail)) {
+      return false;
+    }
+  }
   return true;
 }
 
@@ -8463,6 +8496,37 @@
                      target_fun.IsNull() ? "null" : target_fun.ToCString());
 }
 
+RawNativeEntryData* NativeEntryData::New() {
+  ASSERT(Object::native_entry_data_class() != Class::null());
+  RawObject* raw = Object::Allocate(
+      NativeEntryData::kClassId, NativeEntryData::InstanceSize(), Heap::kOld);
+  return reinterpret_cast<RawNativeEntryData*>(raw);
+}
+
+const char* NativeEntryData::ToCString() const {
+#if defined(DART_USE_INTERPRETER)
+  if (IsNull()) {
+    return "NativeEntryData: null";
+  }
+  if (kind() != MethodRecognizer::kUnknown) {
+    return OS::SCreate(Thread::Current()->zone(), "NativeEntryData %s",
+                       MethodRecognizer::KindToCString(kind()));
+  }
+  return OS::SCreate(
+      Thread::Current()->zone(),
+      "NativeEntryData argc: %d, trampoline: %s, function: 0x%" Px,
+      NativeArguments::ArgcBits::decode(argc_tag()),
+      trampoline() == &NativeEntry::BootstrapNativeCallWrapper
+          ? "BootstrapNativeCallWrapper"
+          : trampoline() == &NativeEntry::AutoScopeNativeCallWrapper
+                ? "AutoScopeNativeCallWrapper"
+                : "NoScopeNativeCallWrapper",
+      reinterpret_cast<uword>(native_function()));
+#else
+  UNREACHABLE();
+#endif  // defined(DART_USE_INTERPRETER)
+}
+
 RawField* Field::CloneFromOriginal() const {
   return this->Clone(*this);
 }
@@ -9066,20 +9130,12 @@
     return "<*>";
   }
 
+  Zone* zone = Thread::Current()->zone();
+
   const char* exactness = "";
   if (static_type_exactness_state().IsTracking()) {
-    if (!static_type_exactness_state().IsExactOrUninitialized()) {
-      exactness = " {!exact}";
-    } else if (static_type_exactness_state().IsTriviallyExact()) {
-      exactness = " {trivially-exact}";
-    } else if (static_type_exactness_state().IsHasExactSuperType()) {
-      exactness = " {has-exact-super-type}";
-    } else if (static_type_exactness_state().IsHasExactSuperClass()) {
-      exactness = " {has-exact-super-class}";
-    } else {
-      ASSERT(static_type_exactness_state().IsUninitialized());
-      exactness = " {unknown exactness}";
-    }
+    exactness =
+        zone->PrintToString(" {%s}", static_type_exactness_state().ToCString());
   }
 
   const Class& cls =
@@ -9090,18 +9146,17 @@
       is_final()) {
     ASSERT(guarded_list_length() != kUnknownFixedLength);
     if (guarded_list_length() == kNoFixedLength) {
-      return Thread::Current()->zone()->PrintToString("<%s [*]%s>", class_name,
-                                                      exactness);
+      return zone->PrintToString("<%s [*]%s>", class_name, exactness);
     } else {
-      return Thread::Current()->zone()->PrintToString(
+      return zone->PrintToString(
           "<%s [%" Pd " @%" Pd "]%s>", class_name, guarded_list_length(),
           guarded_list_length_in_object_offset(), exactness);
     }
   }
 
-  return Thread::Current()->zone()->PrintToString(
-      "<%s %s%s>", is_nullable() ? "nullable" : "not-nullable", class_name,
-      exactness);
+  return zone->PrintToString("<%s %s%s>",
+                             is_nullable() ? "nullable" : "not-nullable",
+                             class_name, exactness);
 }
 
 void Field::InitializeGuardedListLengthInObjectOffset() const {
@@ -9225,15 +9280,156 @@
   return false;  // Not found.
 }
 
-static void SetTrivialTypeExactness(const Field& field, const Class& cls) {
+static StaticTypeExactnessState TrivialTypeExactnessFor(const Class& cls) {
   const intptr_t type_arguments_offset = cls.type_arguments_field_offset();
   ASSERT(type_arguments_offset != Class::kNoTypeArguments);
   if (StaticTypeExactnessState::CanRepresentAsTriviallyExact(
           type_arguments_offset)) {
-    field.set_static_type_exactness_state(
-        StaticTypeExactnessState::TriviallyExact(type_arguments_offset));
+    return StaticTypeExactnessState::TriviallyExact(type_arguments_offset);
   } else {
-    field.set_static_type_exactness_state(StaticTypeExactnessState::NotExact());
+    return StaticTypeExactnessState::NotExact();
+  }
+}
+
+static const char* SafeTypeArgumentsToCString(const TypeArguments& args) {
+  return (args.raw() == TypeArguments::null()) ? "<null>" : args.ToCString();
+}
+
+StaticTypeExactnessState StaticTypeExactnessState::Compute(
+    const Type& static_type,
+    const Instance& value,
+    bool print_trace /* = false */) {
+  const TypeArguments& static_type_args =
+      TypeArguments::Handle(static_type.arguments());
+
+  TypeArguments& args = TypeArguments::Handle();
+
+  ASSERT(static_type.IsFinalized());
+  const Class& cls = Class::Handle(value.clazz());
+  GrowableArray<const AbstractType*> path(10);
+
+  bool is_super_class = true;
+  if (!FindInstantiationOf(static_type, cls, &path,
+                           /*consider_only_super_classes=*/true)) {
+    is_super_class = false;
+    bool found_super_interface = FindInstantiationOf(
+        static_type, cls, &path, /*consider_only_super_classes=*/false);
+    ASSERT(found_super_interface);
+  }
+
+  // Trivial case: field has type G<T0, ..., Tn> and value has type
+  // G<U0, ..., Un>. Check if type arguments match.
+  if (path.is_empty()) {
+    ASSERT(cls.raw() == static_type.type_class());
+    args = value.GetTypeArguments();
+    // TODO(dartbug.com/34170) Evaluate if comparing relevant subvectors (that
+    // disregards superclass own arguments) improves precision of the
+    // tracking.
+    if (args.raw() == static_type_args.raw()) {
+      return TrivialTypeExactnessFor(cls);
+    }
+
+    if (print_trace) {
+      THR_Print("  expected %s got %s type arguments\n",
+                SafeTypeArgumentsToCString(static_type_args),
+                SafeTypeArgumentsToCString(args));
+    }
+    return StaticTypeExactnessState::NotExact();
+  }
+
+  // Value has type C<U0, ..., Un> and field has type G<T0, ..., Tn> and G != C.
+  // Compute C<X0, ..., Xn> at G (Xi are free type arguments).
+  // Path array contains a chain of immediate supertypes S0 <: S1 <: ... Sn,
+  // such that S0 is an immediate supertype of C and Sn is G<...>.
+  // Each Si might depend on type parameters of the previous supertype S{i-1}.
+  // To compute C<X0, ..., Xn> at G we walk the chain backwards and
+  // instantiate Si using type parameters of S{i-1} which gives us a type
+  // depending on type parameters of S{i-2}.
+  Error& error = Error::Handle();
+  AbstractType& type = AbstractType::Handle(path.Last()->raw());
+  for (intptr_t i = path.length() - 2; (i >= 0) && !type.IsInstantiated();
+       i--) {
+    args = path[i]->arguments();
+    type = type.InstantiateFrom(
+        args, TypeArguments::null_type_arguments(), kAllFree, &error,
+        /*instantiation_trail=*/nullptr, /*bound_trail=*/nullptr, Heap::kNew);
+  }
+
+  if (type.IsInstantiated()) {
+    // C<X0, ..., Xn> at G is fully instantiated and does not depend on
+    // Xi. In this case just check if type arguments match.
+    args = type.arguments();
+    if (args.Equals(static_type_args)) {
+      return is_super_class ? StaticTypeExactnessState::HasExactSuperClass()
+                            : StaticTypeExactnessState::HasExactSuperType();
+    }
+
+    if (print_trace) {
+      THR_Print("  expected %s got %s type arguments\n",
+                SafeTypeArgumentsToCString(static_type_args),
+                SafeTypeArgumentsToCString(args));
+    }
+
+    return StaticTypeExactnessState::NotExact();
+  }
+
+  // The most complicated case: C<X0, ..., Xn> at G depends on
+  // Xi values. To compare type arguments we would need to instantiate
+  // it fully from value's type arguments and compare with <U0, ..., Un>.
+  // However this would complicate fast path in the native code. To avoid this
+  // complication we would optimize for the trivial case: we check if
+  // C<X0, ..., Xn> at G is exactly G<X0, ..., Xn> which means we can simply
+  // compare values type arguements (<T0, ..., Tn>) to fields type arguments
+  // (<U0, ..., Un>) to establish if field type is exact.
+  ASSERT(cls.IsGeneric());
+  const intptr_t num_type_params = cls.NumTypeParameters();
+  bool trivial_case =
+      (num_type_params ==
+       Class::Handle(static_type.type_class()).NumTypeParameters()) &&
+      (value.GetTypeArguments() == static_type.arguments());
+  if (!trivial_case && FLAG_trace_field_guards) {
+    THR_Print("Not a simple case: %" Pd " vs %" Pd
+              " type parameters, %s vs %s type arguments\n",
+              num_type_params,
+              Class::Handle(static_type.type_class()).NumTypeParameters(),
+              SafeTypeArgumentsToCString(
+                  TypeArguments::Handle(value.GetTypeArguments())),
+              SafeTypeArgumentsToCString(static_type_args));
+  }
+
+  AbstractType& type_arg = AbstractType::Handle();
+  args = type.arguments();
+  for (intptr_t i = 0; (i < num_type_params) && trivial_case; i++) {
+    type_arg = args.TypeAt(i);
+    if (!type_arg.IsTypeParameter() ||
+        (TypeParameter::Cast(type_arg).index() != i)) {
+      if (FLAG_trace_field_guards) {
+        THR_Print("  => encountered %s at index % " Pd "\n",
+                  type_arg.ToCString(), i);
+      }
+      trivial_case = false;
+    }
+  }
+
+  return trivial_case ? TrivialTypeExactnessFor(cls)
+                      : StaticTypeExactnessState::NotExact();
+}
+
+const char* StaticTypeExactnessState::ToCString() const {
+  if (!IsTracking()) {
+    return "not-tracking";
+  } else if (!IsExactOrUninitialized()) {
+    return "not-exact";
+  } else if (IsTriviallyExact()) {
+    return Thread::Current()->zone()->PrintToString(
+        "trivially-exact(%" Pd ")", GetTypeArgumentsOffsetInWords());
+  } else if (IsHasExactSuperType()) {
+    return "has-exact-super-type";
+  } else if (IsHasExactSuperClass()) {
+    return "has-exact-super-class";
+  } else {
+    ASSERT(IsUninitialized());
+    return "uninitialized-exactness";
   }
 }
 
@@ -9287,130 +9483,8 @@
   }
 
   ASSERT(static_type_exactness_state().IsUninitialized());
-  ASSERT(field_type.IsFinalized());
-  const Class& cls = Class::Handle(instance.clazz());
-  GrowableArray<const AbstractType*> path(10);
-
-  bool is_super_class = true;
-  if (!FindInstantiationOf(field_type, cls, &path,
-                           /*consider_only_super_classes=*/true)) {
-    is_super_class = false;
-    bool found_super_interface = FindInstantiationOf(
-        field_type, cls, &path, /*consider_only_super_classes=*/false);
-    ASSERT(found_super_interface);
-  }
-
-  // Trivial case: field has type G<T0, ..., Tn> and value has type
-  // G<U0, ..., Un>. Check if type arguments match.
-  if (path.is_empty()) {
-    ASSERT(cls.raw() == field_type.type_class());
-    args = instance.GetTypeArguments();
-    // TODO(dartbug.com/34170) Evaluate if comparing relevant subvectors (that
-    // disregards superclass own arguments) improves precision of the
-    // tracking.
-    if (args.raw() == field_type_args.raw()) {
-      SetTrivialTypeExactness(*this, cls);
-      return true;
-    }
-
-    if (FLAG_trace_field_guards) {
-      THR_Print("  expected %s got %s type arguments\n",
-                field_type_args.ToCString(), args.ToCString());
-    }
-    set_static_type_exactness_state(StaticTypeExactnessState::NotExact());
-    return true;
-  }
-
-  // Value has type C<U0, ..., Un> and field has type G<T0, ..., Tn> and G != C.
-  // Compute C<X0, ..., Xn> at G (Xi are free type arguments).
-  // Path array contains a chain of immediate supertypes S0 <: S1 <: ... Sn,
-  // such that S0 is an immediate supertype of C and Sn is G<...>.
-  // Each Si might depend on type parameters of the previous supertype S{i-1}.
-  // To compute C<X0, ..., Xn> at G we walk the chain backwards and
-  // instantiate Si using type parameters of S{i-1} which gives us a type
-  // depending on type parameters of S{i-2}.
-  Error& error = Error::Handle();
-  AbstractType& type = AbstractType::Handle(path.Last()->raw());
-  for (intptr_t i = path.length() - 2; (i >= 0) && !type.IsInstantiated();
-       i--) {
-    args = path[i]->arguments();
-    type = type.InstantiateFrom(
-        args, TypeArguments::null_type_arguments(), kAllFree, &error,
-        /*instantiation_trail=*/nullptr, /*bound_trail=*/nullptr, Heap::kNew);
-  }
-
-  if (type.IsInstantiated()) {
-    // C<X0, ..., Xn> at G is fully instantiated and does not depend on
-    // Xi. In this case just check if type arguments match.
-    args = type.arguments();
-    if (args.Equals(field_type_args)) {
-      set_static_type_exactness_state(
-          is_super_class ? StaticTypeExactnessState::HasExactSuperClass()
-                         : StaticTypeExactnessState::HasExactSuperType());
-    } else {
-      if (FLAG_trace_field_guards) {
-        THR_Print(
-            "  expected %s got %s type arguments\n",
-            field_type_args.ToCString(),
-            TypeArguments::Handle(instance.GetTypeArguments()).ToCString());
-      }
-      set_static_type_exactness_state(StaticTypeExactnessState::NotExact());
-    }
-
-    // We are going from trivially exact to either super-exact or not-exact.
-    // In either of those case invalidate any code that might be depending
-    // on the field state.
-    return true;
-  }
-
-  // The most complicated case: C<X0, ..., Xn> at G depends on
-  // Xi values. To compare type arguments we would need to instantiate
-  // it fully from value's type arguments and compare with <U0, ..., Un>.
-  // However this would complicate fast path in the native code. To avoid this
-  // complication we would optimize for the trivial case: we check if
-  // C<X0, ..., Xn> at G is exactly G<X0, ..., Xn> which means we can simply
-  // compare values type arguements (<T0, ..., Tn>) to fields type arguments
-  // (<U0, ..., Un>) to establish if field type is exact.
-  ASSERT(cls.IsGeneric());
-  const intptr_t num_type_params = cls.NumTypeParameters();
-  bool trivial_case =
-      (num_type_params ==
-       Class::Handle(field_type.type_class()).NumTypeParameters()) &&
-      (instance.GetTypeArguments() == field_type.arguments());
-  if (!trivial_case && FLAG_trace_field_guards) {
-    THR_Print("Not a simple case: %" Pd " vs %" Pd
-              " type parameters, %s vs %s type arguments\n",
-              num_type_params,
-              Class::Handle(field_type.type_class()).NumTypeParameters(),
-              TypeArguments::Handle(instance.GetTypeArguments()).ToCString(),
-              field_type_args.ToCString());
-  }
-
-  AbstractType& type_arg = AbstractType::Handle();
-  args = type.arguments();
-  for (intptr_t i = 0; (i < num_type_params) && trivial_case; i++) {
-    type_arg = args.TypeAt(i);
-    if (!type_arg.IsTypeParameter() ||
-        (TypeParameter::Cast(type_arg).index() != i)) {
-      if (FLAG_trace_field_guards) {
-        THR_Print("  => encountered %s at index % " Pd "\n",
-                  type_arg.ToCString(), i);
-      }
-      trivial_case = false;
-    }
-  }
-
-  if (trivial_case) {
-    if (static_type_exactness_state().IsUninitialized()) {
-      SetTrivialTypeExactness(*this, cls);
-      return true;
-    }
-
-    // Nothing to do - already initialized and checked.
-    return false;
-  }
-
-  set_static_type_exactness_state(StaticTypeExactnessState::NotExact());
+  set_static_type_exactness_state(StaticTypeExactnessState::Compute(
+      field_type, instance, FLAG_trace_field_guards));
   return true;
 }
 
@@ -13662,7 +13736,7 @@
   Iterator iter(*this, RawPcDescriptors::kDeopt | RawPcDescriptors::kIcCall);
   while (iter.MoveNext()) {
     // 'deopt_id' is set for kDeopt and kIcCall and must be unique for one kind.
-    if (Thread::IsDeoptAfter(iter.DeoptId())) {
+    if (DeoptId::IsDeoptAfter(iter.DeoptId())) {
       // TODO(vegorov): some instructions contain multiple calls and have
       // multiple "after" targets recorded. Right now it is benign but might
       // lead to issues in the future. Fix that and enable verification.
@@ -14172,9 +14246,16 @@
   return reinterpret_cast<RawUnlinkedCall*>(raw);
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+void ICData::SetStaticReceiverType(const AbstractType& type) const {
+  StorePointer(&raw_ptr()->static_receiver_type_, type.raw());
+}
+#endif
+
 void ICData::ResetSwitchable(Zone* zone) const {
   ASSERT(NumArgsTested() == 1);
-  set_ic_data_array(Array::Handle(zone, CachedEmptyICDataArray(1)));
+  ASSERT(!IsTrackingExactness());
+  set_ic_data_array(Array::Handle(zone, CachedEmptyICDataArray(1, false)));
 }
 
 const char* ICData::ToCString() const {
@@ -14316,12 +14397,14 @@
   StoreNonPointer(&raw_ptr()->state_bits_, bits);
 }
 
-intptr_t ICData::TestEntryLengthFor(intptr_t num_args) {
-  return num_args + 1 /* target function*/ + 1 /* frequency */;
+intptr_t ICData::TestEntryLengthFor(intptr_t num_args,
+                                    bool tracking_exactness) {
+  return num_args + 1 /* target function*/ + 1 /* frequency */ +
+         (tracking_exactness ? 1 : 0) /* exactness state */;
 }
 
 intptr_t ICData::TestEntryLength() const {
-  return TestEntryLengthFor(NumArgsTested());
+  return TestEntryLengthFor(NumArgsTested(), IsTrackingExactness());
 }
 
 intptr_t ICData::Length() const {
@@ -14368,6 +14451,7 @@
 
 void ICData::WriteSentinel(const Array& data, intptr_t test_entry_length) {
   ASSERT(!data.IsNull());
+  RELEASE_ASSERT(smi_illegal_cid().Value() == kIllegalCid);
   for (intptr_t i = 1; i <= test_entry_length; i++) {
     data.SetAt(data.Length() - i, smi_illegal_cid());
   }
@@ -14592,6 +14676,7 @@
 void ICData::AddCheck(const GrowableArray<intptr_t>& class_ids,
                       const Function& target,
                       intptr_t count) const {
+  ASSERT(!IsTrackingExactness());
   ASSERT(!target.IsNull());
   ASSERT((target.name() == target_name()) || ValidateInterceptor(target));
   DEBUG_ASSERT(!HasCheck(class_ids));
@@ -14636,7 +14721,7 @@
   ASSERT(!target.IsNull());
   data.SetAt(data_pos++, target);
   value = Smi::New(count);
-  data.SetAt(data_pos, value);
+  data.SetAt(data_pos++, value);
   // Multithreaded access to ICData requires setting of array to be the last
   // operation.
   set_ic_data_array(data);
@@ -14689,7 +14774,8 @@
 
 void ICData::AddReceiverCheck(intptr_t receiver_class_id,
                               const Function& target,
-                              intptr_t count) const {
+                              intptr_t count,
+                              StaticTypeExactnessState exactness) const {
 #if defined(DEBUG)
   GrowableArray<intptr_t> class_ids(1);
   class_ids.Add(receiver_class_id);
@@ -14715,6 +14801,9 @@
   if (Isolate::Current()->compilation_allowed()) {
     data.SetAt(data_pos + 1, target);
     data.SetAt(data_pos + 2, Smi::Handle(Smi::New(count)));
+    if (IsTrackingExactness()) {
+      data.SetAt(data_pos + 3, Smi::Handle(Smi::New(exactness.Encode())));
+    }
   } else {
     // Precompilation only, after all functions have been compiled.
     ASSERT(target.HasCode());
@@ -14729,6 +14818,16 @@
   set_ic_data_array(data);
 }
 
+StaticTypeExactnessState ICData::GetExactnessAt(intptr_t index) const {
+  if (!IsTrackingExactness()) {
+    return StaticTypeExactnessState::NotTracking();
+  }
+  const Array& data = Array::Handle(ic_data());
+  intptr_t data_pos = index * TestEntryLength();
+  return StaticTypeExactnessState::Decode(
+      Smi::Value(Smi::RawCast(data.At(data_pos + NumArgsTested() + 2))));
+}
+
 void ICData::GetCheckAt(intptr_t index,
                         GrowableArray<intptr_t>* class_ids,
                         Function* target) const {
@@ -14879,6 +14978,7 @@
   data.SetAt(data_pos, value);
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
 RawFunction* ICData::GetTargetForReceiverClassId(intptr_t class_id,
                                                  intptr_t* count_return) const {
   const intptr_t len = NumberOfChecks();
@@ -15071,6 +15171,7 @@
     }
   }
 }
+#endif
 
 bool ICData::IsUsedAt(intptr_t i) const {
   if (GetCountAt(i) <= 0) {
@@ -15089,24 +15190,39 @@
 }
 
 void ICData::InitOnce() {
-  for (int i = 0; i < kCachedICDataArrayCount; i++) {
-    cached_icdata_arrays_[i] = ICData::NewNonCachedEmptyICDataArray(i);
+  for (int i = 0; i <= kCachedICDataMaxArgsTestedWithoutExactnessTracking;
+       i++) {
+    cached_icdata_arrays_
+        [kCachedICDataZeroArgTestedWithoutExactnessTrackingIdx + i] =
+            ICData::NewNonCachedEmptyICDataArray(i, false);
   }
+  cached_icdata_arrays_[kCachedICDataOneArgWithExactnessTrackingIdx] =
+      ICData::NewNonCachedEmptyICDataArray(1, true);
 }
 
-RawArray* ICData::NewNonCachedEmptyICDataArray(intptr_t num_args_tested) {
+RawArray* ICData::NewNonCachedEmptyICDataArray(intptr_t num_args_tested,
+                                               bool tracking_exactness) {
   // IC data array must be null terminated (sentinel entry).
-  const intptr_t len = TestEntryLengthFor(num_args_tested);
+  const intptr_t len = TestEntryLengthFor(num_args_tested, tracking_exactness);
   const Array& array = Array::Handle(Array::New(len, Heap::kOld));
   WriteSentinel(array, len);
   array.MakeImmutable();
   return array.raw();
 }
 
-RawArray* ICData::CachedEmptyICDataArray(intptr_t num_args_tested) {
-  ASSERT(num_args_tested >= 0);
-  ASSERT(num_args_tested < kCachedICDataArrayCount);
-  return cached_icdata_arrays_[num_args_tested];
+RawArray* ICData::CachedEmptyICDataArray(intptr_t num_args_tested,
+                                         bool tracking_exactness) {
+  if (tracking_exactness) {
+    ASSERT(num_args_tested == 1);
+    return cached_icdata_arrays_[kCachedICDataOneArgWithExactnessTrackingIdx];
+  } else {
+    ASSERT(num_args_tested >= 0);
+    ASSERT(num_args_tested <=
+           kCachedICDataMaxArgsTestedWithoutExactnessTracking);
+    return cached_icdata_arrays_
+        [kCachedICDataZeroArgTestedWithoutExactnessTrackingIdx +
+         num_args_tested];
+  }
 }
 
 // Does not initialize ICData array.
@@ -15116,7 +15232,8 @@
                                  const Array& arguments_descriptor,
                                  intptr_t deopt_id,
                                  intptr_t num_args_tested,
-                                 RebindRule rebind_rule) {
+                                 RebindRule rebind_rule,
+                                 const AbstractType& static_receiver_type) {
   ASSERT(!owner.IsNull());
   ASSERT(!target_name.IsNull());
   ASSERT(!arguments_descriptor.IsNull());
@@ -15140,6 +15257,7 @@
 #endif
   result.set_rebind_rule(rebind_rule);
   result.SetNumArgsTested(num_args_tested);
+  NOT_IN_PRECOMPILED(result.SetStaticReceiverType(static_receiver_type));
   return result.raw();
 }
 
@@ -15157,7 +15275,7 @@
     NoSafepointScope no_safepoint;
     result ^= raw;
   }
-  result.set_deopt_id(Thread::kNoDeoptId);
+  result.set_deopt_id(DeoptId::kNone);
   result.set_state_bits(0);
 #if defined(TAG_IC_DATA)
   result.set_tag(ICData::Tag::kUnknown);
@@ -15170,21 +15288,26 @@
                        const Array& arguments_descriptor,
                        intptr_t deopt_id,
                        intptr_t num_args_tested,
-                       RebindRule rebind_rule) {
+                       RebindRule rebind_rule,
+                       const AbstractType& static_receiver_type) {
   Zone* zone = Thread::Current()->zone();
   const ICData& result = ICData::Handle(
-      zone, NewDescriptor(zone, owner, target_name, arguments_descriptor,
-                          deopt_id, num_args_tested, rebind_rule));
-  result.set_ic_data_array(
-      Array::Handle(zone, CachedEmptyICDataArray(num_args_tested)));
+      zone,
+      NewDescriptor(zone, owner, target_name, arguments_descriptor, deopt_id,
+                    num_args_tested, rebind_rule, static_receiver_type));
+  result.set_ic_data_array(Array::Handle(
+      zone,
+      CachedEmptyICDataArray(num_args_tested, result.IsTrackingExactness())));
   return result.raw();
 }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
 RawICData* ICData::NewFrom(const ICData& from, intptr_t num_args_tested) {
   const ICData& result = ICData::Handle(ICData::New(
       Function::Handle(from.Owner()), String::Handle(from.target_name()),
       Array::Handle(from.arguments_descriptor()), from.deopt_id(),
-      num_args_tested, from.rebind_rule()));
+      num_args_tested, from.rebind_rule(),
+      AbstractType::Handle(from.StaticReceiverType())));
   // Copy deoptimization reasons.
   result.SetDeoptReasons(from.DeoptReasons());
   return result.raw();
@@ -15196,7 +15319,8 @@
       zone, Function::Handle(zone, from.Owner()),
       String::Handle(zone, from.target_name()),
       Array::Handle(zone, from.arguments_descriptor()), from.deopt_id(),
-      from.NumArgsTested(), from.rebind_rule()));
+      from.NumArgsTested(), from.rebind_rule(),
+      AbstractType::Handle(from.StaticReceiverType())));
   // Clone entry array.
   const Array& from_array = Array::Handle(zone, from.ic_data());
   const intptr_t len = from_array.Length();
@@ -15211,6 +15335,7 @@
   result.SetDeoptReasons(from.DeoptReasons());
   return result.raw();
 }
+#endif
 
 Code::Comments& Code::Comments::New(intptr_t count) {
   Comments* comments;
@@ -15595,32 +15720,17 @@
       compiler == nullptr ? 0 : compiler->UncheckedEntryOffset()));
   INC_STAT(Thread::Current(), total_instr_size, assembler->CodeSize());
   INC_STAT(Thread::Current(), total_code_size, assembler->CodeSize());
-
-  // Copy the instructions into the instruction area and apply all fixups.
-  // Embedded pointers are still in handles at this point.
-  MemoryRegion region(reinterpret_cast<void*>(instrs.PayloadStart()),
-                      instrs.Size());
-  assembler->FinalizeInstructions(region);
-  CPU::FlushICache(instrs.PayloadStart(), instrs.Size());
-
-#if defined(DART_PRECOMPILER)
-  if (stats != nullptr) {
-    stats->Finalize();
-    instrs.set_stats(stats);
-  }
-#endif
-
-  const Code::Comments& comments = assembler->GetCodeComments();
-
-  code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
-#ifndef PRODUCT
-  CodeCommentsWrapper comments_wrapper(comments);
-  CodeObservers::NotifyAll(name, instrs.PayloadStart(),
-                           assembler->prologue_offset(), instrs.Size(),
-                           optimized, &comments_wrapper);
-#endif
+  // Important: if GC is triggerred at any point between Instructions::New
+  // and here it would write protect instructions object that we are trying
+  // to fill in.
   {
     NoSafepointScope no_safepoint;
+    // Copy the instructions into the instruction area and apply all fixups.
+    // Embedded pointers are still in handles at this point.
+    MemoryRegion region(reinterpret_cast<void*>(instrs.PayloadStart()),
+                        instrs.Size());
+    assembler->FinalizeInstructions(region);
+
     const ZoneGrowableArray<intptr_t>& pointer_offsets =
         assembler->GetPointerOffsets();
     ASSERT(pointer_offsets.length() == pointer_offset_count);
@@ -15632,9 +15742,14 @@
       intptr_t offset_in_instrs = pointer_offsets[i];
       code.SetPointerOffsetAt(i, offset_in_instrs);
       uword addr = region.start() + offset_in_instrs;
+      ASSERT(instrs.PayloadStart() <= addr);
+      ASSERT((instrs.PayloadStart() + instrs.Size()) > addr);
       const Object* object = *reinterpret_cast<Object**>(addr);
-      instrs.raw()->StorePointer(reinterpret_cast<RawObject**>(addr),
-                                 object->raw());
+      ASSERT(object->IsOld());
+      // N.B. The pointer is embedded in the Instructions object, but visited
+      // through the Code object.
+      code.raw()->StorePointer(reinterpret_cast<RawObject**>(addr),
+                               object->raw());
     }
 
     // Hook up Code and Instructions objects.
@@ -15653,6 +15768,24 @@
                              instrs.raw()->Size(), VirtualMemory::kReadExecute);
     }
   }
+  CPU::FlushICache(instrs.PayloadStart(), instrs.Size());
+
+#if defined(DART_PRECOMPILER)
+  if (stats != nullptr) {
+    stats->Finalize();
+    instrs.set_stats(stats);
+  }
+#endif
+
+  const Code::Comments& comments = assembler->GetCodeComments();
+
+  code.set_compile_timestamp(OS::GetCurrentMonotonicMicros());
+#ifndef PRODUCT
+  CodeCommentsWrapper comments_wrapper(comments);
+  CodeObservers::NotifyAll(name, instrs.PayloadStart(),
+                           assembler->prologue_offset(), instrs.Size(),
+                           optimized, &comments_wrapper);
+#endif
   code.set_comments(comments);
   if (assembler->prologue_offset() >= 0) {
     code.SetPrologueOffset(assembler->prologue_offset());
@@ -15822,7 +15955,7 @@
       return iter.DeoptId();
     }
   }
-  return Thread::kNoDeoptId;
+  return DeoptId::kNone;
 }
 
 const char* Code::ToCString() const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 9628163..6fbd389 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -347,93 +347,6 @@
 
   static RawObject* null() { return null_; }
 
-  static const Object& null_object() {
-    ASSERT(null_object_ != NULL);
-    return *null_object_;
-  }
-  static const Array& null_array() {
-    ASSERT(null_array_ != NULL);
-    return *null_array_;
-  }
-  static const String& null_string() {
-    ASSERT(null_string_ != NULL);
-    return *null_string_;
-  }
-  static const Instance& null_instance() {
-    ASSERT(null_instance_ != NULL);
-    return *null_instance_;
-  }
-  static const Function& null_function() {
-    ASSERT(null_function_ != NULL);
-    return *null_function_;
-  }
-  static const TypeArguments& null_type_arguments() {
-    ASSERT(null_type_arguments_ != NULL);
-    return *null_type_arguments_;
-  }
-  static const TypeArguments& empty_type_arguments() {
-    ASSERT(empty_type_arguments_ != NULL);
-    return *empty_type_arguments_;
-  }
-
-  static const Array& empty_array() {
-    ASSERT(empty_array_ != NULL);
-    return *empty_array_;
-  }
-  static const Array& zero_array() {
-    ASSERT(zero_array_ != NULL);
-    return *zero_array_;
-  }
-
-  static const ContextScope& empty_context_scope() {
-    ASSERT(empty_context_scope_ != NULL);
-    return *empty_context_scope_;
-  }
-
-  static const ObjectPool& empty_object_pool() {
-    ASSERT(empty_object_pool_ != NULL);
-    return *empty_object_pool_;
-  }
-
-  static const PcDescriptors& empty_descriptors() {
-    ASSERT(empty_descriptors_ != NULL);
-    return *empty_descriptors_;
-  }
-
-  static const LocalVarDescriptors& empty_var_descriptors() {
-    ASSERT(empty_var_descriptors_ != NULL);
-    return *empty_var_descriptors_;
-  }
-
-  static const ExceptionHandlers& empty_exception_handlers() {
-    ASSERT(empty_exception_handlers_ != NULL);
-    return *empty_exception_handlers_;
-  }
-
-  static const Array& extractor_parameter_types() {
-    ASSERT(extractor_parameter_types_ != NULL);
-    return *extractor_parameter_types_;
-  }
-
-  static const Array& extractor_parameter_names() {
-    ASSERT(extractor_parameter_names_ != NULL);
-    return *extractor_parameter_names_;
-  }
-
-  // The sentinel is a value that cannot be produced by Dart code.
-  // It can be used to mark special values, for example to distinguish
-  // "uninitialized" fields.
-  static const Instance& sentinel() {
-    ASSERT(sentinel_ != NULL);
-    return *sentinel_;
-  }
-  // Value marking that we are transitioning from sentinel, e.g., computing
-  // a field value. Used to detect circular initialization.
-  static const Instance& transition_sentinel() {
-    ASSERT(transition_sentinel_ != NULL);
-    return *transition_sentinel_;
-  }
-
 #if defined(HASH_IN_OBJECT_HEADER)
   static uint32_t GetCachedHash(const RawObject* obj) {
     return obj->ptr()->hash_;
@@ -444,61 +357,56 @@
   }
 #endif
 
-  // Compiler's constant propagation constants.
-  static const Instance& unknown_constant() {
-    ASSERT(unknown_constant_ != NULL);
-    return *unknown_constant_;
-  }
-  static const Instance& non_constant() {
-    ASSERT(non_constant_ != NULL);
-    return *non_constant_;
-  }
+  // The list below enumerates read-only handles for singleton
+  // objects that are shared between the different isolates.
+  //
+  // - sentinel is a value that cannot be produced by Dart code. It can be used
+  // to mark special values, for example to distinguish "uninitialized" fields.
+  // - transition_sentinel is a value marking that we are transitioning from
+  // sentinel, e.g., computing a field value. Used to detect circular
+  // initialization.
+  // - unknown_constant and non_constant are optimizing compiler's constant
+  // propagation constants.
+#define SHARED_READONLY_HANDLES_LIST(V)                                        \
+  V(Object, null_object)                                                       \
+  V(Array, null_array)                                                         \
+  V(String, null_string)                                                       \
+  V(Instance, null_instance)                                                   \
+  V(Function, null_function)                                                   \
+  V(TypeArguments, null_type_arguments)                                        \
+  V(TypeArguments, empty_type_arguments)                                       \
+  V(Array, empty_array)                                                        \
+  V(Array, zero_array)                                                         \
+  V(ContextScope, empty_context_scope)                                         \
+  V(ObjectPool, empty_object_pool)                                             \
+  V(PcDescriptors, empty_descriptors)                                          \
+  V(LocalVarDescriptors, empty_var_descriptors)                                \
+  V(ExceptionHandlers, empty_exception_handlers)                               \
+  V(Array, extractor_parameter_types)                                          \
+  V(Array, extractor_parameter_names)                                          \
+  V(Instance, sentinel)                                                        \
+  V(Instance, transition_sentinel)                                             \
+  V(Instance, unknown_constant)                                                \
+  V(Instance, non_constant)                                                    \
+  V(Bool, bool_true)                                                           \
+  V(Bool, bool_false)                                                          \
+  V(Smi, smi_illegal_cid)                                                      \
+  V(LanguageError, snapshot_writer_error)                                      \
+  V(LanguageError, branch_offset_error)                                        \
+  V(LanguageError, speculative_inlining_error)                                 \
+  V(LanguageError, background_compilation_error)                               \
+  V(Array, vm_isolate_snapshot_object_table)                                   \
+  V(Type, dynamic_type)                                                        \
+  V(Type, void_type)                                                           \
+  V(AbstractType, null_abstract_type)
 
-  static const Bool& bool_true() {
-    ASSERT(bool_true_ != NULL);
-    return *bool_true_;
+#define DEFINE_SHARED_READONLY_HANDLE_GETTER(Type, name)                       \
+  static const Type& name() {                                                  \
+    ASSERT(name##_ != nullptr);                                                \
+    return *name##_;                                                           \
   }
-  static const Bool& bool_false() {
-    ASSERT(bool_false_ != NULL);
-    return *bool_false_;
-  }
-
-  static const Smi& smi_illegal_cid() {
-    ASSERT(smi_illegal_cid_ != NULL);
-    return *smi_illegal_cid_;
-  }
-  static const LanguageError& snapshot_writer_error() {
-    ASSERT(snapshot_writer_error_ != NULL);
-    return *snapshot_writer_error_;
-  }
-
-  static const LanguageError& branch_offset_error() {
-    ASSERT(branch_offset_error_ != NULL);
-    return *branch_offset_error_;
-  }
-
-  static const LanguageError& speculative_inlining_error() {
-    ASSERT(speculative_inlining_error_ != NULL);
-    return *speculative_inlining_error_;
-  }
-
-  static const LanguageError& background_compilation_error() {
-    ASSERT(background_compilation_error_ != NULL);
-    return *background_compilation_error_;
-  }
-
-  static const Array& vm_isolate_snapshot_object_table() {
-    ASSERT(vm_isolate_snapshot_object_table_ != NULL);
-    return *vm_isolate_snapshot_object_table_;
-  }
-  static const Type& dynamic_type() {
-    ASSERT(dynamic_type_ != NULL);
-    return *dynamic_type_;
-  }
-  static const Type& void_type() {
-    ASSERT(void_type_ != NULL);
-    return *void_type_;
-  }
+  SHARED_READONLY_HANDLES_LIST(DEFINE_SHARED_READONLY_HANDLE_GETTER)
+#undef DEFINE_SHARED_READONLY_HANDLE_GETTER
 
   static void set_vm_isolate_snapshot_object_table(const Array& table);
 
@@ -512,6 +420,9 @@
   static RawClass* closure_data_class() { return closure_data_class_; }
   static RawClass* signature_data_class() { return signature_data_class_; }
   static RawClass* redirection_data_class() { return redirection_data_class_; }
+  static RawClass* native_entry_data_class() {
+    return native_entry_data_class_;
+  }
   static RawClass* field_class() { return field_class_; }
   static RawClass* literal_token_class() { return literal_token_class_; }
   static RawClass* token_stream_class() { return token_stream_class_; }
@@ -777,6 +688,7 @@
   static RawClass* closure_data_class_;    // Class of ClosureData vm obj.
   static RawClass* signature_data_class_;  // Class of SignatureData vm obj.
   static RawClass* redirection_data_class_;  // Class of RedirectionData vm obj.
+  static RawClass* native_entry_data_class_;  // Class of NativeEntryData.
   static RawClass* field_class_;             // Class of the Field vm object.
   static RawClass* literal_token_class_;     // Class of LiteralToken vm object.
   static RawClass* token_stream_class_;  // Class of the TokenStream vm object.
@@ -806,38 +718,9 @@
   static RawClass* unhandled_exception_class_;  // Class of UnhandledException.
   static RawClass* unwind_error_class_;         // Class of UnwindError.
 
-  // The static values below are read-only handle pointers for singleton
-  // objects that are shared between the different isolates.
-  static Object* null_object_;
-  static Array* null_array_;
-  static String* null_string_;
-  static Instance* null_instance_;
-  static Function* null_function_;
-  static TypeArguments* null_type_arguments_;
-  static TypeArguments* empty_type_arguments_;
-  static Array* empty_array_;
-  static Array* zero_array_;
-  static ContextScope* empty_context_scope_;
-  static ObjectPool* empty_object_pool_;
-  static PcDescriptors* empty_descriptors_;
-  static LocalVarDescriptors* empty_var_descriptors_;
-  static ExceptionHandlers* empty_exception_handlers_;
-  static Array* extractor_parameter_types_;
-  static Array* extractor_parameter_names_;
-  static Instance* sentinel_;
-  static Instance* transition_sentinel_;
-  static Instance* unknown_constant_;
-  static Instance* non_constant_;
-  static Bool* bool_true_;
-  static Bool* bool_false_;
-  static Smi* smi_illegal_cid_;
-  static LanguageError* snapshot_writer_error_;
-  static LanguageError* branch_offset_error_;
-  static LanguageError* speculative_inlining_error_;
-  static LanguageError* background_compilation_error_;
-  static Array* vm_isolate_snapshot_object_table_;
-  static Type* dynamic_type_;
-  static Type* void_type_;
+#define DECLARE_SHARED_READONLY_HANDLE(Type, name) static Type* name##_;
+  SHARED_READONLY_HANDLES_LIST(DECLARE_SHARED_READONLY_HANDLE)
+#undef DECLARE_SHARED_READONLY_HANDLE
 
   friend void ClassTable::Register(const Class& cls);
   friend void RawObject::Validate(Isolate* isolate) const;
@@ -1783,6 +1666,134 @@
   friend class Class;
 };
 
+// Representation of a state of runtime tracking of static type exactness for
+// a particular location in the program (e.g. exactness of type annotation
+// on a field).
+//
+// Given the static type G<T0, ..., Tn> we say that it is exact iff any
+// values that can be observed at this location has runtime type T such that
+// type arguments of T at G are exactly <T0, ..., Tn>.
+//
+// Currently we only support tracking for locations that are also known
+// to be monomorphic with respect to the actual class of the values it contains.
+//
+// Important: locations should never switch from tracked (kIsTriviallyExact,
+// kHasExactSuperType, kHasExactSuperClass, kNotExact) to not tracked
+// (kNotTracking) or the other way around because that would affect unoptimized
+// graphs generated by graph builder and skew deopt ids.
+class StaticTypeExactnessState final {
+ public:
+  // Values stored in the location with static type G<T0, ..., Tn> are all
+  // instances of C<T0, ..., Tn> and C<U0, ..., Un> at G has type parameters
+  // <U0, ..., Un>.
+  //
+  // For trivially exact types we can simply compare type argument
+  // vectors as pointers to check exactness. That's why we represent
+  // trivially exact locations as offset in words to the type arguments of
+  // class C. All other states are represented as non-positive values.
+  //
+  // Note: we are ignoring the type argument vector sharing optimization for
+  // now.
+  static inline StaticTypeExactnessState TriviallyExact(
+      intptr_t type_arguments_offset) {
+    ASSERT((type_arguments_offset > 0) &&
+           Utils::IsAligned(type_arguments_offset, kWordSize) &&
+           Utils::IsInt(8, type_arguments_offset / kWordSize));
+    return StaticTypeExactnessState(type_arguments_offset / kWordSize);
+  }
+
+  static inline bool CanRepresentAsTriviallyExact(
+      intptr_t type_arguments_offset) {
+    return Utils::IsInt(8, type_arguments_offset / kWordSize);
+  }
+
+  // Values stored in the location with static type G<T0, ..., Tn> are all
+  // instances of class C<...> and C<U0, ..., Un> at G has type
+  // parameters <T0, ..., Tn> for any <U0, ..., Un> - that is C<...> has a
+  // supertype G<T0, ..., Tn>.
+  //
+  // For such locations we can simply check if the value stored
+  // is an instance of an expected class and we don't have to look at
+  // type arguments carried by the instance.
+  //
+  // We distinguish situations where we know that G is a superclass of C from
+  // situations where G might be superinterface of C - because in the first
+  // type arguments of G give us constant prefix of type arguments of C.
+  static inline StaticTypeExactnessState HasExactSuperType() {
+    return StaticTypeExactnessState(kHasExactSuperType);
+  }
+
+  static inline StaticTypeExactnessState HasExactSuperClass() {
+    return StaticTypeExactnessState(kHasExactSuperClass);
+  }
+
+  // Values stored in the location don't fall under either kIsTriviallyExact
+  // or kHasExactSuperType categories.
+  //
+  // Note: that does not imply that static type annotation is not exact
+  // according to a broader definition, e.g. location might simply be
+  // polymorphic and store instances of multiple different types.
+  // However for simplicity we don't track such cases yet.
+  static inline StaticTypeExactnessState NotExact() {
+    return StaticTypeExactnessState(kNotExact);
+  }
+
+  // The location does not track exactness of its static type at runtime.
+  static inline StaticTypeExactnessState NotTracking() {
+    return StaticTypeExactnessState(kNotTracking);
+  }
+
+  static inline StaticTypeExactnessState Unitialized() {
+    return StaticTypeExactnessState(kUninitialized);
+  }
+
+  static StaticTypeExactnessState Compute(const Type& static_type,
+                                          const Instance& value,
+                                          bool print_trace = false);
+
+  bool IsTracking() const { return value_ != kNotTracking; }
+  bool IsUninitialized() const { return value_ == kUninitialized; }
+  bool IsHasExactSuperClass() const { return value_ == kHasExactSuperClass; }
+  bool IsHasExactSuperType() const { return value_ == kHasExactSuperType; }
+  bool IsTriviallyExact() const { return value_ > kUninitialized; }
+  bool NeedsFieldGuard() const { return value_ >= kUninitialized; }
+  bool IsExactOrUninitialized() const { return value_ > kNotExact; }
+  bool IsExact() const {
+    return IsTriviallyExact() || IsHasExactSuperType() ||
+           IsHasExactSuperClass();
+  }
+
+  const char* ToCString() const;
+
+  StaticTypeExactnessState CollapseSuperTypeExactness() const {
+    return IsHasExactSuperClass() ? HasExactSuperType() : *this;
+  }
+
+  static inline StaticTypeExactnessState Decode(int8_t value) {
+    return StaticTypeExactnessState(value);
+  }
+
+  int8_t Encode() const { return value_; }
+  intptr_t GetTypeArgumentsOffsetInWords() const {
+    ASSERT(IsTriviallyExact());
+    return value_;
+  }
+
+  static constexpr int8_t kUninitialized = 0;
+
+ private:
+  static constexpr int8_t kNotTracking = -4;
+  static constexpr int8_t kNotExact = -3;
+  static constexpr int8_t kHasExactSuperType = -2;
+  static constexpr int8_t kHasExactSuperClass = -1;
+
+  explicit StaticTypeExactnessState(int8_t value) : value_(value) {}
+
+  int8_t value_;
+
+  DISALLOW_ALLOCATION();
+};
+
 // Object holding information about an IC: test classes and their
 // corresponding targets. The owner of the ICData can be either the function
 // or the original ICData object. In case of background compilation we
@@ -1821,6 +1832,18 @@
 
   bool IsImmutable() const;
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  RawAbstractType* StaticReceiverType() const {
+    return raw_ptr()->static_receiver_type_;
+  }
+  void SetStaticReceiverType(const AbstractType& type) const;
+  bool IsTrackingExactness() const {
+    return StaticReceiverType() != Object::null();
+  }
+#else
+  bool IsTrackingExactness() const { return false; }
+#endif
+
   void Reset(Zone* zone) const;
   void ResetSwitchable(Zone* zone) const;
 
@@ -1922,6 +1945,12 @@
 
   static intptr_t owner_offset() { return OFFSET_OF(RawICData, owner_); }
 
+#if !defined(DART_PRECOMPILED_RUNTIME)
+  static intptr_t static_receiver_type_offset() {
+    return OFFSET_OF(RawICData, static_receiver_type_);
+  }
+#endif
+
   // Replaces entry |index| with the sentinel.
   void WriteSentinelAt(intptr_t index) const;
 
@@ -1955,11 +1984,16 @@
   void AddCheck(const GrowableArray<intptr_t>& class_ids,
                 const Function& target,
                 intptr_t count = 1) const;
+
+  StaticTypeExactnessState GetExactnessAt(intptr_t count) const;
+
   // Adds sorted so that Smi is the first class-id. Use only for
   // num_args_tested == 1.
   void AddReceiverCheck(intptr_t receiver_class_id,
                         const Function& target,
-                        intptr_t count = 1) const;
+                        intptr_t count = 1,
+                        StaticTypeExactnessState exactness =
+                            StaticTypeExactnessState::NotTracking()) const;
 
   // Does entry |index| contain the sentinel value?
   bool IsSentinelAt(intptr_t index) const;
@@ -2016,18 +2050,25 @@
   bool HasOneTarget() const;
   bool HasReceiverClassId(intptr_t class_id) const;
 
-  static RawICData* New(const Function& owner,
-                        const String& target_name,
-                        const Array& arguments_descriptor,
-                        intptr_t deopt_id,
-                        intptr_t num_args_tested,
-                        RebindRule rebind_rule);
+  // Note: passing non-null receiver_type enables exactness tracking for
+  // the receiver type. Receiver type is expected to be a fully
+  // instantiated generic (but not a FutureOr).
+  // See StaticTypeExactnessState for more information.
+  static RawICData* New(
+      const Function& owner,
+      const String& target_name,
+      const Array& arguments_descriptor,
+      intptr_t deopt_id,
+      intptr_t num_args_tested,
+      RebindRule rebind_rule,
+      const AbstractType& receiver_type = Object::null_abstract_type());
   static RawICData* NewFrom(const ICData& from, intptr_t num_args_tested);
 
   // Generates a new ICData with descriptor and data array copied (deep clone).
   static RawICData* Clone(const ICData& from);
 
-  static intptr_t TestEntryLengthFor(intptr_t num_args);
+  static intptr_t TestEntryLengthFor(intptr_t num_args,
+                                     bool tracking_exactness);
 
   static intptr_t TargetIndexFor(intptr_t num_args) { return num_args; }
   static intptr_t CodeIndexFor(intptr_t num_args) { return num_args; }
@@ -2036,6 +2077,9 @@
   static intptr_t EntryPointIndexFor(intptr_t num_args) {
     return (num_args + 1);
   }
+  static intptr_t ExactnessOffsetFor(intptr_t num_args) {
+    return (num_args + 2);
+  }
 
   bool IsUsedAt(intptr_t i) const;
 
@@ -2048,7 +2092,16 @@
   // Initialize the preallocated empty ICData entry arrays.
   static void InitOnce();
 
-  enum { kCachedICDataArrayCount = 4 };
+  // We cache ICData with 0, 1, 2 arguments tested without exactness
+  // tracking and with 1 argument tested with exactness tracking.
+  enum {
+    kCachedICDataZeroArgTestedWithoutExactnessTrackingIdx = 0,
+    kCachedICDataMaxArgsTestedWithoutExactnessTracking = 2,
+    kCachedICDataOneArgWithExactnessTrackingIdx =
+        kCachedICDataZeroArgTestedWithoutExactnessTrackingIdx +
+        kCachedICDataMaxArgsTestedWithoutExactnessTracking + 1,
+    kCachedICDataArrayCount = kCachedICDataOneArgWithExactnessTrackingIdx + 1,
+  };
 
 #if defined(TAG_IC_DATA)
   using Tag = RawICData::Tag;
@@ -2102,15 +2155,18 @@
 #endif  // DEBUG
 
   intptr_t TestEntryLength() const;
-  static RawArray* NewNonCachedEmptyICDataArray(intptr_t num_args_tested);
-  static RawArray* CachedEmptyICDataArray(intptr_t num_args_tested);
+  static RawArray* NewNonCachedEmptyICDataArray(intptr_t num_args_tested,
+                                                bool tracking_exactness);
+  static RawArray* CachedEmptyICDataArray(intptr_t num_args_tested,
+                                          bool tracking_exactness);
   static RawICData* NewDescriptor(Zone* zone,
                                   const Function& owner,
                                   const String& target_name,
                                   const Array& arguments_descriptor,
                                   intptr_t deopt_id,
                                   intptr_t num_args_tested,
-                                  RebindRule rebind_rule);
+                                  RebindRule rebind_rule,
+                                  const AbstractType& receiver_type);
 
   static void WriteSentinel(const Array& data, intptr_t test_entry_length);
 
@@ -2482,7 +2538,7 @@
 
   bool NeedsArgumentTypeChecks(Isolate* I) const {
     if (I->strong()) {
-      if (FLAG_omit_strong_type_checks) {
+      if (!I->should_emit_strong_mode_checks()) {
         return false;
       }
       return IsClosureFunction() ||
@@ -3160,114 +3216,37 @@
   friend class HeapProfiler;
 };
 
-// Representation of a state of runtime tracking of static type exactness for
-// a particular location in the program (e.g. exactness of type annotation
-// on a field).
-//
-// Given the static type G<T0, ..., Tn> we say that it is exact iff any
-// values that can be observed at this location has runtime type T such that
-// type arguments of T at G are exactly <T0, ..., Tn>.
-//
-// Currently we only support tracking for locations that are also known
-// to be monomorphic with respect to the actual class of the values it contains.
-//
-// Important: locations should never switch from tracked (kIsTriviallyExact,
-// kHasExactSuperType, kHasExactSuperClass, kNotExact) to not tracked
-// (kNotTracking) or the other way around because that would affect unoptimized
-// graphs generated by graph builder and skew deopt ids.
-class StaticTypeExactnessState final {
+class NativeEntryData : public Object {
  public:
-  // Values stored in the location with static type G<T0, ..., Tn> are all
-  // instances of C<T0, ..., Tn> and C<U0, ..., Un> at G has type parameters
-  // <U0, ..., Un>.
-  //
-  // For trivially exact types we can simply compare type argument
-  // vectors as pointers to check exactness. That's why we represent
-  // trivially exact locations as offset in words to the type arguments of
-  // class C. All other states are represented as non-positive values.
-  //
-  // Note: we are ignoring the type argument vector sharing optimization for
-  // now.
-  static inline StaticTypeExactnessState TriviallyExact(
-      intptr_t type_arguments_offset) {
-    ASSERT((type_arguments_offset > 0) &&
-           Utils::IsAligned(type_arguments_offset, kWordSize) &&
-           Utils::IsInt(8, type_arguments_offset / kWordSize));
-    return StaticTypeExactnessState(type_arguments_offset / kWordSize);
+  static intptr_t InstanceSize() {
+    return RoundedAllocationSize(sizeof(RawNativeEntryData));
   }
 
-  static inline bool CanRepresentAsTriviallyExact(
-      intptr_t type_arguments_offset) {
-    return Utils::IsInt(8, type_arguments_offset / kWordSize);
+  MethodRecognizer::Kind kind() const { return raw_ptr()->kind_; }
+  void set_kind(MethodRecognizer::Kind value) const {
+    StoreNonPointer(&raw_ptr()->kind_, value);
   }
 
-  // Values stored in the location with static type G<T0, ..., Tn> are all
-  // instances of class C<...> and C<U0, ..., Un> at G has type
-  // parameters <T0, ..., Tn> for any <U0, ..., Un> - that is C<...> has a
-  // supertype G<T0, ..., Tn>.
-  //
-  // For such locations we can simply check if the value stored
-  // is an instance of an expected class and we don't have to look at
-  // type arguments carried by the instance.
-  //
-  // We distinguish situations where we know that G is a superclass of C from
-  // situations where G might be superinterface of C - because in the first
-  // type arguments of G give us constant prefix of type arguments of C.
-  static inline StaticTypeExactnessState HasExactSuperType() {
-    return StaticTypeExactnessState(kHasExactSuperType);
+  NativeFunctionWrapper trampoline() const { return raw_ptr()->trampoline_; }
+  void set_trampoline(NativeFunctionWrapper value) const {
+    StoreNonPointer(&raw_ptr()->trampoline_, value);
   }
 
-  static inline StaticTypeExactnessState HasExactSuperClass() {
-    return StaticTypeExactnessState(kHasExactSuperClass);
+  NativeFunction native_function() const { return raw_ptr()->native_function_; }
+  void set_native_function(NativeFunction value) const {
+    StoreNonPointer(&raw_ptr()->native_function_, value);
   }
 
-  // Values stored in the location don't fall under either kIsTriviallyExact
-  // or kHasExactSuperType categories.
-  //
-  // Note: that does not imply that static type annotation is not exact
-  // according to a broader definition, e.g. location might simply be
-  // polymorphic and store instances of multiple different types.
-  // However for simplicity we don't track such cases yet.
-  static inline StaticTypeExactnessState NotExact() {
-    return StaticTypeExactnessState(kNotExact);
+  intptr_t argc_tag() const { return raw_ptr()->argc_tag_; }
+  void set_argc_tag(intptr_t value) const {
+    StoreNonPointer(&raw_ptr()->argc_tag_, value);
   }
 
-  // The location does not track exactness of its static type at runtime.
-  static inline StaticTypeExactnessState NotTracking() {
-    return StaticTypeExactnessState(kNotTracking);
-  }
+  static RawNativeEntryData* New();
 
-  static inline StaticTypeExactnessState Unitialized() {
-    return StaticTypeExactnessState(kUninitialized);
-  }
-
-  bool IsTracking() const { return value_ != kNotTracking; }
-  bool IsUninitialized() const { return value_ == kUninitialized; }
-  bool IsHasExactSuperClass() const { return value_ == kHasExactSuperClass; }
-  bool IsHasExactSuperType() const { return value_ == kHasExactSuperType; }
-  bool IsTriviallyExact() const { return value_ > kUninitialized; }
-  bool NeedsFieldGuard() const { return value_ >= kUninitialized; }
-  bool IsExactOrUninitialized() const { return value_ > kNotExact; }
-
-  static inline StaticTypeExactnessState Decode(int8_t value) {
-    return StaticTypeExactnessState(value);
-  }
-
-  int8_t Encode() const { return value_; }
-
-  static constexpr int8_t kUninitialized = 0;
-
- private:
-  static constexpr int8_t kNotTracking = -4;
-  static constexpr int8_t kNotExact = -3;
-  static constexpr int8_t kHasExactSuperType = -2;
-  static constexpr int8_t kHasExactSuperClass = -1;
-
-  explicit StaticTypeExactnessState(int8_t value) : value_(value) {}
-
-  const int8_t value_;
-
-  DISALLOW_ALLOCATION();
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(NativeEntryData, Object);
+  friend class Class;
+  friend class HeapProfiler;
 };
 
 class Field : public Object {
@@ -6584,9 +6563,7 @@
   static intptr_t type_class_id_offset() {
     return OFFSET_OF(RawType, type_class_id_);
   }
-  static intptr_t arguments_offset() {
-    return OFFSET_OF(RawType, type_class_id_);
-  }
+  static intptr_t arguments_offset() { return OFFSET_OF(RawType, arguments_); }
   static intptr_t type_state_offset() {
     return OFFSET_OF(RawType, type_state_);
   }
diff --git a/runtime/vm/object_arm_test.cc b/runtime/vm/object_arm_test.cc
index 4bebaef..5f9f3d7 100644
--- a/runtime/vm/object_arm_test.cc
+++ b/runtime/vm/object_arm_test.cc
@@ -36,8 +36,7 @@
   const String& string_object =
       String::ZoneHandle(String::New(str, Heap::kOld));
   __ LoadObject(R0, string_object);
-  __ LeaveDartFrame();
-  __ Ret();
+  __ LeaveDartFrameAndReturn();
 }
 
 // Generate a dart code sequence that embeds a smi object in it.
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 6a56a57..1046b77 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -34,7 +34,7 @@
   // Marks and pushes. Used to initialize this stack with roots.
   virtual void VisitPointers(RawObject** first, RawObject** last) {
     for (RawObject** current = first; current <= last; ++current) {
-      if ((*current)->IsHeapObject() && !(*current)->IsMarked()) {
+      if ((*current)->IsHeapObject() && !(*current)->IsGraphMarked()) {
         if (!include_vm_objects_) {
           intptr_t cid = (*current)->GetClassId();
           if (((cid < kInstanceCid) || (cid == kTypeArgumentsCid)) &&
@@ -42,7 +42,7 @@
             continue;
           }
         }
-        (*current)->SetMarkBit();
+        (*current)->SetGraphMarked();
         Node node;
         node.ptr = current;
         node.obj = *current;
@@ -149,8 +149,8 @@
   Unmarker() {}
 
   void VisitObject(RawObject* obj) {
-    if (obj->IsMarked()) {
-      obj->ClearMarkBit();
+    if (obj->IsGraphMarked()) {
+      obj->ClearGraphMarked();
     }
   }
 
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index d2197e3..0474419 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -688,12 +688,13 @@
 void ICData::Reset(Zone* zone) const {
   RebindRule rule = rebind_rule();
   if (rule == kInstance) {
-    intptr_t num_args = NumArgsTested();
+    const intptr_t num_args = NumArgsTested();
+    const bool tracking_exactness = IsTrackingExactness();
     if (num_args == 2) {
       ClearWithSentinel();
     } else {
-      const Array& data_array =
-          Array::Handle(zone, CachedEmptyICDataArray(num_args));
+      const Array& data_array = Array::Handle(
+          zone, CachedEmptyICDataArray(num_args, tracking_exactness));
       set_ic_data_array(data_array);
     }
     return;
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 7812ac5..4b99e44 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -346,6 +346,10 @@
   Object::PrintJSONImpl(stream, ref);
 }
 
+void NativeEntryData::PrintJSONImpl(JSONStream* stream, bool ref) const {
+  Object::PrintJSONImpl(stream, ref);
+}
+
 void Field::PrintJSONImpl(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
   Class& cls = Class::Handle(Owner());
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 35bc8dd..9af09d4 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -235,6 +235,7 @@
       "}\n";
   Dart_Handle lib_h = TestCase::LoadTestScript(kScript, NULL);
   EXPECT_VALID(lib_h);
+  TransitionNativeToVM transition(thread);
   Library& lib = Library::Handle();
   lib ^= Api::UnwrapHandle(lib_h);
   EXPECT(!lib.IsNull());
@@ -2271,7 +2272,7 @@
   }
 }
 
-TEST_CASE(Script) {
+ISOLATE_UNIT_TEST_CASE(Script) {
   const char* url_chars = "builtin:test-case";
   const char* source_chars = "This will not compile.";
   const String& url = String::Handle(String::New(url_chars));
@@ -2291,6 +2292,7 @@
   EXPECT_EQ('n', str.CharAt(10));
   EXPECT_EQ('.', str.CharAt(21));
 
+  TransitionVMToNative transition(thread);
   const char* kScript = "main() {}";
   Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
   EXPECT_VALID(h_lib);
@@ -3841,6 +3843,7 @@
   EXPECT_VALID(h_lib);
   Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
+  TransitionNativeToVM transition(thread);
   Library& lib = Library::Handle();
   lib ^= Api::UnwrapHandle(h_lib);
   EXPECT(!lib.IsNull());
@@ -3916,6 +3919,7 @@
       "  }\n"
       "}";
   TestCase::LoadTestScript(kScriptChars, NULL);
+  TransitionNativeToVM transition(thread);
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   const String& name = String::Handle(String::New(TestCase::url()));
   const Library& lib = Library::Handle(Library::LookupLibrary(thread, name));
@@ -3977,13 +3981,19 @@
   Dart_Handle result = Dart_Invoke(lib, NewString("test"), 0, NULL);
   EXPECT_VALID(result);
 
+  Function& func_b = Function::Handle();
+  {
+    TransitionNativeToVM transition(thread);
+    const String& name = String::Handle(String::New(TestCase::url()));
+    const Library& vmlib =
+        Library::Handle(Library::LookupLibrary(thread, name));
+    EXPECT(!vmlib.IsNull());
+    const Class& class_a = Class::Handle(
+        vmlib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
+    func_b = GetFunction(class_a, "b");
+  }
+
   // With no breakpoint, function A.b is inlineable.
-  const String& name = String::Handle(String::New(TestCase::url()));
-  const Library& vmlib = Library::Handle(Library::LookupLibrary(thread, name));
-  EXPECT(!vmlib.IsNull());
-  const Class& class_a = Class::Handle(
-      vmlib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
-  const Function& func_b = Function::Handle(GetFunction(class_a, "b"));
   EXPECT(func_b.CanBeInlined());
 
   // After setting a breakpoint in a function A.b, it is no longer inlineable.
@@ -4348,6 +4358,8 @@
   EXPECT(!lib.IsNull());
   Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
   EXPECT_VALID(result);
+
+  TransitionNativeToVM transition(thread);
   const Class& clazz = Class::Handle(GetClass(lib, "A"));
   EXPECT(!clazz.IsNull());
   const Instance& a0 = Instance::Handle(Instance::New(clazz));
@@ -4375,6 +4387,8 @@
   EXPECT_VALID(h_result);
   Integer& result = Integer::Handle();
   result ^= Api::UnwrapHandle(h_result);
+
+  TransitionNativeToVM transition(thread);
   String& foo = String::Handle(String::New("foo"));
   Integer& expected = Integer::Handle();
   expected ^= foo.HashCode();
@@ -4440,13 +4454,14 @@
   Dart_Handle h_result = Dart_Invoke(h_lib, NewString("makeMap"), 0, NULL);
   EXPECT_VALID(h_result);
 
+  TransitionNativeToVM transition(thread);
+
   // 2. Create an empty internalized LinkedHashMap in C++.
   Instance& dart_map = Instance::Handle();
   dart_map ^= Api::UnwrapHandle(h_result);
   LinkedHashMap& cc_map = LinkedHashMap::Handle(LinkedHashMap::NewDefault());
 
   // 3. Expect them to have identical structure.
-  TransitionNativeToVM transition(thread);
   CheckIdenticalHashStructure(thread, dart_map, cc_map);
 }
 
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index 17b21ad..a6b7a18 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -16,7 +16,6 @@
 
 #include <fuchsia/timezone/cpp/fidl.h>
 
-#include "lib/component/cpp/environment_services.h"
 #include "lib/component/cpp/startup_context.h"
 #include "lib/svc/cpp/services.h"
 
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 5cfa65a..d55273e 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -228,7 +228,7 @@
       if (Compiler::IsBackgroundCompilation()) {
         if (!other->IsConsistentWith(*field)) {
           Compiler::AbortBackgroundCompilation(
-              Thread::kNoDeoptId,
+              DeoptId::kNone,
               "Field's guarded state changed during compilation");
         }
       }
diff --git a/runtime/vm/parser_test.cc b/runtime/vm/parser_test.cc
index a04d599..58c0125 100644
--- a/runtime/vm/parser_test.cc
+++ b/runtime/vm/parser_test.cc
@@ -106,7 +106,7 @@
   EXPECT(!function.IsNull());
 }
 
-TEST_CASE(ParseClassDefinition) {
+ISOLATE_UNIT_TEST_CASE(ParseClassDefinition) {
   const char* script_chars =
       "class C { }  \n"
       "class A {    \n"
@@ -141,7 +141,7 @@
   CheckFunction(lib, "A", "foo", true);
 }
 
-TEST_CASE(Parser_TopLevel) {
+ISOLATE_UNIT_TEST_CASE(Parser_TopLevel) {
   const char* script_chars =
       "class A extends B {    \n"
       "  static bar(var i, [var d = 5]) { return 77; } \n"
@@ -206,6 +206,7 @@
 static void SaveVars(Dart_IsolateId isolate_id,
                      intptr_t bp_id,
                      const Dart_CodeLocation& loc) {
+  TransitionNativeToVM transition(Thread::Current());
   DebuggerStackTrace* stack = Isolate::Current()->debugger()->StackTrace();
   intptr_t num_frames = stack->Length();
   const int kBufferLen = 2048;
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index 5d3d00b0..f69e319 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -148,15 +148,19 @@
 }
 
 static RawClass* GetClass(const Library& lib, const char* name) {
-  const Class& cls = Class::Handle(lib.LookupClassAllowPrivate(
-      String::Handle(Symbols::New(Thread::Current(), name))));
+  Thread* thread = Thread::Current();
+  TransitionNativeToVM transition(thread);
+  const Class& cls = Class::Handle(
+      lib.LookupClassAllowPrivate(String::Handle(Symbols::New(thread, name))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   return cls.raw();
 }
 
 static RawFunction* GetFunction(const Library& lib, const char* name) {
+  Thread* thread = Thread::Current();
+  TransitionNativeToVM transition(thread);
   const Function& func = Function::Handle(lib.LookupFunctionAllowPrivate(
-      String::Handle(Symbols::New(Thread::Current(), name))));
+      String::Handle(Symbols::New(thread, name))));
   EXPECT(!func.IsNull());  // No ambiguity error expected.
   return func.raw();
 }
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 71442f9..5db35fb 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -30,9 +30,26 @@
   }
   // Validate that the tags_ field is sensible.
   uint32_t tags = ptr()->tags_;
-  intptr_t reserved = ReservedBits::decode(tags);
-  if (reserved != 0) {
-    FATAL1("Invalid tags field encountered %x\n", tags);
+  if (IsNewObject()) {
+    if (!NewBit::decode(tags)) {
+      FATAL1("New object missing kNewBit: %x\n", tags);
+    }
+    if (OldBit::decode(tags)) {
+      FATAL1("New object has kOldBit: %x\n", tags);
+    }
+    if (OldAndNotMarkedBit::decode(tags)) {
+      FATAL1("New object has kOldAndNotMarkedBit: %x\n", tags);
+    }
+    if (OldAndNotRememberedBit::decode(tags)) {
+      FATAL1("Mew object has kOldAndNotRememberedBit: %x\n", tags);
+    }
+  } else {
+    if (NewBit::decode(tags)) {
+      FATAL1("Old object has kNewBit: %x\n", tags);
+    }
+    if (!OldBit::decode(tags)) {
+      FATAL1("Old object missing kOldBit: %x\n", tags);
+    }
   }
   intptr_t class_id = ClassIdTag::decode(tags);
   if (!isolate->class_table()->IsValidIndex(class_id)) {
@@ -363,6 +380,7 @@
 REGULAR_VISITOR(ClosureData)
 REGULAR_VISITOR(SignatureData)
 REGULAR_VISITOR(RedirectionData)
+NULL_VISITOR(NativeEntryData)
 REGULAR_VISITOR(Field)
 REGULAR_VISITOR(LiteralToken)
 REGULAR_VISITOR(TokenStream)
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 1738a30..c6e3669 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -7,6 +7,7 @@
 
 #include "platform/assert.h"
 #include "platform/atomic.h"
+#include "vm/compiler/method_recognizer.h"
 #include "vm/exceptions.h"
 #include "vm/globals.h"
 #include "vm/snapshot.h"
@@ -27,6 +28,7 @@
   V(ClosureData)                                                               \
   V(SignatureData)                                                             \
   V(RedirectionData)                                                           \
+  V(NativeEntryData)                                                           \
   V(Field)                                                                     \
   V(LiteralToken)                                                              \
   V(TokenStream)                                                               \
@@ -288,13 +290,16 @@
   // The tags field which is a part of the object header uses the following
   // bit fields for storing tags.
   enum TagBits {
-    kMarkBit = 0,
-    kCanonicalBit = 1,
-    kVMHeapObjectBit = 2,
-    kRememberedBit = 3,
-    kReservedTagPos = 4,  // kReservedBit{10K,100K,1M,10M}
-    kReservedTagSize = 4,
-    kSizeTagPos = kReservedTagPos + kReservedTagSize,  // = 8
+    kReservedBit = 0,
+    kOldAndNotMarkedBit = 1,      // Incremental barrier target.
+    kNewBit = 2,                  // Generational barrier target.
+    kOldBit = 3,                  // Incremental barrier source.
+    kOldAndNotRememberedBit = 4,  // Generational barrier source.
+    kCanonicalBit = 5,
+    kVMHeapObjectBit = 6,
+    kGraphMarkedBit = 7,  // ObjectGraph needs to mark through new space.
+
+    kSizeTagPos = 8,
     kSizeTagSize = 8,
     kClassIdTagPos = kSizeTagPos + kSizeTagSize,  // = 16
     kClassIdTagSize = 16,
@@ -304,6 +309,15 @@
 #endif
   };
 
+  static const intptr_t kBarrierOverlapShift = 2;
+  COMPILE_ASSERT(kOldAndNotMarkedBit + kBarrierOverlapShift == kOldBit);
+  COMPILE_ASSERT(kNewBit + kBarrierOverlapShift == kOldAndNotRememberedBit);
+
+  // The bit in the Smi tag position must be something that can be set to 0
+  // for a dead filler object of either generation.
+  // See Object::MakeUnusedSpaceTraversable.
+  COMPILE_ASSERT(kReservedBit == 0);
+
   COMPILE_ASSERT(kClassIdTagSize == (sizeof(classid_t) * kBitsPerByte));
 
   // Encodes the object size in the tag in units of object alignment.
@@ -341,6 +355,24 @@
   class ClassIdTag
       : public BitField<uint32_t, intptr_t, kClassIdTagPos, kClassIdTagSize> {};
 
+  class OldAndNotMarkedBit
+      : public BitField<uint32_t, bool, kOldAndNotMarkedBit, 1> {};
+
+  class NewBit : public BitField<uint32_t, bool, kNewBit, 1> {};
+
+  class CanonicalObjectTag : public BitField<uint32_t, bool, kCanonicalBit, 1> {
+  };
+
+  class GraphMarkedBit : public BitField<uint32_t, bool, kGraphMarkedBit, 1> {};
+
+  class VMHeapObjectTag : public BitField<uint32_t, bool, kVMHeapObjectBit, 1> {
+  };
+
+  class OldBit : public BitField<uint32_t, bool, kOldBit, 1> {};
+
+  class OldAndNotRememberedBit
+      : public BitField<uint32_t, bool, kOldAndNotRememberedBit, 1> {};
+
   bool IsWellFormed() const {
     uword value = reinterpret_cast<uword>(this);
     return (value & kSmiTagMask) == 0 ||
@@ -383,23 +415,32 @@
   }
 
   // Support for GC marking bit.
-  bool IsMarked() const { return MarkBit::decode(ptr()->tags_); }
+  bool IsMarked() const {
+    ASSERT(IsOldObject());
+    return !OldAndNotMarkedBit::decode(ptr()->tags_);
+  }
   void SetMarkBit() {
+    ASSERT(IsOldObject());
     ASSERT(!IsMarked());
-    UpdateTagBit<MarkBit>(true);
+    UpdateTagBit<OldAndNotMarkedBit>(false);
   }
   void SetMarkBitUnsynchronized() {
+    ASSERT(IsOldObject());
     ASSERT(!IsMarked());
     uint32_t tags = ptr()->tags_;
-    ptr()->tags_ = MarkBit::update(true, tags);
+    ptr()->tags_ = OldAndNotMarkedBit::update(false, tags);
   }
   void ClearMarkBit() {
+    ASSERT(IsOldObject());
     ASSERT(IsMarked());
-    UpdateTagBit<MarkBit>(false);
+    UpdateTagBit<OldAndNotMarkedBit>(true);
   }
   // Returns false if the bit was already set.
   DART_WARN_UNUSED_RESULT
-  bool TryAcquireMarkBit() { return TryAcquireTagBit<MarkBit>(); }
+  bool TryAcquireMarkBit() {
+    ASSERT(IsOldObject());
+    return TryClearTagBit<OldAndNotMarkedBit>();
+  }
 
   // Support for object tags.
   bool IsCanonical() const { return CanonicalObjectTag::decode(ptr()->tags_); }
@@ -408,25 +449,44 @@
   bool IsVMHeapObject() const { return VMHeapObjectTag::decode(ptr()->tags_); }
   void SetVMHeapObject() { UpdateTagBit<VMHeapObjectTag>(true); }
 
+  // Support for ObjectGraph marking bit.
+  bool IsGraphMarked() const {
+    if (IsVMHeapObject()) return true;
+    return GraphMarkedBit::decode(ptr()->tags_);
+  }
+  void SetGraphMarked() {
+    ASSERT(!IsVMHeapObject());
+    uint32_t tags = ptr()->tags_;
+    ptr()->tags_ = GraphMarkedBit::update(true, tags);
+  }
+  void ClearGraphMarked() {
+    ASSERT(!IsVMHeapObject());
+    uint32_t tags = ptr()->tags_;
+    ptr()->tags_ = GraphMarkedBit::update(false, tags);
+  }
+
   // Support for GC remembered bit.
-  bool IsRemembered() const { return RememberedBit::decode(ptr()->tags_); }
+  bool IsRemembered() const {
+    ASSERT(IsOldObject());
+    return !OldAndNotRememberedBit::decode(ptr()->tags_);
+  }
   void SetRememberedBit() {
     ASSERT(!IsRemembered());
-    UpdateTagBit<RememberedBit>(true);
+    UpdateTagBit<OldAndNotRememberedBit>(false);
   }
   void SetRememberedBitUnsynchronized() {
     ASSERT(!IsRemembered());
     uint32_t tags = ptr()->tags_;
-    ptr()->tags_ = RememberedBit::update(true, tags);
+    ptr()->tags_ = OldAndNotRememberedBit::update(false, tags);
   }
-  void ClearRememberedBit() { UpdateTagBit<RememberedBit>(false); }
+  void ClearRememberedBit() {
+    ASSERT(IsOldObject());
+    UpdateTagBit<OldAndNotRememberedBit>(true);
+  }
   void ClearRememberedBitUnsynchronized() {
     uint32_t tags = ptr()->tags_;
-    ptr()->tags_ = RememberedBit::update(false, tags);
+    ptr()->tags_ = OldAndNotRememberedBit::update(true, tags);
   }
-  // Returns false if the bit was already set.
-  DART_WARN_UNUSED_RESULT
-  bool TryAcquireRememberedBit() { return TryAcquireTagBit<RememberedBit>(); }
 
 #define DEFINE_IS_CID(clazz)                                                   \
   bool Is##clazz() const { return ((GetClassId() == k##clazz##Cid)); }
@@ -585,20 +645,6 @@
   uint32_t hash_;
 #endif
 
-  class MarkBit : public BitField<uint32_t, bool, kMarkBit, 1> {};
-
-  class RememberedBit : public BitField<uint32_t, bool, kRememberedBit, 1> {};
-
-  class CanonicalObjectTag : public BitField<uint32_t, bool, kCanonicalBit, 1> {
-  };
-
-  class VMHeapObjectTag : public BitField<uint32_t, bool, kVMHeapObjectBit, 1> {
-  };
-
-  class ReservedBits
-      : public BitField<uint32_t, intptr_t, kReservedTagPos, kReservedTagSize> {
-  };
-
   // TODO(koda): After handling tags_, return const*, like Object::raw_ptr().
   RawObject* ptr() const {
     ASSERT(IsHeapObject());
@@ -638,6 +684,12 @@
         &ptr()->tags_, TagBitField::encode(true));
     return !TagBitField::decode(old_tags);
   }
+  template <class TagBitField>
+  bool TryClearTagBit() {
+    uint32_t old_tags = AtomicOperations::FetchAndRelaxedUint32(
+        &ptr()->tags_, ~TagBitField::encode(true));
+    return TagBitField::decode(old_tags);
+  }
 
   // All writes to heap objects should ultimately pass through one of the
   // methods below or their counterparts in Object, to ensure that the
@@ -1024,6 +1076,23 @@
   VISIT_TO(RawObject*, target_);
 };
 
+// Forward declarations.
+class NativeArguments;
+typedef void (*NativeFunction)(NativeArguments* arguments);
+typedef void (*NativeFunctionWrapper)(Dart_NativeArguments args,
+                                      Dart_NativeFunction func);
+
+class RawNativeEntryData : public RawObject {
+ private:
+  RAW_HEAP_OBJECT_IMPLEMENTATION(NativeEntryData);
+  VISIT_NOTHING();
+
+  NativeFunctionWrapper trampoline_;
+  NativeFunction native_function_;
+  intptr_t argc_tag_;
+  MethodRecognizer::Kind kind_;
+};
+
 class RawField : public RawObject {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Field);
 
@@ -1697,6 +1766,10 @@
   RawArray* ic_data_;          // Contains class-ids, target and count.
   RawString* target_name_;     // Name of target function.
   RawArray* args_descriptor_;  // Arguments descriptor.
+  // Static type of the receiver. If it is set then we are performing
+  // exactness profiling for the receiver type. See StaticTypeExactnessState
+  // class for more information.
+  NOT_IN_PRECOMPILED(RawAbstractType* static_receiver_type_);
   RawObject* owner_;  // Parent/calling function or original IC of cloned IC.
   VISIT_TO(RawObject*, owner_);
   RawObject** to_snapshot(Snapshot::Kind kind) {
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 279d28e..8c021bb 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -746,6 +746,22 @@
   visitor.VisitPointers(from(), to());
 }
 
+RawNativeEntryData* NativeEntryData::ReadFrom(SnapshotReader* reader,
+                                              intptr_t object_id,
+                                              intptr_t tags,
+                                              Snapshot::Kind kind,
+                                              bool as_reference) {
+  UNREACHABLE();
+  return NativeEntryData::null();
+}
+
+void RawNativeEntryData::WriteTo(SnapshotWriter* writer,
+                                 intptr_t object_id,
+                                 Snapshot::Kind kind,
+                                 bool as_reference) {
+  UNREACHABLE();
+}
+
 RawFunction* Function::ReadFrom(SnapshotReader* reader,
                                 intptr_t object_id,
                                 intptr_t tags,
diff --git a/runtime/vm/regexp_assembler.cc b/runtime/vm/regexp_assembler.cc
index ecd1914..fb7dc74 100644
--- a/runtime/vm/regexp_assembler.cc
+++ b/runtime/vm/regexp_assembler.cc
@@ -61,7 +61,8 @@
 #if !defined(DART_PRECOMPILED_RUNTIME)
   if (!FLAG_interpret_irregexp) {
     // Only needed by the compiled IR backend.
-    block_ = new JoinEntryInstr(-1, -1, Thread::Current()->GetNextDeoptId());
+    block_ =
+        new JoinEntryInstr(-1, -1, CompilerState::Current().GetNextDeoptId());
   }
 #endif
 }
diff --git a/runtime/vm/regexp_assembler_ir.h b/runtime/vm/regexp_assembler_ir.h
index 0b0dcca..3652b72 100644
--- a/runtime/vm/regexp_assembler_ir.h
+++ b/runtime/vm/regexp_assembler_ir.h
@@ -133,7 +133,9 @@
   void FinalizeRegistersArray();
 
  private:
-  intptr_t GetNextDeoptId() const { return thread_->GetNextDeoptId(); }
+  intptr_t GetNextDeoptId() const {
+    return thread_->compiler_state().GetNextDeoptId();
+  }
 
   // Generate the contents of preset blocks. The entry block is the entry point
   // of the generated code.
diff --git a/runtime/vm/regexp_test.cc b/runtime/vm/regexp_test.cc
index c4646d4..531f12d 100644
--- a/runtime/vm/regexp_test.cc
+++ b/runtime/vm/regexp_test.cc
@@ -22,7 +22,7 @@
                                          zone);
 }
 
-TEST_CASE(RegExp_OneByteString) {
+ISOLATE_UNIT_TEST_CASE(RegExp_OneByteString) {
   uint8_t chars[] = {'a', 'b', 'c', 'b', 'a'};
   intptr_t len = ARRAY_SIZE(chars);
   const String& str =
@@ -43,7 +43,7 @@
   EXPECT_EQ(3, smi_2.Value());
 }
 
-TEST_CASE(RegExp_TwoByteString) {
+ISOLATE_UNIT_TEST_CASE(RegExp_TwoByteString) {
   uint16_t chars[] = {'a', 'b', 'c', 'b', 'a'};
   intptr_t len = ARRAY_SIZE(chars);
   const String& str =
@@ -68,7 +68,7 @@
                           Dart_WeakPersistentHandle handle,
                           void* peer) {}
 
-TEST_CASE(RegExp_ExternalOneByteString) {
+ISOLATE_UNIT_TEST_CASE(RegExp_ExternalOneByteString) {
   uint8_t chars[] = {'a', 'b', 'c', 'b', 'a'};
   intptr_t len = ARRAY_SIZE(chars);
   const String& str = String::Handle(ExternalOneByteString::New(
@@ -89,7 +89,7 @@
   EXPECT_EQ(3, smi_2.Value());
 }
 
-TEST_CASE(RegExp_ExternalTwoByteString) {
+ISOLATE_UNIT_TEST_CASE(RegExp_ExternalTwoByteString) {
   uint16_t chars[] = {'a', 'b', 'c', 'b', 'a'};
   intptr_t len = ARRAY_SIZE(chars);
   const String& str = String::Handle(ExternalTwoByteString::New(
diff --git a/runtime/vm/resolver_test.cc b/runtime/vm/resolver_test.cc
index 7df722a..6624b49 100644
--- a/runtime/vm/resolver_test.cc
+++ b/runtime/vm/resolver_test.cc
@@ -66,7 +66,7 @@
   SetupFunction(test_library_name, test_class_name, test_function_name, false);
 }
 
-TEST_CASE(DartStaticResolve) {
+ISOLATE_UNIT_TEST_CASE(DartStaticResolve) {
   const char* test_library_name = "ResolverApp";
   const char* test_class_name = "A";
   const char* test_static_function_name = "static_foo";
@@ -125,7 +125,7 @@
   }
 }
 
-TEST_CASE(DartDynamicResolve) {
+ISOLATE_UNIT_TEST_CASE(DartDynamicResolve) {
   const char* test_library_name = "ResolverApp";
   const char* test_class_name = "A";
   const char* test_function_name = "foo";
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 1087bb6..3731a08 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -1234,7 +1234,21 @@
     return target_function.raw();
   }
   if (args.length() == 1) {
-    ic_data.AddReceiverCheck(args[0]->GetClassId(), target_function);
+    if (ic_data.IsTrackingExactness()) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+      const auto& receiver = *args[0];
+      const auto state = StaticTypeExactnessState::Compute(
+          Type::Cast(AbstractType::Handle(ic_data.StaticReceiverType())),
+          receiver);
+      ic_data.AddReceiverCheck(
+          receiver.GetClassId(), target_function,
+          /*count=*/1, /*exactness=*/state.CollapseSuperTypeExactness());
+#else
+      UNREACHABLE();
+#endif
+    } else {
+      ic_data.AddReceiverCheck(args[0]->GetClassId(), target_function);
+    }
   } else {
     GrowableArray<intptr_t> class_ids(args.length());
     ASSERT(ic_data.NumArgsTested() == args.length());
@@ -1414,7 +1428,7 @@
                               kTypeArgsLen, old_target.num_fixed_parameters()));
   const ICData& ic_data =
       ICData::Handle(zone, ICData::New(caller_function, name, descriptor,
-                                       Thread::kNoDeoptId, 1, /* args_tested */
+                                       DeoptId::kNone, 1, /* args_tested */
                                        ICData::kInstance));
 
   // Maybe add the new target.
@@ -1490,7 +1504,7 @@
   const Array& descriptor = Array::Handle(zone, unlinked.args_descriptor());
   const ICData& ic_data =
       ICData::Handle(zone, ICData::New(caller_function, name, descriptor,
-                                       Thread::kNoDeoptId, 1, /* args_tested */
+                                       DeoptId::kNone, 1, /* args_tested */
                                        ICData::kInstance));
 
   Class& cls = Class::Handle(zone, receiver.clazz());
@@ -1570,7 +1584,7 @@
                               kTypeArgsLen, old_target.num_fixed_parameters()));
   const ICData& ic_data =
       ICData::Handle(zone, ICData::New(caller_function, name, descriptor,
-                                       Thread::kNoDeoptId, 1, /* args_tested */
+                                       DeoptId::kNone, 1, /* args_tested */
                                        ICData::kInstance));
 
   // Add the first target.
@@ -2708,7 +2722,7 @@
   return reinterpret_cast<uword>(RuntimeEntry::InterpretCall);
 }
 
-// Interpret a function call. Should be called only for uncompiled functions.
+// Interpret a function call. Should be called only for non-jitted functions.
 // argc indicates the number of arguments, including the type arguments.
 // argv points to the first argument.
 // If argc < 0, arguments are passed at decreasing memory addresses from argv.
@@ -2723,6 +2737,9 @@
   uword exit_fp = thread->top_exit_frame_info();
   ASSERT(exit_fp != 0);
   ASSERT(thread == Thread::Current());
+  // Caller is InterpretCall stub called from generated code.
+  // We stay in "in generated code" execution state when interpreting code.
+  ASSERT(thread->execution_state() == Thread::kThreadInGenerated);
   ASSERT(!Function::HasCode(function));
   ASSERT(Function::HasBytecode(function));
   ASSERT(interpreter != NULL);
@@ -2730,7 +2747,12 @@
   const Object& result = Object::Handle(
       thread->zone(), interpreter->Call(function, argdesc, argc, argv, thread));
   DEBUG_ASSERT(thread->top_exit_frame_info() == exit_fp);
-  CheckResultError(result);
+  if (result.IsError()) {
+    // Propagating an error may cause allocation. Check if we need to block for
+    // a safepoint by switching to "in VM" execution state.
+    TransitionGeneratedToVM transition(thread);
+    Exceptions::PropagateError(Error::Cast(result));
+  }
   return result.raw();
 #else
   UNREACHABLE();
diff --git a/runtime/vm/scanner_test.cc b/runtime/vm/scanner_test.cc
index 93fa232..f7546cb 100644
--- a/runtime/vm/scanner_test.cc
+++ b/runtime/vm/scanner_test.cc
@@ -378,7 +378,7 @@
   EXPECT_EQ('\n', litchars[3]);
 }
 
-TEST_CASE(Scanner_Test) {
+ISOLATE_UNIT_TEST_CASE(Scanner_Test) {
   ScanLargeText();
 
   BoringTest();
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index 1383695..952ecc7 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -130,7 +130,8 @@
   // Returns true if this local variable represents a parameter that needs type
   // check when we enter the function.
   bool needs_type_check() const {
-    return (type_check_mode_ == kDoTypeCheck) && !FLAG_omit_strong_type_checks;
+    return (type_check_mode_ == kDoTypeCheck) &&
+           Isolate::Current()->should_emit_strong_mode_checks();
   }
 
   // Returns true if this local variable represents a parameter which type is
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index 7291161..d132892 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -76,8 +76,12 @@
 
 static RawArray* Eval(Dart_Handle lib, const char* expr) {
   const String& dummy_isolate_id = String::Handle(String::New("isolateId"));
-  Dart_Handle expr_val = Dart_EvaluateStaticExpr(lib, NewString(expr));
-  EXPECT_VALID(expr_val);
+  Dart_Handle expr_val;
+  {
+    TransitionVMToNative transiton(Thread::Current());
+    expr_val = Dart_EvaluateStaticExpr(lib, NewString(expr));
+    EXPECT_VALID(expr_val);
+  }
   Zone* zone = Thread::Current()->zone();
   const GrowableObjectArray& value =
       Api::UnwrapGrowableObjectArrayHandle(zone, expr_val);
@@ -126,33 +130,30 @@
 }
 
 static void HandleIsolateMessage(Isolate* isolate, const Array& msg) {
-  TransitionNativeToVM transition(Thread::Current());
   Service::HandleIsolateMessage(isolate, msg);
 }
 
 static void HandleRootMessage(const Array& message) {
-  TransitionNativeToVM transition(Thread::Current());
   Service::HandleRootMessage(message);
 }
 
-TEST_CASE(Service_IsolateStickyError) {
+ISOLATE_UNIT_TEST_CASE(Service_IsolateStickyError) {
   const char* kScript = "main() => throw 'HI THERE STICKY';\n";
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  Library& vmlib = Library::Handle();
-  vmlib ^= Api::UnwrapHandle(lib);
-  EXPECT(!vmlib.IsNull());
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT(Dart_IsUnhandledExceptionError(result));
-  EXPECT(!Dart_HasStickyError());
+  Dart_Handle result;
+  {
+    TransitionVMToNative transition(thread);
+    Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT(Dart_IsUnhandledExceptionError(result));
+    EXPECT(!Dart_HasStickyError());
+  }
   EXPECT(Thread::Current()->sticky_error() == Error::null());
 
   {
-    TransitionNativeToVM transition(thread);
-
     JSONStream js;
     isolate->PrintJSON(&js, false);
     // No error property and no PauseExit state.
@@ -161,14 +162,15 @@
     EXPECT_NOTSUBSTRING("PauseExit", js.ToCString());
   }
 
-  // Set the sticky error.
-  Dart_SetStickyError(result);
-  Dart_SetPausedOnExit(true);
-  EXPECT(Dart_HasStickyError());
+  {
+    // Set the sticky error.
+    TransitionVMToNative transition(thread);
+    Dart_SetStickyError(result);
+    Dart_SetPausedOnExit(true);
+    EXPECT(Dart_HasStickyError());
+  }
 
   {
-    TransitionNativeToVM transition(thread);
-
     JSONStream js;
     isolate->PrintJSON(&js, false);
     // Error and PauseExit set.
@@ -178,7 +180,7 @@
   }
 }
 
-TEST_CASE(Service_IdZones) {
+ISOLATE_UNIT_TEST_CASE(Service_IdZones) {
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
   ObjectIdRing* ring = isolate->object_id_ring();
@@ -212,7 +214,7 @@
   EXPECT_STREQ("objects/5", reuse_zone.GetServiceId(test_d));
 }
 
-TEST_CASE(Service_Code) {
+ISOLATE_UNIT_TEST_CASE(Service_Code) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -232,13 +234,17 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
+  Dart_Handle lib;
   Library& vmlib = Library::Handle();
-  vmlib ^= Api::UnwrapHandle(lib);
-  EXPECT(!vmlib.IsNull());
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
+  {
+    TransitionVMToNative transition(thread);
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    vmlib ^= Api::UnwrapHandle(lib);
+    EXPECT(!vmlib.IsNull());
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
+  }
   const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
   EXPECT(!class_a.IsNull());
   const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
@@ -256,7 +262,10 @@
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
 
@@ -329,7 +338,7 @@
   EXPECT_SUBSTRING("\"error\"", handler.msg());
 }
 
-TEST_CASE(Service_TokenStream) {
+ISOLATE_UNIT_TEST_CASE(Service_TokenStream) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -338,11 +347,15 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
+  Dart_Handle lib;
   Library& vmlib = Library::Handle();
-  vmlib ^= Api::UnwrapHandle(lib);
-  EXPECT(!vmlib.IsNull());
+  {
+    TransitionVMToNative transition(thread);
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    vmlib ^= Api::UnwrapHandle(lib);
+    EXPECT(!vmlib.IsNull());
+  }
 
   const String& script_name = String::Handle(String::New("test-lib"));
   EXPECT(!script_name.IsNull());
@@ -359,7 +372,10 @@
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
 
@@ -378,7 +394,7 @@
   EXPECT_SUBSTRING("\"members\":[", handler.msg());
 }
 
-TEST_CASE(Service_PcDescriptors) {
+ISOLATE_UNIT_TEST_CASE(Service_PcDescriptors) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -398,13 +414,17 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
+  Dart_Handle lib;
   Library& vmlib = Library::Handle();
-  vmlib ^= Api::UnwrapHandle(lib);
-  EXPECT(!vmlib.IsNull());
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
+  {
+    TransitionVMToNative transition(thread);
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    vmlib ^= Api::UnwrapHandle(lib);
+    EXPECT(!vmlib.IsNull());
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
+  }
   const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
   EXPECT(!class_a.IsNull());
   const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
@@ -423,7 +443,10 @@
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
 
@@ -441,7 +464,7 @@
   EXPECT_SUBSTRING("\"members\":[", handler.msg());
 }
 
-TEST_CASE(Service_LocalVarDescriptors) {
+ISOLATE_UNIT_TEST_CASE(Service_LocalVarDescriptors) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -461,13 +484,17 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
+  Dart_Handle lib;
   Library& vmlib = Library::Handle();
-  vmlib ^= Api::UnwrapHandle(lib);
-  EXPECT(!vmlib.IsNull());
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
+  {
+    TransitionVMToNative transition(thread);
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    vmlib ^= Api::UnwrapHandle(lib);
+    EXPECT(!vmlib.IsNull());
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
+  }
   const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
   EXPECT(!class_a.IsNull());
   const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
@@ -486,7 +513,10 @@
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
 
@@ -508,7 +538,7 @@
                                 Dart_WeakPersistentHandle handle,
                                 void* peer) {}
 
-TEST_CASE(Service_PersistentHandles) {
+ISOLATE_UNIT_TEST_CASE(Service_PersistentHandles) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -522,28 +552,34 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  Library& vmlib = Library::Handle();
-  vmlib ^= Api::UnwrapHandle(lib);
-  EXPECT(!vmlib.IsNull());
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
 
-  // Create a persistent handle to global.
-  Dart_PersistentHandle persistent_handle = Dart_NewPersistentHandle(result);
+  Dart_Handle lib;
+  Dart_PersistentHandle persistent_handle;
+  Dart_WeakPersistentHandle weak_persistent_handle;
+  {
+    TransitionVMToNative transition(thread);
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
 
-  // Create a weak persistent handle to global.
-  Dart_WeakPersistentHandle weak_persistent_handle =
-      Dart_NewWeakPersistentHandle(result, reinterpret_cast<void*>(0xdeadbeef),
-                                   128, WeakHandleFinalizer);
+    // Create a persistent handle to global.
+    persistent_handle = Dart_NewPersistentHandle(result);
+
+    // Create a weak persistent handle to global.
+    weak_persistent_handle = Dart_NewWeakPersistentHandle(
+        result, reinterpret_cast<void*>(0xdeadbeef), 128, WeakHandleFinalizer);
+  }
 
   // Build a mock message handler and wrap it in a dart port.
   ServiceTestMessageHandler handler;
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
 
@@ -558,9 +594,12 @@
   EXPECT_SUBSTRING("\"externalSize\":\"128\"", handler.msg());
 
   // Delete persistent handles.
-  Dart_DeletePersistentHandle(persistent_handle);
-  Dart_DeleteWeakPersistentHandle(Dart_CurrentIsolate(),
-                                  weak_persistent_handle);
+  {
+    TransitionVMToNative transition(thread);
+    Dart_DeletePersistentHandle(persistent_handle);
+    Dart_DeleteWeakPersistentHandle(Dart_CurrentIsolate(),
+                                    weak_persistent_handle);
+  }
 
   // Get persistent handles (again).
   service_msg = Eval(lib, "[0, port, '0', '_getPersistentHandles', [], []]");
@@ -573,7 +612,7 @@
   EXPECT_NOTSUBSTRING("\"externalSize\":\"128\"", handler.msg());
 }
 
-TEST_CASE(Service_Address) {
+ISOLATE_UNIT_TEST_CASE(Service_Address) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -582,15 +621,22 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
+  Dart_Handle lib;
+  {
+    TransitionVMToNative transition(thread);
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+  }
 
   // Build a mock message handler and wrap it in a dart port.
   ServiceTestMessageHandler handler;
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   const String& str = String::Handle(String::New("foobar", Heap::kOld));
   Array& service_msg = Array::Handle();
@@ -648,7 +694,7 @@
   return false;
 }
 
-TEST_CASE(Service_EmbedderRootHandler) {
+ISOLATE_UNIT_TEST_CASE(Service_EmbedderRootHandler) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -658,20 +704,28 @@
       "  x = (x / 13).floor();\n"
       "}";
 
-  Dart_RegisterRootServiceRequestCallback("alpha", alpha_callback, NULL);
-  Dart_RegisterRootServiceRequestCallback("beta", beta_callback, NULL);
+  Dart_Handle lib;
+  {
+    TransitionVMToNative transition(thread);
 
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
+    Dart_RegisterRootServiceRequestCallback("alpha", alpha_callback, NULL);
+    Dart_RegisterRootServiceRequestCallback("beta", beta_callback, NULL);
+
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
+  }
 
   // Build a mock message handler and wrap it in a dart port.
   ServiceTestMessageHandler handler;
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
   service_msg = Eval(lib, "[0, port, '\"', 'alpha', [], []]");
@@ -685,7 +739,7 @@
   EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"error\":beta,\"id\":1}", handler.msg());
 }
 
-TEST_CASE(Service_EmbedderIsolateHandler) {
+ISOLATE_UNIT_TEST_CASE(Service_EmbedderIsolateHandler) {
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
       "\n"
@@ -695,22 +749,30 @@
       "  x = (x / 13).floor();\n"
       "}";
 
-  Dart_RegisterIsolateServiceRequestCallback("alpha", alpha_callback, NULL);
-  Dart_RegisterIsolateServiceRequestCallback("beta", beta_callback, NULL);
+  Dart_Handle lib;
+  {
+    TransitionVMToNative transition(thread);
 
-  Isolate* isolate = thread->isolate();
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
+    Dart_RegisterIsolateServiceRequestCallback("alpha", alpha_callback, NULL);
+    Dart_RegisterIsolateServiceRequestCallback("beta", beta_callback, NULL);
+
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
+  }
 
   // Build a mock message handler and wrap it in a dart port.
   ServiceTestMessageHandler handler;
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
+  Isolate* isolate = thread->isolate();
   Array& service_msg = Array::Handle();
   service_msg = Eval(lib, "[0, port, '0', 'alpha', [], []]");
   HandleIsolateMessage(isolate, service_msg);
@@ -734,7 +796,7 @@
   }
 }
 
-TEST_CASE(Service_Profile) {
+ISOLATE_UNIT_TEST_CASE(Service_Profile) {
   EnableProfiler();
   const char* kScript =
       "var port;\n"  // Set to our mock port by C++.
@@ -747,17 +809,25 @@
 
   Isolate* isolate = thread->isolate();
   isolate->set_is_runnable(true);
-  Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
-  EXPECT_VALID(lib);
-  Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
+  Dart_Handle lib;
+  {
+    TransitionVMToNative transition(thread);
+
+    lib = TestCase::LoadTestScript(kScript, NULL);
+    EXPECT_VALID(lib);
+    Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
+    EXPECT_VALID(result);
+  }
 
   // Build a mock message handler and wrap it in a dart port.
   ServiceTestMessageHandler handler;
   Dart_Port port_id = PortMap::CreatePort(&handler);
   Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id));
   EXPECT_VALID(port);
-  EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  {
+    TransitionVMToNative transition(thread);
+    EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
+  }
 
   Array& service_msg = Array::Handle();
   service_msg = Eval(lib, "[0, port, '0', '_getCpuProfile', [], []]");
diff --git a/runtime/vm/simulator_arm.cc b/runtime/vm/simulator_arm.cc
index 4f6a19f..1fb6ddb 100644
--- a/runtime/vm/simulator_arm.cc
+++ b/runtime/vm/simulator_arm.cc
@@ -127,10 +127,9 @@
 }
 
 static Register LookupCpuRegisterByName(const char* name) {
-  static const char* kNames[] = {"r0",  "r1",  "r2",  "r3",  "r4",  "r5",
-                                 "r6",  "r7",  "r8",  "r9",  "r10", "r11",
-                                 "r12", "r13", "r14", "r15", "pc",  "lr",
-                                 "sp",  "ip",  "fp",  "pp",  "ctx"};
+  static const char* kNames[] = {
+      "r0",  "r1",  "r2",  "r3",  "r4",  "r5", "r6", "r7", "r8", "r9", "r10",
+      "r11", "r12", "r13", "r14", "r15", "pc", "lr", "sp", "ip", "fp", "pp"};
   static const Register kRegisters[] = {R0, R1, R2,  R3,  R4,  R5,  R6,  R7,
                                         R8, R9, R10, R11, R12, R13, R14, R15,
                                         PC, LR, SP,  IP,  FP,  PP};
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc
index 2565564..024d8b1 100644
--- a/runtime/vm/simulator_dbc.cc
+++ b/runtime/vm/simulator_dbc.cc
@@ -339,6 +339,7 @@
       uword tags = 0;
       tags = RawObject::ClassIdTag::update(kDoubleCid, tags);
       tags = RawObject::SizeTag::update(instance_size, tags);
+      tags = RawObject::NewBit::update(true, tags);
       // Also writes zero in the hash_ field.
       *reinterpret_cast<uword*>(start + Double::tags_offset()) = tags;
       *reinterpret_cast<double*>(start + Double::value_offset()) = value;
@@ -2741,6 +2742,7 @@
       uint32_t tags = 0;
       tags = RawObject::ClassIdTag::update(kContextCid, tags);
       tags = RawObject::SizeTag::update(instance_size, tags);
+      tags = RawObject::NewBit::update(true, tags);
       // Also writes 0 in the hash_ field of the header.
       *reinterpret_cast<uword*>(start + Array::tags_offset()) = tags;
       *reinterpret_cast<uword*>(start + Context::num_variables_offset()) =
@@ -2777,13 +2779,13 @@
 
   {
     BYTECODE(AllocateOpt, A_D);
-    const uword tags =
-        static_cast<uword>(Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD))));
+    uint32_t tags = Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD)));
     const intptr_t instance_size = RawObject::SizeTag::decode(tags);
     const uword start =
         thread->heap()->new_space()->TryAllocateInTLAB(thread, instance_size);
     if (LIKELY(start != 0)) {
       // Writes both the tags and the initial identity hash on 64 bit platforms.
+      tags = RawObject::NewBit::update(true, tags);
       *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
       for (intptr_t current_offset = sizeof(RawInstance);
            current_offset < instance_size; current_offset += kWordSize) {
@@ -2809,7 +2811,7 @@
 
   {
     BYTECODE(AllocateTOpt, A_D);
-    const uword tags = Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD)));
+    uint32_t tags = Smi::Value(RAW_CAST(Smi, LOAD_CONSTANT(rD)));
     const intptr_t instance_size = RawObject::SizeTag::decode(tags);
     const uword start =
         thread->heap()->new_space()->TryAllocateInTLAB(thread, instance_size);
@@ -2817,6 +2819,7 @@
       RawObject* type_args = SP[0];
       const intptr_t type_args_offset = Bytecode::DecodeD(*pc);
       // Writes both the tags and the initial identity hash on 64 bit platforms.
+      tags = RawObject::NewBit::update(true, tags);
       *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
       for (intptr_t current_offset = sizeof(RawInstance);
            current_offset < instance_size; current_offset += kWordSize) {
@@ -2860,6 +2863,7 @@
             tags = RawObject::SizeTag::update(instance_size, tags);
           }
           tags = RawObject::ClassIdTag::update(cid, tags);
+          tags = RawObject::NewBit::update(true, tags);
           // Writes both the tags and the initial identity hash on 64 bit
           // platforms.
           *reinterpret_cast<uword*>(start + Instance::tags_offset()) = tags;
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 605d300..1a7db52 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -76,6 +76,7 @@
 class RawPcDescriptors;
 class RawReceivePort;
 class RawRedirectionData;
+class RawNativeEntryData;
 class RawScript;
 class RawSignatureData;
 class RawSendPort;
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index cbe79e2..10b4715 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -132,7 +132,7 @@
   EXPECT(message == NULL);
 }
 
-TEST_CASE(SerializeNull) {
+ISOLATE_UNIT_TEST_CASE(SerializeNull) {
   StackZone zone(thread);
 
   // Write snapshot with object content.
@@ -157,7 +157,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeSmi1) {
+ISOLATE_UNIT_TEST_CASE(SerializeSmi1) {
   StackZone zone(thread);
 
   // Write snapshot with object content.
@@ -183,7 +183,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeSmi2) {
+ISOLATE_UNIT_TEST_CASE(SerializeSmi2) {
   StackZone zone(thread);
 
   // Write snapshot with object content.
@@ -259,7 +259,7 @@
 #endif
 }
 
-TEST_CASE(SerializeMints) {
+ISOLATE_UNIT_TEST_CASE(SerializeMints) {
   // Min positive mint.
   CheckMint(Smi::kMaxValue + 1);
   // Min positive mint + 1.
@@ -278,7 +278,7 @@
   CheckMint(kMinInt64 + 1);
 }
 
-TEST_CASE(SerializeDouble) {
+ISOLATE_UNIT_TEST_CASE(SerializeDouble) {
   StackZone zone(thread);
 
   // Write snapshot with object content.
@@ -304,7 +304,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeTrue) {
+ISOLATE_UNIT_TEST_CASE(SerializeTrue) {
   StackZone zone(thread);
 
   // Write snapshot with true object.
@@ -332,7 +332,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeFalse) {
+ISOLATE_UNIT_TEST_CASE(SerializeFalse) {
   StackZone zone(thread);
 
   // Write snapshot with false object.
@@ -358,7 +358,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeCapability) {
+ISOLATE_UNIT_TEST_CASE(SerializeCapability) {
   // Write snapshot with object content.
   const Capability& capability = Capability::Handle(Capability::New(12345));
   MessageWriter writer(true);
@@ -394,7 +394,7 @@
     delete message;                                                            \
   }
 
-TEST_CASE(SerializeSingletons) {
+ISOLATE_UNIT_TEST_CASE(SerializeSingletons) {
   TEST_ROUND_TRIP_IDENTICAL(Object::class_class());
   TEST_ROUND_TRIP_IDENTICAL(Object::type_arguments_class());
   TEST_ROUND_TRIP_IDENTICAL(Object::function_class());
@@ -435,7 +435,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeString) {
+ISOLATE_UNIT_TEST_CASE(SerializeString) {
   TestString("This string shall be serialized");
   TestString("æøå");  // This file is UTF-8 encoded.
   const char* data =
@@ -450,7 +450,7 @@
   // TODO(sgjesse): Add tests with non-BMP characters.
 }
 
-TEST_CASE(SerializeArray) {
+ISOLATE_UNIT_TEST_CASE(SerializeArray) {
   // Write snapshot with object content.
   const int kArrayLength = 10;
   Array& array = Array::Handle(Array::New(kArrayLength));
@@ -485,7 +485,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeArrayWithTypeArgument) {
+ISOLATE_UNIT_TEST_CASE(SerializeArrayWithTypeArgument) {
   // Write snapshot with object content.
   const int kArrayLength = 10;
   Array& array =
@@ -569,7 +569,7 @@
   ExpectEncodeFail(&root);
 }
 
-TEST_CASE(SerializeEmptyArray) {
+ISOLATE_UNIT_TEST_CASE(SerializeEmptyArray) {
   // Write snapshot with object content.
   const int kArrayLength = 0;
   Array& array = Array::Handle(Array::New(kArrayLength));
@@ -595,7 +595,7 @@
   delete message;
 }
 
-TEST_CASE(SerializeByteArray) {
+ISOLATE_UNIT_TEST_CASE(SerializeByteArray) {
   // Write snapshot with object content.
   const int kTypedDataLength = 256;
   TypedData& typed_data = TypedData::Handle(
@@ -672,7 +672,7 @@
     delete message;                                                            \
   }
 
-TEST_CASE(SerializeTypedArray) {
+ISOLATE_UNIT_TEST_CASE(SerializeTypedArray) {
   TEST_TYPED_ARRAY(Int8, int8_t);
   TEST_TYPED_ARRAY(Uint8, uint8_t);
   TEST_TYPED_ARRAY(Int16, int16_t);
@@ -685,7 +685,7 @@
   TEST_TYPED_ARRAY(Float64, double);
 }
 
-TEST_CASE(SerializeExternalTypedArray) {
+ISOLATE_UNIT_TEST_CASE(SerializeExternalTypedArray) {
   TEST_EXTERNAL_TYPED_ARRAY(Int8, int8_t);
   TEST_EXTERNAL_TYPED_ARRAY(Uint8, uint8_t);
   TEST_EXTERNAL_TYPED_ARRAY(Int16, int16_t);
@@ -698,7 +698,7 @@
   TEST_EXTERNAL_TYPED_ARRAY(Float64, double);
 }
 
-TEST_CASE(SerializeEmptyByteArray) {
+ISOLATE_UNIT_TEST_CASE(SerializeEmptyByteArray) {
   // Write snapshot with object content.
   const int kTypedDataLength = 0;
   TypedData& typed_data = TypedData::Handle(
@@ -786,7 +786,7 @@
   }
 }
 
-TEST_CASE(SerializeScript) {
+ISOLATE_UNIT_TEST_CASE(SerializeScript) {
   const char* kScriptChars =
       "class A {\n"
       "  static bar() { return 42; }\n"
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index 691924e..6c5e1cf 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -11,6 +11,7 @@
 #ifndef PRODUCT
 
 static RawObject* ExecuteScript(const char* script) {
+  TransitionVMToNative transition(Thread::Current());
   Dart_Handle h_lib = TestCase::LoadTestScript(script, NULL);
   EXPECT_VALID(h_lib);
   Library& lib = Library::Handle();
@@ -21,7 +22,7 @@
   return Api::UnwrapHandle(h_lib);
 }
 
-TEST_CASE(SourceReport_Coverage_NoCalls) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_NoCalls) {
   char buffer[1024];
   const char* kScript =
       "main() {\n"
@@ -50,7 +51,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_SimpleCall) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_SimpleCall) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -94,7 +95,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_ForceCompile) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_ForceCompile) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -139,7 +140,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_UnusedClass_NoForceCompile) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_NoForceCompile) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -181,7 +182,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompile) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompile) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -224,7 +225,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompileError) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_UnusedClass_ForceCompileError) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -270,7 +271,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_NestedFunctions) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_NestedFunctions) {
   char buffer[1024];
   const char* kScript =
       "helper0() {\n"
@@ -325,7 +326,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_RestrictedRange) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_RestrictedRange) {
   char buffer[1024];
   const char* kScript =
       "helper0() {\n"
@@ -376,7 +377,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_Coverage_AllFunctions) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_AllFunctions) {
   const char* kScript =
       "helper0() {}\n"
       "helper1() {}\n"
@@ -415,7 +416,7 @@
   EXPECT_SUBSTRING("\"scriptIndex\":2", result);
 }
 
-TEST_CASE(SourceReport_Coverage_AllFunctions_ForceCompile) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_Coverage_AllFunctions_ForceCompile) {
   const char* kScript =
       "helper0() {}\n"
       "helper1() {}\n"
@@ -436,10 +437,7 @@
 
   // We generate a report with all functions in the VM.
   Script& null_script = Script::Handle();
-  {
-    TransitionNativeToVM transition(Thread::Current());
-    report.PrintJSON(&js, null_script);
-  }
+  report.PrintJSON(&js, null_script);
   const char* result = js.ToCString();
 
   // Sanity check the header.
@@ -457,7 +455,7 @@
   EXPECT_SUBSTRING("\"scriptIndex\":2", result);
 }
 
-TEST_CASE(SourceReport_CallSites_SimpleCall) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_SimpleCall) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -503,7 +501,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_CallSites_PolymorphicCall) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_PolymorphicCall) {
   char buffer[1024];
   const char* kScript =
       "class Common {\n"
@@ -577,7 +575,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_MultipleReports) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_MultipleReports) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
@@ -625,7 +623,7 @@
       buffer);
 }
 
-TEST_CASE(SourceReport_PossibleBreakpoints_Simple) {
+ISOLATE_UNIT_TEST_CASE(SourceReport_PossibleBreakpoints_Simple) {
   char buffer[1024];
   const char* kScript =
       "helper0() {}\n"
diff --git a/runtime/vm/stack_frame_test.cc b/runtime/vm/stack_frame_test.cc
index 896c8bd..1fa5faf 100644
--- a/runtime/vm/stack_frame_test.cc
+++ b/runtime/vm/stack_frame_test.cc
@@ -85,6 +85,8 @@
 
   Dart_Handle index = Dart_GetNativeArgument(args, 0);
   Dart_Handle name = Dart_GetNativeArgument(args, 1);
+
+  TransitionNativeToVM transition(thread);
   const Smi& frame_index_smi = Smi::CheckedHandle(Api::UnwrapHandle(index));
   const char* expected_name =
       String::CheckedHandle(Api::UnwrapHandle(name)).ToCString();
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 82e4767..8b1a357 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -178,7 +178,7 @@
       }
       Isolate* isolate = thread->isolate();
       if (isolate->heap()->NeedsGarbageCollection()) {
-        isolate->heap()->CollectAllGarbage();
+        isolate->heap()->CollectMostGarbage();
       }
     }
 #ifndef PRODUCT
diff --git a/runtime/vm/stub_code.h b/runtime/vm/stub_code.h
index 6e3b534..5dc798b 100644
--- a/runtime/vm/stub_code.h
+++ b/runtime/vm/stub_code.h
@@ -21,7 +21,7 @@
 // List of stubs created in the VM isolate, these stubs are shared by different
 // isolates running in this dart process.
 #if !defined(TARGET_ARCH_DBC)
-#define VM_STUB_CODE_LIST(V)                                                   \
+#define VM_STUB_CODE_LIST_ARCH_INDEPENDENT(V)                                  \
   V(GetCStackPointer)                                                          \
   V(JumpToFrame)                                                               \
   V(RunExceptionHandler)                                                       \
@@ -85,6 +85,19 @@
   V(StackOverflowSharedWithFPURegs)                                            \
   V(StackOverflowSharedWithoutFPURegs)
 
+#if defined(TARGET_ARCH_X64)
+#define VM_STUB_CODE_LIST_ARCH_SPECIFIC(V)                                     \
+  V(OneArgCheckInlineCacheWithExactnessCheck)                                  \
+  V(OneArgOptimizedCheckInlineCacheWithExactnessCheck)
+
+#else
+#define VM_STUB_CODE_LIST_ARCH_SPECIFIC(V)
+#endif
+
+#define VM_STUB_CODE_LIST(V)                                                   \
+  VM_STUB_CODE_LIST_ARCH_INDEPENDENT(V)                                        \
+  VM_STUB_CODE_LIST_ARCH_SPECIFIC(V)
+
 #else
 #define VM_STUB_CODE_LIST(V)                                                   \
   V(LazyCompile)                                                               \
@@ -220,7 +233,8 @@
       intptr_t num_args,
       const RuntimeEntry& handle_ic_miss,
       Token::Kind kind,
-      bool optimized = false);
+      bool optimized = false,
+      bool exactness_check = false);
   static void GenerateUsageCounterIncrement(Assembler* assembler,
                                             Register temp_reg);
   static void GenerateOptimizedUsageCounterIncrement(Assembler* assembler);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index c28d7c2..89b2acf 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -817,7 +817,10 @@
 
     // Get the class index and insert it into the tags.
     // R8: size and bit tags.
-    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ LoadImmediate(TMP, tags);
     __ orr(R8, R8, Operand(TMP));
     __ str(R8, FieldAddress(R0, Array::tags_offset()));  // Store tags.
   }
@@ -1054,7 +1057,10 @@
 
     // Get the class index and insert it into the tags.
     // R9: size and bit tags.
-    __ LoadImmediate(IP, RawObject::ClassIdTag::encode(cid));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ LoadImmediate(IP, tags);
     __ orr(R9, R9, Operand(IP));
     __ str(R9, FieldAddress(R0, Context::tags_offset()));
 
@@ -1139,8 +1145,8 @@
   // Spilled: R1, R2, R3
   // R0: Address being stored
   __ ldr(TMP, FieldAddress(R0, Object::tags_offset()));
-  __ tst(TMP, Operand(1 << RawObject::kRememberedBit));
-  __ b(&add_to_buffer, EQ);
+  __ tst(TMP, Operand(1 << RawObject::kOldAndNotRememberedBit));
+  __ b(&add_to_buffer, NE);
   __ Ret();
 
   __ Bind(&add_to_buffer);
@@ -1154,7 +1160,7 @@
 #if !defined(USING_SIMULATOR)
     ASSERT(OS::NumberOfAvailableProcessors() <= 1);
 #endif
-    __ orr(R2, R2, Operand(1 << RawObject::kRememberedBit));
+    __ bic(R2, R2, Operand(1 << RawObject::kOldAndNotRememberedBit));
     __ str(R2, FieldAddress(R0, Object::tags_offset()));
   } else {
     // Atomically set the remembered bit of the object header.
@@ -1164,7 +1170,7 @@
     Label retry;
     __ Bind(&retry);
     __ ldrex(R2, R3);
-    __ orr(R2, R2, Operand(1 << RawObject::kRememberedBit));
+    __ bic(R2, R2, Operand(1 << RawObject::kOldAndNotRememberedBit));
     __ strex(R1, R2, R3);
     __ cmp(R1, Operand(1));
     __ b(&retry, EQ);
@@ -1210,9 +1216,6 @@
 //   SP + 0 : type arguments object (only if class is parameterized).
 void StubCode::GenerateAllocationStubForClass(Assembler* assembler,
                                               const Class& cls) {
-  // Must load pool pointer before being able to patch.
-  Register new_pp = NOTFP;
-  __ LoadPoolPointer(new_pp);
   // The generated code is different if the class is parameterized.
   const bool is_cls_parameterized = cls.NumTypeArguments() > 0;
   ASSERT(!is_cls_parameterized ||
@@ -1256,6 +1259,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     __ LoadImmediate(R2, tags);
     __ str(R2, Address(R0, Instance::tags_offset()));
     __ add(R0, R0, Operand(kHeapObjectTag));
@@ -1488,7 +1492,9 @@
     intptr_t num_args,
     const RuntimeEntry& handle_ic_miss,
     Token::Kind kind,
-    bool optimized) {
+    bool optimized,
+    bool exactness_check /* = false */) {
+  ASSERT(!exactness_check);
   __ CheckCodePointer();
   ASSERT(num_args == 1 || num_args == 2);
 #if defined(DEBUG)
@@ -1570,7 +1576,7 @@
     __ Bind(&update);
 
     const intptr_t entry_size =
-        ICData::TestEntryLengthFor(num_args) * kWordSize;
+        ICData::TestEntryLengthFor(num_args, exactness_check) * kWordSize;
     __ AddImmediate(R8, entry_size);  // Next entry.
 
     __ CompareImmediate(R2, Smi::RawValue(kIllegalCid));  // Done?
@@ -2541,7 +2547,8 @@
   __ CompareImmediate(R2, Smi::RawValue(kIllegalCid));
   __ b(&miss, EQ);
 
-  const intptr_t entry_length = ICData::TestEntryLengthFor(1) * kWordSize;
+  const intptr_t entry_length =
+      ICData::TestEntryLengthFor(1, /*tracking_exactness=*/false) * kWordSize;
   __ AddImmediate(R8, entry_length);  // Next entry.
   __ b(&loop);
 
@@ -2575,7 +2582,8 @@
   __ CompareImmediate(R2, Smi::RawValue(kIllegalCid));
   __ b(&miss, EQ);
 
-  const intptr_t entry_length = ICData::TestEntryLengthFor(1) * kWordSize;
+  const intptr_t entry_length =
+      ICData::TestEntryLengthFor(1, /*tracking_exactness=*/false) * kWordSize;
   __ AddImmediate(R8, entry_length);  // Next entry.
   __ b(&loop);
 
diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
index 8e438bf..306900e 100644
--- a/runtime/vm/stub_code_arm64.cc
+++ b/runtime/vm/stub_code_arm64.cc
@@ -858,7 +858,10 @@
   __ csel(R1, ZR, R1, HI);
 
   // Get the class index and insert it into the tags.
-  __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
+  uint32_t tags = 0;
+  tags = RawObject::ClassIdTag::update(cid, tags);
+  tags = RawObject::NewBit::update(true, tags);
+  __ LoadImmediate(TMP, tags);
   __ orr(R1, R1, Operand(TMP));
   __ StoreFieldToOffset(R1, R0, Array::tags_offset());
 
@@ -1235,7 +1238,10 @@
 
     // Get the class index and insert it into the tags.
     // R2: size and bit tags.
-    __ LoadImmediate(TMP, RawObject::ClassIdTag::encode(cid));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ LoadImmediate(TMP, tags);
     __ orr(R2, R2, Operand(TMP));
     __ StoreFieldToOffset(R2, R0, Context::tags_offset());
 
@@ -1313,7 +1319,7 @@
   // Check whether this object has already been remembered. Skip adding to the
   // store buffer if the object is in the store buffer already.
   __ LoadFieldFromOffset(TMP, R0, Object::tags_offset(), kWord);
-  __ tbz(&add_to_buffer, TMP, RawObject::kRememberedBit);
+  __ tbnz(&add_to_buffer, TMP, RawObject::kOldAndNotRememberedBit);
   __ ret();
 
   __ Bind(&add_to_buffer);
@@ -1331,7 +1337,7 @@
   Label retry;
   __ Bind(&retry);
   __ ldxr(R2, R3, kWord);
-  __ orri(R2, R2, Immediate(1 << RawObject::kRememberedBit));
+  __ AndImmediate(R2, R2, ~(1 << RawObject::kOldAndNotRememberedBit));
   __ stxr(R1, R2, R3, kWord);
   __ cbnz(&retry, R1);
 
@@ -1422,6 +1428,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     __ LoadImmediate(R0, tags);
     // 64 bit store also zeros the hash_field.
     __ StoreToOffset(R0, R2, Instance::tags_offset());
@@ -1653,7 +1660,9 @@
     intptr_t num_args,
     const RuntimeEntry& handle_ic_miss,
     Token::Kind kind,
-    bool optimized) {
+    bool optimized,
+    bool exactness_check /* = false */) {
+  ASSERT(!exactness_check);
   ASSERT(num_args == 1 || num_args == 2);
 #if defined(DEBUG)
   {
@@ -1737,7 +1746,7 @@
     __ Bind(&update);
 
     const intptr_t entry_size =
-        ICData::TestEntryLengthFor(num_args) * kWordSize;
+        ICData::TestEntryLengthFor(num_args, exactness_check) * kWordSize;
     __ AddImmediate(R6, entry_size);  // Next entry.
 
     __ CompareImmediate(R2, Smi::RawValue(kIllegalCid));  // Done?
@@ -2782,7 +2791,8 @@
   __ CompareImmediate(R2, Smi::RawValue(kIllegalCid));
   __ b(&miss, EQ);
 
-  const intptr_t entry_length = ICData::TestEntryLengthFor(1) * kWordSize;
+  const intptr_t entry_length =
+      ICData::TestEntryLengthFor(1, /*tracking_exactness=*/false) * kWordSize;
   __ AddImmediate(R8, entry_length);  // Next entry.
   __ b(&loop);
 
@@ -2816,7 +2826,8 @@
   __ CompareImmediate(R2, Smi::RawValue(kIllegalCid));
   __ b(&miss, EQ);
 
-  const intptr_t entry_length = ICData::TestEntryLengthFor(1) * kWordSize;
+  const intptr_t entry_length =
+      ICData::TestEntryLengthFor(1, /*tracking_exactness=*/false) * kWordSize;
   __ AddImmediate(R8, entry_length);  // Next entry.
   __ b(&loop);
 
diff --git a/runtime/vm/stub_code_arm64_test.cc b/runtime/vm/stub_code_arm64_test.cc
index 091cb42..a194b7c 100644
--- a/runtime/vm/stub_code_arm64_test.cc
+++ b/runtime/vm/stub_code_arm64_test.cc
@@ -50,7 +50,7 @@
   __ ret();
 }
 
-TEST_CASE(CallRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const int length = 10;
@@ -87,7 +87,7 @@
   __ ret();  // Return value is in R0.
 }
 
-TEST_CASE(CallLeafRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallLeafRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const char* str_value = "abAB";
diff --git a/runtime/vm/stub_code_arm_test.cc b/runtime/vm/stub_code_arm_test.cc
index e717208..2741204 100644
--- a/runtime/vm/stub_code_arm_test.cc
+++ b/runtime/vm/stub_code_arm_test.cc
@@ -46,11 +46,10 @@
   __ CallRuntime(kAllocateArrayRuntimeEntry, argc);
   __ AddImmediate(SP, argc * kWordSize);
   __ Pop(R0);  // Pop return value from return slot.
-  __ LeaveDartFrame();
-  __ Ret();
+  __ LeaveDartFrameAndReturn();
 }
 
-TEST_CASE(CallRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const int length = 10;
@@ -83,11 +82,10 @@
   __ LoadObject(R2, rhs_index);
   __ LoadObject(R3, length);
   __ CallRuntime(kCaseInsensitiveCompareUC16RuntimeEntry, 4);
-  __ LeaveDartFrame();
-  __ Ret();  // Return value is in R0.
+  __ LeaveDartFrameAndReturn();  // Return value is in R0.
 }
 
-TEST_CASE(CallLeafRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallLeafRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const char* str_value = "abAB";
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 1743093..cecf6c2 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -666,7 +666,10 @@
     __ Bind(&done);
 
     // Get the class index and insert it into the tags.
-    __ orl(EDI, Immediate(RawObject::ClassIdTag::encode(cid)));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ orl(EDI, Immediate(tags));
     __ movl(FieldAddress(EAX, Array::tags_offset()), EDI);  // Tags.
   }
   // EAX: new object start as a tagged pointer.
@@ -910,7 +913,10 @@
       // EAX: new object.
       // EDX: number of context variables.
       // EBX: size and bit tags.
-      __ orl(EBX, Immediate(RawObject::ClassIdTag::encode(cid)));
+      uint32_t tags = 0;
+      tags = RawObject::ClassIdTag::update(cid, tags);
+      tags = RawObject::NewBit::update(true, tags);
+      __ orl(EBX, Immediate(tags));
       __ movl(FieldAddress(EAX, Context::tags_offset()), EBX);  // Tags.
     }
 
@@ -985,8 +991,8 @@
   // Spilled: EAX, ECX
   // EDX: Address being stored
   __ movl(EAX, FieldAddress(EDX, Object::tags_offset()));
-  __ testl(EAX, Immediate(1 << RawObject::kRememberedBit));
-  __ j(EQUAL, &add_to_buffer, Assembler::kNearJump);
+  __ testl(EAX, Immediate(1 << RawObject::kOldAndNotRememberedBit));
+  __ j(NOT_EQUAL, &add_to_buffer, Assembler::kNearJump);
   __ popl(ECX);
   __ popl(EAX);
   __ ret();
@@ -995,10 +1001,10 @@
   // EDX: Address being stored
   // EAX: Current tag value
   __ Bind(&add_to_buffer);
-  // lock+orl is an atomic read-modify-write.
+  // lock+andl is an atomic read-modify-write.
   __ lock();
-  __ orl(FieldAddress(EDX, Object::tags_offset()),
-         Immediate(1 << RawObject::kRememberedBit));
+  __ andl(FieldAddress(EDX, Object::tags_offset()),
+          Immediate(~(1 << RawObject::kOldAndNotRememberedBit)));
 
   // Load the StoreBuffer block out of the thread. Then load top_ out of the
   // StoreBufferBlock and add the address to the pointers_.
@@ -1091,6 +1097,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     __ movl(Address(EAX, Instance::tags_offset()), Immediate(tags));
     __ addl(EAX, Immediate(kHeapObjectTag));
 
@@ -1319,7 +1326,9 @@
     intptr_t num_args,
     const RuntimeEntry& handle_ic_miss,
     Token::Kind kind,
-    bool optimized) {
+    bool optimized,
+    bool exactness_check /* = false */) {
+  ASSERT(!exactness_check);  // Not supported.
   ASSERT(num_args == 1 || num_args == 2);
 #if defined(DEBUG)
   {
@@ -1383,7 +1392,8 @@
   bool optimize = kind == Token::kILLEGAL;
   const intptr_t target_offset = ICData::TargetIndexFor(num_args) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
-  const intptr_t entry_size = ICData::TestEntryLengthFor(num_args) * kWordSize;
+  const intptr_t entry_size =
+      ICData::TestEntryLengthFor(num_args, exactness_check) * kWordSize;
 
   __ Bind(&loop);
   for (int unroll = optimize ? 4 : 2; unroll >= 0; unroll--) {
diff --git a/runtime/vm/stub_code_ia32_test.cc b/runtime/vm/stub_code_ia32_test.cc
index e00932a..a4b5d5e 100644
--- a/runtime/vm/stub_code_ia32_test.cc
+++ b/runtime/vm/stub_code_ia32_test.cc
@@ -50,7 +50,7 @@
   __ ret();
 }
 
-TEST_CASE(CallRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const int length = 10;
@@ -90,7 +90,7 @@
   __ ret();  // Return value is in EAX.
 }
 
-TEST_CASE(CallLeafRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallLeafRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const char* str_value = "abAB";
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 79293ad..1158117 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -771,7 +771,10 @@
     __ Bind(&done);
 
     // Get the class index and insert it into the tags.
-    __ orq(RDI, Immediate(RawObject::ClassIdTag::encode(cid)));
+    uint32_t tags = 0;
+    tags = RawObject::ClassIdTag::update(cid, tags);
+    tags = RawObject::NewBit::update(true, tags);
+    __ orq(RDI, Immediate(tags));
     __ movq(FieldAddress(RAX, Array::tags_offset()), RDI);  // Tags.
   }
 
@@ -1174,7 +1177,10 @@
       // RAX: new object.
       // R10: number of context variables.
       // R13: size and bit tags.
-      __ orq(R13, Immediate(RawObject::ClassIdTag::encode(cid)));
+      uint32_t tags = 0;
+      tags = RawObject::ClassIdTag::update(cid, tags);
+      tags = RawObject::NewBit::update(true, tags);
+      __ orq(R13, Immediate(tags));
       __ movq(FieldAddress(RAX, Context::tags_offset()), R13);  // Tags.
     }
 
@@ -1257,8 +1263,8 @@
   // store buffer if the object is in the store buffer already.
   // RDX: Address being stored
   __ movl(TMP, FieldAddress(RDX, Object::tags_offset()));
-  __ testl(TMP, Immediate(1 << RawObject::kRememberedBit));
-  __ j(EQUAL, &add_to_buffer, Assembler::kNearJump);
+  __ testl(TMP, Immediate(1 << RawObject::kOldAndNotRememberedBit));
+  __ j(NOT_EQUAL, &add_to_buffer, Assembler::kNearJump);
   __ ret();
 
   // Update the tags that this object has been remembered.
@@ -1267,10 +1273,10 @@
   // RDX: Address being stored
   // RAX: Current tag value
   __ Bind(&add_to_buffer);
-  // lock+orl is an atomic read-modify-write.
+  // lock+andl is an atomic read-modify-write.
   __ lock();
-  __ orl(FieldAddress(RDX, Object::tags_offset()),
-         Immediate(1 << RawObject::kRememberedBit));
+  __ andl(FieldAddress(RDX, Object::tags_offset()),
+          Immediate(~(1 << RawObject::kOldAndNotRememberedBit)));
 
   // Save registers being destroyed.
   __ pushq(RAX);
@@ -1361,6 +1367,7 @@
     tags = RawObject::SizeTag::update(instance_size, tags);
     ASSERT(cls.id() != kIllegalCid);
     tags = RawObject::ClassIdTag::update(cls.id(), tags);
+    tags = RawObject::NewBit::update(true, tags);
     // 64 bit store also zeros the identity hash field.
     __ movq(Address(RAX, Instance::tags_offset()), Immediate(tags));
     __ addq(RAX, Immediate(kHeapObjectTag));
@@ -1589,7 +1596,8 @@
     intptr_t num_args,
     const RuntimeEntry& handle_ic_miss,
     Token::Kind kind,
-    bool optimized) {
+    bool optimized,
+    bool exactness_check) {
   ASSERT(num_args == 1 || num_args == 2);
 #if defined(DEBUG)
   {
@@ -1636,9 +1644,9 @@
 
   // Get argument count as Smi into RCX.
   __ movq(RCX, FieldAddress(R10, ArgumentsDescriptor::count_offset()));
-  // Load first argument into R9.
-  __ movq(R9, Address(RSP, RCX, TIMES_4, 0));
-  __ LoadTaggedClassIdMayBeSmi(RAX, R9);
+  // Load first argument into RDX.
+  __ movq(RDX, Address(RSP, RCX, TIMES_4, 0));
+  __ LoadTaggedClassIdMayBeSmi(RAX, RDX);
   // RAX: first argument class ID as Smi.
   if (num_args == 2) {
     // Load second argument into R9.
@@ -1653,6 +1661,8 @@
   const bool optimize = kind == Token::kILLEGAL;
   const intptr_t target_offset = ICData::TargetIndexFor(num_args) * kWordSize;
   const intptr_t count_offset = ICData::CountIndexFor(num_args) * kWordSize;
+  const intptr_t exactness_offset =
+      ICData::ExactnessOffsetFor(num_args) * kWordSize;
 
   __ Bind(&loop);
   for (int unroll = optimize ? 4 : 2; unroll >= 0; unroll--) {
@@ -1670,7 +1680,7 @@
     __ Bind(&update);
 
     const intptr_t entry_size =
-        ICData::TestEntryLengthFor(num_args) * kWordSize;
+        ICData::TestEntryLengthFor(num_args, exactness_check) * kWordSize;
     __ addq(R13, Immediate(entry_size));  // Next entry.
 
     __ cmpq(R9, Immediate(Smi::RawValue(kIllegalCid)));  // Done?
@@ -1716,21 +1726,62 @@
 
   __ Bind(&found);
   // R13: Pointer to an IC data check group.
+  Label call_target_function_through_unchecked_entry;
+  if (exactness_check) {
+    Label exactness_ok;
+    ASSERT(num_args == 1);
+    __ movq(RAX, Address(R13, exactness_offset));
+    __ cmpq(RAX, Immediate(Smi::RawValue(
+                     StaticTypeExactnessState::HasExactSuperType().Encode())));
+    __ j(LESS, &exactness_ok);
+    __ j(EQUAL, &call_target_function_through_unchecked_entry);
+
+    // Check trivial exactness.
+    // Note: RawICData::static_receiver_type_ is guaranteed to be not null
+    // because we only emit calls to this stub when it is not null.
+    __ movq(RCX, FieldAddress(RBX, ICData::static_receiver_type_offset()));
+    __ movq(RCX, FieldAddress(RCX, Type::arguments_offset()));
+    // RAX contains an offset to type arguments in words as a smi,
+    // hence TIMES_4. RDX is guaranteed to be non-smi because it is expected to
+    // have type arguments.
+    __ cmpq(RCX, FieldAddress(RDX, RAX, TIMES_4, 0));
+    __ j(EQUAL, &call_target_function_through_unchecked_entry);
+
+    // Update exactness state (not-exact anymore).
+    __ movq(Address(R13, exactness_offset),
+            Immediate(
+                Smi::RawValue(StaticTypeExactnessState::NotExact().Encode())));
+    __ Bind(&exactness_ok);
+  }
   __ movq(RAX, Address(R13, target_offset));
 
   if (FLAG_optimization_counter_threshold >= 0) {
-    __ Comment("Update caller's counter");
+    __ Comment("Update ICData counter");
     // Ignore overflow.
     __ addq(Address(R13, count_offset), Immediate(Smi::RawValue(1)));
   }
 
-  __ Comment("Call target");
+  __ Comment("Call target (via checked entry point)");
   __ Bind(&call_target_function);
   // RAX: Target function.
   __ movq(CODE_REG, FieldAddress(RAX, Function::code_offset()));
   __ movq(RCX, FieldAddress(RAX, Function::entry_point_offset()));
   __ jmp(RCX);
 
+  if (exactness_check) {
+    __ Bind(&call_target_function_through_unchecked_entry);
+    if (FLAG_optimization_counter_threshold >= 0) {
+      __ Comment("Update ICData counter");
+      // Ignore overflow.
+      __ addq(Address(R13, count_offset), Immediate(Smi::RawValue(1)));
+    }
+    __ Comment("Call target (via unchecked entry point)");
+    __ movq(RAX, Address(R13, target_offset));
+    __ movq(CODE_REG, FieldAddress(RAX, Function::code_offset()));
+    __ movq(RCX, FieldAddress(RAX, Function::unchecked_entry_point_offset()));
+    __ jmp(RCX);
+  }
+
 #if !defined(PRODUCT)
   if (!optimized) {
     __ Bind(&stepping);
@@ -1761,6 +1812,14 @@
       assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL);
 }
 
+void StubCode::GenerateOneArgCheckInlineCacheWithExactnessCheckStub(
+    Assembler* assembler) {
+  GenerateUsageCounterIncrement(assembler, RCX);
+  GenerateNArgsCheckInlineCacheStub(
+      assembler, 1, kInlineCacheMissHandlerOneArgRuntimeEntry, Token::kILLEGAL,
+      /*optimized=*/false, /*exactness_check=*/true);
+}
+
 void StubCode::GenerateTwoArgsCheckInlineCacheStub(Assembler* assembler) {
   GenerateUsageCounterIncrement(assembler, RCX);
   GenerateNArgsCheckInlineCacheStub(assembler, 2,
@@ -1802,7 +1861,16 @@
   GenerateOptimizedUsageCounterIncrement(assembler);
   GenerateNArgsCheckInlineCacheStub(assembler, 1,
                                     kInlineCacheMissHandlerOneArgRuntimeEntry,
-                                    Token::kILLEGAL, true /* optimized */);
+                                    Token::kILLEGAL, /*optimized=*/true);
+}
+
+void StubCode::GenerateOneArgOptimizedCheckInlineCacheWithExactnessCheckStub(
+    Assembler* assembler) {
+  GenerateOptimizedUsageCounterIncrement(assembler);
+  GenerateNArgsCheckInlineCacheStub(assembler, 1,
+                                    kInlineCacheMissHandlerOneArgRuntimeEntry,
+                                    Token::kILLEGAL, /*optimized=*/true,
+                                    /*exactness_check=*/true);
 }
 
 void StubCode::GenerateTwoArgsOptimizedCheckInlineCacheStub(
@@ -1810,7 +1878,7 @@
   GenerateOptimizedUsageCounterIncrement(assembler);
   GenerateNArgsCheckInlineCacheStub(assembler, 2,
                                     kInlineCacheMissHandlerTwoArgsRuntimeEntry,
-                                    Token::kILLEGAL, true /* optimized */);
+                                    Token::kILLEGAL, /*optimized=*/true);
 }
 
 // Intermediary stub between a static call and its target. ICData contains
@@ -2721,7 +2789,8 @@
   __ testq(R9, R9);
   __ j(ZERO, &miss, Assembler::kNearJump);
 
-  const intptr_t entry_length = ICData::TestEntryLengthFor(1) * kWordSize;
+  const intptr_t entry_length =
+      ICData::TestEntryLengthFor(1, /*tracking_exactness=*/false) * kWordSize;
   __ addq(R13, Immediate(entry_length));  // Next entry.
   __ jmp(&loop);
 
@@ -2757,7 +2826,8 @@
   __ testq(R9, R9);
   __ j(ZERO, &miss, Assembler::kNearJump);
 
-  const intptr_t entry_length = ICData::TestEntryLengthFor(1) * kWordSize;
+  const intptr_t entry_length =
+      ICData::TestEntryLengthFor(1, /*tracking_exactness=*/false) * kWordSize;
   __ addq(R13, Immediate(entry_length));  // Next entry.
   __ jmp(&loop);
 
diff --git a/runtime/vm/stub_code_x64_test.cc b/runtime/vm/stub_code_x64_test.cc
index b460282..c9d9474 100644
--- a/runtime/vm/stub_code_x64_test.cc
+++ b/runtime/vm/stub_code_x64_test.cc
@@ -50,7 +50,7 @@
   __ ret();
 }
 
-TEST_CASE(CallRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const int length = 10;
@@ -87,7 +87,7 @@
   __ ret();  // Return value is in RAX.
 }
 
-TEST_CASE(CallLeafRuntimeStubCode) {
+ISOLATE_UNIT_TEST_CASE(CallLeafRuntimeStubCode) {
   extern const Function& RegisterFakeFunction(const char* name,
                                               const Code& code);
   const char* str_value = "abAB";
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index bf63026..28c6b68 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -183,6 +183,7 @@
   V(ClosureData, "ClosureData")                                                \
   V(SignatureData, "SignatureData")                                            \
   V(RedirectionData, "RedirectionData")                                        \
+  V(NativeEntryData, "NativeEntryData")                                        \
   V(Field, "Field")                                                            \
   V(LiteralToken, "LiteralToken")                                              \
   V(TokenStream, "TokenStream")                                                \
@@ -464,7 +465,8 @@
   V(vm_entry_point, "vm:entry-point")                                          \
   V(Get, "get")                                                                \
   V(Set, "set")                                                                \
-  V(vm_trace_entrypoints, "vm:testing.unsafe.trace-entrypoints-fn")
+  V(vm_trace_entrypoints, "vm:testing.unsafe.trace-entrypoints-fn")            \
+  V(BoundsCheckForPartialInstantiation, "_boundsCheckForPartialInstantiation")
 
 // Contains a list of frequently used strings in a canonicalized form. This
 // list is kept in the vm_isolate in order to share the copy across isolates
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 8e3761f..a188d2b1c 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -92,10 +92,8 @@
       deferred_interrupts_mask_(0),
       deferred_interrupts_(0),
       stack_overflow_count_(0),
-      cha_(NULL),
       hierarchy_info_(NULL),
       type_usage_info_(NULL),
-      deopt_id_(0),
       pending_functions_(GrowableObjectArray::null()),
       active_exception_(Object::null()),
       active_stacktrace_(Object::null()),
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 5ad3d6e..65402de 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -22,7 +22,7 @@
 class AbstractType;
 class ApiLocalScope;
 class Array;
-class CHA;
+class CompilerState;
 class Class;
 class Code;
 class CompilerStats;
@@ -304,6 +304,9 @@
   void ScheduleInterruptsLocked(uword interrupt_bits);
   RawError* HandleInterrupts();
   uword GetAndClearInterrupts();
+  bool HasScheduledInterrupts() const {
+    return (stack_limit_ & kInterruptsMask) != 0;
+  }
 
   // OSThread corresponding to this thread.
   OSThread* os_thread() const { return os_thread_; }
@@ -366,15 +369,9 @@
   // Has |this| exited Dart code?
   bool HasExitedDartCode() const;
 
-  // The (topmost) CHA for the compilation in this thread.
-  CHA* cha() const {
-    ASSERT(isolate_ != NULL);
-    return cha_;
-  }
-
-  void set_cha(CHA* value) {
-    ASSERT(isolate_ != NULL);
-    cha_ = value;
+  CompilerState& compiler_state() {
+    ASSERT(compiler_state_ != nullptr);
+    return *compiler_state_;
   }
 
   HierarchyInfo* hierarchy_info() const {
@@ -557,35 +554,6 @@
   static bool ObjectAtOffset(intptr_t offset, Object* object);
   static intptr_t OffsetFromThread(const RuntimeEntry* runtime_entry);
 
-  static const intptr_t kNoDeoptId = -1;
-  static const intptr_t kDeoptIdStep = 2;
-  static const intptr_t kDeoptIdBeforeOffset = 0;
-  static const intptr_t kDeoptIdAfterOffset = 1;
-  intptr_t deopt_id() const { return deopt_id_; }
-  void set_deopt_id(int value) {
-    ASSERT(value >= 0);
-    deopt_id_ = value;
-  }
-  intptr_t GetNextDeoptId() {
-    ASSERT(deopt_id_ != kNoDeoptId);
-    const intptr_t id = deopt_id_;
-    deopt_id_ += kDeoptIdStep;
-    return id;
-  }
-
-  static intptr_t ToDeoptAfter(intptr_t deopt_id) {
-    ASSERT(IsDeoptBefore(deopt_id));
-    return deopt_id + kDeoptIdAfterOffset;
-  }
-
-  static bool IsDeoptBefore(intptr_t deopt_id) {
-    return (deopt_id % kDeoptIdStep) == kDeoptIdBeforeOffset;
-  }
-
-  static bool IsDeoptAfter(intptr_t deopt_id) {
-    return (deopt_id % kDeoptIdStep) == kDeoptIdAfterOffset;
-  }
-
   LongJumpScope* long_jump_base() const { return long_jump_base_; }
   void set_long_jump_base(LongJumpScope* value) { long_jump_base_ = value; }
 
@@ -816,6 +784,13 @@
   template <class T>
   T* AllocateReusableHandle();
 
+  // Set the current compiler state and return the previous compiler state.
+  CompilerState* SetCompilerState(CompilerState* state) {
+    CompilerState* previous = compiler_state_;
+    compiler_state_ = state;
+    return previous;
+  }
+
   // Accessed from generated code.
   // ** This block of fields must come first! **
   // For AOT cross-compilation, we rely on these members having the same offsets
@@ -883,10 +858,9 @@
   int32_t stack_overflow_count_;
 
   // Compiler state:
-  CHA* cha_;
+  CompilerState* compiler_state_ = nullptr;
   HierarchyInfo* hierarchy_info_;
   TypeUsageInfo* type_usage_info_;
-  intptr_t deopt_id_;  // Compilation specific counter.
   RawGrowableObjectArray* pending_functions_;
 
   // JumpToExceptionHandler state:
@@ -955,6 +929,7 @@
   friend class Simulator;
   friend class StackZone;
   friend class ThreadRegistry;
+  friend class CompilerState;
   DISALLOW_COPY_AND_ASSIGN(Thread);
 };
 
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index 07200fb..561db06 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -287,7 +287,7 @@
   bool* wait_;
 };
 
-TEST_CASE(ManySimpleTasksWithZones) {
+ISOLATE_UNIT_TEST_CASE(ManySimpleTasksWithZones) {
   const int kTaskCount = 10;
   Monitor monitor;
   Monitor sync;
diff --git a/runtime/vm/unicode_test.cc b/runtime/vm/unicode_test.cc
index 0af271c..b8807f1 100644
--- a/runtime/vm/unicode_test.cc
+++ b/runtime/vm/unicode_test.cc
@@ -8,7 +8,7 @@
 
 namespace dart {
 
-TEST_CASE(Utf8Encode) {
+ISOLATE_UNIT_TEST_CASE(Utf8Encode) {
   const intptr_t kInputLen = 3;
   const uint16_t kInput[kInputLen] = {0xe6, 0xe7, 0xe8};  // æøå
   const String& input = String::Handle(String::FromUTF16(kInput, kInputLen));
@@ -27,7 +27,7 @@
   }
 }
 
-TEST_CASE(Utf8Decode) {
+ISOLATE_UNIT_TEST_CASE(Utf8Decode) {
   // Examples from the Unicode specification, chapter 3
   {
     const char* src = "\x41\xC3\xB1\x42";
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index 7ff72fd..f5d7f87 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -632,6 +632,7 @@
   if (Dart_IsError(result)) {
     // Keep load error.
   } else if (isolate->reload_context()->reload_aborted()) {
+    TransitionNativeToVM transition(thread);
     result = Api::NewHandle(thread, isolate->reload_context()->error());
   } else {
     result = Dart_RootLibrary();
diff --git a/runtime/vm/virtual_memory_fuchsia.cc b/runtime/vm/virtual_memory_fuchsia.cc
index 5bc755d..df1bfe8 100644
--- a/runtime/vm/virtual_memory_fuchsia.cc
+++ b/runtime/vm/virtual_memory_fuchsia.cc
@@ -57,17 +57,17 @@
     zx_object_set_property(vmo, ZX_PROP_NAME, name, strlen(name));
   }
 
-  const uint32_t flags = ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE |
-                         (is_executable ? ZX_VM_FLAG_PERM_EXECUTE : 0);
+  const uint32_t flags = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE |
+                         (is_executable ? ZX_VM_PERM_EXECUTE : 0);
   uword address;
-  status = zx_vmar_map_old(zx_vmar_root_self(), 0, vmo, 0, size, flags, &address);
+  status = zx_vmar_map(zx_vmar_root_self(), flags, 0, vmo, 0, size, &address);
   zx_handle_close(vmo);
   if (status != ZX_OK) {
-    LOG_ERR("zx_vmar_map_old(%ld, %u) failed: %s\n", size, flags,
+    LOG_ERR("zx_vmar_map(%u, %ld) failed: %s\n", flags, size,
             zx_status_get_string(status));
     return NULL;
   }
-  LOG_INFO("zx_vmar_map_old(%ld, %u) success\n", size, flags);
+  LOG_INFO("zx_vmar_map(%u,%ld) success\n", flags, size);
 
   MemoryRegion region(reinterpret_cast<void*>(address), size);
   return new VirtualMemory(region, region);
@@ -94,13 +94,13 @@
     zx_object_set_property(vmo, ZX_PROP_NAME, name, strlen(name));
   }
 
-  const uint32_t flags = ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE |
-                         (is_executable ? ZX_VM_FLAG_PERM_EXECUTE : 0);
+  const zx_vm_option_t options = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE |
+                                 (is_executable ? ZX_VM_PERM_EXECUTE : 0);
   uword base;
-  status = zx_vmar_map_old(vmar, 0u, vmo, 0u, allocated_size, flags, &base);
+  status = zx_vmar_map(vmar, options, 0u, vmo, 0u, allocated_size, &base);
   zx_handle_close(vmo);
   if (status != ZX_OK) {
-    LOG_ERR("zx_vmar_map_old(%ld, %u) failed: %s\n", size, flags,
+    LOG_ERR("zx_vmar_map(%u, %ld) failed: %s\n", flags, size,
             zx_status_get_string(status));
     return NULL;
   }
@@ -167,26 +167,25 @@
       prot = 0;
       break;
     case kReadOnly:
-      prot = ZX_VM_FLAG_PERM_READ;
+      prot = ZX_VM_PERM_READ;
       break;
     case kReadWrite:
-      prot = ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE;
+      prot = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE;
       break;
     case kReadExecute:
-      prot = ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_EXECUTE;
+      prot = ZX_VM_PERM_READ | ZX_VM_PERM_EXECUTE;
       break;
     case kReadWriteExecute:
-      prot = ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE |
-             ZX_VM_FLAG_PERM_EXECUTE;
+      prot = ZX_VM_PERM_READ | ZX_VM_PERM_WRITE | ZX_VM_PERM_EXECUTE;
       break;
   }
-  zx_status_t status = zx_vmar_protect_old(zx_vmar_root_self(), page_address,
-                                       end_address - page_address, prot);
+  zx_status_t status = zx_vmar_protect(zx_vmar_root_self(), prot, page_address,
+                                       end_address - page_address);
   if (status != ZX_OK) {
-    FATAL3("zx_vmar_protect_old(%lx, %lx) failed: %s\n", page_address,
+    FATAL3("zx_vmar_protect(%lx, %lx) failed: %s\n", page_address,
            end_address - page_address, zx_status_get_string(status));
   }
-  LOG_INFO("zx_vmar_protect_old(%lx, %lx, %x) success\n", page_address,
+  LOG_INFO("zx_vmar_protect(%lx, %lx, %x) success\n", page_address,
            end_address - page_address, prot);
 }
 
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index b657a32..857219e 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -62,7 +62,6 @@
 # ......dart_server.platform
 # ......dart_shared.platform
 # ......_internal/
-#.........spec.sum
 #.........strong.sum
 #.........dart2js_platform.dill
 #.........dart2js_server_platform.dill
@@ -73,13 +72,10 @@
 #.........vm_platform.dill
 #.........vm_platform_strong.dill
 #.........dev_compiler/
-# ......analysis_server/
-# ......analyzer/
 # ......async/
 # ......collection/
 # ......convert/
 # ......core/
-# ......front_end/
 # ......html/
 # ......_http/
 # ......internal/
@@ -87,7 +83,6 @@
 # ......isolate/
 # ......js/
 # ......js_util/
-# ......kernel/
 # ......math/
 # ......mirrors/
 # ......typed_data/
@@ -242,30 +237,10 @@
 # ]
 _platform_sdk_libraries = _full_sdk_libraries
 
-# Package sources copied to lib/
-_analyzer_source_dirs = [
-  "analyzer",
-  "analysis_server",
-  "front_end",
-  "kernel",
-]
-
 # From here down to the copy_trees() invocation, we collect all the information
 # about trees that need to be copied in the list of scopes, copy_tree_specs.
 copy_tree_specs = []
 
-# This loop generates rules for copying analyzer sources into lib/
-foreach(analyzer_source_dir, _analyzer_source_dirs) {
-  copy_tree_specs += [ {
-        target = "copy_${analyzer_source_dir}_source_dir"
-        visibility = [ ":copy_analyzer_sources" ]
-        source = "../pkg/$analyzer_source_dir"
-        dest = "$root_out_dir/dart-sdk/lib/$analyzer_source_dir"
-        ignore_patterns =
-            "*.svn,doc,*.py,*.gypi,*.sh,.gitignore,packages,test,testcases"
-      } ]
-}
-
 # This rule copies dartdoc templates to
 # bin/snapshots/resources/dartdoc/templates
 copy_tree_specs += [ {
@@ -489,15 +464,6 @@
   }
 }
 
-# This is the main rule for copying analyzer sources to lib/
-group("copy_analyzer_sources") {
-  visibility = [ ":create_common_sdk" ]
-  public_deps = []
-  foreach(analyzer_source_dir, _analyzer_source_dirs) {
-    public_deps += [ ":copy_${analyzer_source_dir}_source_dir" ]
-  }
-}
-
 # This rule writes the .packages file for dartdoc resources.
 write_file("$root_out_dir/dart-sdk/bin/snapshots/resources/dartdoc/.packages",
            "dartdoc:.")
@@ -516,11 +482,9 @@
   visibility = [ ":create_common_sdk" ]
   deps = [
     ":copy_libraries",
-    "../utils/dartanalyzer:generate_summary_spec",
     "../utils/dartanalyzer:generate_summary_strong",
   ]
   sources = [
-    "$root_gen_dir/spec.sum",
     "$root_gen_dir/strong.sum",
   ]
   outputs = [
@@ -952,7 +916,6 @@
   visibility = [ ":create_sdk" ]
   public_deps = [
     ":copy_analysis_summaries",
-    ":copy_analyzer_sources",
     ":copy_api_readme",
     ":copy_dart",
     ":copy_dartdoc_files",
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index 494f471..beb982e 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -289,7 +289,11 @@
    * Creates a future that runs its computation after a delay.
    *
    * The [computation] will be executed after the given [duration] has passed,
-   * and the future is completed with the result of the computation,
+   * and the future is completed with the result of the computation.
+   *
+   * If [computation] returns a future,
+   * the future returned by this constructor will complete with the value or
+   * error of that future.
    *
    * If the duration is 0 or less,
    * it completes no sooner than in the next event-loop iteration,
@@ -321,11 +325,12 @@
    * Waits for multiple futures to complete and collects their results.
    *
    * Returns a future which will complete once all the provided futures
-   * have completed, either with their results, or with an error if either
+   * have completed, either with their results, or with an error if any
    * of the provided futures fail.
    *
    * The value of the returned future will be a list of all the values that
-   * were produced.
+   * were produced in the order that the futures are provided by iterating
+   * [futures].
    *
    * If any future completes with an error,
    * then the returned future completes with that error.
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index f8ef8ed..a0efcb7 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -58,6 +58,13 @@
  * If a listener is added to a broadcast stream while an event is being fired,
  * that listener will not receive the event currently being fired.
  * If a listener is canceled, it immediately stops receiving events.
+ * Listening on a broadcast stream can be treated as listening on a new stream
+ * containing only the events that have not yet been emitted when the [listen]
+ * call occurs.
+ * For example, the [first] getter listens to the stream, then returns the first
+ * event that listener receives.
+ * This is not necessarily the first even emitted by the stream, but the first
+ * of the *remaining* events of the broadcast stream.
  *
  * When the "done" event is fired, subscribers are unsubscribed before
  * receiving the event. After the event has been sent, the stream has no
@@ -334,7 +341,7 @@
   /**
    * Adds a subscription to this stream.
    *
-   * Returns a [StreamSubscription] which handles events from the stream using
+   * Returns a [StreamSubscription] which handles events from this stream using
    * the provided [onData], [onError] and [onDone] handlers.
    * The handlers can be changed on the subscription, but they start out
    * as the provided functions.
@@ -348,10 +355,10 @@
    * The [onError] callback must be of type `void onError(error)` or
    * `void onError(error, StackTrace stackTrace)`. If [onError] accepts
    * two arguments it is called with the error object and the stack trace
-   * (which could be `null` if the stream itself received an error without
+   * (which could be `null` if this stream itself received an error without
    * stack trace).
    * Otherwise it is called with just the error object.
-   * If [onError] is omitted, any errors on the stream are considered unhandled,
+   * If [onError] is omitted, any errors on this stream are considered unhandled,
    * and will be passed to the current [Zone]'s error handler.
    * By default unhandled async errors are treated
    * as if they were uncaught top-level errors.
@@ -413,7 +420,7 @@
    * mapped to a new event.
    *
    * This acts like [map], except that [convert] may return a [Future],
-   * and in that case, the stream waits for that future to complete before
+   * and in that case, this stream waits for that future to complete before
    * continuing with its result.
    *
    * The returned stream is a broadcast stream if this stream is.
@@ -540,10 +547,11 @@
    * by the [onError] function.
    *
    * The [onError] callback must be of type `void onError(error)` or
-   * `void onError(error, StackTrace stackTrace)`. Depending on the function
-   * type the stream either invokes [onError] with or without a stack
-   * trace. The stack trace argument might be `null` if the stream itself
-   * received an error without stack trace.
+   * `void onError(error, StackTrace stackTrace)`.
+   * The function type determines whether [onError] is invoked with a stack
+   * trace argument.
+   * The stack trace argument may be `null` if this stream received an error
+   * without a stack trace.
    *
    * An asynchronous error `error` is matched by a test function if
    *`test(error)` returns true. If [test] is omitted, every error is considered
@@ -551,7 +559,7 @@
    *
    * If the error is intercepted, the [onError] function can decide what to do
    * with it. It can throw if it wants to raise a new (or the same) error,
-   * or simply return to make the stream forget the error.
+   * or simply return to make this stream forget the error.
    * If the received `error` value is thrown again by the [onError] function,
    * it acts like a `rethrow` and it is emitted along with its original
    * stack trace, not the stack trace of the `throw` inside [onError].
@@ -599,7 +607,7 @@
    * The `streamConsumer` is closed when this stream has been successfully added
    * to it - when the future returned by `addStream` completes without an error.
    *
-   * Returns a future which completes when the stream has been consumed
+   * Returns a future which completes when this stream has been consumed
    * and the consumer has been closed.
    *
    * The returned future completes with the same result as the future returned
@@ -612,9 +620,9 @@
   }
 
   /**
-   * Applies a [StreamTransformer] to the current stream.
+   * Applies  [streamTransformer] to this stream.
    *
-   * Returns the result of the stream transformation,
+   * Returns the transformed stream,
    * that is, the result of `streamTransformer.bind(this)`.
    * This method simply allows writing the call to `streamTransformer.bind`
    * in a chained fashion, like
@@ -636,7 +644,7 @@
    * Combines a sequence of values by repeatedly applying [combine].
    *
    * Similar to [Iterable.reduce], this function maintains a value,
-   * starting with the first element of the stream
+   * starting with the first element of this stream
    * and updated for each further element of this stream.
    * For each element after the first,
    * the value is updated to the result of calling [combine]
@@ -645,7 +653,7 @@
    * When this stream is done, the returned future is completed with
    * the value at that time.
    *
-   * If the stream is empty, the returned future is completed with
+   * If this stream is empty, the returned future is completed with
    * an error.
    * If this stream emits an error, or the call to [combine] throws,
    * the returned future is completed with that error,
@@ -728,11 +736,11 @@
    * If [separator] is provided, it is inserted between element string
    * representations.
    *
-   * The returned future is completed with the combined string when the stream
+   * The returned future is completed with the combined string when this stream
    * is done.
    *
-   * If the stream contains an error, or if the call to [Object.toString]
-   * throws, the returned future is completed with that error,
+   * If this stream emits an error, or the call to [Object.toString] throws,
+   * the returned future is completed with that error,
    * and processing stops.
    */
   Future<String> join([String separator = ""]) {
@@ -763,11 +771,12 @@
    *
    * Compares each element of this stream to [needle] using [Object.==].
    * If an equal element is found, the returned future is completed with `true`.
-   * If the stream ends without finding a match, the future is completed with
+   * If this stream ends without finding a match, the future is completed with
    * `false`.
    *
-   * If the stream contains an error, or the call to `Object.==` throws,
-   * the returned future is completed with that error, and processing stops.
+   * If this stream emits an error, or the call to [Object.==] throws,
+   * the returned future is completed with that error,
+   * and processing stops.
    */
   Future<bool> contains(Object needle) {
     _Future<bool> future = new _Future<bool>();
@@ -789,13 +798,14 @@
   }
 
   /**
-   * Executes [action] on each element of the stream.
+   * Executes [action] on each element of this stream.
    *
-   * Completes the returned [Future] when all elements of the stream
+   * Completes the returned [Future] when all elements of this stream
    * have been processed.
    *
-   * If the stream contains an error, or if the call to [action] throws,
-   * the returned future completes with that error, and processing stops.
+   * If this stream emits an error, or if the call to [action] throws,
+   * the returned future completes with that error,
+   * and processing stops.
    */
   Future forEach(void action(T element)) {
     _Future future = new _Future();
@@ -817,15 +827,16 @@
   /**
    * Checks whether [test] accepts all elements provided by this stream.
    *
-   * Calls [test] on each element of the stream.
+   * Calls [test] on each element of this stream.
    * If the call returns `false`, the returned future is completed with `false`
    * and processing stops.
    *
-   * If the stream ends without finding an element that [test] rejects,
+   * If this stream ends without finding an element that [test] rejects,
    * the returned future is completed with `true`.
    *
-   * If this stream contains an error, or if the call to [test] throws,
-   * the returned future is completed with that error, and processing stops.
+   * If this stream emits an error, or if the call to [test] throws,
+   * the returned future is completed with that error,
+   * and processing stops.
    */
   Future<bool> every(bool test(T element)) {
     _Future<bool> future = new _Future<bool>();
@@ -849,15 +860,16 @@
   /**
    * Checks whether [test] accepts any element provided by this stream.
    *
-   * Calls [test] on each element of the stream.
+   * Calls [test] on each element of this stream.
    * If the call returns `true`, the returned future is completed with `true`
    * and processing stops.
    *
-   * If the stream ends without finding an element that [test] accepts,
+   * If this stream ends without finding an element that [test] accepts,
    * the returned future is completed with `false`.
    *
-   * If this stream contains an error, or if the call to [test] throws,
-   * the returned future is completed with that error, and processing stops.
+   * If this stream emits an error, or if the call to [test] throws,
+   * the returned future is completed with that error,
+   * and processing stops.
    */
   Future<bool> any(bool test(T element)) {
     _Future<bool> future = new _Future<bool>();
@@ -881,13 +893,14 @@
   /**
    * The number of elements in this stream.
    *
-   * Waits for all elements of this stream. When the stream ends,
+   * Waits for all elements of this stream. When this stream ends,
    * the returned future is completed with the number of elements.
    *
-   * If the stream contains an error, the returned future is completed with
-   * that error, and processing stops.
+   * If this stream emits an error,
+   * the returned future is completed with that error,
+   * and processing stops.
    *
-   * This operation listens to the stream, and a non-broadcast stream cannot
+   * This operation listens to this stream, and a non-broadcast stream cannot
    * be reused after finding its length.
    */
   Future<int> get length {
@@ -910,13 +923,13 @@
    *
    * Waits for the first element of this stream, then completes the returned
    * future with `true`.
-   * If the stream ends without emitting any elements, the returned future is
+   * If this stream ends without emitting any elements, the returned future is
    * completed with `false`.
    *
    * If the first event is an error, the returned future is completed with that
    * error.
    *
-   * This operation listens to the stream, and a non-broadcast stream cannot
+   * This operation listens to this stream, and a non-broadcast stream cannot
    * be reused after checking whether it is empty.
    */
   Future<bool> get isEmpty {
@@ -944,12 +957,13 @@
   /**
    * Collects all elements of this stream in a [List].
    *
-   * Creates a `List<T>` and adds all elements of the stream to the list
+   * Creates a `List<T>` and adds all elements of this stream to the list
    * in the order they arrive.
-   * When the stream ends, the returned future is completed with that list.
+   * When this stream ends, the returned future is completed with that list.
    *
-   * If the stream contains an error, the returned future is completed
-   * with that error, and processing stops.
+   * If this stream emits an error,
+   * the returned future is completed with that error,
+   * and processing stops.
    */
   Future<List<T>> toList() {
     List<T> result = <T>[];
@@ -969,9 +983,9 @@
   /**
    * Collects the data of this stream in a [Set].
    *
-   * Creates a `Set<T>` and adds all elements of the stream to the set.
+   * Creates a `Set<T>` and adds all elements of this stream to the set.
    * in the order they arrive.
-   * When the stream ends, the returned future is completed with that set.
+   * When this stream ends, the returned future is completed with that set.
    *
    * The returned set is the same type as returned by `new Set<T>()`.
    * If another type of set is needed, either use [forEach] to add each
@@ -979,8 +993,9 @@
    * `toList().then((list) => new SomeOtherSet.from(list))`
    * to create the set.
    *
-   * If the stream contains an error, the returned future is completed
-   * with that error, and processing stops.
+   * If this stream emits an error,
+   * the returned future is completed with that error,
+   * and processing stops.
    */
   Future<Set<T>> toSet() {
     Set<T> result = new Set<T>();
@@ -998,12 +1013,15 @@
   }
 
   /**
-   * Discards all data on the stream, but signals when it's done or an error
+   * Discards all data on this stream, but signals when it is done or an error
    * occurred.
    *
    * When subscribing using [drain], cancelOnError will be true. This means
-   * that the future will complete with the first error on the stream and then
+   * that the future will complete with the first error on this stream and then
    * cancel the subscription.
+   * If this stream emits an error, or the call to [combine] throws,
+   * the returned future is completed with that error,
+   * and processing is stopped.
    *
    * In case of a `done` event the future completes with the given
    * [futureValue].
@@ -1129,9 +1147,9 @@
   }
 
   /**
-   * The first element of the stream.
+   * The first element of this stream.
    *
-   * Stops listening to the stream after the first element has been received.
+   * Stops listening to this stream after the first element has been received.
    *
    * Internally the method cancels its subscription after the first element.
    * This means that single-subscription (non-broadcast) streams are closed
@@ -1259,7 +1277,7 @@
    * If this stream emits an error before the first matching element,
    * the returned future is completed with that error, and processing stops.
    *
-   * Stops listening to the stream after the first matching element or error
+   * Stops listening to this stream after the first matching element or error
    * has been received.
    *
    * Internally the method cancels its subscription after the first element that
@@ -1346,7 +1364,7 @@
    * Finds the single element in this stream matching [test].
    *
    * Like [lastWhere], except that it is an error if more than one
-   * matching element occurs in the stream.
+   * matching element occurs in this stream.
    */
   Future<T> singleWhere(bool test(T element), {T orElse()}) {
     _Future<T> future = new _Future<T>();
@@ -1393,7 +1411,7 @@
   /**
    * Returns the value of the [index]th data event of this stream.
    *
-   * Stops listening to the stream after the [index]th data event has been
+   * Stops listening to this stream after the [index]th data event has been
    * received.
    *
    * Internally the method cancels its subscription after these elements. This
@@ -1437,7 +1455,7 @@
    *
    * The countdown doesn't start until the returned stream is listened to.
    * The countdown is reset every time an event is forwarded from this stream,
-   * or when the stream is paused and resumed.
+   * or when this stream is paused and resumed.
    *
    * The [onTimeout] function is called with one argument: an
    * [EventSink] that allows putting events into the returned stream.
@@ -2009,8 +2027,11 @@
    * Returns a new stream with events that are computed from events of the
    * provided [stream].
    *
-   * Implementors of the [StreamTransformer] interface should document
-   * differences from the following expected behavior:
+   * The [StreamTransformer] interface is completely generic,
+   * so it cannot say what subclasses do.
+   * Each [StreamTransformer] should document clearly how it transforms the
+   * stream (on the class or variable used to access the transformer),
+   * as well as any differences from the following typical behavior:
    *
    * * When the returned stream is listened to, it starts listening to the
    *   input [stream].
@@ -2023,6 +2044,11 @@
    * "Reasonable time" depends on the transformer and stream. Some transformers,
    * like a "timeout" transformer, might make these operations depend on a
    * duration. Others might not delay them at all, or just by a microtask.
+   *
+   * Transformers are free to handle errors in any way.
+   * A transformer implementation may choose to propagate errors,
+   * or convert them to other events, or ignore them completely,
+   * but if errors are ignored, it should be documented explicitly.
    */
   Stream<T> bind(Stream<S> stream);
 
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index 795a2e3..60f66e1 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -283,6 +283,11 @@
   }
 
   /** This operation is not supported by an unmodifiable map. */
+  void addEntries(Iterable<MapEntry<K, V>> entries) {
+    throw new UnsupportedError("Cannot modify unmodifiable map");
+  }
+
+  /** This operation is not supported by an unmodifiable map. */
   void clear() {
     throw new UnsupportedError("Cannot modify unmodifiable map");
   }
@@ -293,9 +298,24 @@
   }
 
   /** This operation is not supported by an unmodifiable map. */
+  void removeWhere(bool test(K key, V value)) {
+    throw new UnsupportedError("Cannot modify unmodifiable map");
+  }
+
+  /** This operation is not supported by an unmodifiable map. */
   V putIfAbsent(K key, V ifAbsent()) {
     throw new UnsupportedError("Cannot modify unmodifiable map");
   }
+
+  /** This operation is not supported by an unmodifiable map. */
+  V update(K key, V update(V value), {V ifAbsent()}) {
+    throw new UnsupportedError("Cannot modify unmodifiable map");
+  }
+
+  /** This operation is not supported by an unmodifiable map. */
+  void updateAll(V update(K key, V value)) {
+    throw new UnsupportedError("Cannot modify unmodifiable map");
+  }
 }
 
 /**
@@ -341,7 +361,7 @@
 
   Iterable<MapEntry<K, V>> get entries => _map.entries;
 
-  void addEntries(Iterable<Object> entries) {
+  void addEntries(Iterable<MapEntry<K, V>> entries) {
     _map.addEntries(entries);
   }
 
diff --git a/sdk/lib/core/list.dart b/sdk/lib/core/list.dart
index 3e4feae..f7cf182 100644
--- a/sdk/lib/core/list.dart
+++ b/sdk/lib/core/list.dart
@@ -579,18 +579,26 @@
   List<E> operator +(List<E> other);
 
   /**
-   * Returns a new list containing the objects from [start] inclusive to [end]
-   * exclusive.
+   * Returns a new list containing the elements between [start] and [end].
    *
-   *     List<String> colors = ['red', 'green', 'blue', 'orange', 'pink'];
-   *     colors.sublist(1, 3); // ['green', 'blue']
+   * The new list is a `List<E>` containing the elements of this list at
+   * positions greater than or equal to [start] and less than [end] in the same
+   * order as they occur in this list.
    *
-   * If [end] is omitted, the [length] of `this` is used.
+   * ```dart
+   * var colors = ["red", "green", "blue", "orange", "pink"];
+   * print(colors.sublist(1, 3)); // [green, blue]
+   * ```
    *
-   *     colors.sublist(1);  // ['green', 'blue', 'orange', 'pink']
+   * If [end] is omitted, it defaults to the [length] of this list.
    *
-   * An error occurs if [start] is outside the range `0` .. `length` or if
-   * [end] is outside the range `start` .. `length`.
+   * ```dart
+   * print(colors.sublist(1)); // [green, blue, orange, pink]
+   * ```
+   *
+   * The `start` and `end` positions must satisfy the relations
+   * 0 ≤ `start` ≤ `end` ≤ `this.length`
+   * If `end` is equal to `start`, then the returned list is empty.
    */
   List<E> sublist(int start, [int end]);
 
diff --git a/sdk/lib/core/map.dart b/sdk/lib/core/map.dart
index e122688..4e8a878 100644
--- a/sdk/lib/core/map.dart
+++ b/sdk/lib/core/map.dart
@@ -82,6 +82,10 @@
   /**
    * Creates an identity map with the default implementation, [LinkedHashMap].
    *
+   * An identity map uses [identical] for equality and [identityHashCode]
+   * for hash codes of keys instead of the intrinsic [Object.operator==] and
+   * [Object.hashCode] of the keys.
+   *
    * The returned map allows `null` as a key.
    * It iterates in key insertion order.
    */
diff --git a/sdk/lib/core/string.dart b/sdk/lib/core/string.dart
index 5c19917..ef5c3e6 100644
--- a/sdk/lib/core/string.dart
+++ b/sdk/lib/core/string.dart
@@ -5,7 +5,15 @@
 part of dart.core;
 
 /**
- * A sequence of characters.
+ * A sequence of UTF-16 code units.
+ *
+ * Strings are mainly used to represent text. A character may be represented by
+ * multiple code points, each code point consisting of one or two code
+ * units. For example the Papua New Guinea flag character requires four code
+ * units to represent two code points, but should be treated like a single
+ * character: "🇵🇬". Platforms that do not support the flag character may show
+ * the letters "PG" instead. If the code points are swapped, it instead becomes
+ * the Guadeloupe flag "🇬🇵" ("GP").
  *
  * A string can be either single or multiline. Single line strings are
  * written using matching single or double quotes, and multiline strings are
@@ -84,7 +92,7 @@
  * [RegExp] to work with regular expressions.
  *
  * Also see:
-
+ *
  * * [Dart Cookbook](https://www.dartlang.org/docs/cookbook/#strings)
  *   for String examples and recipes.
  * * [Dart Up and Running](https://www.dartlang.org/docs/dart-up-and-running/ch03.html#strings-and-regular-expressions)
diff --git a/sdk/lib/internal/cast.dart b/sdk/lib/internal/cast.dart
index 8d10ce4..b3620f5 100644
--- a/sdk/lib/internal/cast.dart
+++ b/sdk/lib/internal/cast.dart
@@ -251,43 +251,6 @@
   T lookup(Object key) => _source.lookup(key) as T;
 }
 
-abstract class _CastQueueMixin<S, T> implements Queue<T> {
-  Queue<S> get _source;
-
-  T removeFirst() => _source.removeFirst() as T;
-  T removeLast() => _source.removeLast() as T;
-
-  @deprecated
-  void add(T value) {
-    _source.add(value as S);
-  }
-
-  void addFirst(T value) {
-    _source.addFirst(value as S);
-  }
-
-  void addLast(T value) {
-    _source.addLast(value as S);
-  }
-
-  bool remove(Object other) => _source.remove(other);
-  void addAll(Iterable<T> elements) {
-    _source.addAll(new CastIterable<T, S>(elements));
-  }
-
-  void removeWhere(bool test(T element)) {
-    _source.removeWhere((S element) => test(element as T));
-  }
-
-  void retainWhere(bool test(T element)) {
-    _source.retainWhere((S element) => test(element as T));
-  }
-
-  void clear() {
-    _source.clear();
-  }
-}
-
 class CastMap<SK, SV, K, V> extends MapBase<K, V> {
   final Map<SK, SV> _source;
 
@@ -359,18 +322,40 @@
   }
 }
 
-class CastQueue<S, T> extends _CastIterableBase<S, T>
-    with _CastQueueMixin<S, T> {
+class CastQueue<S, T> extends _CastIterableBase<S, T> implements Queue<T> {
   final Queue<S> _source;
   CastQueue(this._source);
   Queue<R> cast<R>() => new CastQueue<S, R>(_source);
-}
 
-// TODO(lrn): Use when ListQueue implements List.
-// class CastListQueue<S, T>
-//     extends _CastListBase<S, T> with _CastQueueMixin<S, T>
-//     implements ListQueue<T> {
-//   final ListQueue<S> _source;
-//   CastListQueue(this._source);
-//   ListQueue<R> cast<R>() => new CastListQueue<S, R>(_source);
-// }
+  T removeFirst() => _source.removeFirst() as T;
+  T removeLast() => _source.removeLast() as T;
+
+  void add(T value) {
+    _source.add(value as S);
+  }
+
+  void addFirst(T value) {
+    _source.addFirst(value as S);
+  }
+
+  void addLast(T value) {
+    _source.addLast(value as S);
+  }
+
+  bool remove(Object other) => _source.remove(other);
+  void addAll(Iterable<T> elements) {
+    _source.addAll(new CastIterable<T, S>(elements));
+  }
+
+  void removeWhere(bool test(T element)) {
+    _source.removeWhere((S element) => test(element as T));
+  }
+
+  void retainWhere(bool test(T element)) {
+    _source.retainWhere((S element) => test(element as T));
+  }
+
+  void clear() {
+    _source.clear();
+  }
+}
diff --git a/sdk/lib/io/directory.dart b/sdk/lib/io/directory.dart
index bdd4af1..2fc0930 100644
--- a/sdk/lib/io/directory.dart
+++ b/sdk/lib/io/directory.dart
@@ -135,6 +135,7 @@
     return overrides.createDirectory(path);
   }
 
+  @pragma("vm:entry-point")
   factory Directory.fromRawPath(Uint8List path) {
     // TODO(bkonyi): Handle overrides.
     return new _Directory.fromRawPath(path);
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index e34008c..6fe447f 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -267,6 +267,7 @@
    * Creates a File object from a raw path, that is, a sequence of bytes
    * as represented by the OS.
    */
+  @pragma("vm:entry-point")
   factory File.fromRawPath(Uint8List rawPath) {
     // TODO(bkonyi): Handle overrides.
     return new _File.fromRawPath(rawPath);
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index 626ce7e..bba0d70 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -198,6 +198,10 @@
  *
  * This class can also be used to check whether `stdout` or `stderr` is
  * connected to a terminal and query some terminal properties.
+ *
+ * The [addError] API is inherited from  [StreamSink] and calling it will result
+ * in an unhandled asynchronous error unless there is an error handler on
+ * [done].
  */
 class Stdout extends _StdSink implements IOSink {
   final int _fd;
@@ -403,6 +407,10 @@
 }
 
 /// The standard output stream of data written by this program.
+///
+/// The `addError` API is inherited from  `StreamSink` and calling it will
+/// result in an unhandled asynchronous error unless there is an error handler
+/// on `done`.
 Stdout get stdout {
   if (_stdout == null) {
     _stdout = _StdIOUtils._getStdioOutputStream(_stdoutFD);
@@ -411,6 +419,10 @@
 }
 
 /// The standard output stream of errors written by this program.
+///
+/// The `addError` API is inherited from  `StreamSink` and calling it will
+/// result in an unhandled asynchronous error unless there is an error handler
+/// on `done`.
 Stdout get stderr {
   if (_stderr == null) {
     _stderr = _StdIOUtils._getStdioOutputStream(_stderrFD);
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index c5b7ce6..7e97123 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -4,12 +4,48 @@
 
 [ $compiler == dart2js ]
 Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError, OK # co19 issue 258
+Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: MissingCompileTimeError
+Language/Classes/Constructors/Generative_Constructors/execution_t04: Crash
+Language/Classes/Constructors/Generative_Constructors/execution_t05: Crash
+Language/Classes/Constructors/Generative_Constructors/execution_t06: Crash
+Language/Classes/Constructors/Generative_Constructors/execution_t07: Crash
+Language/Classes/Constructors/Generative_Constructors/execution_t12: Crash
+Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t03: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t04: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t05: MissingCompileTimeError
+Language/Classes/Getters/same_name_method_t07: MissingCompileTimeError
+Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError
+Language/Classes/Superinterfaces/superclass_as_superinterface_t01: MissingCompileTimeError
+Language/Classes/definition_t24: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t01: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t02: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t03: MissingCompileTimeError
+Language/Classes/same_name_instance_and_static_members_t04: MissingCompileTimeError
+Language/Expressions/Assignment/expression_assignment_t07: RuntimeError
+Language/Expressions/Assignment/no_such_method_t01: RuntimeError
+Language/Expressions/Assignment/no_such_method_t02: RuntimeError
+Language/Expressions/Assignment/no_such_method_t03: RuntimeError
+Language/Expressions/Assignment/no_such_method_t04: RuntimeError
+Language/Expressions/Assignment/no_such_method_t05: RuntimeError
+Language/Expressions/Assignment/no_such_method_t06: RuntimeError
+Language/Expressions/Assignment/no_such_method_t07: RuntimeError
+Language/Expressions/Assignment/no_such_method_t08: RuntimeError
+Language/Expressions/Assignment/no_such_method_t09: RuntimeError
 Language/Expressions/Assignment/super_assignment_failed_t05: RuntimeError # Issue 25671
 Language/Expressions/Assignment/super_assignment_value_t02: RuntimeError # Please triage this failure
 Language/Expressions/Await_Expressions/evaluation_throws_t03: RuntimeError # Please triage this failure
 Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError # Please triage this failure
 Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError # Please triage this failure
 Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError # Please triage this failure
+Language/Expressions/Constants/bitwise_operators_t05: MissingCompileTimeError
+Language/Expressions/Constants/depending_on_itself_t03: Crash
+Language/Expressions/Constants/exception_t02: Pass
+Language/Expressions/Constants/literal_number_t01: CompileTimeError # Larger than 64 bit int
+Language/Expressions/Constants/logical_expression_t04: MissingCompileTimeError
+Language/Expressions/Constants/math_operators_t01: CompileTimeError # Larger than 64 bit int
+Language/Expressions/Constants/math_operators_t06: CompileTimeError # Larger than 64 bit int
+Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
 Language/Expressions/Function_Invocation/async_cleanup_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 Language/Expressions/Function_Invocation/async_cleanup_t03: Skip # https://github.com/dart-lang/sdk/issues/28873
 Language/Expressions/Function_Invocation/async_cleanup_t05: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -21,10 +57,17 @@
 Language/Expressions/Function_Invocation/async_invokation_t04: RuntimeError, Pass # co19 issue 57
 Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError # Please triage this failure
 Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError # Please triage this failure
+Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t08: RuntimeError
 Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t01: MissingCompileTimeError # Issue 25496
 Language/Expressions/Method_Invocation/Ordinary_Invocation/object_method_invocation_t02: MissingCompileTimeError # Issue 25496
+Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
+Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: RuntimeError
+Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: Crash
+Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
+Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError # Larger than 64 bit int
 Language/Expressions/Numbers/syntax_t06: Fail # Issue 21098
 Language/Expressions/Numbers/syntax_t09: Fail # Issue 21098
+Language/Expressions/Numbers/syntax_t10: CompileTimeError # Larger than 64 bit int
 Language/Expressions/Object_Identity/Object_Identity/constant_objects_t01: Fail # Issue 11551, also related to issue 563, 18738
 Language/Expressions/Object_Identity/Object_Identity/double_t02: Fail # Issue 11551, also related to issue 563, 18738
 Language/Expressions/Object_Identity/constant_objects_t01: RuntimeError # Please triage this failure
@@ -41,15 +84,46 @@
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/class_object_member_t08: MissingCompileTimeError # Issue 24332
 Language/Expressions/Shift/syntax_t01/14: MissingRuntimeError # Please triage this failure
 Language/Expressions/Spawning_an_Isolate/new_isolate_t01: SkipByDesign
+Language/Expressions/This/placement_t04: Crash
+Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError
+Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
+Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError # Please triage this failure
+Language/Libraries_and_Scripts/Imports/same_name_t10: RuntimeError
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
+Language/Metadata/before_class_t01: RuntimeError
+Language/Metadata/before_ctor_t01: RuntimeError
+Language/Metadata/before_ctor_t02: RuntimeError
 Language/Metadata/before_export_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_factory_t01: RuntimeError
+Language/Metadata/before_function_t01: RuntimeError
+Language/Metadata/before_function_t02: RuntimeError
+Language/Metadata/before_function_t03: RuntimeError
+Language/Metadata/before_function_t04: RuntimeError
+Language/Metadata/before_function_t05: RuntimeError
+Language/Metadata/before_function_t06: RuntimeError
+Language/Metadata/before_function_t07: RuntimeError
 Language/Metadata/before_import_t01: RuntimeError # Please triage this failure
 Language/Metadata/before_library_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_param_t01: RuntimeError
+Language/Metadata/before_param_t02: RuntimeError
+Language/Metadata/before_param_t03: RuntimeError
+Language/Metadata/before_param_t04: RuntimeError
+Language/Metadata/before_param_t05: RuntimeError
+Language/Metadata/before_param_t06: RuntimeError
+Language/Metadata/before_param_t07: RuntimeError
+Language/Metadata/before_param_t08: RuntimeError
 Language/Metadata/before_param_t09: RuntimeError # Please triage this failure
 Language/Metadata/before_type_param_t01: RuntimeError # Please triage this failure
 Language/Metadata/before_typedef_t01: RuntimeError # Please triage this failure
 Language/Metadata/before_variable_t01: RuntimeError # Please triage this failure
+Language/Metadata/before_variable_t02: RuntimeError
+Language/Mixins/Mixin_Application/error_t01: MissingCompileTimeError
+Language/Mixins/Mixin_Application/error_t02: MissingCompileTimeError
 Language/Mixins/Mixin_Application/syntax_t20: CompileTimeError # Please triage this failure
+Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t24: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
 Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
 Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
 Language/Mixins/deferred_t01: MissingCompileTimeError # Please triage this failure
@@ -58,6 +132,7 @@
 Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError # Please triage this failure
 Language/Statements/Assert/syntax_t04: MissingCompileTimeError # This is legal Dart
 Language/Statements/Continue/async_loops_t09: Crash # Please triage this failure
+Language/Statements/Continue/async_loops_t10: Timeout
 Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t02: RuntimeError # Please triage this failure
 Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t03: Skip # https://github.com/dart-lang/sdk/issues/28873
 Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t05: Skip # https://github.com/dart-lang/sdk/issues/28873
@@ -72,8 +147,11 @@
 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_t08: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
 LayoutTests/fast/borders/border-color-visited_t01: RuntimeError # See issue 143
 LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError # See issue 143
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: Pass, RuntimeError
+LayoutTests/fast/canvas/rgba-parsing_t01: Pass, RuntimeError
 LayoutTests/fast/css/content/content-quotes-01_t01: Pass, RuntimeError
 LayoutTests/fast/css/font-face-cache-bug_t01: Pass, RuntimeError
 LayoutTests/fast/css/font-shorthand-mix-inherit_t01: Pass, RuntimeError # Please triage this failure
@@ -96,6 +174,9 @@
 LayoutTests/fast/dom/subtree-modified-attributes_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/events/form-onchange_t01: RuntimeError # See issue 143
 LayoutTests/fast/events/onerror-bubbling_t01: RuntimeError # See issue 143
+LayoutTests/fast/files/blob-parts-slice-test_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LayoutTests/fast/files/blob-slice-overflow_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LayoutTests/fast/files/blob-slice-test_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 LayoutTests/fast/files/file-reader-done-reading-abort_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
 LayoutTests/fast/forms/autofocus-attribute_t01: RuntimeError # See issue 143
 LayoutTests/fast/forms/autofocus-opera-004_t01: RuntimeError # See issue 143
@@ -156,46 +237,96 @@
 LibTest/core/DateTime/to8601String_A01_t01: RuntimeError # Please triage this failure
 LibTest/core/DateTime/to8601String_A01_t02: RuntimeError # Please triage this failure
 LibTest/core/DateTime/to8601String_A01_t03: RuntimeError # Please triage this failure
+LibTest/core/Duration/Duration_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Duration/inDays_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Duration/inHours_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Duration/inMinutes_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError
 LibTest/core/List/List_class_A01_t01: RuntimeError # co19-roll r623: Please triage this failure
 LibTest/core/List/getRange_A03_t01: RuntimeError, OK # Tests that fail because they use the legacy try-catch syntax. co19 issue 184.
 LibTest/core/List/removeAt_A02_t01: RuntimeError # Issue 1533
 LibTest/core/List/sort_A01_t06: Slow, Pass # Slow tests that needs extra time to finish.
 LibTest/core/double/INFINITY_A01_t04: RuntimeError # Expected to fail because double.INFINITY is int.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError # Expected to fail because double.NEGATIVE_INFINITY is int.
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError # Larger than 64 bit int
+LibTest/core/double/operator_GE_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/double/operator_GT_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/double/operator_LE_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+LibTest/core/double/operator_LT_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 LibTest/core/double/operator_addition_A01_t06: RuntimeError # Large integer literal. Not valid dart 2.
 LibTest/core/double/operator_addition_A01_t08: Crash # Large integer literal. Not valid dart 2.
 LibTest/core/double/operator_subtraction_A01_t06: RuntimeError # Large integer literal. Not valid dart 2.
 LibTest/core/double/operator_subtraction_A01_t09: Crash # Large integer literal. Not valid dart 2.
+LibTest/core/int/abs_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/ceil_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/floor_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/hashCode_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 LibTest/core/int/hashCode_A01_t01: RuntimeError, OK # co19 issue 308
 LibTest/core/int/isEven_A01_t01: RuntimeError, OK # co19 issue 277
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/isNaN_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/isNegative_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/isOdd_A01_t01: RuntimeError, OK # co19 issue 277
 LibTest/core/int/operator_AND_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_GT_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_LE_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_LT_A01_t01: RuntimeError, OK # co19 issue 200
 LibTest/core/int/operator_NOT_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
 LibTest/core/int/operator_OR_A01_t01: RuntimeError, OK # Requires bigints.
 LibTest/core/int/operator_XOR_A01_t01: RuntimeError, OK # Requires bigints.
 LibTest/core/int/operator_addition_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/operator_division_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_division_A01_t01: RuntimeError # Large integer literal. Not valid dart 2.
+LibTest/core/int/operator_multiplication_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_multiplication_A01_t01: RuntimeError # Large integer literal. Not valid dart 2.
 LibTest/core/int/operator_remainder_A01_t01: RuntimeError, OK # Requires bigints.
+LibTest/core/int/operator_remainder_A01_t02: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_remainder_A01_t02: RuntimeError, OK # Requires bigints.
 LibTest/core/int/operator_right_shift_A01_t01: RuntimeError, OK # Expects negative result from bit-operation.
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_subtraction_A01_t01: RuntimeError # Large integer literal. Not valid dart 2.
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/operator_truncating_division_A01_t01: RuntimeError # Large integer literal. Not valid dart 2.
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/parse_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/remainder_A01_t02: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/round_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/core/int/toDouble_A01_t01: RuntimeError, OK # co19 issue 200
+LibTest/core/int/toInt_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
+LibTest/core/int/truncate_A01_t01: CompileTimeError # Larger than 64 bit int
 LibTest/html/Element/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
 LibTest/html/Element/mouseEnterEvent_A01_t01: Pass, RuntimeError # Please triage this failure
 LibTest/html/Element/queryAll_A01_t01: RuntimeError # See issue 143
 LibTest/html/Element/query_A01_t01: RuntimeError # See issue 143
+LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: Crash
+LibTest/html/HttpRequest/getResponseHeader_A01_t01: Crash
+LibTest/html/HttpRequest/getString_A01_t01: Crash
+LibTest/html/HttpRequest/request_A01_t01: Crash
 LibTest/html/HttpRequest/responseType_A01_t03: CompileTimeError # co19-roll r706: Please triage this failure
+LibTest/html/HttpRequest/setRequestHeader_A01_t01: Crash
+LibTest/html/HttpRequest/statusText_A01_t01: Crash
+LibTest/html/HttpRequest/status_A01_t01: Crash
 LibTest/html/IFrameElement/addEventListener_A01_t04: Skip # https://github.com/dart-lang/sdk/issues/28873
+LibTest/html/IFrameElement/contentWindow_A01_t01: Crash
 LibTest/html/IFrameElement/enteredView_A01_t01: CompileTimeError # co19-roll r706: Please triage this failure
 LibTest/html/Window/postMessage_A01_t01: Skip # https://github.com/dart-lang/sdk/issues/28873
+LibTest/html/Window/postMessage_A01_t02: Crash
+LibTest/html/Window/requestFileSystem_A01_t01: Crash
+LibTest/html/Window/requestFileSystem_A01_t02: Crash
+LibTest/html/Window/requestFileSystem_A02_t01: Crash
 LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
 LibTest/math/MutableRectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
 LibTest/math/Rectangle/boundingBox_A01_t01: RuntimeError, Pass # co19-roll r706: Please triage this failure.
 LibTest/math/pow_A04_t01: Fail # co19-roll r587: Please triage this failure
+LibTest/math/pow_A10_t01: CompileTimeError # Larger than 64 bit int
 LibTest/math/pow_A14_t01: Fail # co19-roll r587: Please triage this failure
 LibTest/math/pow_A16_t01: Fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/ByteData/*Int64*: Fail # co19-roll r569: Please triage this failure
@@ -316,6 +447,7 @@
 WebPlatformTest/dom/nodes/Document-createElement_t01: CompileTimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: CompileTimeError # co19-roll r722: Please triage this failure.
 WebPlatformTest/html/dom/elements/global-attributes/classlist-nonstring_t01: RuntimeError # See issue 143
+WebPlatformTest/html/semantics/embedded-content/the-audio-element/audio_constructor_t01: RuntimeError
 WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: RuntimeError # See issue 143
 WebPlatformTest/html/semantics/tabular-data/the-table-element/insertRow-method_t01: RuntimeError # See issue 143
 WebPlatformTest/html/semantics/tabular-data/the-table-element/insertRow-method_t02: RuntimeError # See issue 143
@@ -1376,9 +1508,6 @@
 LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError # Please triage this failure
 
-[ $compiler == dart2js && $runtime == chrome && !$fasta ]
-LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError
-
 [ $compiler == dart2js && $runtime != chrome && $browser && $fast_startup ]
 WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-005_t01: Fail # please triage
 WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-001_t01: Fail # please triage
@@ -1457,19 +1586,17 @@
 
 [ $compiler == dart2js && $runtime == d8 ]
 Language/Statements/Continue/async_loops_t10: Skip # Issue 33150
+LayoutTests/*: SkipByDesign
+LibTest/html/*: SkipByDesign
 LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: Fail # co19-roll r587: Please triage this failure
 LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # Issue 7728, timer not supported in jsshell
+WebPlatformTest/*: SkipByDesign
 
 [ $compiler == dart2js && $runtime == d8 && $checked && $fast_startup && $minified ]
 Language/Classes/Constructors/Factories/function_type_t02: RuntimeError
 Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t02: RuntimeError
 Language/Generics/malformed_t02: Crash
 
-[ $compiler == dart2js && $runtime == d8 && $fasta ]
-LayoutTests/*: SkipByDesign
-LibTest/html/*: SkipByDesign
-WebPlatformTest/*: SkipByDesign
-
 [ $compiler == dart2js && $runtime != d8 && $runtime != jsshell && !$checked ]
 LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
 
@@ -2559,8 +2686,8 @@
 LibTest/html/Window/moveTo_A02_t01: RuntimeError # Please triage this failure
 LibTest/html/Window/postMessage_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Window/postMessage_A01_t02: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A01_t01: RuntimeError # Please triage this failure
-LibTest/html/Window/requestFileSystem_A01_t02: RuntimeError # Please triage this failure
+LibTest/html/Window/requestFileSystem_A01_t01: Crash, RuntimeError # Please triage this failure
+LibTest/html/Window/requestFileSystem_A01_t02: Crash, RuntimeError # Please triage this failure
 LibTest/html/Window/requestFileSystem_A02_t01: RuntimeError # Please triage this failure
 LibTest/html/Window/resizeBy_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Window/resizeTo_A01_t01: RuntimeError # Please triage this failure
@@ -2863,20 +2990,20 @@
 [ $compiler == dart2js && $runtime == ff && !$checked ]
 LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError # Please triage this failure
 
-[ $compiler == dart2js && $runtime == ff && $fasta ]
-LibTest/html/Window/requestFileSystem_A01_t01: Crash
-LibTest/html/Window/requestFileSystem_A01_t02: Crash
-
 [ $compiler == dart2js && $runtime == ie11 ]
 *: SkipByDesign # ie11 bot has not been migrated to the test matrix, co19-1 has thousands of broken tests due to breaking changes with ALL_CAPS constants.
 
 [ $compiler == dart2js && $runtime == jsshell ]
+Language/Expressions/Await_Expressions/evaluation_throws_t05: RuntimeError
 Language/Expressions/Await_Expressions/execution_t01: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Expressions/Await_Expressions/execution_t02: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Expressions/Await_Expressions/execution_t03: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Expressions/Await_Expressions/execution_t04: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Expressions/Await_Expressions/execution_t05: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Expressions/Await_Expressions/execution_t06: RuntimeError # Issue 7728, timer not supported in jsshell
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t19: RuntimeError
+Language/Libraries_and_Scripts/Exports/syntax_t02: RuntimeError
+Language/Libraries_and_Scripts/Imports/syntax_t37: RuntimeError
 Language/Statements/For/Asynchronous_For_in/execution_t04: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t01: RuntimeError # Issue 7728, timer not supported in jsshell
 Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t04: RuntimeError # Issue 7728, timer not supported in jsshell
@@ -4087,12 +4214,6 @@
 WebPlatformTest/webstorage/event_session_storagearea_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
 WebPlatformTest/webstorage/event_session_url_t01: Skip # Times out. Please triage this failure
 
-[ $compiler == dart2js && $runtime == safari && $fasta ]
-Language/Expressions/Await_Expressions/evaluation_throws_t05: RuntimeError
-Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t19: RuntimeError
-Language/Libraries_and_Scripts/Exports/syntax_t02: RuntimeError
-Language/Libraries_and_Scripts/Imports/syntax_t37: RuntimeError
-
 [ $compiler == dart2js && $browser ]
 LayoutTests/fast/css-generated-content/bug91547_t01: Skip # Test reloads itself. Issue 18558.
 LayoutTests/fast/dom/HTMLButtonElement/change-type_t01: Skip # Test reloads itself. Issue 18558.
@@ -4262,7 +4383,7 @@
 LibTest/core/Uri/Uri_A06_t03: Slow, Pass # Please triage this failure
 LibTest/math/Point/operator_mult_A02_t01: RuntimeError # Issue 1533
 
-[ $compiler == dart2js && $checked && $fasta && $host_checked ]
+[ $compiler == dart2js && $checked && $host_checked ]
 Language/Classes/Constructors/Factories/function_type_t02: RuntimeError
 Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t02: RuntimeError
 Language/Generics/malformed_t02: Crash
@@ -4325,141 +4446,7 @@
 Language/Metadata/compilation_t11: Pass # mirrors not supported, fails for the wrong reason
 WebPlatformTest/shadow-dom/testcommon: Fail # mirrors not supported
 
-[ $compiler == dart2js && $fasta ]
-Language/Classes/Constructors/Generative_Constructors/execution_of_an_initializer_t02: MissingCompileTimeError
-Language/Classes/Constructors/Generative_Constructors/execution_t04: Crash
-Language/Classes/Constructors/Generative_Constructors/execution_t05: Crash
-Language/Classes/Constructors/Generative_Constructors/execution_t06: Crash
-Language/Classes/Constructors/Generative_Constructors/execution_t07: Crash
-Language/Classes/Constructors/Generative_Constructors/execution_t12: Crash
-Language/Classes/Constructors/Generative_Constructors/initializing_formals_execution_t02: MissingCompileTimeError
-Language/Classes/Getters/same_name_method_t03: MissingCompileTimeError
-Language/Classes/Getters/same_name_method_t04: MissingCompileTimeError
-Language/Classes/Getters/same_name_method_t05: MissingCompileTimeError
-Language/Classes/Getters/same_name_method_t07: MissingCompileTimeError
-Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError
-Language/Classes/Superinterfaces/superclass_as_superinterface_t01: MissingCompileTimeError
-Language/Classes/definition_t24: MissingCompileTimeError
-Language/Classes/same_name_instance_and_static_members_t01: MissingCompileTimeError
-Language/Classes/same_name_instance_and_static_members_t02: MissingCompileTimeError
-Language/Classes/same_name_instance_and_static_members_t03: MissingCompileTimeError
-Language/Classes/same_name_instance_and_static_members_t04: MissingCompileTimeError
-Language/Expressions/Assignment/expression_assignment_t07: RuntimeError
-Language/Expressions/Assignment/no_such_method_t01: RuntimeError
-Language/Expressions/Assignment/no_such_method_t02: RuntimeError
-Language/Expressions/Assignment/no_such_method_t03: RuntimeError
-Language/Expressions/Assignment/no_such_method_t04: RuntimeError
-Language/Expressions/Assignment/no_such_method_t05: RuntimeError
-Language/Expressions/Assignment/no_such_method_t06: RuntimeError
-Language/Expressions/Assignment/no_such_method_t07: RuntimeError
-Language/Expressions/Assignment/no_such_method_t08: RuntimeError
-Language/Expressions/Assignment/no_such_method_t09: RuntimeError
-Language/Expressions/Constants/bitwise_operators_t05: MissingCompileTimeError
-Language/Expressions/Constants/depending_on_itself_t03: Crash
-Language/Expressions/Constants/exception_t02: Pass
-Language/Expressions/Constants/literal_number_t01: CompileTimeError # Larger than 64 bit int
-Language/Expressions/Constants/logical_expression_t04: MissingCompileTimeError
-Language/Expressions/Constants/math_operators_t01: CompileTimeError # Larger than 64 bit int
-Language/Expressions/Constants/math_operators_t06: CompileTimeError # Larger than 64 bit int
-Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
-Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t08: RuntimeError
-Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
-Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: RuntimeError
-Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: Crash
-Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
-Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError # Larger than 64 bit int
-Language/Expressions/Numbers/syntax_t10: CompileTimeError # Larger than 64 bit int
-Language/Expressions/This/placement_t04: Crash
-Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError
-Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
-Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
-Language/Libraries_and_Scripts/Imports/same_name_t10: RuntimeError
-Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
-Language/Metadata/before_class_t01: RuntimeError
-Language/Metadata/before_ctor_t01: RuntimeError
-Language/Metadata/before_ctor_t02: RuntimeError
-Language/Metadata/before_factory_t01: RuntimeError
-Language/Metadata/before_function_t01: RuntimeError
-Language/Metadata/before_function_t02: RuntimeError
-Language/Metadata/before_function_t03: RuntimeError
-Language/Metadata/before_function_t04: RuntimeError
-Language/Metadata/before_function_t05: RuntimeError
-Language/Metadata/before_function_t06: RuntimeError
-Language/Metadata/before_function_t07: RuntimeError
-Language/Metadata/before_param_t01: RuntimeError
-Language/Metadata/before_param_t02: RuntimeError
-Language/Metadata/before_param_t03: RuntimeError
-Language/Metadata/before_param_t04: RuntimeError
-Language/Metadata/before_param_t05: RuntimeError
-Language/Metadata/before_param_t06: RuntimeError
-Language/Metadata/before_param_t07: RuntimeError
-Language/Metadata/before_param_t08: RuntimeError
-Language/Metadata/before_variable_t02: RuntimeError
-Language/Mixins/Mixin_Application/error_t01: MissingCompileTimeError
-Language/Mixins/Mixin_Application/error_t02: MissingCompileTimeError
-Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
-Language/Mixins/Mixin_Application/syntax_t24: RuntimeError
-Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
-Language/Statements/Continue/async_loops_t10: Timeout
-Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
-LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: Pass, RuntimeError
-LayoutTests/fast/canvas/rgba-parsing_t01: Pass, RuntimeError
-LayoutTests/fast/files/blob-parts-slice-test_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LayoutTests/fast/files/blob-slice-overflow_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LayoutTests/fast/files/blob-slice-test_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/Duration_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/Duration_A02_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/inDays_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/inHours_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/inMinutes_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError
-LibTest/core/double/isInfinite_A01_t03: CompileTimeError # Larger than 64 bit int
-LibTest/core/double/operator_GE_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/double/operator_GT_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/double/operator_LE_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/double/operator_LT_A01_t02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/int/abs_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/ceil_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/floorToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/floor_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/hashCode_A01_t01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-LibTest/core/int/isInfinite_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/isNaN_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/isNegative_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_GE_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_LE_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_division_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_multiplication_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_remainder_A01_t02: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/parse_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/remainder_A01_t02: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/roundToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/round_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/toInt_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/core/int/truncate_A01_t01: CompileTimeError # Larger than 64 bit int
-LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: Crash
-LibTest/html/HttpRequest/getResponseHeader_A01_t01: Crash
-LibTest/html/HttpRequest/getString_A01_t01: Crash
-LibTest/html/HttpRequest/request_A01_t01: Crash
-LibTest/html/HttpRequest/setRequestHeader_A01_t01: Crash
-LibTest/html/HttpRequest/statusText_A01_t01: Crash
-LibTest/html/HttpRequest/status_A01_t01: Crash
-LibTest/html/IFrameElement/contentWindow_A01_t01: Crash
-LibTest/html/Window/postMessage_A01_t02: Crash
-LibTest/html/Window/requestFileSystem_A01_t01: Crash
-LibTest/html/Window/requestFileSystem_A01_t02: Crash
-LibTest/html/Window/requestFileSystem_A02_t01: Crash
-LibTest/math/pow_A10_t01: CompileTimeError # Larger than 64 bit int
-WebPlatformTest/html/semantics/embedded-content/the-audio-element/audio_constructor_t01: RuntimeError
-
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $compiler == dart2js && $host_checked ]
 Language/Classes/Constructors/Generative_Constructors/execution_t04: Crash
 Language/Classes/Constructors/Generative_Constructors/execution_t05: Crash
 Language/Classes/Constructors/Generative_Constructors/execution_t06: Crash
@@ -4499,70 +4486,6 @@
 LibTest/html/Window/requestFileSystem_A01_t02: Crash
 LibTest/html/Window/requestFileSystem_A02_t01: Crash
 
-[ $compiler == dart2js && $fasta && $minified ]
-Language/Expressions/Assignment/expression_assignment_failed_t01: RuntimeError
-Language/Expressions/Assignment/expression_assignment_failed_t02: RuntimeError
-Language/Expressions/Assignment/expression_assignment_value_t02: RuntimeError
-Language/Expressions/Assignment/indexed_expression_t04: RuntimeError
-Language/Expressions/Function_Invocation/Function_Expression_Invocation/property_extraction_t02: RuntimeError
-Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t02: RuntimeError
-Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t03: RuntimeError
-LibTest/core/Invocation/memberName_A01_t01: RuntimeError
-
-[ $compiler == dart2js && $fasta && !$minified ]
-Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
-
-[ $compiler == dart2js && !$fasta ]
-Language/Classes/Constructors/Generative_Constructors/execution_t03: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
-Language/Classes/Getters/static_getter_t02: CompileTimeError # Should be fixed with unified frontend. Issue 24534
-Language/Classes/Instance_Methods/same_name_setter_t01: Fail # Issue 21201
-Language/Classes/Setters/name_t01: CompileTimeError # Issue 5023
-Language/Classes/Setters/name_t02: CompileTimeError # Issue 5023
-Language/Classes/Setters/name_t03: RuntimeError # Issue 5023
-Language/Classes/Setters/name_t07: CompileTimeError # Issue 5023
-Language/Classes/Setters/static_setter_t06: RuntimeError # Should be fixed with unified frontend. Issue 23749
-Language/Classes/Static_Methods/same_name_method_and_setter_t01: CompileTimeError # Should be fixed with unified frontend. Issue 23749
-Language/Classes/same_name_type_variable_t01: Fail # Missing CT error on class with same name a type parameter
-Language/Classes/same_name_type_variable_t02: Fail # Missing CT error on member with same name a type parameter
-Language/Classes/same_name_type_variable_t03: Fail # Missing CT error on member with same name a type parameter
-Language/Classes/same_name_type_variable_t05: Fail # Missing CT error on member with same name a type parameter
-Language/Classes/same_name_type_variable_t06: Fail # Missing CT error on member with same name a type parameter
-Language/Classes/same_name_type_variable_t08: Fail # Missing CT error on member with same name a type parameter
-Language/Classes/same_name_type_variable_t09: Fail # Missing CT error on member with same name a type parameter
-Language/Errors_and_Warnings/compile_error_t06: MissingCompileTimeError # Please triage this failure
-Language/Errors_and_Warnings/compile_error_t07: MissingCompileTimeError # Please triage this failure
-Language/Expressions/Constants/identifier_denotes_a_constant_t06: MissingCompileTimeError # Issue 26580
-Language/Expressions/Constants/identifier_denotes_a_constant_t07: MissingCompileTimeError # Issue 26580
-Language/Expressions/Instance_Creation/New/execution_t04: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
-Language/Expressions/Instance_Creation/New/execution_t06: RuntimeError # https://github.com/dart-lang/sdk/issues/29596
-Language/Expressions/Maps/key_value_equals_operator_t02: CompileTimeError # Please triage this failure
-Language/Expressions/Maps/static_type_dynamic_t01: CompileTimeError # Maybe ok. Issue 17207
-Language/Functions/External_Functions/not_connected_to_a_body_t01: CompileTimeError, OK # Issue 5021
-Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t01: CompileTimeError # Please triage this failure
-Language/Interfaces/Superinterfaces/Inheritance_and_Overriding/same_name_method_and_getter_t02: CompileTimeError # Please triage this failure
-Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01/01: CompileTimeError # Please triage this failure
-Language/Libraries_and_Scripts/Scripts/top_level_main_t05: RuntimeError # Please triage this failure
-Language/Mixins/Mixin_Application/static_warning_t01: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/static_warning_t02: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/superinterfaces_t06: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/superinterfaces_t07: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t11: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t12: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t13: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t14: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t22: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t23: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t24: CompileTimeError # Please triage this failure
-Language/Mixins/Mixin_Application/syntax_t25: CompileTimeError # Please triage this failure
-Language/Statements/Local_Function_Declaration/reference_before_declaration_t01: MissingCompileTimeError # Issue 21050
-Language/Statements/Local_Function_Declaration/reference_before_declaration_t03: MissingCompileTimeError # Issue 21050
-Language/Statements/Try/catch_scope_t01: RuntimeError # Please triage this failure
-Language/Types/Type_Void/syntax_t02: CompileTimeError # Please triage this failure
-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
-
 [ $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
@@ -4580,7 +4503,15 @@
 LibTest/core/int/toRadixString_A01_t01: RuntimeError, OK # Bad test: uses Expect.fail, Expect.throws, assumes case of result, and uses unsupported radixes.
 
 [ $compiler == dart2js && $minified ]
+Language/Expressions/Assignment/expression_assignment_failed_t01: RuntimeError
+Language/Expressions/Assignment/expression_assignment_failed_t02: RuntimeError
+Language/Expressions/Assignment/expression_assignment_value_t02: RuntimeError
+Language/Expressions/Assignment/indexed_expression_t04: RuntimeError
+Language/Expressions/Function_Invocation/Function_Expression_Invocation/property_extraction_t02: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t02: RuntimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/method_lookup_failed_t03: RuntimeError
 Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/no_such_method_t01: RuntimeError # Issue 32434
+LibTest/core/Invocation/memberName_A01_t01: RuntimeError
 LibTest/typed_data/Float32List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
 LibTest/typed_data/Float32x4List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
 LibTest/typed_data/Float64List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
@@ -4592,6 +4523,9 @@
 LibTest/typed_data/Uint8ClampedList/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
 LibTest/typed_data/Uint8List/runtimeType_A01_t01: Fail # co19-roll r559: Please triage this failure
 
+[ $compiler == dart2js && !$minified ]
+Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
+
 [ $compiler == dart2js && $strong ]
 *: SkipByDesign # co19 suite is not for strong-mode
 
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index 95caf2c..70c8436 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -4,8 +4,16 @@
 
 [ $compiler == fasta ]
 Language/Classes/Constructors/Generative_Constructors/final_variables_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
+Language/Expressions/Instance_Creation/New/generic_type_t01: CompileTimeError
+Language/Expressions/Instance_Creation/New/generic_type_t02: CompileTimeError
+Language/Expressions/Instance_Creation/New/generic_type_t03: CompileTimeError
+Language/Expressions/Method_Invocation/Ordinary_Invocation/function_type_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
+Language/Expressions/Method_Invocation/Ordinary_Invocation/static_type_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
 Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
 Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t01: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t05: CompileTimeError
+Language/Types/Parameterized_Types/arity_mismatch_t07: CompileTimeError
 Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
 Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
 LayoutTests/*: Skip # TODO(ahe): Make dart:html available.
@@ -151,10 +159,6 @@
 Language/Classes/Constructors/Factories/accessible_class_t03/01: CompileTimeError
 Language/Classes/Constructors/Factories/accessible_class_t04/01: CompileTimeError
 Language/Classes/Constructors/Factories/accessible_class_t04/02: CompileTimeError
-Language/Classes/Constructors/Factories/const_modifier_t01: MissingCompileTimeError
-Language/Classes/Constructors/Factories/const_modifier_t02: MissingCompileTimeError
-Language/Classes/Constructors/Factories/default_value_t01: MissingCompileTimeError
-Language/Classes/Constructors/Factories/default_value_t02: MissingCompileTimeError
 Language/Classes/Constructors/Factories/function_type_t02: CompileTimeError
 Language/Classes/Constructors/Factories/redirecting_constructor_call_t01: CompileTimeError
 Language/Classes/Constructors/Factories/redirecting_constructor_call_t02: CompileTimeError
@@ -196,7 +200,6 @@
 Language/Classes/Instance_Methods/override_subtype_t04: CompileTimeError
 Language/Classes/Instance_Methods/override_subtype_t05: CompileTimeError
 Language/Classes/Instance_Methods/override_subtype_t06: CompileTimeError
-Language/Classes/Instance_Variables/constant_t01: MissingCompileTimeError
 Language/Classes/Instance_Variables/definition_t03: CompileTimeError
 Language/Classes/Setters/name_t01: CompileTimeError
 Language/Classes/Setters/name_t05: CompileTimeError
@@ -573,6 +576,8 @@
 Language/Expressions/Lists/static_type_t05: CompileTimeError
 Language/Expressions/Lists/value_of_a_constant_list_t02: CompileTimeError
 Language/Expressions/Logical_Boolean_Expressions/evaluation_form_and_t01: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/evaluation_form_and_t02: CompileTimeError
+Language/Expressions/Logical_Boolean_Expressions/evaluation_form_or_t02: CompileTimeError
 Language/Expressions/Logical_Boolean_Expressions/static_type_t02: CompileTimeError
 Language/Expressions/Logical_Boolean_Expressions/syntax_t01: CompileTimeError
 Language/Expressions/Logical_Boolean_Expressions/syntax_t10/01: CompileTimeError
@@ -884,6 +889,7 @@
 Language/Functions/async_return_type_t01: CompileTimeError
 Language/Functions/generator_return_type_t01: CompileTimeError
 Language/Functions/generator_return_type_t02: CompileTimeError
+Language/Functions/implicit_return_t01: CompileTimeError
 Language/Functions/syntax_t01: CompileTimeError
 Language/Functions/syntax_t36: CompileTimeError
 Language/Functions/syntax_t37: CompileTimeError
@@ -921,7 +927,6 @@
 Language/Libraries_and_Scripts/Imports/dart_core_t04: CompileTimeError
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t01/01: CompileTimeError
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError
-Language/Libraries_and_Scripts/Imports/invalid_uri_t01: MissingCompileTimeError
 Language/Libraries_and_Scripts/Imports/namespace_changes_t01: CompileTimeError
 Language/Libraries_and_Scripts/Imports/namespace_changes_t02: CompileTimeError
 Language/Libraries_and_Scripts/Imports/namespace_changes_t03: CompileTimeError
@@ -1013,6 +1018,7 @@
 Language/Statements/Continue/control_transfer_t09: CompileTimeError
 Language/Statements/Continue/label_t07: MissingCompileTimeError
 Language/Statements/Do/condition_type_t01: CompileTimeError
+Language/Statements/Do/condition_type_t02: CompileTimeError
 Language/Statements/Do/condition_type_t03: CompileTimeError
 Language/Statements/Do/execution_t03: CompileTimeError
 Language/Statements/Expression_Statements/syntax_t01: CompileTimeError
@@ -1051,9 +1057,6 @@
 Language/Statements/Switch/execution_case_no_default_t02: CompileTimeError
 Language/Statements/Switch/execution_case_t02: CompileTimeError
 Language/Statements/Switch/execution_t01: CompileTimeError
-Language/Statements/Switch/expressions_t01: MissingCompileTimeError
-Language/Statements/Switch/expressions_t02: MissingCompileTimeError
-Language/Statements/Switch/expressions_t04: MissingCompileTimeError
 Language/Statements/Switch/last_statement_t01: CompileTimeError
 Language/Statements/Switch/scope_t02: CompileTimeError
 Language/Statements/Switch/type_t01: CompileTimeError
@@ -1110,8 +1113,14 @@
 Language/Types/Static_Types/malformed_type_t05: CompileTimeError
 Language/Types/Static_Types/malformed_type_t06: CompileTimeError
 Language/Types/Type_Declarations/Typedef/syntax_t01: CompileTimeError
+Language/Types/Type_Void/returning_t03: CompileTimeError
+Language/Types/Type_Void/returning_t04: CompileTimeError
+Language/Types/Type_Void/returning_t05: CompileTimeError
 Language/Types/Type_Void/syntax_t08: MissingCompileTimeError
 Language/Types/Type_Void/syntax_t09: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t09: Pass
+Language/Types/Type_Void/using_t01: CompileTimeError
+Language/Types/Type_Void/using_t02: CompileTimeError
 Language/Variables/constant_variable_t01: CompileTimeError
 Language/Variables/constant_variable_t02: CompileTimeError
 Language/Variables/constant_variable_t03: CompileTimeError
@@ -1188,6 +1197,9 @@
 LibTest/async/Zone/registerBinaryCallback_A01_t01: CompileTimeError
 LibTest/async/Zone/registerCallback_A01_t01: CompileTimeError
 LibTest/async/Zone/registerUnaryCallback_A01_t01: CompileTimeError
+LibTest/async/Zone/runBinaryGuarded_A01_t01: CompileTimeError
+LibTest/async/Zone/runGuarded_A01_t01: CompileTimeError
+LibTest/async/Zone/runUnaryGuarded_A01_t01: CompileTimeError
 LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: CompileTimeError
 LibTest/collection/DoubleLinkedQueue/firstWhere_A02_t01: CompileTimeError
 LibTest/collection/DoubleLinkedQueue/firstWhere_A03_t01: CompileTimeError
@@ -1678,8 +1690,6 @@
 
 [ $fasta && !$strong ]
 Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: MissingCompileTimeError
-Language/Classes/Constructors/Factories/const_modifier_t01: MissingCompileTimeError
-Language/Classes/Constructors/Factories/const_modifier_t02: MissingCompileTimeError
 Language/Classes/Constructors/Factories/default_value_t01: MissingCompileTimeError
 Language/Classes/Constructors/Factories/default_value_t02: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/execution_t03: CompileTimeError # super initializer not last
@@ -1688,7 +1698,6 @@
 Language/Classes/Constructors/Generative_Constructors/superclass_constructor_t03: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/superclass_constructor_t05: MissingCompileTimeError
 Language/Classes/Constructors/Generative_Constructors/superclass_constructor_t06: MissingCompileTimeError
-Language/Classes/Instance_Variables/constant_t01: MissingCompileTimeError
 Language/Classes/Static_Methods/declaration_t01: MissingCompileTimeError
 Language/Classes/Static_Methods/same_name_method_and_setter_t01: CompileTimeError # Invalid test, see #33237
 Language/Classes/Superclasses/wrong_superclass_t08: MissingCompileTimeError
@@ -1729,7 +1738,6 @@
 Language/Libraries_and_Scripts/Exports/reexport_t01: MissingCompileTimeError
 Language/Libraries_and_Scripts/Exports/reexport_t02: MissingCompileTimeError
 Language/Libraries_and_Scripts/Imports/invalid_uri_deferred_t02: CompileTimeError
-Language/Libraries_and_Scripts/Imports/invalid_uri_t01: MissingCompileTimeError
 Language/Mixins/Mixin_Application/deferred_t01: MissingCompileTimeError
 Language/Mixins/Mixin_Application/syntax_t20: CompileTimeError
 Language/Mixins/declaring_constructor_t05: MissingCompileTimeError
diff --git a/tests/co19_2/co19_2-analyzer.status b/tests/co19_2/co19_2-analyzer.status
index 75c8e79..cbe12fd 100644
--- a/tests/co19_2/co19_2-analyzer.status
+++ b/tests/co19_2/co19_2-analyzer.status
@@ -2,32 +2,64 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-[ $compiler == dart2analyzer && $strong ]
-Language/Classes/Abstract_Instance_Members/override_default_value_t01: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/override_default_value_t02: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/override_default_value_t03: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/override_default_value_t04: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/override_default_value_t05: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t01: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t02: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t04: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t05: MissingCompileTimeError # Issue 27476
-Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t06: MissingCompileTimeError # Issue 27476
-Language/Classes/Getters/type_object_t01: CompileTimeError # Issue 23721
-Language/Classes/Getters/type_object_t02: CompileTimeError # Issue 23721
-Language/Classes/Instance_Methods/override_different_default_values_t01: MissingCompileTimeError # Issue 27476
-Language/Classes/Instance_Methods/override_different_default_values_t02: MissingCompileTimeError # Issue 27476
-Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t01: MissingCompileTimeError # Issue 27476
+[ $compiler == dart2analyzer ]
+Language/Classes/Abstract_Instance_Members/override_default_value_t01: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/override_default_value_t02: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/override_default_value_t03: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/override_default_value_t04: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/override_default_value_t05: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t01: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t02: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t04: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t05: MissingCompileTimeError # Issue 33995
+Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t06: MissingCompileTimeError # Issue 33995
+Language/Classes/Constructors/Generative_Constructors/final_variables_t01: CompileTimeError # co19 issue 155
+Language/Classes/Getters/instance_getter_t01: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Getters/instance_getter_t02: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Getters/instance_getter_t03: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Getters/instance_getter_t04: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Getters/instance_getter_t05: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Getters/instance_getter_t06: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Getters/type_object_t01: CompileTimeError # Issue 33995
+Language/Classes/Getters/type_object_t02: CompileTimeError # Issue 33995
+Language/Classes/Instance_Methods/Operators/return_type_t01: CompileTimeError # co19 issue 156
+Language/Classes/Instance_Methods/override_different_default_values_t01: MissingCompileTimeError # Issue 33995
+Language/Classes/Instance_Methods/override_different_default_values_t02: MissingCompileTimeError # Issue 33995
+Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t01: MissingCompileTimeError # Issue 33995
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t02: MissingCompileTimeError # Issue 27476
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t04: MissingCompileTimeError # Issue 27476
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t05: MissingCompileTimeError # Issue 27476
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t06: MissingCompileTimeError # Issue 27476
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t07: MissingCompileTimeError # Issue 27476
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t09: MissingCompileTimeError # Issue 27476
+Language/Classes/Setters/instance_setter_t01: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Setters/instance_setter_t02: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Setters/instance_setter_t03: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Setters/instance_setter_t04: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Setters/instance_setter_t05: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Setters/instance_setter_t06: MissingCompileTimeError # Legal, see #33235
+Language/Classes/Setters/return_type_not_void_t01: CompileTimeError # co19 issue 153
+Language/Classes/Setters/same_name_getter_different_type_t01: CompileTimeError # co19 issue 154
+Language/Classes/Setters/syntax_t04: CompileTimeError # co19 issue 153
+Language/Classes/Setters/type_object_t02: CompileTimeError # co19 issue 153
 Language/Classes/method_definition_t06: MissingCompileTimeError # Please triage this failure
+Language/Enums/syntax_t08: CompileTimeError # Issue 33995
+Language/Enums/syntax_t09: CompileTimeError # Issue 33995
+Language/Errors_and_Warnings/static_warning_t01: CompileTimeError # issue #34319
+Language/Expressions/Conditional/syntax_t03: MissingCompileTimeError # Issue 33995
+Language/Expressions/Conditional/syntax_t04: MissingCompileTimeError # Issue 33995
 Language/Expressions/Constants/constant_list_t02: MissingCompileTimeError # Please triage this failure
 Language/Expressions/Constants/constant_map_t02: MissingCompileTimeError # Please triage this failure
+Language/Expressions/Equality/syntax_t02: MissingCompileTimeError # Issue 33995
 Language/Expressions/Function_Invocation/Unqualified_Invocation/function_expr_invocation_t05: CompileTimeError # Please triage this failure
+Language/Expressions/Function_Invocation/async_cleanup_t01: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t02: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t03: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t04: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t05: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t06: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t07: CompileTimeError # Issue 33995
+Language/Expressions/Function_Invocation/async_cleanup_t08: CompileTimeError # Issue 33995
 Language/Expressions/Identifier_Reference/evaluation_library_or_getter_t01: StaticWarning # Please triage this failure
 Language/Expressions/Instance_Creation/Const/arguments_t03: MissingCompileTimeError # Please triage this failure
 Language/Expressions/Instance_Creation/Const/parameterized_type_t01: CompileTimeError # Please triage this failure
@@ -41,6 +73,10 @@
 Language/Generics/scope_t03: CompileTimeError # Please triage this failure
 Language/Generics/syntax_t02: CompileTimeError # Please triage this failure
 Language/Generics/syntax_t03: Crash # Issue 29388
+Language/Libraries_and_Scripts/Exports/implicit_hide_t01: MissingStaticWarning # Issue #34302
+Language/Libraries_and_Scripts/Imports/implicit_hide_t01: MissingStaticWarning # Issue #34302
+Language/Libraries_and_Scripts/Imports/implicit_hide_t02: MissingStaticWarning # Issue #34302
+Language/Libraries_and_Scripts/Imports/library_name_t01: CompileTimeError # co19 issue 152
 Language/Libraries_and_Scripts/Parts/compilation_t01: MissingCompileTimeError, Pass # Please triage this failure
 Language/Libraries_and_Scripts/Parts/compilation_t04: Pass, CompileTimeError, MissingCompileTimeError # Please triage this failure
 Language/Libraries_and_Scripts/Parts/compilation_t15: CompileTimeError, Pass # Please triage this failure
@@ -60,18 +96,74 @@
 Language/Mixins/Mixin_Application/warning_t03: CompileTimeError # Issue 23878
 Language/Mixins/declaring_constructor_t05: MissingCompileTimeError # Issue 24767
 Language/Mixins/declaring_constructor_t06: MissingCompileTimeError # Issue 24767
+Language/Statements/Continue/async_loops_t01: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t02: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t03: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t04: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t05: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t06: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t07: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t08: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t09: CompileTimeError # Issue 33995
+Language/Statements/Continue/async_loops_t10: CompileTimeError # Issue 33995
+Language/Statements/Continue/control_transfer_t08: CompileTimeError # Issue 33995
+Language/Statements/Continue/control_transfer_t09: CompileTimeError # Issue 33995
+Language/Statements/Return/many_return_statements_t01: CompileTimeError # co19 issue 157
+Language/Statements/Return/many_return_statements_t02: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t01: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t02: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t03: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t04: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t05: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t07: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t08: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t09: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t10: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t11: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_function_t16: CompileTimeError # issue #34319
+Language/Statements/Return/no_expression_not_function_t01: CompileTimeError # issue #34319
 Language/Types/Interface_Types/subtype_t30: CompileTimeError # Please triage this failure
+Language/Types/Type_Void/syntax_t08: MissingCompileTimeError # Issue 33995
 Language/Types/Type_Void/syntax_t09: CompileTimeError # Please triage this failure
 Language/Types/Type_Void/using_t02: CompileTimeError # Please triage this failure
-Language/Variables/final_or_static_initialization_t01: MissingCompileTimeError # Issue 27510
-Language/Variables/final_or_static_initialization_t02: MissingCompileTimeError # Issue 27510
-Language/Variables/final_or_static_initialization_t03: MissingCompileTimeError # Issue 27510
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t11: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t11: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t11: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t13: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t14: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t15: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t16: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t17: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t18: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t19: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t20: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t21: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l3_t01: Crash # Issue 33152, 33477
@@ -83,21 +175,23 @@
 LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t05: Crash # Issue 33152, 33477
 LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t06: Crash # Issue 33152, 33477
 LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_assign_l4_t07: Crash # Issue 33152, 33477
-LanguageFeatures/Instantiate-to-bound/function/function_named_extends_neg_assign_l1_t10: CompileTimeError # Issue 33805
-LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t04: CompileTimeError # Issue 32903
-LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t05: CompileTimeError # Issue 32903
-LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t06: CompileTimeError # Issue 33864
-LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_neg_assign_l1_t10: CompileTimeError # Issue 33805
-LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_pos_l1_t04: CompileTimeError # Issue 32903
-LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_pos_l1_t05: CompileTimeError # Issue 32903
-LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_pos_l1_t06: CompileTimeError # Issue 33864
-LanguageFeatures/Instantiate-to-bound/function/function_param_extends_neg_assign_l1_t10: CompileTimeError # Issue 33805
-LanguageFeatures/Instantiate-to-bound/function/function_param_extends_pos_l1_t04: CompileTimeError # Issue 32903
-LanguageFeatures/Instantiate-to-bound/function/function_param_extends_pos_l1_t05: CompileTimeError # Issue 32903
-LanguageFeatures/Instantiate-to-bound/function/function_pos_l1_t01: CompileTimeError # Issue 33864
-LanguageFeatures/Instantiate-to-bound/function/function_ret_extends_neg_assign_l1_t01: MissingCompileTimeError # Issue 33597
-LanguageFeatures/Instantiate-to-bound/function/function_ret_extends_neg_assign_l1_t19: CompileTimeError # Issue 33597
-LanguageFeatures/Instantiate-to-bound/interface/interface_neg_assign_l2_t01: MissingCompileTimeError # Issue 33308
+LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_l1_t04: MissingCompileTimeError # Issue 33995--use-fasta-parser
+LanguageFeatures/Instantiate-to-bound/function/function_named_extends_neg_assign_l1_t10: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t04: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t05: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_named_extends_pos_l1_t06: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_neg_assign_l1_t10: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_pos_l1_t04: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_pos_l1_t05: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_optparam_extends_pos_l1_t06: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_param_extends_neg_assign_l1_t10: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_param_extends_pos_l1_t04: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_param_extends_pos_l1_t05: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_pos_l1_t01: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_ret_extends_neg_assign_l1_t01: MissingCompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_ret_extends_neg_assign_l1_t19: CompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/function/function_ret_extends_neg_l1_t01: MissingCompileTimeError # Issue 33995
+LanguageFeatures/Instantiate-to-bound/interface/interface_neg_assign_l2_t01: MissingCompileTimeError # Issue 33995
 LanguageFeatures/Instantiate-to-bound/interface/interface_neg_assign_l2_t02: MissingCompileTimeError # Issue 33308
 LanguageFeatures/Instantiate-to-bound/mixin/mixin_neg_l1_t02: MissingCompileTimeError # Issue 33596
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_named_extends_neg_l1_t02: Crash # Issue 33599
@@ -107,9 +201,11 @@
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_optparam_extends_neg_l1_t03: MissingCompileTimeError # Issue 33597
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_optparam_extends_neg_l2_t01: Crash # Issue 33599
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_param_extends_neg_l1_t02: Crash # Issue 33599
+LanguageFeatures/Instantiate-to-bound/typedef/typedef_param_extends_neg_l1_t03: MissingCompileTimeError # Issue 33995--use-fasta-parser
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_param_extends_neg_l1_t04: MissingCompileTimeError # Issue 33597
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_param_extends_neg_l2_t01: Crash # Issue 33599
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l1_t02: Crash # Issue 33599
+LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l1_t03: MissingCompileTimeError # Issue 33995
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l1_t04: MissingCompileTimeError # Issue 33597
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l2_t01: Crash # Issue 33599
 LanguageFeatures/Super-bounded-types/motivation_example_A01_t01: CompileTimeError # Issue 32903
@@ -124,3 +220,23 @@
 LanguageFeatures/Super-bounded-types/static_analysis_A01_t07: CompileTimeError # Issue 32903
 LanguageFeatures/Super-bounded-types/static_analysis_A01_t08: CompileTimeError # Issue 32903
 LanguageFeatures/Super-bounded-types/static_analysis_A01_t09: CompileTimeError # Issue 32903
+LanguageFeatures/int-to-double/arguments_binding_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/arguments_binding_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_class_member_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_class_member_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_global_variable_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_global_variable_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_local_variable_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_local_variable_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_super_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_super_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_this_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_this_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/max_acceptable_value_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/min_acceptable_values_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t03: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t04: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/return_value_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/return_value_t02: CompileTimeError # Please triage this failure
diff --git a/tests/co19_2/co19_2-dart2js.status b/tests/co19_2/co19_2-dart2js.status
new file mode 100644
index 0000000..6ba2d65
--- /dev/null
+++ b/tests/co19_2/co19_2-dart2js.status
@@ -0,0 +1,7990 @@
+# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+[ $compiler == dart2js ]
+Language/Classes/Constructors/Generative_Constructors/execution_of_a_superinitializer_t01: RuntimeError
+Language/Expressions/Assignment/null_aware_assignment_static_type_t01: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t03: RuntimeError
+Language/Expressions/Booleans/Boolean_Conversion/definition_t01: RuntimeError
+Language/Expressions/Constants/literal_number_t01: CompileTimeError
+Language/Expressions/Constants/math_operators_t01: CompileTimeError
+Language/Expressions/Constants/math_operators_t06: CompileTimeError
+Language/Expressions/Function_Invocation/async_invokation_t02: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t19: RuntimeError
+Language/Expressions/Instance_Creation/New/evaluation_t20: RuntimeError
+Language/Expressions/Numbers/integer_size_t03: CompileTimeError
+Language/Expressions/Numbers/static_type_of_int_t01: CompileTimeError
+Language/Expressions/Object_Identity/constant_objects_t01: RuntimeError
+Language/Expressions/Object_Identity/double_t03: RuntimeError
+Language/Expressions/Object_Identity/object_t02: RuntimeError
+Language/Expressions/Shift/integer_t01: CompileTimeError
+Language/Expressions/Spawning_an_Isolate/new_isolate_t01: SkipByDesign
+Language/Functions/External_Functions/not_connected_to_a_body_t01: CompileTimeError
+Language/Libraries_and_Scripts/Parts/compilation_t03: RuntimeError
+Language/Libraries_and_Scripts/Parts/compilation_t05: RuntimeError
+Language/Libraries_and_Scripts/Scripts/top_level_syntax_t01: CompileTimeError
+Language/Metadata/before_class_t01: RuntimeError
+Language/Metadata/before_ctor_t01: RuntimeError
+Language/Metadata/before_export_t01: RuntimeError
+Language/Metadata/before_factory_t01: RuntimeError
+Language/Metadata/before_function_t05: RuntimeError
+Language/Metadata/before_function_t06: RuntimeError
+Language/Metadata/before_library_t01: RuntimeError
+Language/Metadata/before_param_t01: RuntimeError
+Language/Metadata/before_param_t02: RuntimeError
+Language/Metadata/before_param_t04: RuntimeError
+Language/Metadata/before_param_t06: RuntimeError
+Language/Metadata/before_param_t08: RuntimeError
+Language/Metadata/before_type_param_t01: RuntimeError
+Language/Metadata/before_typedef_t01: RuntimeError
+Language/Metadata/before_variable_t01: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t24: RuntimeError
+Language/Statements/Assert/execution_t03: RuntimeError
+Language/Statements/Assert/execution_t08: RuntimeError
+Language/Statements/Assert/execution_t11: RuntimeError
+Language/Statements/Do/execution_t06: RuntimeError
+Language/Statements/For/For_Loop/execution_t11: RuntimeError
+Language/Statements/For/For_in/execution_t02: RuntimeError
+Language/Statements/If/condition_evaluation_t02: RuntimeError
+Language/Statements/If/condition_evaluation_t03: RuntimeError
+Language/Statements/While/execution_t02: RuntimeError
+Language/Statements/Yield_and_Yield_Each/Yield/execution_async_t02: RuntimeError
+Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t04: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t12: RuntimeError
+Language/Types/Function_Types/subtype_no_args_t04: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t03: RuntimeError
+Language/Types/Function_Types/subtype_required_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_required_args_t02: RuntimeError
+Language/Types/Interface_Types/subtype_t02: RuntimeError
+Language/Types/Interface_Types/subtype_t03: RuntimeError
+Language/Types/Interface_Types/subtype_t17: RuntimeError
+Language/Types/Interface_Types/subtype_t22: RuntimeError
+Language/Types/Interface_Types/subtype_t26: RuntimeError
+Language/Types/Interface_Types/subtype_t27: Pass, Crash # Issue 34389
+Language/Types/Type_Declarations/Typedef/dynamic_param_type_t02: RuntimeError
+Language/Variables/constant_initialization_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_arguments_binding_A02_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_global_variable_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A52_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A52_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A52_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_global_variable_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_global_variable_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_return_value_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t03: RuntimeError
+LayoutTests/fast/alignment/parse-align-items_t01: RuntimeError
+LayoutTests/fast/alignment/parse-align-self_t01: RuntimeError
+LayoutTests/fast/alignment/parse-justify-self_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.gradient_t01: RuntimeError, Timeout
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.veryLarge_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.verySmall_t01: RuntimeError
+LayoutTests/fast/canvas/alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-clipping_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-fill-style_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-currentTransform_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-empty-image-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-large-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-largeNonintegralDimensions_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-large-dimensions_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-large-fills_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lineDash-input-sequence_t01: RuntimeError
+LayoutTests/fast/canvas/draw-custom-focus-ring_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/bad-arguments-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias-t01: RuntimeError
+LayoutTests/fast/canvas/webgl/draw-arrays-out-of-bounds_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/drawingbuffer-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/error-reporting_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/framebuffer-object-attachment_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/functions-returning-strings_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-verifies-too-many-indices_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/null-object-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/null-uniform-location_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/object-deletion-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-uniform-binding-bugs_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texImage2DImageDataTest_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/triangle_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/uniform-location_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-depth-texture_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-large-texture_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-element-events_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-transition_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/auto-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/display-grid-set-get_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-and-minmax-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-container-change-explicit-grid-recompute-child_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-empty-row-column_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-min-max-height_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-padding-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-bad-resolution-double-span_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-display_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-lr_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/implicit-rows-auto-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/minmax-fixed-logical-width-only_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/css-tables_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-absolutes_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/tables_t01: RuntimeError
+LayoutTests/fast/css/aspect-ratio-parsing-tests_t01: RuntimeError
+LayoutTests/fast/css/checked-pseudo-selector_t01: RuntimeError
+LayoutTests/fast/css/comment-before-charset-external_t01: RuntimeError
+LayoutTests/fast/css/content/content-normal_t01: RuntimeError
+LayoutTests/fast/css/css-escaped-identifier_t01: RuntimeError
+LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError
+LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: RuntimeError
+LayoutTests/fast/css/first-child-display-change-inverse_t01: RuntimeError
+LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-clip_t01: RuntimeError
+LayoutTests/fast/css/id-or-class-before-stylesheet_t01: RuntimeError
+LayoutTests/fast/css/inherit-initial-shorthand-values_t01: RuntimeError
+LayoutTests/fast/css/invalid-hex-color_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-shadow-combinator_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-2_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-3_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-4_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-5_t01: RuntimeError
+LayoutTests/fast/css/link-disabled-attr-parser_t01: RuntimeError
+LayoutTests/fast/css/max-device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/min-device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/parsing-at-rule-recovery_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-allowed-string-characters_t01: RuntimeError
+LayoutTests/fast/css/parsing-selector-error-recovery_t01: RuntimeError
+LayoutTests/fast/css/percent-width-img-src-change_t01: Timeout, Pass
+LayoutTests/fast/css/readonly-pseudoclass-opera-001_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-002_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-nested_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-link_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-second-alternate-link_t01: RuntimeError
+LayoutTests/fast/css/webkit-keyframes-errors_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-color_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-justify/getComputedStyle/getComputedStyle-text-justify_t01: RuntimeError
+LayoutTests/fast/dom/52776_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/basic_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport_t01: RuntimeError
+LayoutTests/fast/dom/Document/createElementNS-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/Document/document-title-get_t01: RuntimeError
+LayoutTests/fast/dom/Element/setAttributeNS-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-hostname_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-autofocus_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unfocusable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/non-anchored-dialog-positioning_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/show-modal-focusing-steps_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/insertAdjacentHTML-errors_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inner-outer-optimization_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/spellcheck_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFormElement/move-option-between-documents_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-loading-gc_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-existent-and-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/resolve-url-on-insertion_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/dom-settable-token-list_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-inline-script_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/script-load-events_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLTemplateElement/custom-element-wrapper-gc_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/ownerDocumentXHTML_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-childList_t01: RuntimeError
+LayoutTests/fast/dom/Node/fragment-mutation_t01: RuntimeError
+LayoutTests/fast/dom/Node/initial-values_t01: RuntimeError
+LayoutTests/fast/dom/Range/insertNode-empty-fragment-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/mutation_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-constructor_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-expand_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-separate-endContainer_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/css-medialist-item_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/discarded-sheet-owner-null_t01: RuntimeError
+LayoutTests/fast/dom/Window/window-resize-contents_t01: RuntimeError
+LayoutTests/fast/dom/Window/window-resize_t01: RuntimeError
+LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError
+LayoutTests/fast/dom/attribute-namespaces-get-set_t01: RuntimeError
+LayoutTests/fast/dom/client-width-height-quirks_t01: RuntimeError
+LayoutTests/fast/dom/custom/document-register-basic_t01: RuntimeError
+LayoutTests/fast/dom/custom/document-register-svg-extends_t01: RuntimeError
+LayoutTests/fast/dom/custom/element-names_t01: RuntimeError
+LayoutTests/fast/dom/dataset-xhtml_t01: RuntimeError
+LayoutTests/fast/dom/dataset_t01: RuntimeError
+LayoutTests/fast/dom/document-importNode-arguments_t01: RuntimeError
+LayoutTests/fast/dom/image-object_t01: RuntimeError
+LayoutTests/fast/dom/option-properties_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-update-recalcs-style_t01: RuntimeError
+LayoutTests/fast/dom/shadow/insertion-point-list-menu-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/nested-reprojection-inconsistent_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-optgroup_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-enabled-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-aware-shadow-root_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-element-inactive_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-js-api_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-for-input-spellcheck_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-clonenode_t01: RuntimeError
+LayoutTests/fast/dom/shadow/style-sharing-styles-in-older-shadow-roots_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-quote_t01: RuntimeError
+LayoutTests/fast/dynamic/insertAdjacentElement_t01: RuntimeError
+LayoutTests/fast/dynamic/recursive-layout_t01: RuntimeError
+LayoutTests/fast/events/add-event-without-document_t01: RuntimeError
+LayoutTests/fast/events/clipboard-clearData_t01: RuntimeError
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: RuntimeError
+LayoutTests/fast/events/div-focus_t01: RuntimeError, Pass
+LayoutTests/fast/events/event-attributes-after-exception_t01: RuntimeError
+LayoutTests/fast/events/event-trace_t01: RuntimeError
+LayoutTests/fast/events/invalid-001_t01: RuntimeError
+LayoutTests/fast/events/invalid-004_t01: RuntimeError
+LayoutTests/fast/events/invalid-005_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-replace-child-2_t01: RuntimeError
+LayoutTests/fast/events/nested-event-remove-node-crash_t01: RuntimeError
+LayoutTests/fast/events/xhr-onclick-crash_t01: RuntimeError
+LayoutTests/fast/exclusions/parsing/parsing-wrap-flow_t01: RuntimeError
+LayoutTests/fast/files/blob-close-revoke_t01: RuntimeError
+LayoutTests/fast/files/blob-parts-slice-test_t01: CompileTimeError
+LayoutTests/fast/files/blob-slice-overflow_t01: CompileTimeError
+LayoutTests/fast/files/blob-slice-test_t01: CompileTimeError
+LayoutTests/fast/files/xhr-response-blob_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort_t01: RuntimeError
+LayoutTests/fast/flexbox/flexing-overflow-scroll-item_t01: RuntimeError
+LayoutTests/fast/flexbox/intrinsic-min-width-applies-with-fixed-width_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-001_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-002_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-003_t01: RuntimeError
+LayoutTests/fast/forms/clone-input-with-dirty-value_t01: RuntimeError
+LayoutTests/fast/forms/datalist/datalist_t01: RuntimeError
+LayoutTests/fast/forms/date/input-valueasdate-date_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/ValidityState-typeMismatch-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/file/file-input-capture_t01: RuntimeError
+LayoutTests/fast/forms/form-attribute_t01: RuntimeError
+LayoutTests/fast/forms/input-width-height-attributes-without-renderer-loaded-image_t01: RuntimeError
+LayoutTests/fast/forms/menulist-disabled-selected-option_t01: RuntimeError
+LayoutTests/fast/forms/menulist-selection-reset_t01: RuntimeError
+LayoutTests/fast/forms/multiple-selected-options-innerHTML_t01: RuntimeError
+LayoutTests/fast/forms/search-popup-crasher_t01: RuntimeError
+LayoutTests/fast/forms/setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/submit-form-attributes_t01: RuntimeError
+LayoutTests/fast/forms/submit-nil-value-field-assert_t01: RuntimeError
+LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError
+LayoutTests/fast/html/imports/import-element-removed-flag_t01: RuntimeError
+LayoutTests/fast/html/imports/import-events_t01: RuntimeError
+LayoutTests/fast/inline/empty-inline-before-collapsed-space_t01: RuntimeError
+LayoutTests/fast/inline/inline-with-empty-inline-children_t01: RuntimeError
+LayoutTests/fast/inline/out-of-flow-objects-and-whitespace-after-empty-inline_t01: RuntimeError
+LayoutTests/fast/lists/list-style-position-inside_t01: RuntimeError
+LayoutTests/fast/loader/scroll-position-restored-on-reload-at-load-event_t01: RuntimeError
+LayoutTests/fast/multicol/break-properties_t01: RuntimeError
+LayoutTests/fast/multicol/cssom-view_t01: Crash
+LayoutTests/fast/multicol/fixed-column-percent-logical-height-orthogonal-writing-mode_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-above-or-below_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-end-of-column-with-line-height_t01: RuntimeError
+LayoutTests/fast/parser/foster-parent-adopted_t02: RuntimeError
+LayoutTests/fast/parser/innerhtml-with-prefixed-elements_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-height-text-controls_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-lengths_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-big-box-border-radius_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-diamond-margin-polygon_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-left_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-margin-right_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-right_t01: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: RuntimeError, Timeout
+LayoutTests/fast/speechsynthesis/speech-synthesis-voices_t01: RuntimeError
+LayoutTests/fast/storage/disallowed-storage_t01: RuntimeError
+LayoutTests/fast/sub-pixel/cssom-subpixel-precision_t01: RuntimeError
+LayoutTests/fast/table/anonymous-table-section-removed_t01: RuntimeError
+LayoutTests/fast/table/caption-orthogonal-writing-mode-sizing_t01: RuntimeError
+LayoutTests/fast/table/css-table-max-width_t01: RuntimeError
+LayoutTests/fast/table/large-shrink-wrapped-width_t01: RuntimeError
+LayoutTests/fast/table/min-width-css-inline-table_t01: RuntimeError
+LayoutTests/fast/table/min-width-html-block-table_t01: RuntimeError
+LayoutTests/fast/table/min-width-html-inline-table_t01: RuntimeError
+LayoutTests/fast/table/padding-height-and-override-height_t01: RuntimeError
+LayoutTests/fast/table/table-cell-offset-width_t01: RuntimeError
+LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: Crash
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: Crash
+LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError
+LayoutTests/fast/text/multiglyph-characters_t01: Crash
+LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-pixel_t01: RuntimeError
+LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError
+LayoutTests/fast/url/host_t01: RuntimeError
+LayoutTests/fast/url/relative-unix_t01: RuntimeError
+LayoutTests/fast/url/segments-from-data-url_t01: RuntimeError
+LayoutTests/fast/url/trivial-segments_t01: RuntimeError
+LayoutTests/fast/url/trivial_t01: RuntimeError
+LayoutTests/fast/writing-mode/auto-sizing-orthogonal-flows_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow-scroll_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-invalid-xml_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-document-responsetype_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-document_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/cz_20030217_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/namespace-nodes_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_core_functions_t02: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t01: RuntimeError
+LayoutTests/fast/xpath/attr-namespace_t02: RuntimeError
+LayoutTests/fast/xpath/node-name-case-sensitivity_t01: RuntimeError
+LayoutTests/fast/xpath/position_t01: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/abbreviations_t01: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/axes_t01: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/data_t01: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/paths_t01: RuntimeError
+LayoutTests/fast/xpath/reverse-axes_t01: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t03: RuntimeError
+LibTest/async/Stream/Stream.periodic_A02_t01: RuntimeError
+LibTest/async/Stream/Stream.periodic_A03_t01: RuntimeError
+LibTest/async/StreamController/StreamController_A03_t03: RuntimeError
+LibTest/async/StreamController/stream_A02_t02: RuntimeError
+LibTest/async/StreamController/stream_A03_t03: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t04: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer_A01_t02: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer_A01_t03: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer_A02_t01: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer_A02_t02: RuntimeError
+LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue.from_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/reduce_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/removeWhere_A02_t02: RuntimeError
+LibTest/collection/DoubleLinkedQueue/retainWhere_A02_t03: RuntimeError
+LibTest/collection/HashMap/HashMap_A06_t01: RuntimeError
+LibTest/collection/IterableMixin/IterableMixin_class_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/any_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/every_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/first_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/reduce_A01_t01: RuntimeError
+LibTest/collection/IterableMixin/single_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/skipWhile_A03_t01: RuntimeError
+LibTest/collection/IterableMixin/skipWhile_A04_t01: RuntimeError
+LibTest/collection/LinkedHashSet/LinkedHashSet.from_A03_t01: RuntimeError
+LibTest/collection/LinkedHashSet/LinkedHashSet_class_A01_t01: RuntimeError
+LibTest/collection/LinkedList/LinkedList_A01_t01: RuntimeError
+LibTest/collection/LinkedList/LinkedList_class_A03_t01: RuntimeError
+LibTest/collection/LinkedList/remove_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t03: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A02_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A02_t03: RuntimeError
+LibTest/collection/LinkedListEntry/list_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t03: RuntimeError
+LibTest/collection/ListBase/ListBase_class_A01_t01: RuntimeError
+LibTest/collection/ListQueue/ListQueue_class_A01_t01: RuntimeError
+LibTest/collection/Queue/Queue.from_A01_t01: RuntimeError
+LibTest/collection/Queue/Queue_class_A01_t01: RuntimeError
+LibTest/collection/SetBase/SetBase_class_A01_t01: RuntimeError
+LibTest/collection/SetMixin/SetMixin_class_A01_t01: RuntimeError
+LibTest/collection/SplayTreeSet/SplayTreeSet_class_A01_t01: RuntimeError
+LibTest/collection/UnmodifiableListView/UnmodifiableListView_class_A01_t01: RuntimeError
+LibTest/convert/ByteConversionSink/ByteConversionSink.from_A01_t01: RuntimeError
+LibTest/convert/ByteConversionSink/ByteConversionSink_class_A01_t01: RuntimeError
+LibTest/convert/JsonCodec/encode_A01_t01: RuntimeError
+LibTest/convert/JsonCodec/encode_A01_t02: RuntimeError
+LibTest/convert/JsonCodec/encoder_A01_t01: RuntimeError
+LibTest/convert/JsonDecoder/fuse_A01_t01: RuntimeError
+LibTest/convert/JsonEncoder/convert_A01_t01: RuntimeError
+LibTest/convert/JsonUtf8Encoder/convert_A01_t01: RuntimeError
+LibTest/convert/StringConversionSink/StringConversionSink.from_A01_t01: RuntimeError
+LibTest/convert/StringConversionSink/asStringSink_A02_t01: RuntimeError
+LibTest/convert/StringConversionSink/asUtf8Sink_A02_t01: RuntimeError
+LibTest/convert/Utf8Codec/Utf8Codec_A01_t02: RuntimeError
+LibTest/convert/Utf8Codec/Utf8Codec_A01_t03: RuntimeError
+LibTest/convert/Utf8Codec/decode_A03_t01: RuntimeError
+LibTest/convert/Utf8Codec/decode_A03_t02: RuntimeError
+LibTest/convert/Utf8Decoder/Utf8Decoder_A02_t01: RuntimeError
+LibTest/convert/Utf8Decoder/Utf8Decoder_A02_t02: RuntimeError
+LibTest/core/AssertionError/toString_A01_t01: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t03: RuntimeError
+LibTest/core/Duration/inMinutes_A01_t01: CompileTimeError
+LibTest/core/Expando/operator_square_brackets_A01_t03: RuntimeError
+LibTest/core/List/Iterable_A01_t01: RuntimeError
+LibTest/core/List/List_class_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: RuntimeError
+LibTest/core/StackOverflowError/stackTrace_A01_t01: RuntimeError
+LibTest/core/StackOverflowError/stackTrace_A01_t02: RuntimeError
+LibTest/core/String/String.fromEnvironment_A01_t01: RuntimeError
+LibTest/core/String/replaceAllMapped_A03_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t02: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t05: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A02_t01: RuntimeError
+LibTest/core/Uri/Uri.directory_A05_t01: RuntimeError
+LibTest/core/Uri/parse_A07_t01: RuntimeError
+LibTest/core/Uri/queryParametersAll_A01_t01: RuntimeError
+LibTest/core/Uri/queryParametersAll_A01_t02: RuntimeError
+LibTest/core/Uri/queryParametersAll_A04_t01: RuntimeError
+LibTest/core/UriData/UriData.fromString_A02_t03: RuntimeError
+LibTest/core/UriData/UriData.fromUri_A01_t03: RuntimeError
+LibTest/core/UriData/isBase64_A01_t01: RuntimeError
+LibTest/core/UriData/toString_A01_t01: RuntimeError
+LibTest/core/double/operator_LE_A01_t02: CompileTimeError
+LibTest/core/double/operator_addition_A01_t06: RuntimeError
+LibTest/core/int/abs_A01_t01: CompileTimeError
+LibTest/core/int/ceilToDouble_A01_t01: CompileTimeError
+LibTest/core/int/isEven_A01_t01: CompileTimeError
+LibTest/core/int/isNaN_A01_t01: CompileTimeError
+LibTest/core/int/operator_GT_A01_t01: CompileTimeError
+LibTest/core/int/operator_LE_A01_t01: CompileTimeError
+LibTest/core/int/operator_NOT_A01_t01: CompileTimeError
+LibTest/core/int/operator_OR_A01_t01: CompileTimeError
+LibTest/core/int/operator_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A02_t01: CompileTimeError
+LibTest/core/int/operator_multiplication_A01_t01: RuntimeError
+LibTest/core/int/operator_remainder_A01_t01: CompileTimeError
+LibTest/core/int/operator_right_shift_A01_t01: RuntimeError
+LibTest/core/int/parse_A01_t01: CompileTimeError
+LibTest/core/int/parse_A01_t02: RuntimeError
+LibTest/core/int/remainder_A01_t01: CompileTimeError
+LibTest/core/int/remainder_A01_t03: RuntimeError
+LibTest/core/int/round_A01_t01: CompileTimeError
+LibTest/core/int/toDouble_A01_t01: CompileTimeError
+LibTest/core/int/toInt_A01_t01: CompileTimeError
+LibTest/core/int/truncate_A01_t01: CompileTimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: RuntimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t06: RuntimeError
+LibTest/html/Document/clone_A01_t01: RuntimeError
+LibTest/html/Document/clone_A01_t02: RuntimeError
+LibTest/html/Element/Element.tag_A01_t01: RuntimeError
+LibTest/html/Element/addEventListener_A01_t03: RuntimeError
+LibTest/html/Element/borderEdge_A01_t01: RuntimeError
+LibTest/html/Element/clickEvent_A01_t01: RuntimeError
+LibTest/html/Element/contentEdge_A01_t01: RuntimeError
+LibTest/html/Element/contextMenuEvent_A01_t01: RuntimeError
+LibTest/html/Element/copyEvent_A01_t01: RuntimeError
+LibTest/html/Element/cutEvent_A01_t01: RuntimeError
+LibTest/html/Element/dataset_A02_t01: RuntimeError
+LibTest/html/Element/dragEndEvent_A01_t01: RuntimeError
+LibTest/html/Element/dragEnterEvent_A01_t01: RuntimeError
+LibTest/html/Element/dragEvent_A01_t01: RuntimeError
+LibTest/html/Element/dragLeaveEvent_A01_t01: RuntimeError
+LibTest/html/Element/dragOverEvent_A01_t01: RuntimeError
+LibTest/html/Element/dragStartEvent_A01_t01: RuntimeError
+LibTest/html/Element/dropEvent_A01_t01: RuntimeError
+LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError
+LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError
+LibTest/html/Element/isTagSupported_A01_t01: RuntimeError
+LibTest/html/Element/loadEvent_A01_t01: RuntimeError
+LibTest/html/Element/marginEdge_A01_t01: RuntimeError
+LibTest/html/Element/mouseWheelEvent_A01_t01: RuntimeError
+LibTest/html/Element/onClick_A01_t01: RuntimeError
+LibTest/html/Element/onContextMenu_A01_t01: RuntimeError
+LibTest/html/Element/onCopy_A01_t01: RuntimeError
+LibTest/html/Element/onCut_A01_t01: RuntimeError
+LibTest/html/Element/onDragEnd_A01_t01: RuntimeError
+LibTest/html/Element/onDragEnter_A01_t01: RuntimeError
+LibTest/html/Element/onDragLeave_A01_t01: RuntimeError
+LibTest/html/Element/onDragOver_A01_t01: RuntimeError
+LibTest/html/Element/onDragStart_A01_t01: RuntimeError
+LibTest/html/Element/onDrag_A01_t01: RuntimeError
+LibTest/html/Element/onDrop_A01_t01: RuntimeError
+LibTest/html/Element/onKeyDown_A01_t01: RuntimeError
+LibTest/html/Element/onKeyPress_A01_t01: RuntimeError
+LibTest/html/Element/onKeyUp_A01_t01: RuntimeError
+LibTest/html/Element/onMouseDown_A01_t01: RuntimeError
+LibTest/html/Element/onMouseEnter_A01_t01: RuntimeError
+LibTest/html/Element/onMouseLeave_A01_t01: RuntimeError
+LibTest/html/Element/onMouseMove_A01_t01: RuntimeError
+LibTest/html/Element/onMouseOut_A01_t01: RuntimeError
+LibTest/html/Element/onMouseOver_A01_t01: RuntimeError
+LibTest/html/Element/onMouseUp_A01_t01: RuntimeError
+LibTest/html/Element/onMouseWheel_A01_t01: RuntimeError
+LibTest/html/Element/onPaste_A01_t01: RuntimeError
+LibTest/html/Element/onTouchCancel_A01_t01: RuntimeError
+LibTest/html/Element/onTouchEnd_A01_t01: RuntimeError
+LibTest/html/Element/onTouchEnter_A01_t01: RuntimeError
+LibTest/html/Element/onTouchLeave_A01_t01: RuntimeError
+LibTest/html/Element/onTouchMove_A01_t01: RuntimeError
+LibTest/html/Element/onTouchStart_A01_t01: RuntimeError
+LibTest/html/Element/onTransitionEnd_A01_t01: Timeout, Pass
+LibTest/html/Element/paddingEdge_A01_t01: RuntimeError
+LibTest/html/Element/pasteEvent_A01_t01: RuntimeError
+LibTest/html/Element/previousNode_A01_t01: RuntimeError
+LibTest/html/Element/querySelectorAll_A01_t02: RuntimeError
+LibTest/html/Element/replaceWith_A01_t01: RuntimeError
+LibTest/html/Element/replaceWith_A01_t02: RuntimeError
+LibTest/html/Element/touchCancelEvent_A01_t01: RuntimeError
+LibTest/html/Element/touchEndEvent_A01_t01: RuntimeError
+LibTest/html/Element/touchEnterEvent_A01_t01: RuntimeError
+LibTest/html/Element/touchLeaveEvent_A01_t01: RuntimeError
+LibTest/html/Element/touchMoveEvent_A01_t01: RuntimeError
+LibTest/html/Element/touchStartEvent_A01_t01: RuntimeError
+LibTest/html/Element/transitionEndEvent_A01_t01: RuntimeError
+LibTest/html/Event/Event_A01_t01: RuntimeError
+LibTest/html/Event/currentTarget_A01_t01: RuntimeError
+LibTest/html/Event/defaultPrevented_A01_t01: RuntimeError
+LibTest/html/Event/eventPhase_A01_t01: RuntimeError
+LibTest/html/Event/preventDefault_A01_t01: RuntimeError
+LibTest/html/Event/stopPropagation_A01_t01: RuntimeError
+LibTest/html/Event/target_A01_t01: RuntimeError
+LibTest/html/HttpRequest/getAllResponseHeaders_A01_t01: RuntimeError
+LibTest/html/HttpRequest/getResponseHeader_A01_t01: RuntimeError
+LibTest/html/HttpRequest/getString_A01_t01: RuntimeError
+LibTest/html/HttpRequest/onError_A01_t02: Timeout, Pass
+LibTest/html/HttpRequest/readyStateChangeEvent_A01_t01: RuntimeError
+LibTest/html/HttpRequest/request_A01_t01: RuntimeError
+LibTest/html/HttpRequest/responseText_A01_t02: RuntimeError
+LibTest/html/HttpRequest/responseType_A01_t01: RuntimeError
+LibTest/html/HttpRequest/responseType_A01_t03: RuntimeError
+LibTest/html/HttpRequest/setRequestHeader_A01_t01: RuntimeError
+LibTest/html/HttpRequest/statusText_A01_t01: RuntimeError
+LibTest/html/HttpRequest/status_A01_t01: RuntimeError
+LibTest/html/HttpRequestUpload/onError_A01_t02: RuntimeError
+LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: RuntimeError
+LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: RuntimeError
+LibTest/html/IFrameElement/addEventListener_A01_t03: RuntimeError
+LibTest/html/IFrameElement/appendHtml_A01_t01: RuntimeError
+LibTest/html/IFrameElement/appendHtml_A01_t02: RuntimeError
+LibTest/html/IFrameElement/attributeChanged_A01_t01: RuntimeError
+LibTest/html/IFrameElement/attributes_setter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/blur_A01_t01: Timeout, Pass
+LibTest/html/IFrameElement/borderEdge_A01_t01: RuntimeError
+LibTest/html/IFrameElement/clone_A01_t02: RuntimeError
+LibTest/html/IFrameElement/contentWindow_A01_t01: RuntimeError
+LibTest/html/IFrameElement/createFragment_A01_t01: RuntimeError
+LibTest/html/IFrameElement/createFragment_A01_t02: RuntimeError
+LibTest/html/IFrameElement/createFragment_A01_t03: RuntimeError
+LibTest/html/IFrameElement/createShadowRoot_A01_t01: RuntimeError
+LibTest/html/IFrameElement/innerHtml_A01_t01: RuntimeError
+LibTest/html/IFrameElement/leftView_A01_t01: RuntimeError
+LibTest/html/IFrameElement/marginEdge_A01_t01: RuntimeError
+LibTest/html/IFrameElement/offsetTo_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onClick_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onContextMenu_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onCopy_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onCut_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDragEnd_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDragEnter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDragLeave_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDragOver_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDragStart_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDrag_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDrop_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onKeyDown_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onKeyPress_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onKeyUp_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseDown_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseEnter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseLeave_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseMove_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseOut_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseOver_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseUp_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onPaste_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTouchCancel_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTouchEnd_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTouchEnter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTouchLeave_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTouchMove_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTouchStart_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onTransitionEnd_A01_t01: RuntimeError
+LibTest/html/IFrameElement/paddingEdge_A01_t01: RuntimeError
+LibTest/html/IFrameElement/querySelector_A01_t01: RuntimeError
+LibTest/html/IFrameElement/replaceWith_A01_t01: RuntimeError
+LibTest/html/IFrameElement/setInnerHtml_A01_t01: RuntimeError
+LibTest/html/Node/append_A01_t02: RuntimeError
+LibTest/html/Node/nodes_A01_t02: RuntimeError
+LibTest/html/Node/ownerDocument_A01_t01: RuntimeError
+LibTest/html/Node/parent_A01_t01: RuntimeError
+LibTest/html/Node/previousNode_A01_t01: RuntimeError
+LibTest/html/Window/document_A01_t01: RuntimeError
+LibTest/html/Window/find_A01_t01: RuntimeError
+LibTest/html/Window/find_A03_t01: RuntimeError
+LibTest/html/Window/find_A06_t01: RuntimeError
+LibTest/html/Window/moveBy_A01_t01: RuntimeError
+LibTest/html/Window/moveTo_A01_t01: RuntimeError
+LibTest/html/Window/moveTo_A02_t01: RuntimeError
+LibTest/html/Window/postMessage_A01_t01: RuntimeError
+LibTest/html/Window/postMessage_A01_t02: RuntimeError
+LibTest/html/Window/requestFileSystem_A02_t01: RuntimeError
+LibTest/html/Window/resizeBy_A01_t01: RuntimeError
+LibTest/html/Window/resizeTo_A01_t01: RuntimeError
+LibTest/io/*: SkipByDesign # dart:io not supported.
+LibTest/isolate/*: SkipByDesign # dart:isolate not supported.
+LibTest/math/MutableRectangle/MutableRectangle_A03_t04: RuntimeError
+LibTest/math/MutableRectangle/height_A03_t02: RuntimeError
+LibTest/math/MutableRectangle/width_A03_t02: RuntimeError
+LibTest/math/Point/operator_mult_A02_t01: RuntimeError
+LibTest/math/Rectangle/Rectangle_A03_t04: RuntimeError
+LibTest/math/acos_A01_t01: RuntimeError
+LibTest/math/asin_A01_t01: RuntimeError
+LibTest/math/pow_A04_t01: RuntimeError
+LibTest/math/pow_A10_t01: CompileTimeError
+LibTest/math/pow_A14_t01: RuntimeError
+LibTest/math/pow_A16_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asByteData_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asByteData_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asByteData_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat32List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat32List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat32List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat32x4List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat32x4List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat32x4List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat64List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat64List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat64List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat64x2List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat64x2List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asFloat64x2List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt16List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt16List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt16List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt32List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt32List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt32List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt32x4List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt32x4List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt32x4List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt64List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt64List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt64List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt8List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt8List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asInt8List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint16List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint16List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint16List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint32List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint32List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint32List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint64List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint64List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint64List_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint8ClampedList_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint8ClampedList_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint8ClampedList_A03_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint8List_A01_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint8List_A02_t01: RuntimeError
+LibTest/typed_data/ByteBuffer/asUint8List_A03_t01: RuntimeError
+LibTest/typed_data/ByteData/ByteData.view_A05_t01: RuntimeError
+LibTest/typed_data/ByteData/ByteData.view_A05_t02: RuntimeError
+LibTest/typed_data/ByteData/ByteData.view_A05_t03: RuntimeError
+LibTest/typed_data/ByteData/getFloat32_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getFloat32_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getFloat64_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getFloat64_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getInt16_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getInt16_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getInt32_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getInt32_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getInt64_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/getInt64_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getInt64_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getInt8_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getInt8_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getUint16_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getUint16_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getUint32_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getUint32_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getUint64_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/getUint64_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getUint64_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/getUint8_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/getUint8_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setFloat32_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setFloat32_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setFloat64_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setFloat64_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setInt16_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setInt16_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setInt32_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setInt32_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setInt64_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/setInt64_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setInt64_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setInt8_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setInt8_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setUint16_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setUint16_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setUint32_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setUint32_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setUint64_A01_t01: CompileTimeError
+LibTest/typed_data/ByteData/setUint64_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setUint64_A02_t02: RuntimeError
+LibTest/typed_data/ByteData/setUint8_A02_t01: RuntimeError
+LibTest/typed_data/ByteData/setUint8_A02_t02: RuntimeError
+LibTest/typed_data/Float32List/Float32List.view_A05_t01: RuntimeError
+LibTest/typed_data/Float32List/Float32List.view_A05_t02: RuntimeError
+LibTest/typed_data/Float32List/Float32List.view_A05_t03: RuntimeError
+LibTest/typed_data/Float32List/Float32List_A02_t01: RuntimeError
+LibTest/typed_data/Float32List/any_A01_t01: RuntimeError
+LibTest/typed_data/Float32List/every_A01_t01: RuntimeError
+LibTest/typed_data/Float32List/first_A01_t02: RuntimeError
+LibTest/typed_data/Float32List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Float32List/join_A01_t01: RuntimeError
+LibTest/typed_data/Float32List/join_A01_t02: RuntimeError
+LibTest/typed_data/Float32List/last_A01_t02: RuntimeError
+LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t01: RuntimeError
+LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t02: RuntimeError
+LibTest/typed_data/Float32x4List/Float32x4List.view_A05_t03: RuntimeError
+LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError
+LibTest/typed_data/Float32x4List/Float32x4List_A02_t01: RuntimeError
+LibTest/typed_data/Float32x4List/any_A01_t01: RuntimeError
+LibTest/typed_data/Float32x4List/every_A01_t01: RuntimeError
+LibTest/typed_data/Float32x4List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Float32x4List/join_A01_t01: RuntimeError
+LibTest/typed_data/Float32x4List/join_A01_t02: RuntimeError
+LibTest/typed_data/Float32x4List/shuffle_A01_t01: RuntimeError
+LibTest/typed_data/Float64List/Float64List.view_A05_t01: RuntimeError
+LibTest/typed_data/Float64List/Float64List.view_A05_t02: RuntimeError
+LibTest/typed_data/Float64List/Float64List.view_A05_t03: RuntimeError
+LibTest/typed_data/Float64List/Float64List_A02_t01: RuntimeError
+LibTest/typed_data/Float64List/any_A01_t01: RuntimeError
+LibTest/typed_data/Float64List/every_A01_t01: RuntimeError
+LibTest/typed_data/Float64List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Float64List/join_A01_t01: RuntimeError
+LibTest/typed_data/Float64List/join_A01_t02: RuntimeError
+LibTest/typed_data/Float64List/setAll_A04_t01: RuntimeError
+LibTest/typed_data/Float64x2List/Float64x2List.view_A05_t01: RuntimeError
+LibTest/typed_data/Float64x2List/Float64x2List.view_A05_t02: RuntimeError
+LibTest/typed_data/Float64x2List/Float64x2List.view_A05_t03: RuntimeError
+LibTest/typed_data/Float64x2List/Float64x2List.view_A06_t01: RuntimeError
+LibTest/typed_data/Float64x2List/Float64x2List_A02_t01: RuntimeError
+LibTest/typed_data/Float64x2List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Float64x2List/join_A01_t01: RuntimeError
+LibTest/typed_data/Float64x2List/join_A01_t02: RuntimeError
+LibTest/typed_data/Float64x2List/setAll_A04_t01: RuntimeError
+LibTest/typed_data/Float64x2List/shuffle_A01_t01: RuntimeError
+LibTest/typed_data/Float64x2List/sort_A01_t01: RuntimeError
+LibTest/typed_data/Float64x2List/toString_A01_t01: RuntimeError
+LibTest/typed_data/Int16List/Int16List.view_A05_t01: RuntimeError
+LibTest/typed_data/Int16List/Int16List.view_A05_t02: RuntimeError
+LibTest/typed_data/Int16List/Int16List.view_A05_t03: RuntimeError
+LibTest/typed_data/Int16List/Int16List_A02_t01: RuntimeError
+LibTest/typed_data/Int16List/any_A01_t01: RuntimeError
+LibTest/typed_data/Int16List/every_A01_t01: RuntimeError
+LibTest/typed_data/Int32List/Int32List.view_A05_t01: RuntimeError
+LibTest/typed_data/Int32List/Int32List.view_A05_t02: RuntimeError
+LibTest/typed_data/Int32List/Int32List.view_A05_t03: RuntimeError
+LibTest/typed_data/Int32List/Int32List_A02_t01: RuntimeError
+LibTest/typed_data/Int32List/any_A01_t01: RuntimeError
+LibTest/typed_data/Int32List/every_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.fromList_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.fromList_A01_t02: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.view_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.view_A05_t01: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.view_A05_t02: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.view_A05_t03: RuntimeError
+LibTest/typed_data/Int32x4List/Int32x4List.view_A06_t01: RuntimeError
+LibTest/typed_data/Int32x4List/clear_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/forEach_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/join_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/join_A01_t02: RuntimeError
+LibTest/typed_data/Int32x4List/lengthInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/length_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/offsetInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/setAll_A04_t01: RuntimeError
+LibTest/typed_data/Int32x4List/shuffle_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/skip_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/skip_A02_t01: RuntimeError
+LibTest/typed_data/Int32x4List/sublist_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/take_A01_t01: RuntimeError
+LibTest/typed_data/Int32x4List/take_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List.fromList_A01_t01: CompileTimeError
+LibTest/typed_data/Int64List/Int64List.fromList_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/Int64List.view_A01_t01: CompileTimeError
+LibTest/typed_data/Int64List/Int64List.view_A01_t02: CompileTimeError
+LibTest/typed_data/Int64List/Int64List.view_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List.view_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List.view_A04_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List.view_A05_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List.view_A05_t02: RuntimeError
+LibTest/typed_data/Int64List/Int64List.view_A05_t03: RuntimeError
+LibTest/typed_data/Int64List/Int64List.view_A06_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/Int64List_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/addAll_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/add_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/any_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/asMap_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/asMap_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/asMap_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/buffer_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/buffer_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/clear_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/contains_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/elementAt_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/elementAt_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/elementSizeInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/elementSizeInBytes_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/every_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/expand_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/expand_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/fillRange_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/fillRange_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/firstWhere_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/firstWhere_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/firstWhere_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/first_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/first_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/first_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/first_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/forEach_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/getRange_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/getRange_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/getRange_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/getRange_A04_t01: RuntimeError
+LibTest/typed_data/Int64List/hashCode_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/hashCode_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/indexOf_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/indexOf_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/indexOf_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/indexOf_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/insertAll_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/insert_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/isEmpty_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/isEmpty_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/isNotEmpty_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/isNotEmpty_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/iterator_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/iterator_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/iterator_current_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/iterator_moveNext_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/join_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/join_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/lastIndexOf_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/lastIndexOf_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/lastIndexOf_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/lastIndexOf_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/lastWhere_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/lastWhere_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/lastWhere_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/last_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/last_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/last_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/lengthInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/lengthInBytes_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/length_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/length_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/map_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/map_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/map_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/offsetInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/offsetInBytes_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/operator_equality_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/operator_subscript_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/operator_subscript_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/operator_subscripted_assignment_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/operator_subscripted_assignment_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/reduce_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/reduce_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/removeAt_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/removeLast_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/removeRange_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/removeWhere_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/remove_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/replaceRange_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/retainWhere_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/reversed_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/reversed_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/runtimeType_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/runtimeType_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/setAll_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/setAll_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/setAll_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/setAll_A04_t01: RuntimeError
+LibTest/typed_data/Int64List/setRange_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/setRange_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/setRange_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/setRange_A04_t01: RuntimeError
+LibTest/typed_data/Int64List/setRange_A05_t01: RuntimeError
+LibTest/typed_data/Int64List/shuffle_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/singleWhere_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/singleWhere_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/singleWhere_A02_t02: RuntimeError
+LibTest/typed_data/Int64List/single_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/single_A01_t02: RuntimeError
+LibTest/typed_data/Int64List/single_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/single_A02_t02: RuntimeError
+LibTest/typed_data/Int64List/skipWhile_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/skipWhile_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/skipWhile_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/skipWhile_A04_t01: RuntimeError
+LibTest/typed_data/Int64List/skip_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/skip_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/skip_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/sort_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/sublist_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/sublist_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/sublist_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/sublist_A03_t02: RuntimeError
+LibTest/typed_data/Int64List/takeWhile_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/takeWhile_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/takeWhile_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/takeWhile_A04_t01: RuntimeError
+LibTest/typed_data/Int64List/take_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/take_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/take_A03_t01: RuntimeError
+LibTest/typed_data/Int64List/toList_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/toList_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/toList_A02_t02: RuntimeError
+LibTest/typed_data/Int64List/toSet_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/toString_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/where_A01_t01: RuntimeError
+LibTest/typed_data/Int64List/where_A02_t01: RuntimeError
+LibTest/typed_data/Int64List/where_A03_t01: RuntimeError
+LibTest/typed_data/Int8List/Int8List.view_A05_t01: RuntimeError
+LibTest/typed_data/Int8List/Int8List.view_A05_t02: RuntimeError
+LibTest/typed_data/Int8List/Int8List.view_A05_t03: RuntimeError
+LibTest/typed_data/Int8List/Int8List_A02_t01: RuntimeError
+LibTest/typed_data/Int8List/any_A01_t01: RuntimeError
+LibTest/typed_data/Int8List/every_A01_t01: RuntimeError
+LibTest/typed_data/Uint16List/Uint16List.view_A05_t01: RuntimeError
+LibTest/typed_data/Uint16List/Uint16List.view_A05_t02: RuntimeError
+LibTest/typed_data/Uint16List/Uint16List.view_A05_t03: RuntimeError
+LibTest/typed_data/Uint16List/Uint16List_A02_t01: RuntimeError
+LibTest/typed_data/Uint16List/any_A01_t01: RuntimeError
+LibTest/typed_data/Uint16List/every_A01_t01: RuntimeError
+LibTest/typed_data/Uint32List/Uint32List.view_A05_t01: RuntimeError
+LibTest/typed_data/Uint32List/Uint32List.view_A05_t02: RuntimeError
+LibTest/typed_data/Uint32List/Uint32List.view_A05_t03: RuntimeError
+LibTest/typed_data/Uint32List/Uint32List_A02_t01: RuntimeError
+LibTest/typed_data/Uint32List/any_A01_t01: RuntimeError
+LibTest/typed_data/Uint32List/every_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t01: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.fromList_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.fromList_A02_t01: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t01: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A01_t02: CompileTimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A04_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A05_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A05_t02: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A05_t03: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List.view_A06_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/Uint64List_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/addAll_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/add_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/any_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/asMap_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/asMap_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/asMap_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/buffer_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/buffer_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/clear_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/contains_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/elementAt_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/elementAt_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/elementSizeInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/elementSizeInBytes_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/every_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/expand_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/expand_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/fillRange_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/fillRange_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/firstWhere_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/firstWhere_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/firstWhere_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/first_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/first_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/first_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/first_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/fold_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/forEach_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/getRange_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/getRange_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/getRange_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/getRange_A04_t01: RuntimeError
+LibTest/typed_data/Uint64List/hashCode_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/hashCode_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/indexOf_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/indexOf_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/indexOf_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/indexOf_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/insertAll_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/insert_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/isEmpty_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/isEmpty_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/isNotEmpty_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/isNotEmpty_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/iterator_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/iterator_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/iterator_current_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/iterator_moveNext_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/join_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/join_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/lastIndexOf_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/lastIndexOf_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/lastIndexOf_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/lastIndexOf_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/lastWhere_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/lastWhere_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/lastWhere_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/last_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/last_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/last_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/lengthInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/lengthInBytes_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/length_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/length_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/map_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/map_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/map_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/offsetInBytes_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/offsetInBytes_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/operator_equality_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/operator_subscript_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/operator_subscript_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/operator_subscripted_assignment_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/operator_subscripted_assignment_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/reduce_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/reduce_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/reduce_A03_t01: CompileTimeError
+LibTest/typed_data/Uint64List/removeAt_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/removeLast_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/removeRange_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/removeWhere_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/remove_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/replaceRange_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/retainWhere_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/reversed_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/reversed_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/runtimeType_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/runtimeType_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/setAll_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/setAll_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/setAll_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/setAll_A04_t01: RuntimeError
+LibTest/typed_data/Uint64List/setRange_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/setRange_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/setRange_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/setRange_A04_t01: RuntimeError
+LibTest/typed_data/Uint64List/setRange_A05_t01: RuntimeError
+LibTest/typed_data/Uint64List/shuffle_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/singleWhere_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/singleWhere_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/singleWhere_A02_t02: RuntimeError
+LibTest/typed_data/Uint64List/single_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/single_A01_t02: RuntimeError
+LibTest/typed_data/Uint64List/single_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/single_A02_t02: RuntimeError
+LibTest/typed_data/Uint64List/skipWhile_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/skipWhile_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/skipWhile_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/skipWhile_A04_t01: RuntimeError
+LibTest/typed_data/Uint64List/skip_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/skip_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/skip_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/sort_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/sublist_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/sublist_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/sublist_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/sublist_A03_t02: RuntimeError
+LibTest/typed_data/Uint64List/takeWhile_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/takeWhile_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/takeWhile_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/takeWhile_A04_t01: RuntimeError
+LibTest/typed_data/Uint64List/take_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/take_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/take_A03_t01: RuntimeError
+LibTest/typed_data/Uint64List/toList_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/toList_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/toList_A02_t02: RuntimeError
+LibTest/typed_data/Uint64List/toSet_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/toSet_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/toString_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/where_A01_t01: RuntimeError
+LibTest/typed_data/Uint64List/where_A02_t01: RuntimeError
+LibTest/typed_data/Uint64List/where_A03_t01: RuntimeError
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t01: RuntimeError
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t02: RuntimeError
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList.view_A05_t03: RuntimeError
+LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A02_t01: RuntimeError
+LibTest/typed_data/Uint8ClampedList/any_A01_t01: RuntimeError
+LibTest/typed_data/Uint8ClampedList/every_A01_t01: RuntimeError
+LibTest/typed_data/Uint8List/Uint8List.view_A05_t01: RuntimeError
+LibTest/typed_data/Uint8List/Uint8List.view_A05_t02: RuntimeError
+LibTest/typed_data/Uint8List/Uint8List.view_A05_t03: RuntimeError
+LibTest/typed_data/Uint8List/Uint8List_A02_t01: RuntimeError
+LibTest/typed_data/Uint8List/any_A01_t01: RuntimeError
+LibTest/typed_data/Uint8List/every_A01_t01: RuntimeError
+Utils/tests/Expect/identical_A01_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/EventObject.after.dispatchEvenr_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: RuntimeError
+WebPlatformTest/Utils/test/testFail_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A05_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A06_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A05_t01: RuntimeError
+WebPlatformTest/dom/EventTarget/dispatchEvent_A02_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createHTMLDocument_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-createElement_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-getElementsByTagName_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-appendChild_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-appendChild_t02: RuntimeError
+WebPlatformTest/dom/nodes/Node-isEqualNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-replaceChild_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A05_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t03: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t02: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A08_t01: RuntimeError
+WebPlatformTest/dom/ranges/Range-comparePoint_t02: RuntimeError
+WebPlatformTest/html-imports/link-import_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-context_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-row-context_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/creating-an-element-for-the-token/template-owner-document_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-image_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-text/load-text-plain_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t02: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-delete_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-set_t01: RuntimeError
+WebPlatformTest/html/semantics/document-metadata/styling/LinkStyle_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/src_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/mode_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formAction_document_address_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/attributes-common-to-form-controls/formaction_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-datalist-element/datalistoptions_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-autocomplete_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-nameditem_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/date_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime-local_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/email_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/hidden_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-textselection_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/text_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/valueMode_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-meter-element/meter_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-recurse_t01: RuntimeError
+WebPlatformTest/html/semantics/grouping-content/the-blockquote-element/grouping-blockquote_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-showModal_t01: RuntimeError
+WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t02: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/dir_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/enabled_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/tBodies_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-004_t02: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/elements-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-003_t02: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/composition/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/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/lower-boundary-encapsulation/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/rendering-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/selectors-api-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-009_t01: RuntimeError
+WebPlatformTest/webstorage/event_constructor_t01: RuntimeError
+WebPlatformTest/webstorage/event_local_key_t01: RuntimeError
+WebPlatformTest/webstorage/event_local_oldvalue_t01: RuntimeError
+WebPlatformTest/webstorage/event_local_storagearea_t01: RuntimeError
+WebPlatformTest/webstorage/event_session_newvalue_t01: RuntimeError
+WebPlatformTest/webstorage/event_session_oldvalue_t01: RuntimeError
+WebPlatformTest/webstorage/event_session_storagearea_t01: RuntimeError
+
+[ $builder_tag != run_webgl_tests && $compiler == dart2js ]
+LayoutTests/fast/canvas/webgl*: Skip # Only run WebGL on special builders, issue 29961
+
+[ $compiler == dart2js && $runtime == chrome ]
+Language/Expressions/Additive_Expressions/syntax_t01: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError
+Language/Expressions/Constants/depending_on_itself_t03: Crash
+Language/Expressions/Constants/exception_t02/01: CompileTimeError
+Language/Expressions/Constants/integer_size_t03: CompileTimeError
+Language/Expressions/Constants/integer_size_t04: CompileTimeError
+Language/Expressions/Function_Invocation/async_generator_invokation_t08: Timeout
+Language/Expressions/Function_Invocation/async_generator_invokation_t10: Timeout
+Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
+Language/Expressions/If_null_Expressions/static_type_t01: RuntimeError
+Language/Expressions/Lists/identical_t02: RuntimeError
+Language/Expressions/Maps/identical_t02: RuntimeError
+Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
+Language/Expressions/Numbers/syntax_t06: CompileTimeError
+Language/Expressions/Numbers/syntax_t09: CompileTimeError
+Language/Expressions/Object_Identity/double_t02: RuntimeError
+Language/Expressions/Shift/integer_t02: CompileTimeError
+Language/Expressions/Type_Cast/syntax_t01: RuntimeError
+Language/Expressions/Unary_Expressions/variable_negative_t03: RuntimeError
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t01: CompileTimeError
+Language/Metadata/before_ctor_t02: RuntimeError
+Language/Metadata/before_function_t01: RuntimeError
+Language/Metadata/before_function_t02: RuntimeError
+Language/Metadata/before_function_t03: RuntimeError
+Language/Metadata/before_function_t04: RuntimeError
+Language/Metadata/before_function_t07: RuntimeError
+Language/Metadata/before_import_t01: RuntimeError
+Language/Metadata/before_param_t03: RuntimeError
+Language/Metadata/before_param_t05: RuntimeError
+Language/Metadata/before_param_t07: RuntimeError
+Language/Metadata/before_param_t09: RuntimeError
+Language/Metadata/before_variable_t02: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
+Language/Overview/Privacy/private_and_public_t18: RuntimeError
+Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError
+Language/Statements/Assert/execution_t09: RuntimeError
+Language/Types/Function_Types/call_t01: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t03: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t11: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t04: RuntimeError
+Language/Types/Interface_Types/subtype_t06: RuntimeError
+Language/Types/Interface_Types/subtype_t21: RuntimeError
+Language/Types/Interface_Types/subtype_t23: RuntimeError
+Language/Variables/constant_variable_t09: RuntimeError
+LanguageFeatures/Instantiate-to-bound/check_types/typedef_param_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_local_variable_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_return_value_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_return_value_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-cancel2_t01: Timeout, Pass
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: Timeout, Pass
+LayoutTests/fast/animation/request-animation-frame-prefix_t01: Timeout, Pass
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Timeout, Pass
+LayoutTests/fast/animation/request-animation-frame-timestamps_t01: Timeout, Pass
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError
+LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError
+LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError
+LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: Timeout
+LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: Timeout, Pass
+LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Timeout, Pass
+LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-resize-after-paint_t01: Timeout, Pass
+LayoutTests/fast/canvas/drawImage-with-valid-image_t01: Timeout
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/css-webkit-canvas_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/gl-getshadersource_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/gl-getstring_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/point-size_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Timeout, RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Timeout, RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError
+LayoutTests/fast/css-generated-content/bug91547_t01: RuntimeError
+LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: RuntimeError, Pass
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: RuntimeError, Pass
+LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Timeout
+LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Timeout, Pass
+LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError
+LayoutTests/fast/css/MarqueeLayoutTest_t01: RuntimeError, Pass
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError
+LayoutTests/fast/css/background-serialize_t01: RuntimeError
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError
+LayoutTests/fast/css/content/content-none_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-01_t01: RuntimeError, Pass
+LayoutTests/fast/css/content/content-quotes-05_t01: RuntimeError, Pass
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError, Pass
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: RuntimeError
+LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError
+LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError, Pass
+LayoutTests/fast/css/font-face-cache-bug_t01: RuntimeError, Pass
+LayoutTests/fast/css/font-face-insert-link_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError, Timeout
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError, Timeout
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError
+LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError
+LayoutTests/fast/css/implicit-attach-marking_t01: Timeout, Pass
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError
+LayoutTests/fast/css/padding-no-renderer_t01: RuntimeError, Pass
+LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError
+LayoutTests/fast/css/percent-min-width-img-src-change_t01: Timeout, Pass
+LayoutTests/fast/css/pseudo-any_t01: RuntimeError, Pass
+LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Timeout
+LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Timeout, Pass
+LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError
+LayoutTests/fast/css/sheet-collection-link_t01: RuntimeError
+LayoutTests/fast/css/space-before-charset-external_t01: RuntimeError
+LayoutTests/fast/css/style-element-process-crash_t01: Timeout, Pass
+LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-link_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError
+LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: RuntimeError
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError
+LayoutTests/fast/dom/Element/client-rect-list-argument_t01: RuntimeError
+LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: RuntimeError
+LayoutTests/fast/dom/HTMLButtonElement/value/getset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: Timeout
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/click-label_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Timeout
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Timeout
+LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/indeterminate-progress-002_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLScriptElement/defer-script-invalid-url_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/dont-load-unknown-type_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Timeout
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableSectionElement/rows_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: Timeout, Pass
+LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError
+LayoutTests/fast/dom/Range/getClientRects-character_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError, Pass
+LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style-2_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper_t01: RuntimeError
+LayoutTests/fast/dom/blur-contenteditable_t01: RuntimeError, Pass
+LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError
+LayoutTests/fast/dom/css-cached-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-shorthand-common-value_t01: RuntimeError
+LayoutTests/fast/dom/cssTarget-crash_t01: RuntimeError
+LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError
+LayoutTests/fast/dom/empty-hash-and-search_t01: RuntimeError
+LayoutTests/fast/dom/focus-contenteditable_t01: RuntimeError, Pass
+LayoutTests/fast/dom/gc-image-element-2_t01: Timeout
+LayoutTests/fast/dom/gc-image-element_t01: Timeout
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError
+LayoutTests/fast/dom/image-object_t01: Timeout
+LayoutTests/fast/dom/non-styled-element-id-crash_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError
+LayoutTests/fast/dom/set-innerHTML_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/olderShadowRoot_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError, Pass
+LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError
+LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError
+LayoutTests/fast/dynamic/checkbox-selection-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Timeout
+LayoutTests/fast/events/clipboard-clearData_t01: Timeout
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Timeout
+LayoutTests/fast/events/event-creation_t01: RuntimeError
+LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError
+LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError
+LayoutTests/fast/events/fire-scroll-event_t01: RuntimeError, Timeout
+LayoutTests/fast/events/init-message-event_t01: RuntimeError
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: RuntimeError, Pass
+LayoutTests/fast/events/invalid-002_t01: RuntimeError
+LayoutTests/fast/events/invalid-003_t01: RuntimeError
+LayoutTests/fast/events/label-focus_t01: RuntimeError, Pass
+LayoutTests/fast/events/mutation-during-replace-child_t01: RuntimeError
+LayoutTests/fast/events/nested-event-remove-node-crash_t01: Timeout, Pass
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: RuntimeError
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError
+LayoutTests/fast/events/scroll-during-zoom-change_t01: Timeout, Pass
+LayoutTests/fast/events/scroll-event-phase_t01: Timeout, Pass
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError, Pass
+LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError
+LayoutTests/fast/files/blob-close-read_t01: RuntimeError
+LayoutTests/fast/files/blob-constructor_t01: RuntimeError
+LayoutTests/fast/files/read-blob-as-array-buffer_t01: RuntimeError
+LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Timeout, Pass
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Timeout, Pass
+LayoutTests/fast/forms/autofocus-opera-007_t01: Timeout, Pass
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Timeout, Pass
+LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError, Pass
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError, Pass
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/focus-style-pending_t01: Timeout, Pass
+LayoutTests/fast/forms/focus_t01: RuntimeError, Pass
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError
+LayoutTests/fast/forms/input-implicit-length-limit_t01: RuntimeError
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError
+LayoutTests/fast/forms/listbox-selection-2_t01: RuntimeError
+LayoutTests/fast/forms/onchange-change-type_t01: RuntimeError
+LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError
+LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError
+LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError
+LayoutTests/fast/forms/paste-into-textarea_t01: RuntimeError
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError
+LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: Timeout
+LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError
+LayoutTests/fast/forms/textfield-focus-out_t01: Timeout, Pass
+LayoutTests/fast/html/adjacent-html-context-element_t01: RuntimeError
+LayoutTests/fast/html/article-element_t01: RuntimeError
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError
+LayoutTests/fast/html/figure-element_t01: RuntimeError
+LayoutTests/fast/html/header-element_t01: RuntimeError
+LayoutTests/fast/html/hgroup-element_t01: RuntimeError
+LayoutTests/fast/html/hidden-attr_t01: RuntimeError
+LayoutTests/fast/html/imports/import-element-removed-flag_t01: Timeout
+LayoutTests/fast/html/main-element_t01: RuntimeError
+LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError
+LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError
+LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError
+LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-change_t01: Timeout
+LayoutTests/fast/loader/about-blank-hash-kept_t01: Timeout
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: RuntimeError
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Timeout, Pass
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Timeout
+LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError
+LayoutTests/fast/masking/parsing-mask_t01: RuntimeError
+LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: RuntimeError
+LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError
+LayoutTests/fast/multicol/cssom-view_t01: RuntimeError
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError
+LayoutTests/fast/multicol/inline-getclientrects_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError
+LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError
+LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError
+LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError
+LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError
+LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: Timeout, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Timeout, RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Timeout, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Timeout, Pass
+LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError
+LayoutTests/fast/sub-pixel/computedstylemargin_t01: RuntimeError, Pass
+LayoutTests/fast/table/fixed-table-layout-toggle-colwidth_t01: RuntimeError, Pass
+LayoutTests/fast/table/fixed-table-with-percent-width-inside-extra-large-div_t01: RuntimeError, Pass
+LayoutTests/fast/table/hittest-tablecell-bottom-edge_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-with-borders-bottom-edge_t01: RuntimeError
+LayoutTests/fast/table/html-table-width-max-width-constrained_t01: RuntimeError
+LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError
+LayoutTests/fast/table/margins-flipped-text-direction_t01: RuntimeError
+LayoutTests/fast/table/min-width-css-block-table_t01: RuntimeError
+LayoutTests/fast/table/nested-tables-with-div-offset_t01: RuntimeError
+LayoutTests/fast/table/resize-table-binding-cell_t01: RuntimeError, Pass
+LayoutTests/fast/table/resize-table-cell_t01: RuntimeError, Pass
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: RuntimeError
+LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-cell-with-empty-cell_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: RuntimeError
+LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: RuntimeError
+LayoutTests/fast/text/font-ligatures-linebreak-word_t01: RuntimeError, Pass
+LayoutTests/fast/text/font-ligatures-linebreak_t01: RuntimeError, Pass
+LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError
+LayoutTests/fast/text/multiglyph-characters_t01: RuntimeError
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError, Pass
+LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError
+LayoutTests/fast/url/anchor_t01: RuntimeError
+LayoutTests/fast/url/file-http-base_t01: RuntimeError
+LayoutTests/fast/url/file_t01: RuntimeError
+LayoutTests/fast/url/idna2003_t01: RuntimeError
+LayoutTests/fast/url/idna2008_t01: RuntimeError
+LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError
+LayoutTests/fast/url/ipv4_t01: RuntimeError
+LayoutTests/fast/url/ipv6_t01: RuntimeError
+LayoutTests/fast/url/mailto_t01: RuntimeError
+LayoutTests/fast/url/path_t01: RuntimeError
+LayoutTests/fast/url/query_t01: RuntimeError
+LayoutTests/fast/url/relative-win_t01: RuntimeError
+LayoutTests/fast/url/relative_t01: RuntimeError
+LayoutTests/fast/url/segments_t01: RuntimeError
+LayoutTests/fast/url/standard-url_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-text-map-local-to-container_t01: RuntimeError
+LayoutTests/fast/writing-mode/percentage-margins-absolute-replaced_t01: RuntimeError, Pass
+LayoutTests/fast/writing-mode/percentage-margins-absolute_t01: RuntimeError, Pass
+LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError
+LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError
+LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError
+LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError
+LayoutTests/fast/xsl/default-html_t01: RuntimeError
+LibTest/async/Future/asStream_A01_t02: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t01: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError, Pass
+LibTest/async/Stream/Stream.fromIterable_A03_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A03_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t03: RuntimeError
+LibTest/async/StreamController/addStream_A03_t01: RuntimeError
+LibTest/async/StreamController/stream_A02_t03: RuntimeError
+LibTest/async/StreamController/stream_A03_t02: RuntimeError
+LibTest/async/StreamSink/addStream_A01_t02: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: RuntimeError
+LibTest/async/Zone/registerBinaryCallback_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/fold_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/removeWhere_A02_t03: RuntimeError
+LibTest/collection/DoubleLinkedQueue/retainWhere_A02_t02: RuntimeError
+LibTest/collection/HashSet/HashSet_A04_t01: RuntimeError
+LibTest/collection/HashSet/HashSet_class_A01_t01: RuntimeError
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/contains_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/every_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/expand_A01_t01: RuntimeError
+LibTest/collection/IterableMixin/expand_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/fold_A01_t01: RuntimeError
+LibTest/collection/LinkedList/addAll_A01_t02: RuntimeError
+LibTest/collection/LinkedList/join_A01_t01: RuntimeError
+LibTest/collection/LinkedList/toString_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/LinkedListEntry_class_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/list_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A02_t02: RuntimeError
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError
+LibTest/collection/ListQueue/ListQueue.from_A01_t01: RuntimeError
+LibTest/convert/LineSplitter/fuse_A01_t01: RuntimeError
+LibTest/core/AssertionError/AssertionError_A01_t01: RuntimeError
+LibTest/core/AssertionError/message_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/CyclicInitializationError.class_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/variableName_A01_t01: RuntimeError
+LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecond_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/parse_A01_t03: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t01: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t02: RuntimeError
+LibTest/core/Duration/Duration_A01_t01: CompileTimeError
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError
+LibTest/core/Duration/inDays_A01_t01: CompileTimeError
+LibTest/core/Duration/inHours_A01_t01: CompileTimeError
+LibTest/core/Duration/inMicroseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError
+LibTest/core/Error/stackTrace_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t04: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t05: RuntimeError
+LibTest/core/Function/Function_class_A01_t01: RuntimeError
+LibTest/core/IndexError/stackTrace_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError
+LibTest/core/Runes/any_A01_t01: RuntimeError
+LibTest/core/Runes/every_A01_t01: RuntimeError
+LibTest/core/String/padRight_A01_t01: RuntimeError
+LibTest/core/String/replaceFirstMapped_A03_t01: RuntimeError
+LibTest/core/Symbol/Symbol_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t02: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t05: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A02_t03: RuntimeError
+LibTest/core/Uri/Uri.file_A02_t03: RuntimeError
+LibTest/core/Uri/queryParametersAll_A01_t04: RuntimeError
+LibTest/core/Uri/queryParametersAll_A03_t01: RuntimeError
+LibTest/core/UriData/UriData.fromBytes_A01_t03: RuntimeError
+LibTest/core/UriData/charset_A01_t01: RuntimeError
+LibTest/core/UriData/contentText_A01_t01: RuntimeError
+LibTest/core/UriData/parse_A01_t01: RuntimeError
+LibTest/core/double/INFINITY_A01_t04: RuntimeError
+LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A01_t02: CompileTimeError
+LibTest/core/double/operator_GT_A01_t02: CompileTimeError
+LibTest/core/double/operator_LT_A01_t02: CompileTimeError
+LibTest/core/double/operator_addition_A01_t08: Crash
+LibTest/core/double/operator_subtraction_A01_t06: RuntimeError
+LibTest/core/double/operator_subtraction_A01_t09: Crash
+LibTest/core/int/ceil_A01_t01: CompileTimeError
+LibTest/core/int/compareTo_A01_t01: CompileTimeError
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError
+LibTest/core/int/floor_A01_t01: CompileTimeError
+LibTest/core/int/hashCode_A01_t01: CompileTimeError
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError
+LibTest/core/int/isNegative_A01_t01: CompileTimeError
+LibTest/core/int/isOdd_A01_t01: RuntimeError
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A03_t01: CompileTimeError
+LibTest/core/int/operator_left_shift_A01_t01: RuntimeError
+LibTest/core/int/operator_remainder_A01_t03: RuntimeError
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError
+LibTest/core/int/parse_A03_t02: CompileTimeError
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: Timeout
+LibTest/html/Element/blur_A01_t01: Timeout, Pass
+LibTest/html/Element/focus_A01_t01: Timeout, Pass
+LibTest/html/Element/loadEvent_A01_t01: Timeout
+LibTest/html/Element/mouseWheelEvent_A01_t01: Timeout
+LibTest/html/Element/onLoad_A01_t01: Timeout, Pass
+LibTest/html/Element/onMouseWheel_A01_t01: Timeout
+LibTest/html/Element/transitionEndEvent_A01_t01: Timeout
+LibTest/html/HttpRequest/responseText_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onError_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: Timeout, Pass
+LibTest/html/IFrameElement/enteredView_A01_t01: Timeout, Pass
+LibTest/html/IFrameElement/focus_A01_t01: Timeout, Pass
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Timeout
+LibTest/html/IFrameElement/onTransitionEnd_A01_t01: Timeout
+LibTest/typed_data/Int16List/shuffle_A01_t01: RuntimeError, Pass
+Utils/tests/Expect/throws_A01_t04: RuntimeError
+WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Timeout
+WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError
+WebPlatformTest/Utils/test/asyncTestTimeout_t01: Timeout
+WebPlatformTest/custom-elements/concepts/type_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-isEqualNode_t01: Timeout
+WebPlatformTest/dom/nodes/Node-nodeName_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError
+WebPlatformTest/html-imports/link-import_t02: RuntimeError
+WebPlatformTest/html-imports/loading-import_t01: RuntimeError
+WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_t01: RuntimeError, Pass
+WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-type-button_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/mobiles_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: RuntimeError, Pass
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/link_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError
+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-content-html-element/test-004_t02: 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-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: Timeout, Pass
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: Timeout, Pass
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: Timeout, Pass
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: Timeout, Pass
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError, Pass
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/webstorage/event_constructor_t02: RuntimeError
+WebPlatformTest/webstorage/event_local_key_t01: Timeout
+WebPlatformTest/webstorage/event_local_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_local_url_t01: Timeout, Pass
+WebPlatformTest/webstorage/event_session_key_t01: Timeout, Pass
+WebPlatformTest/webstorage/event_session_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_session_url_t01: Timeout
+
+[ $compiler == dart2js && $runtime == chrome && $system == linux && $fast_startup ]
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: RuntimeError, Pass
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: Timeout, Pass
+LayoutTests/fast/table/col-width-span-expand_t01: RuntimeError, Pass
+LayoutTests/fast/text/international/combining-marks-position_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime == chrome && $system == macos ]
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-input-validation_t01: RuntimeError, Pass
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError, Pass
+LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError, Pass
+LayoutTests/fast/dom/vertical-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError, Pass
+LayoutTests/fast/events/scroll-event-does-not-bubble_t01: Timeout, Pass
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError, Pass
+LayoutTests/fast/forms/button-baseline-and-collapsing_t01: RuntimeError
+LayoutTests/fast/forms/percent-height-auto-width-form-controls_t01: RuntimeError, Pass
+LayoutTests/fast/multicol/column-width-zero_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: RuntimeError, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: RuntimeError, Pass
+LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: RuntimeError, Pass
+
+[ $compiler == dart2js && $runtime == chrome && $system == macos && $fast_startup ]
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError
+LayoutTests/fast/css/overflow-property_t01: RuntimeError, Pass
+LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError, Pass
+LayoutTests/fast/events/fire-scroll-event-element_t01: Timeout, Pass
+LayoutTests/fast/forms/percent-height-auto-width-form-controls_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: RuntimeError, Pass
+LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime == chrome && $system == windows ]
+LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: RuntimeError
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError, Pass
+LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError
+LibTest/typed_data/Uint8List/shuffle_A01_t01: RuntimeError, Pass
+
+[ $compiler == dart2js && $runtime == chrome && $fast_startup ]
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/css-webkit-canvas_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/tex-input-validation_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError, Pass
+LayoutTests/fast/css/cssText-shorthand_t01: RuntimeError
+LayoutTests/fast/css/font-face-cache-bug_t01: RuntimeError, Pass
+LayoutTests/fast/dom/DOMException/XPathException_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowhost-keyframes_t01: RuntimeError, Pass
+LayoutTests/fast/dom/vertical-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError, Pass
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError, Pass
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: RuntimeError
+LayoutTests/fast/sub-pixel/computedstylemargin_t01: RuntimeError, Pass
+LayoutTests/fast/table/css-table-max-height_t01: RuntimeError
+LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-right-edge_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: RuntimeError
+LayoutTests/fast/table/margins-perpendicular-containing-block_t01: RuntimeError
+LayoutTests/fast/table/min-max-width-preferred-size_t01: RuntimeError
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: RuntimeError
+LayoutTests/fast/table/table-width-exceeding-max-width_t01: RuntimeError
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError
+LayoutTests/fast/text/find-spaces_t01: RuntimeError
+LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError
+LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError
+LayoutTests/fast/transforms/hit-test-large-scale_t01: RuntimeError
+LibTest/math/cos_A01_t01: RuntimeError
+WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: RuntimeError
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: RuntimeError, Pass
+
+[ $compiler == dart2js && $runtime == chrome && !$fast_startup ]
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime != chrome ]
+LayoutTests/fast/backgrounds/background-repeat-computed-style_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-ellipse-zero-lineto_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-strokePath-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgb565_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: RuntimeError
+LayoutTests/fast/css/dynamic-class-backdrop-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/detach-reattach-shadow_t01: RuntimeError
+LayoutTests/fast/css/invalidation/shadow-host-toggle_t01: RuntimeError
+LayoutTests/fast/css/percent-min-width-img-src-change_t01: RuntimeError
+LayoutTests/fast/css/percent-width-img-src-change_t01: RuntimeError
+LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-in-shadow_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-enabled_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-show-modal_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-does-not-match-disabled-selector_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-loading-gc_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/script-load-events_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/css-insert-import-rule-to-shadow-stylesheets_t01: RuntimeError
+LayoutTests/fast/dom/anchor-without-content_t01: RuntimeError
+LayoutTests/fast/dom/blur-contenteditable_t01: RuntimeError, Pass
+LayoutTests/fast/dom/custom/constructor-calls-created-synchronously_t01: RuntimeError
+LayoutTests/fast/dom/custom/document-register-namespace_t01: RuntimeError
+LayoutTests/fast/dom/custom/document-register-on-create-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/document-register-type-extensions_t01: RuntimeError
+LayoutTests/fast/dom/custom/element-type_t01: RuntimeError
+LayoutTests/fast/dom/custom/element-upgrade_t01: RuntimeError
+LayoutTests/fast/dom/custom/type-extensions_t01: RuntimeError
+LayoutTests/fast/dom/importNode-unsupported-node-type_t01: RuntimeError
+LayoutTests/fast/dom/navigatorcontentutils/register-protocol-handler_t01: RuntimeError, Pass
+LayoutTests/fast/dom/shadow/content-element-api_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-element-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-element-outside-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-overridden_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-reprojection-fallback-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/custom-pseudo-in-selector-api_t01: RuntimeError
+LayoutTests/fast/dom/shadow/form-in-shadow_t01: RuntimeError
+LayoutTests/fast/dom/shadow/get-distributed-nodes-orphan_t01: RuntimeError
+LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-mutation_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getelementbyid-shadow_t01: RuntimeError
+LayoutTests/fast/dom/shadow/host-context-pseudo-class-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/host-pseudo-class-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/host-wrapper-reclaimed_t01: RuntimeError
+LayoutTests/fast/dom/shadow/reinsert-insertion-point_t01: RuntimeError
+LayoutTests/fast/dom/shadow/remove-and-insert-style_t01: RuntimeError
+LayoutTests/fast/dom/shadow/remove-styles-in-shadow-crash-2_t01: RuntimeError
+LayoutTests/fast/dom/shadow/remove-styles-in-shadow-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-element_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-append_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-dynamic-styling_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-for-unknown-with-form_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowhost-keyframes_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-keyframes_t01: RuntimeError
+LayoutTests/fast/dom/shadow/style-insertion-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/style-of-distributed-node_t01: RuntimeError
+LayoutTests/fast/dom/shadow/style-sharing-sibling-shadow_t01: RuntimeError
+LayoutTests/fast/dom/shadow/suppress-mutation-events-in-shadow-characterdata_t01: RuntimeError
+LayoutTests/fast/dom/shadow/title-element-in-shadow_t01: RuntimeError
+LayoutTests/fast/events/label-focus_t01: RuntimeError, Pass
+LayoutTests/fast/filesystem/file-from-file-entry_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort-depth_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-empty-blob_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-gc-blob_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-reference_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-entry_t01: RuntimeError
+LayoutTests/fast/filesystem/op-move_t01: RuntimeError
+LayoutTests/fast/filesystem/op-remove_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-unicode_t01: RuntimeError
+LayoutTests/fast/filesystem/read-directory-many_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-readonly_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-required-arguments-getdirectory_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-required-arguments-getfile_t01: RuntimeError
+LayoutTests/fast/forms/button-baseline-and-collapsing_t01: RuntimeError
+LayoutTests/fast/forms/datalist/datalist-child-validation_t01: RuntimeError
+LayoutTests/fast/forms/datalist/input-list_t01: RuntimeError
+LayoutTests/fast/forms/date/ValidityState-rangeOverflow-date_t01: RuntimeError
+LayoutTests/fast/forms/date/ValidityState-rangeUnderflow-date_t01: RuntimeError
+LayoutTests/fast/forms/date/ValidityState-stepMismatch-date_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal-multiple-fields/datetimelocal-multiple-fields-change-layout-by-value_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/ValidityState-rangeOverflow-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/ValidityState-rangeUnderflow-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/ValidityState-stepMismatch-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-pseudo-classes_t01: RuntimeError
+LayoutTests/fast/forms/select-max-length_t01: RuntimeError
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-outside_t01: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: RuntimeError
+LayoutTests/fast/svg/tabindex-focus_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-integer_t01: RuntimeError
+LayoutTests/fast/table/col-width-span-expand_t01: RuntimeError, Pass
+LayoutTests/fast/text/international/listbox-width-rtl_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-rtl_t01: RuntimeError
+LayoutTests/fast/url/port_t01: RuntimeError
+LibTest/html/Element/attributeChanged_A01_t01: RuntimeError
+LibTest/html/Element/enteredView_A01_t01: RuntimeError
+LibTest/html/Element/leftView_A01_t01: RuntimeError
+LibTest/html/Element/onLoad_A01_t01: RuntimeError
+LibTest/html/Element/onTransitionEnd_A01_t01: RuntimeError
+LibTest/html/Element/tagName_A01_t03: RuntimeError
+LibTest/html/HttpRequest/onError_A01_t02: RuntimeError
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: RuntimeError
+LibTest/html/IFrameElement/IFrameElement.created_A01_t01: RuntimeError
+LibTest/html/IFrameElement/blur_A01_t01: RuntimeError
+LibTest/html/IFrameElement/enteredView_A01_t01: RuntimeError
+LibTest/html/IFrameElement/tagName_A01_t03: RuntimeError
+LibTest/html/Window/requestFileSystem_A01_t01: RuntimeError
+LibTest/html/Window/requestFileSystem_A01_t02: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A07_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A02_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A02_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/namespace_A01_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/methods/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-008_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-010_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-012_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-010_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-009_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t02: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t03: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t05: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/inert-html-elements/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-017_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/dom-tree-accessors-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/shadow-root-001_t01: RuntimeError
+WebPlatformTest/webstorage/event_local_url_t01: RuntimeError
+WebPlatformTest/webstorage/event_session_key_t01: RuntimeError
+WebPlatformTest/webstorage/storage_session_setitem_quotaexceedederr_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime != chrome && $runtime != ff && $runtime != safari && !$fast_startup ]
+Language/Functions/setter_modifier_t02: Crash
+Language/Functions/setter_modifier_t03: Crash
+Language/Functions/setter_modifier_t05: Crash
+Language/Functions/setter_modifier_t06: Crash
+LayoutTests/fast/animation/request-animation-frame-callback-id_t01: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-timestamps_t01: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-within-callback_t01: RuntimeError
+LayoutTests/fast/backgrounds/001_t01: RuntimeError
+LayoutTests/fast/backgrounds/multiple-backgrounds-computed-style_t01: RuntimeError
+LayoutTests/fast/backgrounds/multiple-backgrounds-initial-values_t01: RuntimeError
+LayoutTests/fast/box-shadow/box-shadow-parsing-invalid_t01: RuntimeError
+LayoutTests/fast/box-sizing/css-table-with-box-sizing_t01: RuntimeError
+LayoutTests/fast/canvas/access-zero-sized-canvas_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-2d-imageData-create-nonfinite_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-arc-negative-radius_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-arc-zero-lineto_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-as-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-bezier-same-endpoint_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-color-clamping_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-canvas_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-copyPixels_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-css-crazy_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-drawImage-incomplete_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-ellipse_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fill-rule_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-negative-source_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-gradient-without-path_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-invalid-strokestyle_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-largedraws_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lineDash-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lineWidth_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-measureText_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-pattern-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-pattern-transform_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-radial-gradient-spreadMethod_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-resize-after-paint_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-save-restore_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-set-properties-with-non-invertible-ctm_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-skia-excessive-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokePath-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-toDataURL-case-insensitive-mimetype_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-toDataURL-jpeg-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-with-incorrect-args_t01: RuntimeError
+LayoutTests/fast/canvas/canvas_arc_largeangles_t01: RuntimeError
+LayoutTests/fast/canvas/change-context_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-negative-source-destination_t01: RuntimeError
+LayoutTests/fast/canvas/drawImageFromRect_withToDataURLAsSource_t01: RuntimeError
+LayoutTests/fast/canvas/fallback-content_t01: RuntimeError
+LayoutTests/fast/canvas/fillrect-gradient-zero-stops_t01: RuntimeError
+LayoutTests/fast/canvas/invalid-set-font-crash_t01: RuntimeError
+LayoutTests/fast/canvas/pointInPath_t01: RuntimeError
+LayoutTests/fast/canvas/radialGradient-infinite-values_t01: RuntimeError
+LayoutTests/fast/canvas/shadow-huge-blur_t01: RuntimeError
+LayoutTests/fast/canvas/text-globalAlpha_t01: RuntimeError
+LayoutTests/fast/canvas/transformed-canvas-reset_t01: RuntimeError
+LayoutTests/fast/canvas/translate-text_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/array-bounds-clamping_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/buffer-bind-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/canvas-2d-webgl-texture_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/canvas-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/compressed-tex-image_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/context-lost-restored_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/draw-webgl-to-canvas-2d_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/framebuffer-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-enable-enum-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-uniformmatrix4fv_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib-zero-issues_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-vertexattribpointer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-crash-with-buffer-sub-data_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/invalid-UTF-16_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/invalid-passed-params_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/is-object_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/program-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/read-pixels-pack-alignment_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/renderbuffer-initialization_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba5551_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-webgl_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-sub-image-2d-bad-args_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-sub-image-2d_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-sub-image-cube-maps_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/uniform-location-length-limits_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-composite-modes-repaint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-composite-modes_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-exceptions_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-texture-binding-preserved_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-viewport-parameters-preserved_t01: RuntimeError
+LayoutTests/fast/canvas/winding-enumeration_t01: RuntimeError
+LayoutTests/fast/css-generated-content/after-with-first-letter-float-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/before-content-with-list-marker-in-anon-block-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/block-after_t01: RuntimeError
+LayoutTests/fast/css-generated-content/empty-first-letter-with-columns-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/first-letter-next-sibling-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/float-first-letter-siblings-convert-to-inline_t01: RuntimeError
+LayoutTests/fast/css-generated-content/hit-test-generated-content_t01: RuntimeError
+LayoutTests/fast/css-generated-content/inline-splitting-with-after-float-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/media-generated-content_t01: RuntimeError
+LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation-display_t01: RuntimeError
+LayoutTests/fast/css-generated-content/quote-first-letter-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/table-row-after-no-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/text-before-table-col-crash_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-remove-svg-child_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-strict-ordering-crash_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/should-not-collapse-anonymous-blocks_t01: RuntimeError
+LayoutTests/fast/css/add-remove-stylesheets-at-once-minimal-recalc-style_t01: RuntimeError
+LayoutTests/fast/css/assert-marquee-not-last-element_t01: RuntimeError
+LayoutTests/fast/css/background-position-inherit_t01: RuntimeError
+LayoutTests/fast/css/border-spacing-without-vertical-value_t01: RuntimeError
+LayoutTests/fast/css/case-sensitive-attr_t01: RuntimeError
+LayoutTests/fast/css/collapsed-whitespace-reattach-in-style-recalc_t01: RuntimeError
+LayoutTests/fast/css/content-language-dynamically-added_t01: RuntimeError
+LayoutTests/fast/css/content-language-dynamically-removed_t01: RuntimeError
+LayoutTests/fast/css/content-language-multiple_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-02_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-03_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-04_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-crash_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-function-input_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-ruby-text-cleared_t01: RuntimeError
+LayoutTests/fast/css/counters/render-tree-reorg-crash_t01: RuntimeError
+LayoutTests/fast/css/crash-comparing-equal_t01: RuntimeError
+LayoutTests/fast/css/crash-on-gradient-with-derived-color_t01: RuntimeError
+LayoutTests/fast/css/css-selector-deeply-nested_t01: RuntimeError
+LayoutTests/fast/css/css-selector-text_t01: RuntimeError
+LayoutTests/fast/css/css3-nth-space_t01: RuntimeError
+LayoutTests/fast/css/cssText-cache_t01: RuntimeError
+LayoutTests/fast/css/dfn-default-font-style_t01: RuntimeError
+LayoutTests/fast/css/display-inline-block-scrollbar_t01: RuntimeError
+LayoutTests/fast/css/display-none-inline-style-change-crash_t01: RuntimeError
+LayoutTests/fast/css/duplicate-property-in-rule-important_t01: RuntimeError
+LayoutTests/fast/css/duplicate-property-in-rule_t01: RuntimeError
+LayoutTests/fast/css/empty-display-none_t01: RuntimeError
+LayoutTests/fast/css/empty-first-line-crash_t01: RuntimeError
+LayoutTests/fast/css/end-of-buffer-crash_t01: RuntimeError
+LayoutTests/fast/css/ex-unit-with-no-x-height_t01: RuntimeError
+LayoutTests/fast/css/fill-layer-crash_t01: RuntimeError
+LayoutTests/fast/css/first-child-display-change_t01: RuntimeError
+LayoutTests/fast/css/first-letter-anonymous-block-crash_t01: RuntimeError
+LayoutTests/fast/css/first-letter-inline-flow-split-crash_t01: RuntimeError
+LayoutTests/fast/css/first-letter-inline-flow-split-table-crash_t01: RuntimeError
+LayoutTests/fast/css/first-letter-nested_t01: RuntimeError
+LayoutTests/fast/css/first-letter-wbr_t01: RuntimeError
+LayoutTests/fast/css/font-face-descending-unicode-range_t01: RuntimeError
+LayoutTests/fast/css/font-face-font-family-descriptor_t01: RuntimeError
+LayoutTests/fast/css/font-face-html-as-svg_t01: RuntimeError
+LayoutTests/fast/css/font-face-in-media-rule_t01: RuntimeError
+LayoutTests/fast/css/font-face-inherit-initial_t01: RuntimeError
+LayoutTests/fast/css/font-face-multiple-families_t01: RuntimeError
+LayoutTests/fast/css/font-face-unused-source-loaded_t01: RuntimeError
+LayoutTests/fast/css/font-family-initial-shorthand_t01: RuntimeError
+LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/counterIncrement-without-counter_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/pending-stylesheet_t01: RuntimeError
+LayoutTests/fast/css/id-or-class-before-stylesheet-strict_t01: RuntimeError
+LayoutTests/fast/css/image-set-value-crash-in-fillImageSet_t01: RuntimeError
+LayoutTests/fast/css/important-js-override_t01: RuntimeError
+LayoutTests/fast/css/infinite-floating-value_t01: RuntimeError
+LayoutTests/fast/css/invalid-appearance-progress-bar-meter_t01: RuntimeError
+LayoutTests/fast/css/invalid-cursor-property-crash_t01: RuntimeError
+LayoutTests/fast/css/invalid-parsercontext-valid-keyword-crash_t01: RuntimeError
+LayoutTests/fast/css/invalid-rule-value_t01: RuntimeError
+LayoutTests/fast/css/invalidation/style-update-with-added-stylesheet_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-attribute-style-invalidation_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-id_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-id-style-invalidation_t01: RuntimeError
+LayoutTests/fast/css/large-number-round-trip_t01: RuntimeError
+LayoutTests/fast/css/large-value-csstext_t01: RuntimeError
+LayoutTests/fast/css/many-spaces-before-charset_t01: RuntimeError
+LayoutTests/fast/css/max-height-and-max-width_t01: RuntimeError
+LayoutTests/fast/css/media-rule-screenDepthPerComponent_t01: RuntimeError
+LayoutTests/fast/css/min-max-width_t01: RuntimeError
+LayoutTests/fast/css/misplaced-charset_t01: RuntimeError
+LayoutTests/fast/css/negative-orphans-crash_t01: RuntimeError
+LayoutTests/fast/css/nested-rule-parent-sheet_t01: RuntimeError
+LayoutTests/fast/css/next-sibling-changed_t01: RuntimeError
+LayoutTests/fast/css/nth-child-negative-a-param_t01: RuntimeError
+LayoutTests/fast/css/nth-child-odd-case-insensitive_t01: RuntimeError
+LayoutTests/fast/css/number-parsing-crash-2_t01: RuntimeError
+LayoutTests/fast/css/number-parsing-crash_t01: RuntimeError
+LayoutTests/fast/css/orphaned_units_crash_t01: RuntimeError
+LayoutTests/fast/css/outline-currentcolor_t01: RuntimeError
+LayoutTests/fast/css/outline-hidden-illegal-value_t01: RuntimeError
+LayoutTests/fast/css/outline-invert-assertion_t01: RuntimeError
+LayoutTests/fast/css/outline-offset-crash_t01: RuntimeError
+LayoutTests/fast/css/parse-color-int-or-percent-crash_t01: RuntimeError
+LayoutTests/fast/css/parse-timing-function-crash_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-nonascii_t01: RuntimeError
+LayoutTests/fast/css/parsing-not-after-supports_t01: RuntimeError
+LayoutTests/fast/css/parsing-object-fit_t01: RuntimeError
+LayoutTests/fast/css/pending-images-crash_t01: RuntimeError
+LayoutTests/fast/css/positioned-in-relative-position-inline-crash_t01: RuntimeError
+LayoutTests/fast/css/pseudo-default-003_t01: RuntimeError
+LayoutTests/fast/css/pseudo-default-004_t01: RuntimeError
+LayoutTests/fast/css/pseudo-element-opagedxy-crash_t01: RuntimeError
+LayoutTests/fast/css/pseudo-empty-dynamic-empty_t01: RuntimeError
+LayoutTests/fast/css/pseudo-in-range-invalid-value_t01: RuntimeError
+LayoutTests/fast/css/pseudo-in-range_t01: RuntimeError
+LayoutTests/fast/css/pseudo-invalid-002_t01: RuntimeError
+LayoutTests/fast/css/pseudo-out-of-range_t01: RuntimeError
+LayoutTests/fast/css/pseudo-valid-001_t01: RuntimeError
+LayoutTests/fast/css/pseudo-valid-004_t01: RuntimeError
+LayoutTests/fast/css/pseudo-valid-007_t01: RuntimeError
+LayoutTests/fast/css/pseudo-valid-dynamic_t01: RuntimeError
+LayoutTests/fast/css/pseudostyle-anonymous-text_t01: RuntimeError
+LayoutTests/fast/css/recursive-delay-update-scroll_t01: RuntimeError
+LayoutTests/fast/css/relative-position-replaced-in-table-display-crash_t01: RuntimeError
+LayoutTests/fast/css/rem-units-body_t01: RuntimeError
+LayoutTests/fast/css/remove-class-name_t01: RuntimeError
+LayoutTests/fast/css/remove-style-after-insert-import-rule-crash_t01: RuntimeError
+LayoutTests/fast/css/resize-object-crash_t01: RuntimeError
+LayoutTests/fast/css/selector-text-escape_t01: RuntimeError
+LayoutTests/fast/css/sheet-title_t01: RuntimeError
+LayoutTests/fast/css/shorthands-four-values_t01: RuntimeError
+LayoutTests/fast/css/sibling-selectors-dynamic_t01: RuntimeError
+LayoutTests/fast/css/space-before-charset_t01: RuntimeError
+LayoutTests/fast/css/sticky/sticky-table-col-crash_t01: RuntimeError
+LayoutTests/fast/css/string-quote-binary_t01: RuntimeError
+LayoutTests/fast/css/style-sharing-inline-stylesheet_t01: RuntimeError
+LayoutTests/fast/css/use-incorrect-svg-crash_t01: RuntimeError
+LayoutTests/fast/css/visited-link-hang_t01: RuntimeError
+LayoutTests/fast/css/webfont-lighter-weight-crash_t01: RuntimeError
+LayoutTests/fast/css/webkit-marquee-speed-unit-in-quirksmode_t01: RuntimeError
+LayoutTests/fast/dom/DOMException/prototype-object_t01: RuntimeError
+LayoutTests/fast/dom/Document/replace-child_t01: RuntimeError
+LayoutTests/fast/dom/Document/title-property-creates-title-element_t01: RuntimeError
+LayoutTests/fast/dom/Document/title-property-set-multiple-times_t01: RuntimeError
+LayoutTests/fast/dom/Element/class-name_t01: RuntimeError
+LayoutTests/fast/dom/Element/hostname-host_t01: RuntimeError
+LayoutTests/fast/dom/Element/id-in-map_t01: RuntimeError
+LayoutTests/fast/dom/Element/id-in-param_t01: RuntimeError
+LayoutTests/fast/dom/Element/node-list-identity_t01: RuntimeError
+LayoutTests/fast/dom/Element/remove_t01: RuntimeError
+LayoutTests/fast/dom/Element/setAttribute-with-colon_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/anchor-ismap-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/get-href-attribute-port_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-whitespace_t01: RuntimeError
+LayoutTests/fast/dom/HTMLBaseElement/multiple-base-elements_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/activeElement_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFormElement/htmlformelement-indexed-getter_t01: RuntimeError
+LayoutTests/fast/dom/HTMLHtmlElement/duplicate-html-element-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/constructor-mutation-event-dispatch_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-src-absolute-url_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/cloned-input-checked-state_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/size-attribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/focus-label_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/cachedresource-types_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-beforeload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-too-many-clients_t01: RuntimeError
+LayoutTests/fast/dom/HTMLMetaElement/meta-attributes_t01: RuntimeError
+LayoutTests/fast/dom/HTMLObjectElement/set-type-to-null-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/progress-element-indeterminate-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/isURLAttribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/script-async-attr_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/listbox-select-reset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/named-options_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/remove-element-from-within-focus-handler-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/select-element-item-argument_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/insert-parser-generated_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/programmatically-add-style-with-onload-handler_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/style-onload-before-page-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/early-acid3-66-excerpt_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/table-with-invalid-border_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableRowElement/cells_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/inertContents_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/no-form-association_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/callback-arguments_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/cross-document_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/disconnect-cancel-pending_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/mutate-during-delivery_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/mutation-record-nullity_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-characterdata_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/NodeIterator/NodeIterator-basic_t01: RuntimeError
+LayoutTests/fast/dom/NodeList/nodelist-reachable_t01: RuntimeError
+LayoutTests/fast/dom/Range-insertNode-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/13000_t01: RuntimeError
+LayoutTests/fast/dom/Range/create-contextual-fragment-script-not-ran_t01: RuntimeError
+LayoutTests/fast/dom/Range/create-contextual-fragment_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-clone-empty_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-delete-contents-mutation-event-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-extract-contents-event-fire-crash2_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-extract-contents_t01: RuntimeError
+LayoutTests/fast/dom/Range/remove-all-children-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/remove-twice-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/select-node-different-document_t01: RuntimeError
+LayoutTests/fast/dom/Range/split-text-in-range_t01: RuntimeError
+LayoutTests/fast/dom/Range/surroundContents-1_t01: RuntimeError
+LayoutTests/fast/dom/Range/surroundContents-check-boundary-points_t01: RuntimeError
+LayoutTests/fast/dom/Selection/collapseToX-empty-selection_t01: RuntimeError
+LayoutTests/fast/dom/Selection/getRangeAt_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/caseID-almost-strict_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/caseID-strict_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-2_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList-almost-strict_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/duplicate-id-scope_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/elementRoot_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/id-fastpath-almost-strict_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/id-fastpath_t01: RuntimeError
+LayoutTests/fast/dom/Text/next-element-sibling_t01: RuntimeError
+LayoutTests/fast/dom/Text/normalize-crash-in-spell-checker_t01: RuntimeError
+LayoutTests/fast/dom/Text/remove_t01: RuntimeError
+LayoutTests/fast/dom/Text/replaceWholeText_t01: RuntimeError
+LayoutTests/fast/dom/Window/atob-btoa_t01: RuntimeError
+LayoutTests/fast/dom/Window/console-functions_t01: RuntimeError
+LayoutTests/fast/dom/Window/dispatchEvent_t01: RuntimeError
+LayoutTests/fast/dom/Window/querySelectorAll-with-pseudo-elements_t01: RuntimeError
+LayoutTests/fast/dom/Window/window-remove-event-listener_t01: RuntimeError
+LayoutTests/fast/dom/Window/window-screen-properties_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-attribute-namespaces_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-doctype2_t01: RuntimeError
+LayoutTests/fast/dom/anchor-text_t01: RuntimeError
+LayoutTests/fast/dom/clone-node-default-argument_t01: RuntimeError
+LayoutTests/fast/dom/clone-node-form-elements_t01: RuntimeError
+LayoutTests/fast/dom/clone-node-style_t01: RuntimeError
+LayoutTests/fast/dom/clone-node-z-index_t01: RuntimeError
+LayoutTests/fast/dom/cloneNode_t01: RuntimeError
+LayoutTests/fast/dom/comment-dom-node_t01: RuntimeError
+LayoutTests/fast/dom/computed-style-set-property_t01: RuntimeError
+LayoutTests/fast/dom/createDocumentType-ownerDocument_t01: RuntimeError
+LayoutTests/fast/dom/createDocumentType_t01: RuntimeError
+LayoutTests/fast/dom/createElement-with-column_t01: RuntimeError
+LayoutTests/fast/dom/createElement-with-column_xml_t01: RuntimeError
+LayoutTests/fast/dom/createElementNS-namespace-errors_t01: RuntimeError
+LayoutTests/fast/dom/css-inline-style-declaration-crash_t01: RuntimeError
+LayoutTests/fast/dom/css-mediarule-deleteRule-update_t01: RuntimeError
+LayoutTests/fast/dom/custom/html-element-type-extension-assert_t01: RuntimeError
+LayoutTests/fast/dom/custom/type-extension-undo-assert_t01: RuntimeError
+LayoutTests/fast/dom/delete-contents_t01: RuntimeError
+LayoutTests/fast/dom/destroy-selected-radio-button-crash_t01: RuntimeError
+LayoutTests/fast/dom/document-set-title-no-child-on-empty_t01: RuntimeError
+LayoutTests/fast/dom/dom-method-document-change_t01: RuntimeError
+LayoutTests/fast/dom/duplicate-ids-document-order_t01: RuntimeError
+LayoutTests/fast/dom/elementFromPoint-scaled-scrolled_t01: RuntimeError
+LayoutTests/fast/dom/getElementById-consistency3_t01: RuntimeError
+LayoutTests/fast/dom/getElementById-consistency5_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/002_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/005_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/008_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/013_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/015_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/dumpNodeList_t01: RuntimeError
+LayoutTests/fast/dom/getelementsbyname-invalidation-cache_t01: RuntimeError
+LayoutTests/fast/dom/htmlcollection-namedItem_t01: RuntimeError
+LayoutTests/fast/dom/icon-size-property_t01: RuntimeError
+LayoutTests/fast/dom/icon-url-change_t01: RuntimeError
+LayoutTests/fast/dom/implementation-api-args_t01: RuntimeError
+LayoutTests/fast/dom/implementation-createHTMLDocument_t01: RuntimeError
+LayoutTests/fast/dom/import-document-fragment_t01: RuntimeError
+LayoutTests/fast/dom/importNodeXML_t01: RuntimeError
+LayoutTests/fast/dom/insert-span-into-long-text-bug-28245_t01: RuntimeError
+LayoutTests/fast/dom/left-overflow-in-ltr_t01: RuntimeError
+LayoutTests/fast/dom/move-style-element-to-inactive-document-crash_t01: RuntimeError
+LayoutTests/fast/dom/mutation-event-remove-inserted-node_t01: RuntimeError
+LayoutTests/fast/dom/no-elements_t01: RuntimeError
+LayoutTests/fast/dom/noscript-canvas-in-created-html-document_t01: RuntimeError
+LayoutTests/fast/dom/noscript-style_t01: RuntimeError
+LayoutTests/fast/dom/object-plugin-hides-properties_t01: RuntimeError
+LayoutTests/fast/dom/offset-parent-positioned-and-inline_t01: RuntimeError
+LayoutTests/fast/dom/onerror-img_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-block_t01: RuntimeError
+LayoutTests/fast/dom/remove-children-notification-order_t01: RuntimeError
+LayoutTests/fast/dom/remove-named-attribute-crash_t01: RuntimeError
+LayoutTests/fast/dom/replace-first-child_t01: RuntimeError
+LayoutTests/fast/dom/setAttribute-using-initial-input-value_t01: RuntimeError
+LayoutTests/fast/dom/setAttributeNS-namespace-errors_t01: RuntimeError
+LayoutTests/fast/dom/setter-type-enforcement_t01: RuntimeError
+LayoutTests/fast/dom/shadow/event-path_t01: RuntimeError
+LayoutTests/fast/dom/shadow/ol-with-distribution-recalc-crash_t01: RuntimeError
+LayoutTests/fast/dom/shared-inline-style-after-node-removal_t01: RuntimeError
+LayoutTests/fast/dom/stripNullFromTextNodes_t01: RuntimeError
+LayoutTests/fast/dom/text-control-crash-on-select_t01: RuntimeError
+LayoutTests/fast/dom/title-content-set-innerText-get_t01: RuntimeError
+LayoutTests/fast/dom/xhtml-fragment-parsing-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/xmlserializer-serialize-to-string-exception_t01: RuntimeError
+LayoutTests/fast/dynamic/5872671_t01: RuntimeError
+LayoutTests/fast/dynamic/float-remove-above-line-2_t01: RuntimeError
+LayoutTests/fast/dynamic/insertAdjacentHTML-allowed-parents_t01: RuntimeError
+LayoutTests/fast/dynamic/insertAdjacentHTML_t01: RuntimeError
+LayoutTests/fast/dynamic/insertAdjacentText_t01: RuntimeError
+LayoutTests/fast/dynamic/position-absolute-to-fixed-crash_t01: RuntimeError
+LayoutTests/fast/events/dispatch-event-no-document_t01: RuntimeError
+LayoutTests/fast/events/dispatch-synthetic-mouseevent_t01: RuntimeError
+LayoutTests/fast/events/domnodeinsertedintodocument-dispatched-post-rendering_t01: RuntimeError
+LayoutTests/fast/events/event-listener-sharing_t01: RuntimeError
+LayoutTests/fast/events/event-on-created-document_t01: RuntimeError
+LayoutTests/fast/events/focus-remove-focuesed-node_t01: RuntimeError
+LayoutTests/fast/events/init-event-null-view_t01: RuntimeError
+LayoutTests/fast/events/initkeyboardevent-crash_t01: RuntimeError
+LayoutTests/fast/events/keyboardevent-mousedown-crash_t01: RuntimeError
+LayoutTests/fast/events/onerror-img-after-gc_t01: RuntimeError
+LayoutTests/fast/events/page-visibility-null-view_t01: RuntimeError
+LayoutTests/fast/events/programmatic-check-no-change-event_t01: RuntimeError
+LayoutTests/fast/events/scroll-event-phase_t01: RuntimeError
+LayoutTests/fast/events/stop-immediate-propagation_t01: RuntimeError
+LayoutTests/fast/events/stopPropagation-checkbox_t01: RuntimeError
+LayoutTests/fast/events/submit-reset-nested-bubble_t01: RuntimeError
+LayoutTests/fast/files/file-reader-immediate-abort_t01: RuntimeError
+LayoutTests/fast/files/file-reader-methods-illegal-arguments_t01: RuntimeError
+LayoutTests/fast/files/not-enough-arguments_t01: RuntimeError
+LayoutTests/fast/files/revoke-blob-url_t01: RuntimeError
+LayoutTests/fast/flexbox/child-flexing_t01: RuntimeError
+LayoutTests/fast/flexbox/crash-anonymous-box_t01: RuntimeError
+LayoutTests/fast/flexbox/crash-button-keygen_t01: RuntimeError
+LayoutTests/fast/flexbox/crash-button-relayout_t01: RuntimeError
+LayoutTests/fast/flexbox/crash-flexbox-no-layout-child_t01: RuntimeError
+LayoutTests/fast/flexbox/layoutHorizontalBox-crash_t01: RuntimeError
+LayoutTests/fast/flexbox/line-clamp-crash_t01: RuntimeError
+LayoutTests/fast/flexbox/overhanging-floats-not-removed-crash_t01: RuntimeError
+LayoutTests/fast/forms/HTMLOptionElement_selected_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-patternMismatch-unsupported_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-removed-control_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-stepMismatch_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-005_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-009_t01: RuntimeError
+LayoutTests/fast/forms/activate-and-disabled-elements_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-attribute_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-opera-008_t01: RuntimeError
+LayoutTests/fast/forms/checkValidity-001_t01: RuntimeError
+LayoutTests/fast/forms/checkValidity-002_t01: RuntimeError
+LayoutTests/fast/forms/checkValidity-004_t01: RuntimeError
+LayoutTests/fast/forms/checkValidity-cancel_t01: RuntimeError
+LayoutTests/fast/forms/checkbox-click-indeterminate_t01: RuntimeError
+LayoutTests/fast/forms/checkbox-onchange_t01: RuntimeError
+LayoutTests/fast/forms/datalist/datalist-nonoption-child_t01: RuntimeError
+LayoutTests/fast/forms/datalist/slider-appearance-with-ticks-crash_t01: RuntimeError
+LayoutTests/fast/forms/date/date-click-on-label_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-interactive-validation-required_t01: RuntimeError
+LayoutTests/fast/forms/disabled-attr-checkvalidity_t01: RuntimeError
+LayoutTests/fast/forms/enctype-attribute_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-crash_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/focus-in-fieldset-disabled_t01: RuntimeError
+LayoutTests/fast/forms/file/file-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/formmethod-attribute-button-html_t01: RuntimeError
+LayoutTests/fast/forms/formmethod-attribute-input-2_t01: RuntimeError
+LayoutTests/fast/forms/formmethod-attribute-input-html_t01: RuntimeError
+LayoutTests/fast/forms/formnovalidate-attribute_t01: RuntimeError
+LayoutTests/fast/forms/hidden-input-enabled_t01: RuntimeError
+LayoutTests/fast/forms/hidden/change-type-to-hidden-after-updating-value_t01: RuntimeError
+LayoutTests/fast/forms/hidden/hidden-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/image/image-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/input-minmax_t01: RuntimeError
+LayoutTests/fast/forms/input-pattern_t01: RuntimeError
+LayoutTests/fast/forms/input-selection-hidden_t01: RuntimeError
+LayoutTests/fast/forms/input-setvalue-selection_t01: RuntimeError
+LayoutTests/fast/forms/input-stepup-stepdown_t01: RuntimeError
+LayoutTests/fast/forms/input-text-maxlength_t01: RuntimeError
+LayoutTests/fast/forms/input-type-change3_t01: RuntimeError
+LayoutTests/fast/forms/input-valueasnumber-unsupported_t01: RuntimeError
+LayoutTests/fast/forms/input-width-height-attributes-without-renderer_t01: RuntimeError
+LayoutTests/fast/forms/input-zero-height-focus_t01: RuntimeError
+LayoutTests/fast/forms/interactive-validation-assertion-by-validate-twice_t01: RuntimeError
+LayoutTests/fast/forms/interactive-validation-attach-assertion_t01: RuntimeError
+LayoutTests/fast/forms/large-parts_t01: RuntimeError
+LayoutTests/fast/forms/legend-display-none_t01: RuntimeError
+LayoutTests/fast/forms/menulist-no-renderer-onmousedown_t01: RuntimeError
+LayoutTests/fast/forms/missing-action_t01: RuntimeError
+LayoutTests/fast/forms/novalidate-attribute_t01: RuntimeError
+LayoutTests/fast/forms/option-index_t01: RuntimeError
+LayoutTests/fast/forms/pattern-attribute-001_t01: RuntimeError
+LayoutTests/fast/forms/pattern-attribute-003_t01: RuntimeError
+LayoutTests/fast/forms/required-attribute-001_t01: RuntimeError
+LayoutTests/fast/forms/select-change-listbox-to-popup-roundtrip_t01: RuntimeError
+LayoutTests/fast/forms/select-reset-multiple-selections-4-single-selection_t01: RuntimeError
+LayoutTests/fast/forms/select-reset_t01: RuntimeError
+LayoutTests/fast/forms/select-set-length-with-mutation-reorder_t01: RuntimeError
+LayoutTests/fast/forms/select-set-length-with-mutation-reparent_t01: RuntimeError
+LayoutTests/fast/forms/select-set-length-with-mutation_t01: RuntimeError
+LayoutTests/fast/forms/select-set-length_t01: RuntimeError
+LayoutTests/fast/forms/select-width-font-change_t01: RuntimeError
+LayoutTests/fast/forms/selected-index-assert_t01: RuntimeError
+LayoutTests/fast/forms/setCustomValidity_t01: RuntimeError
+LayoutTests/fast/forms/text-control-select-blurred_t01: RuntimeError
+LayoutTests/fast/forms/textarea-and-mutation-events-appending-text_t01: RuntimeError
+LayoutTests/fast/forms/textarea-default-value-leading-newline_t01: RuntimeError
+LayoutTests/fast/forms/textarea-initial-caret-position_t01: RuntimeError
+LayoutTests/fast/forms/textarea-newline_t01: RuntimeError
+LayoutTests/fast/forms/textarea-scrollbar-height_t01: RuntimeError
+LayoutTests/fast/forms/textarea-setvalue-without-renderer_t01: RuntimeError
+LayoutTests/fast/forms/textarea-wrap-attribute_t01: RuntimeError
+LayoutTests/fast/forms/update-from-element-during-editing-crash-1_t01: RuntimeError
+LayoutTests/fast/forms/update-from-element-during-editing-crash-2_t01: RuntimeError
+LayoutTests/fast/html/clone-range_t01: RuntimeError
+LayoutTests/fast/html/hidden-attr-dom_t01: RuntimeError
+LayoutTests/fast/html/input-type-change-crash_t01: RuntimeError
+LayoutTests/fast/html/numbered-header-element_t01: RuntimeError
+LayoutTests/fast/html/range-point-in-range-for-different-documents_t01: RuntimeError
+LayoutTests/fast/html/tabindex-removal_t01: RuntimeError
+LayoutTests/fast/html/text-field-input-types_t01: RuntimeError
+LayoutTests/fast/html/unknown-tag_t01: RuntimeError
+LayoutTests/fast/inline/fixed-pos-moves-with-abspos-parent-relative-ancestor_t01: RuntimeError
+LayoutTests/fast/inline/skipped-whitespace-client-rect_t01: RuntimeError
+LayoutTests/fast/innerHTML/005_t01: RuntimeError
+LayoutTests/fast/innerHTML/additional-inline-style_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-iframe_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-nbsp_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-special-elements_t01: RuntimeError
+LayoutTests/fast/loader/hashchange-event-properties_t01: RuntimeError
+LayoutTests/fast/loader/loadInProgress_t01: RuntimeError
+LayoutTests/fast/loader/onload-policy-ignore-for-frame_t01: RuntimeError
+LayoutTests/fast/loader/stateobjects/pushstate-updates-location_t01: RuntimeError
+LayoutTests/fast/loader/stateobjects/replacestate-updates-location_t01: RuntimeError
+LayoutTests/fast/media/color-does-not-include-alpha_t01: RuntimeError
+LayoutTests/fast/media/mq-color-index_t01: RuntimeError
+LayoutTests/fast/media/mq-js-media-except_t01: RuntimeError
+LayoutTests/fast/media/mq-js-media-except_t02: RuntimeError
+LayoutTests/fast/media/mq-parsing_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t02: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t07: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t09: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/image-inside-nested-blocks-with-border_t01: RuntimeError
+LayoutTests/fast/multicol/widows-and-orphans_t01: RuntimeError
+LayoutTests/fast/multicol/widows_t02: RuntimeError
+LayoutTests/fast/parser/foster-parent-adopted_t01: RuntimeError
+LayoutTests/fast/parser/pop-all-after-after-body_t01: RuntimeError
+LayoutTests/fast/parser/pre-first-line-break_t01: RuntimeError
+LayoutTests/fast/parser/stray-end-tags-with-attributes-002-alt_t01: RuntimeError
+LayoutTests/fast/replaced/table-replaced-element_t01: RuntimeError
+LayoutTests/fast/ruby/modify-positioned-ruby-text-crash_t01: RuntimeError
+LayoutTests/fast/scrolling/scroll-max-value_t01: RuntimeError
+LayoutTests/fast/selectors/style-sharing-adjacent-selector_t01: RuntimeError
+LayoutTests/fast/sub-pixel/float-containing-block-with-margin_t01: RuntimeError
+LayoutTests/fast/sub-pixel/float-list-inside_t01: RuntimeError
+LayoutTests/fast/sub-pixel/float-with-margin-in-container_t01: RuntimeError
+LayoutTests/fast/sub-pixel/float-with-right-margin-zoom_t01: RuntimeError
+LayoutTests/fast/sub-pixel/layout-boxes-with-zoom_t01: RuntimeError
+LayoutTests/fast/sub-pixel/replaced-element-baseline_t01: RuntimeError
+LayoutTests/fast/sub-pixel/size-of-span-with-different-positions_t01: RuntimeError
+LayoutTests/fast/sub-pixel/table-cells-with-padding-do-not-wrap_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-length-invalid_t01: RuntimeError
+LayoutTests/fast/table/auto-table-layout-colgroup-removal-crash_t01: RuntimeError
+LayoutTests/fast/table/col-width-span-expand_t01: RuntimeError
+LayoutTests/fast/table/fixed-table-with-percent-width-inside-extra-large-div_t01: RuntimeError
+LayoutTests/fast/table/resize-table-binding-cell_t01: RuntimeError
+LayoutTests/fast/table/table-sections-border-spacing_t01: RuntimeError
+LayoutTests/fast/text-autosizing/display-type-change-lineHeight_t01: RuntimeError
+LayoutTests/fast/text-autosizing/inline-width_t01: RuntimeError
+LayoutTests/fast/text/find-backwards_t01: RuntimeError
+LayoutTests/fast/text/find-quotes_t01: RuntimeError
+LayoutTests/fast/text/font-fallback-synthetic-italics_t01: RuntimeError
+LayoutTests/fast/text/font-linux-normalize_t01: RuntimeError
+LayoutTests/fast/text/international/complex-text-rectangle_t01: RuntimeError
+LayoutTests/fast/text/international/rtl-text-wrapping_t01: RuntimeError
+LayoutTests/fast/text/ipa-tone-letters_t01: RuntimeError
+LayoutTests/fast/text/justification-padding-mid-word_t01: RuntimeError
+LayoutTests/fast/text/line-breaks-after-ideographic-comma-or-full-stop_t01: RuntimeError
+LayoutTests/fast/text/line-breaks-after-ideographic-comma-or-full-stop_t02: RuntimeError
+LayoutTests/fast/text/regional-indicator-symobls_t01: RuntimeError
+LayoutTests/fast/text/split-text-crash_t01: RuntimeError
+LayoutTests/fast/text/text-between-two-brs-in-nowrap-overflow_t01: RuntimeError
+LayoutTests/fast/text/whitespace/nowrap-line-break-after-white-space_t01: RuntimeError
+LayoutTests/fast/tokenizer/entities_t01: RuntimeError
+LayoutTests/fast/transforms/scrollIntoView-transformed_t01: RuntimeError
+LayoutTests/fast/url/scheme_t01: RuntimeError
+LayoutTests/fast/writing-mode/broken-ideographic-font_t01: RuntimeError
+LayoutTests/fast/writing-mode/percentage-margins-absolute-replaced_t01: RuntimeError
+LayoutTests/fast/writing-mode/percentage-margins-absolute_t01: RuntimeError
+LayoutTests/fast/writing-mode/relative-positioning-percentages_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/null-document-xmlhttprequest-open_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-bad-mimetype_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-default-attributes_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-get_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-invalid-values_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-no-responsetype_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-set-at-headers-received_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/kd_20010423_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/rs_20010831_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/sr_20021217_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_boolean_expr_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_location_path_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_predicate_list_t01: RuntimeError
+LayoutTests/fast/xpath/ancestor-axis_t01: RuntimeError
+LayoutTests/fast/xpath/detached-subtree-invalidate-iterator_t01: RuntimeError
+LayoutTests/fast/xpath/evaluator-exceptions_t01: RuntimeError
+LayoutTests/fast/xpath/name-null-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/nodeset-duplicates_t01: RuntimeError
+LayoutTests/fast/xpath/substring-after_t01: RuntimeError
+LayoutTests/fast/xpath/substring-non-positive-postion_t01: RuntimeError
+LayoutTests/fast/xpath/xpath-empty-string_t01: RuntimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t01: RuntimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t02: RuntimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t04: RuntimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t05: RuntimeError
+LibTest/html/CanvasRenderingContext2D/arc_A01_t01: RuntimeError
+LibTest/html/Document/addEventListener_A01_t01: RuntimeError
+LibTest/html/Document/adoptNode_A01_t01: RuntimeError
+LibTest/html/Document/append_A01_t01: RuntimeError
+LibTest/html/Document/append_A02_t01: RuntimeError
+LibTest/html/Document/append_A02_t02: RuntimeError
+LibTest/html/Document/childNodes_A01_t01: RuntimeError
+LibTest/html/Document/contains_A01_t02: RuntimeError
+LibTest/html/Document/createDocumentFragment_A01_t01: RuntimeError
+LibTest/html/Document/createElement_A01_t01: RuntimeError
+LibTest/html/Document/dispatchEvent_A01_t01: RuntimeError
+LibTest/html/Document/documentElement_A01_t01: RuntimeError
+LibTest/html/Document/firstChild_A01_t01: RuntimeError
+LibTest/html/Document/getElementById_A01_t01: RuntimeError
+LibTest/html/Document/getElementsByClassName_A01_t01: RuntimeError
+LibTest/html/Document/getElementsByName_A01_t01: RuntimeError
+LibTest/html/Document/getElementsByTagName_A01_t01: RuntimeError
+LibTest/html/Document/hasChildNodes_A01_t01: RuntimeError
+LibTest/html/Document/importNode_A01_t01: RuntimeError
+LibTest/html/Document/insertAllBefore_A01_t01: RuntimeError
+LibTest/html/Document/insertAllBefore_A02_t01: RuntimeError
+LibTest/html/Document/insertBefore_A01_t01: RuntimeError
+LibTest/html/Document/insertBefore_A02_t01: RuntimeError
+LibTest/html/Document/lastChild_A01_t01: RuntimeError
+LibTest/html/Document/nodeName_A01_t01: RuntimeError
+LibTest/html/Document/nodeType_A01_t01: RuntimeError
+LibTest/html/Document/nodes_A01_t01: RuntimeError
+LibTest/html/Document/on_A01_t01: RuntimeError
+LibTest/html/Document/on_A01_t02: RuntimeError
+LibTest/html/Document/querySelectorAll_A01_t01: RuntimeError
+LibTest/html/Document/querySelector_A01_t01: RuntimeError
+LibTest/html/Document/readyState_A01_t01: RuntimeError
+LibTest/html/Document/removeEventListener_A01_t01: RuntimeError
+LibTest/html/Document/window_A01_t01: RuntimeError
+LibTest/html/Element/Element.html_A01_t01: RuntimeError
+LibTest/html/Element/Element.html_A02_t01: RuntimeError
+LibTest/html/Element/Element.html_A03_t01: RuntimeError
+LibTest/html/Element/Element.html_A04_t01: RuntimeError
+LibTest/html/Element/Element.html_A04_t02: RuntimeError
+LibTest/html/Element/Element.tag_A01_t02: RuntimeError
+LibTest/html/Element/Element_element_ctors_A01_t01: RuntimeError
+LibTest/html/Element/abortEvent_A01_t01: RuntimeError
+LibTest/html/Element/addEventListener_A01_t01: RuntimeError
+LibTest/html/Element/addEventListener_A01_t02: RuntimeError
+LibTest/html/Element/addEventListener_A01_t04: RuntimeError
+LibTest/html/Element/addEventListener_A01_t05: RuntimeError
+LibTest/html/Element/addEventListener_A01_t06: RuntimeError
+LibTest/html/Element/appendHtml_A01_t01: RuntimeError
+LibTest/html/Element/appendText_A01_t01: RuntimeError
+LibTest/html/Element/append_A01_t01: RuntimeError
+LibTest/html/Element/append_A02_t01: RuntimeError
+LibTest/html/Element/append_A02_t02: RuntimeError
+LibTest/html/Element/attributes_A01_t01: RuntimeError
+LibTest/html/Element/attributes_A02_t01: RuntimeError
+LibTest/html/Element/beforeCopyEvent_A01_t01: RuntimeError
+LibTest/html/Element/beforeCutEvent_A01_t01: RuntimeError
+LibTest/html/Element/beforePasteEvent_A01_t01: RuntimeError
+LibTest/html/Element/blurEvent_A01_t01: RuntimeError
+LibTest/html/Element/changeEvent_A01_t01: RuntimeError
+LibTest/html/Element/childNodes_A01_t01: RuntimeError
+LibTest/html/Element/childNodes_A01_t02: RuntimeError
+LibTest/html/Element/children_A01_t01: RuntimeError
+LibTest/html/Element/children_A01_t02: RuntimeError
+LibTest/html/Element/className_A01_t01: RuntimeError
+LibTest/html/Element/classes_A01_t01: RuntimeError
+LibTest/html/Element/click_A01_t01: RuntimeError
+LibTest/html/Element/clone_A01_t01: RuntimeError
+LibTest/html/Element/clone_A01_t02: RuntimeError
+LibTest/html/Element/clone_A02_t01: RuntimeError
+LibTest/html/Element/clone_A03_t01: RuntimeError
+LibTest/html/Element/contains_A01_t01: RuntimeError
+LibTest/html/Element/contains_A01_t02: RuntimeError
+LibTest/html/Element/contains_A01_t03: RuntimeError
+LibTest/html/Element/contentEditable_A01_t01: RuntimeError
+LibTest/html/Element/contentEditable_A01_t02: RuntimeError
+LibTest/html/Element/createFragment_A01_t01: RuntimeError
+LibTest/html/Element/createFragment_A01_t02: RuntimeError
+LibTest/html/Element/createFragment_A01_t03: RuntimeError
+LibTest/html/Element/dataset_A01_t01: RuntimeError
+LibTest/html/Element/dataset_A01_t02: RuntimeError
+LibTest/html/Element/dir_A01_t01: RuntimeError
+LibTest/html/Element/dir_A01_t02: RuntimeError
+LibTest/html/Element/documentOffset_A01_t01: RuntimeError
+LibTest/html/Element/doubleClickEvent_A01_t01: RuntimeError
+LibTest/html/Element/draggable_A01_t01: RuntimeError
+LibTest/html/Element/draggable_A01_t02: RuntimeError
+LibTest/html/Element/errorEvent_A01_t01: RuntimeError
+LibTest/html/Element/firstChild_A01_t01: RuntimeError
+LibTest/html/Element/focusEvent_A01_t01: RuntimeError
+LibTest/html/Element/fullscreenChangeEvent_A01_t01: RuntimeError
+LibTest/html/Element/fullscreenErrorEvent_A01_t01: RuntimeError
+LibTest/html/Element/getAttributeNS_A02_t01: RuntimeError
+LibTest/html/Element/getAttribute_A01_t01: RuntimeError
+LibTest/html/Element/getBoundingClientRect_A01_t01: RuntimeError
+LibTest/html/Element/getBoundingClientRect_A01_t02: RuntimeError
+LibTest/html/Element/getClientRects_A01_t01: Crash
+LibTest/html/Element/getElementsByClassName_A01_t01: RuntimeError
+LibTest/html/Element/getElementsByClassName_A02_t01: RuntimeError
+LibTest/html/Element/hasChildNodes_A01_t01: RuntimeError
+LibTest/html/Element/hidden_A01_t01: RuntimeError
+LibTest/html/Element/id_A01_t01: RuntimeError
+LibTest/html/Element/innerHtml_A01_t01: RuntimeError
+LibTest/html/Element/innerHtml_A02_t01: RuntimeError
+LibTest/html/Element/inputEvent_A01_t01: RuntimeError
+LibTest/html/Element/insertAdjacentElement_A01_t01: RuntimeError
+LibTest/html/Element/insertAdjacentHtml_A01_t01: RuntimeError
+LibTest/html/Element/insertAdjacentText_A01_t01: RuntimeError
+LibTest/html/Element/insertAllBefore_A01_t01: RuntimeError
+LibTest/html/Element/insertAllBefore_A02_t01: RuntimeError
+LibTest/html/Element/insertBefore_A01_t01: RuntimeError
+LibTest/html/Element/insertBefore_A02_t01: RuntimeError
+LibTest/html/Element/invalidEvent_A01_t01: RuntimeError
+LibTest/html/Element/isContentEditable_A01_t01: RuntimeError
+LibTest/html/Element/isTagSupported_A01_t02: RuntimeError
+LibTest/html/Element/isTagSupported_A01_t03: RuntimeError
+LibTest/html/Element/keyDownEvent_A01_t01: RuntimeError
+LibTest/html/Element/keyPressEvent_A01_t01: RuntimeError
+LibTest/html/Element/keyUpEvent_A01_t01: RuntimeError
+LibTest/html/Element/lang_A01_t01: RuntimeError
+LibTest/html/Element/lang_A01_t02: RuntimeError
+LibTest/html/Element/lastChild_A01_t01: RuntimeError
+LibTest/html/Element/matchesWithAncestors_A01_t01: RuntimeError
+LibTest/html/Element/matches_A01_t01: RuntimeError
+LibTest/html/Element/mouseDownEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseEnterEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseLeaveEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseMoveEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseOutEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseOverEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseUpEvent_A01_t01: RuntimeError
+LibTest/html/Element/namespaceUri_A01_t01: RuntimeError
+LibTest/html/Element/nextElementSibling_A01_t01: RuntimeError
+LibTest/html/Element/nextNode_A01_t01: RuntimeError
+LibTest/html/Element/nodeName_A03_t01: RuntimeError
+LibTest/html/Element/nodeName_A04_t01: RuntimeError
+LibTest/html/Element/nodeName_A05_t01: RuntimeError
+LibTest/html/Element/nodeName_A06_t01: RuntimeError
+LibTest/html/Element/nodeName_A07_t01: RuntimeError
+LibTest/html/Element/nodeName_A12_t01: RuntimeError
+LibTest/html/Element/nodes_A01_t01: RuntimeError
+LibTest/html/Element/nodes_A01_t02: RuntimeError
+LibTest/html/Element/offsetHeight_A01_t01: RuntimeError
+LibTest/html/Element/offsetLeft_A01_t01: RuntimeError
+LibTest/html/Element/offsetParent_A01_t01: RuntimeError
+LibTest/html/Element/offsetTo_A01_t01: RuntimeError
+LibTest/html/Element/offsetTo_A01_t02: RuntimeError
+LibTest/html/Element/offsetTop_A01_t01: RuntimeError
+LibTest/html/Element/offsetWidth_A01_t01: RuntimeError
+LibTest/html/Element/offset_A01_t01: RuntimeError
+LibTest/html/Element/onAbort_A01_t01: RuntimeError
+LibTest/html/Element/onBeforeCopy_A01_t01: RuntimeError
+LibTest/html/Element/onBeforeCut_A01_t01: RuntimeError
+LibTest/html/Element/onBeforePaste_A01_t01: RuntimeError
+LibTest/html/Element/onBlur_A01_t01: RuntimeError
+LibTest/html/Element/onChange_A01_t01: RuntimeError
+LibTest/html/Element/onDoubleClick_A01_t01: RuntimeError
+LibTest/html/Element/onError_A01_t01: RuntimeError
+LibTest/html/Element/onFocus_A01_t01: RuntimeError
+LibTest/html/Element/onFullscreenChange_A01_t01: RuntimeError
+LibTest/html/Element/onFullscreenError_A01_t01: RuntimeError
+LibTest/html/Element/onInput_A01_t01: RuntimeError
+LibTest/html/Element/onInvalid_A01_t01: RuntimeError
+LibTest/html/Element/onReset_A01_t01: RuntimeError
+LibTest/html/Element/onScroll_A01_t01: RuntimeError
+LibTest/html/Element/onSearch_A01_t01: RuntimeError
+LibTest/html/Element/onSelectStart_A01_t01: RuntimeError
+LibTest/html/Element/onSelect_A01_t01: RuntimeError
+LibTest/html/Element/onSubmit_A01_t01: RuntimeError
+LibTest/html/Element/on_A01_t01: RuntimeError
+LibTest/html/Element/outerHtml_A01_t01: RuntimeError
+LibTest/html/Element/ownerDocument_A01_t01: RuntimeError
+LibTest/html/Element/ownerDocument_A01_t02: RuntimeError
+LibTest/html/Element/ownerDocument_A01_t03: RuntimeError
+LibTest/html/Element/ownerDocument_A01_t04: RuntimeError
+LibTest/html/Element/ownerDocument_A01_t05: RuntimeError
+LibTest/html/Element/parentNode_A01_t01: RuntimeError
+LibTest/html/Element/parentNode_A01_t02: RuntimeError
+LibTest/html/Element/parentNode_A01_t03: RuntimeError
+LibTest/html/Element/parent_A01_t01: RuntimeError
+LibTest/html/Element/parent_A01_t02: RuntimeError
+LibTest/html/Element/parent_A01_t03: RuntimeError
+LibTest/html/Element/previousElementSibling_A01_t01: RuntimeError
+LibTest/html/Element/querySelectorAll_A01_t01: RuntimeError
+LibTest/html/Element/querySelector_A01_t01: RuntimeError
+LibTest/html/Element/removeEventListener_A01_t01: RuntimeError
+LibTest/html/Element/removeEventListener_A01_t02: RuntimeError
+LibTest/html/Element/remove_A01_t01: RuntimeError
+LibTest/html/Element/resetEvent_A01_t01: RuntimeError
+LibTest/html/Element/scrollEvent_A01_t01: RuntimeError
+LibTest/html/Element/searchEvent_A01_t01: RuntimeError
+LibTest/html/Element/selectEvent_A01_t01: RuntimeError
+LibTest/html/Element/selectStartEvent_A01_t01: RuntimeError
+LibTest/html/Element/setAttributeNS_A01_t01: RuntimeError
+LibTest/html/Element/setAttribute_A01_t01: RuntimeError
+LibTest/html/Element/setInnerHtml_A01_t01: RuntimeError
+LibTest/html/Element/setInnerHtml_A01_t02: RuntimeError
+LibTest/html/Element/setInnerHtml_A01_t03: RuntimeError
+LibTest/html/Element/spellcheck_A01_t01: RuntimeError
+LibTest/html/Element/spellcheck_A01_t02: RuntimeError
+LibTest/html/Element/style_A01_t01: RuntimeError
+LibTest/html/Element/style_A01_t02: RuntimeError
+LibTest/html/Element/submitEvent_A01_t01: RuntimeError
+LibTest/html/Element/tabIndex_A01_t01: RuntimeError
+LibTest/html/Element/tagName_A01_t01: RuntimeError
+LibTest/html/Element/tagName_A01_t02: RuntimeError
+LibTest/html/Element/text_A01_t01: RuntimeError
+LibTest/html/Element/text_A02_t01: RuntimeError
+LibTest/html/Element/text_A03_t01: RuntimeError
+LibTest/html/Element/text_A04_t01: RuntimeError
+LibTest/html/Element/title_A01_t01: RuntimeError
+LibTest/html/Event/Event.eventType_A01_t01: RuntimeError
+LibTest/html/Event/Event_A01_t02: RuntimeError
+LibTest/html/Event/Event_A01_t03: RuntimeError
+LibTest/html/Event/Event_A01_t04: RuntimeError
+LibTest/html/Event/bubbles_A01_t01: RuntimeError
+LibTest/html/Event/cancelable_A01_t01: RuntimeError
+LibTest/html/Event/matchingTarget_A01_t01: RuntimeError
+LibTest/html/Event/matchingTarget_A01_t02: RuntimeError
+LibTest/html/Event/stopImmediatePropagation_A01_t01: RuntimeError
+LibTest/html/Event/stopImmediatePropagation_A01_t02: RuntimeError
+LibTest/html/Event/type_A01_t01: RuntimeError
+LibTest/html/HttpRequest/HttpRequest_A01_t01: RuntimeError
+LibTest/html/HttpRequest/abort_A01_t01: RuntimeError
+LibTest/html/HttpRequest/addEventListener_A01_t01: RuntimeError
+LibTest/html/HttpRequest/dispatchEvent_A01_t01: RuntimeError
+LibTest/html/HttpRequest/onAbort_A01_t01: RuntimeError
+LibTest/html/HttpRequest/onLoadEnd_A01_t01: RuntimeError
+LibTest/html/HttpRequest/onLoadStart_A01_t01: RuntimeError
+LibTest/html/HttpRequest/onLoad_A01_t01: RuntimeError
+LibTest/html/HttpRequest/onReadyStateChange_A01_t01: RuntimeError
+LibTest/html/HttpRequest/open_A01_t01: RuntimeError
+LibTest/html/HttpRequest/removeEventListener_A01_t01: RuntimeError
+LibTest/html/HttpRequest/responseText_A01_t01: RuntimeError
+LibTest/html/HttpRequest/responseType_A01_t02: RuntimeError
+LibTest/html/IFrameElement/addEventListener_A01_t01: RuntimeError
+LibTest/html/IFrameElement/addEventListener_A01_t02: RuntimeError
+LibTest/html/IFrameElement/addEventListener_A01_t04: RuntimeError
+LibTest/html/IFrameElement/addEventListener_A01_t05: RuntimeError
+LibTest/html/IFrameElement/addEventListener_A01_t06: RuntimeError
+LibTest/html/IFrameElement/appendText_A01_t01: RuntimeError
+LibTest/html/IFrameElement/append_A01_t01: RuntimeError
+LibTest/html/IFrameElement/append_A02_t01: RuntimeError
+LibTest/html/IFrameElement/append_A02_t02: RuntimeError
+LibTest/html/IFrameElement/attributes_A01_t01: RuntimeError
+LibTest/html/IFrameElement/attributes_A02_t01: RuntimeError
+LibTest/html/IFrameElement/childNodes_A01_t01: RuntimeError
+LibTest/html/IFrameElement/childNodes_A01_t02: RuntimeError
+LibTest/html/IFrameElement/children_A01_t01: RuntimeError
+LibTest/html/IFrameElement/children_A01_t02: RuntimeError
+LibTest/html/IFrameElement/children_setter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/className_A01_t01: RuntimeError
+LibTest/html/IFrameElement/classes_A01_t01: RuntimeError
+LibTest/html/IFrameElement/classes_setter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/click_A01_t01: RuntimeError
+LibTest/html/IFrameElement/clone_A01_t01: RuntimeError
+LibTest/html/IFrameElement/clone_A02_t01: RuntimeError
+LibTest/html/IFrameElement/clone_A03_t01: RuntimeError
+LibTest/html/IFrameElement/contains_A01_t01: RuntimeError
+LibTest/html/IFrameElement/contains_A01_t02: RuntimeError
+LibTest/html/IFrameElement/contentEdge_A01_t01: RuntimeError
+LibTest/html/IFrameElement/dataset_A01_t01: RuntimeError
+LibTest/html/IFrameElement/dataset_A01_t02: RuntimeError
+LibTest/html/IFrameElement/dataset_setter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/dispatchEvent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/documentOffset_A01_t01: RuntimeError
+LibTest/html/IFrameElement/draggable_A01_t01: RuntimeError
+LibTest/html/IFrameElement/draggable_A01_t02: RuntimeError
+LibTest/html/IFrameElement/firstChild_A01_t01: RuntimeError
+LibTest/html/IFrameElement/getAttributeNS_A01_t01: RuntimeError
+LibTest/html/IFrameElement/getAttribute_A01_t01: RuntimeError
+LibTest/html/IFrameElement/getBoundingClientRect_A01_t01: RuntimeError
+LibTest/html/IFrameElement/getClientRects_A01_t01: Crash
+LibTest/html/IFrameElement/getClientRects_A01_t02: RuntimeError
+LibTest/html/IFrameElement/getElementsByClassName_A01_t01: RuntimeError
+LibTest/html/IFrameElement/getElementsByClassName_A02_t01: RuntimeError
+LibTest/html/IFrameElement/getNamespacedAttributes_A01_t01: RuntimeError
+LibTest/html/IFrameElement/hasChildNodes_A01_t01: RuntimeError
+LibTest/html/IFrameElement/hasChildNodes_A01_t02: RuntimeError
+LibTest/html/IFrameElement/hidden_A01_t01: RuntimeError
+LibTest/html/IFrameElement/id_A01_t01: RuntimeError
+LibTest/html/IFrameElement/insertAdjacentElement_A01_t01: RuntimeError
+LibTest/html/IFrameElement/insertAdjacentHtml_A01_t01: RuntimeError
+LibTest/html/IFrameElement/insertAdjacentText_A01_t01: RuntimeError
+LibTest/html/IFrameElement/insertAllBefore_A01_t01: RuntimeError
+LibTest/html/IFrameElement/insertAllBefore_A02_t01: RuntimeError
+LibTest/html/IFrameElement/insertBefore_A01_t01: RuntimeError
+LibTest/html/IFrameElement/insertBefore_A02_t01: RuntimeError
+LibTest/html/IFrameElement/lang_A01_t01: RuntimeError
+LibTest/html/IFrameElement/lang_A01_t02: RuntimeError
+LibTest/html/IFrameElement/lastChild_A01_t01: RuntimeError
+LibTest/html/IFrameElement/matchesWithAncestors_A01_t01: RuntimeError
+LibTest/html/IFrameElement/matches_A01_t01: RuntimeError
+LibTest/html/IFrameElement/namespaceUri_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nextElementSibling_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nextNode_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nodeName_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nodeType_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nodeValue_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nodes_A01_t01: RuntimeError
+LibTest/html/IFrameElement/nodes_A01_t02: RuntimeError
+LibTest/html/IFrameElement/nodes_setter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/offsetTo_A01_t02: RuntimeError
+LibTest/html/IFrameElement/onAbort_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onBeforeCopy_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onBeforeCut_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onBeforePaste_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onBlur_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onChange_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onDoubleClick_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onError_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onFocus_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onFullscreenChange_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onFullscreenError_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onInput_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onInvalid_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onLoad_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onReset_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onScroll_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onSearch_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onSelectStart_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onSelect_A01_t01: RuntimeError
+LibTest/html/IFrameElement/onSubmit_A01_t01: RuntimeError
+LibTest/html/IFrameElement/on_A01_t01: RuntimeError
+LibTest/html/IFrameElement/outerHtml_A01_t01: RuntimeError
+LibTest/html/IFrameElement/ownerDocument_A01_t01: RuntimeError
+LibTest/html/IFrameElement/ownerDocument_A01_t02: RuntimeError
+LibTest/html/IFrameElement/ownerDocument_A01_t03: RuntimeError
+LibTest/html/IFrameElement/ownerDocument_A01_t04: RuntimeError
+LibTest/html/IFrameElement/ownerDocument_A01_t05: RuntimeError
+LibTest/html/IFrameElement/parentNode_A01_t01: RuntimeError
+LibTest/html/IFrameElement/parent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/parent_A01_t02: RuntimeError
+LibTest/html/IFrameElement/previousElementSibling_A01_t01: RuntimeError
+LibTest/html/IFrameElement/previousNode_A01_t01: RuntimeError
+LibTest/html/IFrameElement/removeEventListener_A01_t01: RuntimeError
+LibTest/html/IFrameElement/removeEventListener_A01_t02: RuntimeError
+LibTest/html/IFrameElement/remove_A01_t01: RuntimeError
+LibTest/html/IFrameElement/resetEvent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/scrollEvent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/searchEvent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/selectEvent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/selectStartEvent_A01_t01: RuntimeError
+LibTest/html/IFrameElement/setAttributeNS_A01_t01: RuntimeError
+LibTest/html/IFrameElement/setAttribute_A01_t01: RuntimeError
+LibTest/html/IFrameElement/spellcheck_A01_t02: RuntimeError
+LibTest/html/IFrameElement/style_A01_t01: RuntimeError
+LibTest/html/IFrameElement/style_A01_t02: RuntimeError
+LibTest/html/IFrameElement/tabIndex_A01_t01: RuntimeError
+LibTest/html/IFrameElement/tagName_A01_t01: RuntimeError
+LibTest/html/IFrameElement/tagName_A01_t02: RuntimeError
+LibTest/html/IFrameElement/text_A01_t01: RuntimeError
+LibTest/html/IFrameElement/text_A02_t01: RuntimeError
+LibTest/html/IFrameElement/text_A03_t01: RuntimeError
+LibTest/html/IFrameElement/text_A04_t01: RuntimeError
+LibTest/html/IFrameElement/text_setter_A01_t01: RuntimeError
+LibTest/html/IFrameElement/title_A01_t01: RuntimeError
+LibTest/html/Node/addEventListener_A01_t01: RuntimeError
+LibTest/html/Node/addEventListener_A01_t02: RuntimeError
+LibTest/html/Node/addEventListener_A01_t03: RuntimeError
+LibTest/html/Node/addEventListener_A01_t04: RuntimeError
+LibTest/html/Node/addEventListener_A01_t05: RuntimeError
+LibTest/html/Node/append_A01_t01: RuntimeError
+LibTest/html/Node/append_A02_t01: RuntimeError
+LibTest/html/Node/childNodes_A01_t01: RuntimeError
+LibTest/html/Node/childNodes_A01_t02: RuntimeError
+LibTest/html/Node/clone_A01_t01: RuntimeError
+LibTest/html/Node/clone_A01_t02: RuntimeError
+LibTest/html/Node/contains_A01_t01: RuntimeError
+LibTest/html/Node/contains_A01_t02: RuntimeError
+LibTest/html/Node/dispatchEvent_A01_t01: RuntimeError
+LibTest/html/Node/firstChild_A01_t01: RuntimeError
+LibTest/html/Node/hasChildNodes_A01_t01: RuntimeError
+LibTest/html/Node/lastChild_A01_t01: RuntimeError
+LibTest/html/Node/nextNode_A01_t01: RuntimeError
+LibTest/html/Node/nodeType_A03_t01: RuntimeError
+LibTest/html/Node/nodeType_A04_t01: RuntimeError
+LibTest/html/Node/nodeType_A05_t01: RuntimeError
+LibTest/html/Node/nodeType_A06_t01: RuntimeError
+LibTest/html/Node/nodeType_A07_t01: RuntimeError
+LibTest/html/Node/nodeType_A12_t01: RuntimeError
+LibTest/html/Node/nodeValue_A03_t01: RuntimeError
+LibTest/html/Node/nodeValue_A04_t01: RuntimeError
+LibTest/html/Node/nodeValue_A06_t01: RuntimeError
+LibTest/html/Node/nodeValue_A07_t01: RuntimeError
+LibTest/html/Node/nodeValue_A12_t01: RuntimeError
+LibTest/html/Node/nodes_A01_t01: RuntimeError
+LibTest/html/Node/on_A01_t01: RuntimeError
+LibTest/html/Node/parentNode_A01_t01: RuntimeError
+LibTest/html/Node/removeEventListener_A01_t01: RuntimeError
+LibTest/html/Node/removeEventListener_A01_t02: RuntimeError
+LibTest/html/Node/remove_A01_t01: RuntimeError
+LibTest/html/Node/replaceWith_A01_t01: RuntimeError
+LibTest/html/Window/addEventListener_A01_t01: RuntimeError
+LibTest/html/Window/animationFrame_A01_t01: RuntimeError
+LibTest/html/Window/dispatchEvent_A01_t01: RuntimeError
+LibTest/html/Window/find_A01_t02: RuntimeError
+LibTest/html/Window/find_A02_t01: RuntimeError
+LibTest/html/Window/find_A03_t02: RuntimeError
+LibTest/html/Window/find_A05_t01: RuntimeError
+LibTest/html/Window/find_A07_t01: RuntimeError
+LibTest/html/Window/open_A01_t01: RuntimeError
+LibTest/html/Window/removeEventListener_A01_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/DOM.event.flow_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/EventListener.eventHandler_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.moved_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/dispatchEvent.return.value_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/stopImmediatePropagation.effect_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/stopPropagation.dispatchEvent_t01: RuntimeError
+WebPlatformTest/Utils/test/testPass_t01: RuntimeError
+WebPlatformTest/dom/EventTarget/dispatchEvent_A01_t01: RuntimeError
+WebPlatformTest/dom/EventTarget/dispatchEvent_A03_t01: RuntimeError
+WebPlatformTest/dom/EventTarget/dispatchEvent_A04_t01: RuntimeError
+WebPlatformTest/dom/collections/emptyName_A01_t01: RuntimeError
+WebPlatformTest/dom/collections/emptyName_A01_t06: RuntimeError
+WebPlatformTest/dom/collections/emptyName_A01_t07: RuntimeError
+WebPlatformTest/dom/events/defaultPrevented_A01_t01: RuntimeError
+WebPlatformTest/dom/events/defaultPrevented_A01_t02: RuntimeError
+WebPlatformTest/dom/events/defaultPrevented_A01_t03: RuntimeError
+WebPlatformTest/dom/events/defaultPrevented_A01_t04: RuntimeError
+WebPlatformTest/dom/events/defaultPrevented_A01_t05: RuntimeError
+WebPlatformTest/dom/events/event_constructors/Event_A02_t01: RuntimeError
+WebPlatformTest/dom/lists/DOMTokenList.toString_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/appendData_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/deleteData_A02_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/insertData_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/remove_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/remove_A01_t02: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/remove_A02_t01: RuntimeError
+WebPlatformTest/dom/nodes/Comment-constructor_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-getElementById_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-importNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Element-childElementCount-dynamic-add_t01: RuntimeError
+WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: RuntimeError
+WebPlatformTest/dom/nodes/Element-childElementCount_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-cloneNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/attributes_A03_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/attributes_A06_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A09_t01: RuntimeError
+WebPlatformTest/dom/ranges/Range-attributes_t01: RuntimeError
+WebPlatformTest/dom/ranges/Range-comparePoint_t03: RuntimeError
+WebPlatformTest/dom/ranges/Range-detach_t01: RuntimeError
+WebPlatformTest/html-imports/link-import-null_t01: RuntimeError
+WebPlatformTest/html-templates/definitions/template-contents-owner-test-001_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-not-a-foster-parent-element_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-head-token_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/start-tag-body_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/template-end-tag-without-start-one_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/template-end-tag-without-start-one_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/content-attribute_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/template-content-node-document_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-getter_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-case_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-id_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-param_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t03: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.title_t07: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t03: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/classlist-nonstring_t01: RuntimeError
+WebPlatformTest/html/semantics/edits/the-del-element/del_effect_t01: RuntimeError
+WebPlatformTest/html/semantics/edits/the-ins-element/ins_effect_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/textTracks_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/readyState_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/srclang_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-fieldset-element/HTMLFieldSetElement_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/required_attribute_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/search_input_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-backslash_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-output-element/output_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-details-element/toggleEvent_t01: RuntimeError
+WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t01: RuntimeError
+WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t02: RuntimeError
+WebPlatformTest/html/semantics/scripting-1/the-script-element/script-text_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/default_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/disabled_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-caption-element/caption_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/border_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/insertRow-method_t01: RuntimeError
+WebPlatformTest/html/syntax/parsing/math-parse_t01: RuntimeError
+WebPlatformTest/html/syntax/serializing-html-fragments/outerHTML_t01: RuntimeError
+WebPlatformTest/webstorage/event_session_storageeventinit_t01: RuntimeError
+WebPlatformTest/webstorage/storage_builtins_t01: RuntimeError
+WebPlatformTest/webstorage/storage_clear_t01: RuntimeError
+WebPlatformTest/webstorage/storage_local_getitem_t01: RuntimeError
+WebPlatformTest/webstorage/storage_local_key_t01: RuntimeError
+WebPlatformTest/webstorage/storage_local_length_t01: RuntimeError
+WebPlatformTest/webstorage/storage_session_getitem_t01: RuntimeError
+WebPlatformTest/webstorage/storage_session_key_t01: RuntimeError
+WebPlatformTest/webstorage/storage_session_setitem_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime != chrome && $runtime != ff && !$fast_startup ]
+LayoutTests/fast/canvas/canvas-blend-image_t01: RuntimeError
+LayoutTests/fast/css/computed-offset-with-zoom_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-cssText_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-monospace_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-columns_t01: RuntimeError
+LayoutTests/fast/css/invalid-not-with-simple-selector-sequence_t01: RuntimeError
+LayoutTests/fast/css/parsing-object-position_t01: RuntimeError
+LayoutTests/fast/css/shadow-current-color_t01: RuntimeError
+LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last_t01: RuntimeError
+LayoutTests/fast/dom/Attr/direction-attribute-set-and-cleared_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError
+LayoutTests/fast/files/file-reader-readystate_t01: RuntimeError
+LayoutTests/fast/filesystem/input-access-entries_t01: RuntimeError
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-change-layout-by-value_t01: RuntimeError
+LayoutTests/fast/forms/date/date-input-type_t01: RuntimeError
+LayoutTests/fast/forms/date/input-valueasnumber-date_t01: RuntimeError
+LayoutTests/fast/inline/continuation-inlines-inserted-in-reverse-after-block_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-uri-resolution_t01: RuntimeError
+LayoutTests/fast/media/media-query-list_t01: RuntimeError
+LayoutTests/fast/multicol/balance-short-trailing-empty-block_t01: RuntimeError
+LayoutTests/fast/multicol/balance-trailing-border_t01: RuntimeError
+LayoutTests/fast/multicol/balance-trailing-border_t02: RuntimeError
+LayoutTests/fast/multicol/columns-shorthand-parsing_t02: RuntimeError
+LayoutTests/fast/sub-pixel/table-rows-have-stable-height_t01: RuntimeError
+LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError
+LayoutTests/fast/table/switch-table-layout-dynamic-cells_t01: RuntimeError
+LayoutTests/fast/text/font-ligatures-linebreak-word_t01: RuntimeError
+LayoutTests/fast/text/font-ligatures-linebreak_t01: RuntimeError
+LayoutTests/fast/text/selection-exceptions_t01: RuntimeError
+LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request_t01: RuntimeError
+LibTest/html/Element/getClientRects_A01_t02: RuntimeError
+LibTest/html/Element/isContentEditable_A02_t01: RuntimeError
+LibTest/html/IFrameElement/isContentEditable_A01_t01: RuntimeError
+LibTest/html/Window/close_A01_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime != chrome && $runtime != safari ]
+LayoutTests/fast/animation/request-animation-frame-cancel2_t01: RuntimeError, Timeout
+LayoutTests/fast/backgrounds/mask-box-image-width_t01: RuntimeError
+LayoutTests/fast/borders/border-color-visited_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fill-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-frameless-document-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeText-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-enum-tests_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/renderer-and-vendor-strings_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-template-areas-get-set_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/height-property-value_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/width-property-value_t01: RuntimeError
+LayoutTests/fast/css/background-parser-crash_t01: RuntimeError
+LayoutTests/fast/css/border-width-large_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-06_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-reset-subtree-insert-crash_t01: RuntimeError
+LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-properties_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-radius-shorthand_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-column-rule_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-webkit-text-stroke_t01: RuntimeError
+LayoutTests/fast/css/insertRule-font-face_t01: RuntimeError
+LayoutTests/fast/css/invalidation/clears-invalidation-whole-tree_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-any-pseudo_t01: RuntimeError
+LayoutTests/fast/css/legacy-opacity-styles_t01: RuntimeError
+LayoutTests/fast/css/margin-start-end_t01: RuntimeError
+LayoutTests/fast/css/parsing-webkit-font-smoothing_t01: RuntimeError
+LayoutTests/fast/css/pseudo-any_t01: RuntimeError
+LayoutTests/fast/css/pseudo-valid-unapplied_t01: RuntimeError
+LayoutTests/fast/css/readwrite-contenteditable-recalc_t01: RuntimeError
+LayoutTests/fast/css/recalc-optgroup-inherit_t01: RuntimeError
+LayoutTests/fast/css/sibling-selectors_t01: RuntimeError
+LayoutTests/fast/css/style-element-process-crash_t01: RuntimeError
+LayoutTests/fast/css/text-align-webkit-match-parent-parse_t01: RuntimeError
+LayoutTests/fast/css/vertical-align-length-copy-bug_t01: RuntimeError
+LayoutTests/fast/css/webkit-keyframes-crash_t01: RuntimeError
+LayoutTests/fast/dom/Element/fixed-position-offset-parent_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control-child_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-text-form-control_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-value-change_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-invalid-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-true-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-value-caseinsensitive_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-hidden-value_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/database-callback-delivery_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-attributes_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/caseTagX_t01: RuntimeError
+LayoutTests/fast/dom/background-shorthand-csstext_t01: RuntimeError
+LayoutTests/fast/dom/boolean-attribute-reflection_t01: RuntimeError
+LayoutTests/fast/dom/css-rule-functions_t01: RuntimeError
+LayoutTests/fast/dom/css-shortHands_t01: RuntimeError
+LayoutTests/fast/dom/dom-parse-serialize-display_t01: RuntimeError
+LayoutTests/fast/dom/dom-parse-serialize_t01: RuntimeError
+LayoutTests/fast/dom/fragment-activation-focuses-target_t01: RuntimeError
+LayoutTests/fast/dom/insertBefore-refChild-crash_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-non-overlay-scrollbars_t01: RuntimeError
+LayoutTests/fast/dom/remove-body-during-body-replacement_t01: RuntimeError
+LayoutTests/fast/dom/shadow/no-renderers-for-light-children_t01: RuntimeError
+LayoutTests/fast/dom/subtree-modified-attributes_t01: RuntimeError
+LayoutTests/fast/dom/vertical-scrollbar-when-dir-change_t01: RuntimeError
+LayoutTests/fast/events/event-fire-order_t01: RuntimeError
+LayoutTests/fast/events/form-onchange_t01: RuntimeError
+LayoutTests/fast/events/selectstart-prevent-selectall_t01: RuntimeError
+LayoutTests/fast/flexbox/box-size-integer-overflow_t01: RuntimeError
+LayoutTests/fast/forms/11423_t01: RuntimeError
+LayoutTests/fast/forms/8250_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-patternMismatch_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-opera-005_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: RuntimeError
+LayoutTests/fast/forms/checkValidity-handler-updates-dom_t01: RuntimeError
+LayoutTests/fast/forms/delete-text-with-invisible-br_t01: RuntimeError
+LayoutTests/fast/forms/form-dirname-attribute_t01: RuntimeError
+LayoutTests/fast/forms/input-text-paste-maxlength_t01: RuntimeError
+LayoutTests/fast/forms/input-widths_t01: RuntimeError
+LayoutTests/fast/forms/min-content-form-controls_t01: RuntimeError
+LayoutTests/fast/forms/paste-multiline-text-input_t01: RuntimeError
+LayoutTests/fast/forms/select-change-popup-to-listbox-roundtrip_t01: RuntimeError
+LayoutTests/fast/forms/select-namedItem_t01: RuntimeError
+LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-nonhtml-ancestor_t01: RuntimeError
+LayoutTests/fast/forms/textarea-no-scroll-on-blur_t01: RuntimeError
+LayoutTests/fast/forms/textfield-clone_t01: RuntimeError
+LayoutTests/fast/forms/textfield-focus-out_t01: RuntimeError
+LayoutTests/fast/inline/inline-relative-offset-boundingbox_t01: RuntimeError
+LayoutTests/fast/masking/parsing-clip-path-iri_t01: RuntimeError
+LayoutTests/fast/media/media-query-serialization_t01: RuntimeError
+LayoutTests/fast/multicol/column-width-zero_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-gap-between-pages_t01: RuntimeError
+LayoutTests/fast/multicol/inherit-column-values_t01: RuntimeError
+LayoutTests/fast/multicol/initial-column-values_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t06: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/break-properties_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/gap-non-negative_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/image-inside-nested-blocks-with-border_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/break-properties_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/gap-non-negative_t01: RuntimeError
+LayoutTests/fast/overflow/height-during-simplified-layout_t01: RuntimeError
+LayoutTests/fast/overflow/overflow-rtl-vertical-origin_t01: RuntimeError
+LayoutTests/fast/parser/block-nesting-cap_t01: RuntimeError
+LayoutTests/fast/selectors/specificity-overflow_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-image-threshold_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/parsing/parsing-shape-property-aliases_t01: RuntimeError, Pass
+LayoutTests/fast/table/border-changes_t01: RuntimeError
+LayoutTests/fast/text/line-breaks-after-hyphen-before-number_t01: RuntimeError
+LayoutTests/fast/writing-mode/block-formatting-context_t01: RuntimeError
+LayoutTests/fast/writing-mode/display-mutation_t01: RuntimeError
+LayoutTests/fast/writing-mode/percentage-padding_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-abort_t01: RuntimeError
+LibTest/html/Element/translate_A01_t01: RuntimeError
+LibTest/html/HttpRequestUpload/onAbort_A01_t01: RuntimeError
+LibTest/html/IFrameElement/spellcheck_A01_t01: RuntimeError
+LibTest/html/IFrameElement/translate_A01_t01: RuntimeError
+LibTest/html/Window/find_A04_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A10_t01: RuntimeError
+WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/templates-copy-document-owner_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/template-content_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/range_t02: RuntimeError
+WebPlatformTest/html/syntax/parsing/math-parse_t03: RuntimeError
+
+[ $compiler == dart2js && $runtime != chrome && $system != macos ]
+LayoutTests/fast/canvas/canvas-alphaImageData-behavior_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-fillRect-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zoom-and-background-size_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime == d8 ]
+Language/Expressions/Additive_Expressions/syntax_t01: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError
+Language/Expressions/Constants/depending_on_itself_t03: Crash
+Language/Expressions/Constants/exception_t02/01: CompileTimeError
+Language/Expressions/Constants/integer_size_t03: CompileTimeError
+Language/Expressions/Constants/integer_size_t04: CompileTimeError
+Language/Expressions/Function_Invocation/async_generator_invokation_t08: Fail
+Language/Expressions/Function_Invocation/async_generator_invokation_t10: Fail
+Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
+Language/Expressions/If_null_Expressions/static_type_t01: RuntimeError
+Language/Expressions/Lists/identical_t02: RuntimeError
+Language/Expressions/Maps/identical_t02: RuntimeError
+Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
+Language/Expressions/Numbers/syntax_t06: CompileTimeError
+Language/Expressions/Numbers/syntax_t09: CompileTimeError
+Language/Expressions/Object_Identity/double_t02: RuntimeError
+Language/Expressions/Shift/integer_t02: CompileTimeError
+Language/Expressions/Type_Cast/syntax_t01: RuntimeError
+Language/Expressions/Unary_Expressions/variable_negative_t03: RuntimeError
+Language/Functions/setter_modifier_t01: Crash
+Language/Functions/setter_modifier_t04: Crash
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t01: CompileTimeError
+Language/Metadata/before_ctor_t02: RuntimeError
+Language/Metadata/before_function_t01: RuntimeError
+Language/Metadata/before_function_t02: RuntimeError
+Language/Metadata/before_function_t03: RuntimeError
+Language/Metadata/before_function_t04: RuntimeError
+Language/Metadata/before_function_t07: RuntimeError
+Language/Metadata/before_import_t01: RuntimeError
+Language/Metadata/before_param_t03: RuntimeError
+Language/Metadata/before_param_t05: RuntimeError
+Language/Metadata/before_param_t07: RuntimeError
+Language/Metadata/before_param_t09: RuntimeError
+Language/Metadata/before_variable_t02: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
+Language/Overview/Privacy/private_and_public_t18: RuntimeError
+Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError
+Language/Statements/Assert/execution_t09: RuntimeError
+Language/Statements/For/syntax_t13: Crash
+Language/Statements/For/syntax_t20: Crash
+Language/Types/Function_Types/call_t01: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t03: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t11: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t04: RuntimeError
+Language/Types/Interface_Types/subtype_t06: RuntimeError
+Language/Types/Interface_Types/subtype_t21: RuntimeError
+Language/Types/Interface_Types/subtype_t23: RuntimeError
+Language/Variables/constant_variable_t09: RuntimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t01: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t01: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t01: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t03: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t04: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t05: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t06: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t07: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t08: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t09: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t10: MissingCompileTimeError
+LanguageFeatures/Instantiate-to-bound/check_types/typedef_param_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_local_variable_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_return_value_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_return_value_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-prefix_t01: RuntimeError
+LayoutTests/fast/backgrounds/animated-gif-as-background_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-fill-zero-area-crash_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError
+LayoutTests/fast/backgrounds/composite-highlight-is-invalid_t01: RuntimeError
+LayoutTests/fast/backgrounds/multiple-backgrounds-assert_t01: RuntimeError
+LayoutTests/fast/backgrounds/repeat/margin-shorthand_t01: RuntimeError
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError
+LayoutTests/fast/borders/border-image-width-negative_t01: RuntimeError
+LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError
+LayoutTests/fast/borders/border-radius-child_t01: RuntimeError
+LayoutTests/fast/borders/border-width-percent_t01: RuntimeError
+LayoutTests/fast/box-sizing/table-cell_t01: RuntimeError
+LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError
+LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError
+LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: RuntimeError
+LayoutTests/fast/canvas/arc-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-arc-360-winding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-arc-connecting-line_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-as-image-incremental-repaint_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-before-css_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blend-solid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-clearRect_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-clip-rule_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-closePath-single-point_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-stroke-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-currentColor_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-ellipse-360-winding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-ellipse-negative-radius_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillRect-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillRect_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillStyle-no-quirks-parsing_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillText-invalid-maxWidth_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillText-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-font-consistency_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-font-ex-units-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getContext-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-zero-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-invalid-fillstyle_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lineWidth-intact-after-strokeRect_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-longlived-context_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-modify-emptyPath_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-pattern-modify_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-quadratic-same-endpoint_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-save-restore-with-path_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-state-intact-after-putImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-stroke-empty-fill_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-stroke-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokePath-cap-join_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeText-invalid-maxWidth_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeText-strokes-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-style-intact-after-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-to-canvas_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-toDataURL-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-transparency-and-composite_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-with-illegal-args_t01: RuntimeError
+LayoutTests/fast/canvas/crash-set-font_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-bad-canvas_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-broken-image_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-valid-image_t01: RuntimeError
+LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError
+LayoutTests/fast/canvas/gradient-with-clip_t01: RuntimeError
+LayoutTests/fast/canvas/linearGradient-infinite-values_t01: RuntimeError
+LayoutTests/fast/canvas/pattern-with-transform_t01: RuntimeError
+LayoutTests/fast/canvas/resize-while-save-active_t01: RuntimeError
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError
+LayoutTests/fast/canvas/set-colors_t01: RuntimeError
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: RuntimeError
+LayoutTests/fast/canvas/toDataURL-noData_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/attrib-location-length-limits_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/canvas-resize-crash_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/canvas-zero-size_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/context-destroyed-crash_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/css-webkit-canvas-repaint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/css-webkit-canvas_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-bind-attrib-location-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-getshadersource_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-getstring_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-pixelstorei_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-vertex-attrib_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/point-size_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/premultiplyalpha-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/read-pixels-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/shader-precision-format_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgb565_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas-rgba4444_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-canvas_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgb565_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba4444_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data-rgba5551_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-svg-image_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-bindings-uneffected-on-resize_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-npot_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/webgl-unprefixed-context-id_t01: RuntimeError
+LayoutTests/fast/canvas/zero-size-fill-rect_t01: RuntimeError
+LayoutTests/fast/cookies/local-file-can-set-cookies_t01: RuntimeError
+LayoutTests/fast/css-generated-content/bug-106384_t01: RuntimeError
+LayoutTests/fast/css-generated-content/bug91547_t01: RuntimeError
+LayoutTests/fast/css-generated-content/details-before-after-content_t01: RuntimeError
+LayoutTests/fast/css-generated-content/empty-content-with-float-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/floating-before-content-with-list-marker-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: RuntimeError
+LayoutTests/fast/css-generated-content/quote-layout-focus-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/remove-div-from-flexible-box-with-floating-after-content-crash_t01: RuntimeError
+LayoutTests/fast/css-generated-content/reset-content-to-initial_t01: RuntimeError
+LayoutTests/fast/css-generated-content/summary-before-after-content_t01: RuntimeError
+LayoutTests/fast/css-generated-content/table-with-scrollbar-corner_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/anonymous-grid-items_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-crash-out-of-flow-positioned-element_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-bad-cast-addchild_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError
+LayoutTests/fast/css/MarqueeLayoutTest_t01: RuntimeError
+LayoutTests/fast/css/appearance-caps-lock-indicator_t01: RuntimeError
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError
+LayoutTests/fast/css/attribute-selector-begin-dynamic-no-elementstyle_t01: RuntimeError
+LayoutTests/fast/css/attribute-selector-recursive-update-on-setAttribute_t01: RuntimeError
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError
+LayoutTests/fast/css/background-currentcolor_t01: RuntimeError
+LayoutTests/fast/css/background-position-serialize_t01: RuntimeError
+LayoutTests/fast/css/background-serialize_t01: RuntimeError
+LayoutTests/fast/css/border-image-fill-crash_t01: RuntimeError
+LayoutTests/fast/css/border-image-null-image-crash_t01: RuntimeError
+LayoutTests/fast/css/border-image-style-length_t01: RuntimeError
+LayoutTests/fast/css/border-shorthand-initialize-longhands_t01: RuntimeError
+LayoutTests/fast/css/border-start-end_t01: RuntimeError
+LayoutTests/fast/css/box-sizing-backwards-compat-prefix_t01: RuntimeError
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError
+LayoutTests/fast/css/button-height_t01: RuntimeError
+LayoutTests/fast/css/cached-sheet-restore-crash_t01: RuntimeError
+LayoutTests/fast/css/comment-before-charset_t01: RuntimeError
+LayoutTests/fast/css/content-language-case-insensitivity_t01: RuntimeError
+LayoutTests/fast/css/content-language-mapped-to-webkit-locale_t01: RuntimeError
+LayoutTests/fast/css/content-language-no-content_t01: RuntimeError
+LayoutTests/fast/css/content/content-none_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-01_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-05_t01: RuntimeError
+LayoutTests/fast/css/counters/asterisk-counter-update-after-layout-crash_t01: RuntimeError
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-before-selector-crash_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-function-input-2_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-number-input_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-reparent-table-children-crash_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-traverse-object-crash_t01: RuntimeError
+LayoutTests/fast/css/counters/reparent-table-children-with-counters-crash_t01: RuntimeError
+LayoutTests/fast/css/crash-on-incomplete-not_t01: RuntimeError
+LayoutTests/fast/css/crash-on-incomplete-webkit-any_t01: RuntimeError
+LayoutTests/fast/css/css-escaped-identifier-crash_t01: RuntimeError
+LayoutTests/fast/css/css-keyframe-style-crash_t01: RuntimeError
+LayoutTests/fast/css/css-keyframe-unexpected-end_t01: RuntimeError
+LayoutTests/fast/css/css-properties-case-insensitive_t01: RuntimeError
+LayoutTests/fast/css/css-set-selector-text-crash_t01: RuntimeError
+LayoutTests/fast/css/css3-nth-tokens-script_t01: RuntimeError
+LayoutTests/fast/css/cssom-remove-shorthand-property_t01: RuntimeError
+LayoutTests/fast/css/csstext-of-content-string_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing-image-set_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing-quirks_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing_t01: RuntimeError
+LayoutTests/fast/css/dashboard-regions-attr-crash_t01: RuntimeError
+LayoutTests/fast/css/dashboard-regions-undefined-length-assertion_t01: RuntimeError
+LayoutTests/fast/css/delete-rule-crash_t01: RuntimeError
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: Crash
+LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/div_plus_nav_bug47971_t01: RuntimeError
+LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError
+LayoutTests/fast/css/dynamic-class-pseudo-elements_t01: RuntimeError
+LayoutTests/fast/css/dynamic-pseudo-class_t01: RuntimeError
+LayoutTests/fast/css/dynamic-style-attribute-query_t01: RuntimeError
+LayoutTests/fast/css/emptyStyleTag_t01: RuntimeError
+LayoutTests/fast/css/first-letter-block-form-controls-crash_t01: RuntimeError
+LayoutTests/fast/css/first-letter-capitalized-edit-select-crash_t01: RuntimeError
+LayoutTests/fast/css/first-line-parent-style-different_t01: RuntimeError
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError
+LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError
+LayoutTests/fast/css/font-face-cache-bug_t01: RuntimeError
+LayoutTests/fast/css/font-face-data-uri-invalid_t01: RuntimeError
+LayoutTests/fast/css/font-face-insert-link_t01: RuntimeError
+LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: RuntimeError
+LayoutTests/fast/css/font-face-svg-decoding-error_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError
+LayoutTests/fast/css/font-face-used-after-retired_t01: RuntimeError
+LayoutTests/fast/css/font-family-builtins_t01: RuntimeError
+LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError
+LayoutTests/fast/css/font-property-priority_t01: RuntimeError
+LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-display-none_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-negative-top_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-page-break-inside_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-select-overflow_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-with-zoom_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-box_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-image-slice_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-style-shorthand_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-height_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-length-unit_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-outline-offset_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-relayout_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-text-overflow_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/zoom-on-display-none_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-column-rule_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-webkit-margin-collapse_t01: RuntimeError
+LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError
+LayoutTests/fast/css/image-set-parsing-invalid_t01: RuntimeError
+LayoutTests/fast/css/image-set-setting_t01: RuntimeError
+LayoutTests/fast/css/implicit-attach-marking_t01: RuntimeError
+LayoutTests/fast/css/inherited-properties-explicit_t01: RuntimeError
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError
+LayoutTests/fast/css/input-search-table-column-crash_t01: RuntimeError
+LayoutTests/fast/css/inputtext-crash_t01: RuntimeError
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError
+LayoutTests/fast/css/invalid-import-rule-insertion_t01: RuntimeError
+LayoutTests/fast/css/invalid-not-with-pseudo-element_t01: RuntimeError
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError
+LayoutTests/fast/css/invalidation/detach-reattach_t01: RuntimeError
+LayoutTests/fast/css/invalidation/dynamic-selector-list-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/invalidation-set-with-adjacent-combinators_t01: RuntimeError
+LayoutTests/fast/css/invalidation/no-invalidation-set-local-style_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-style-invalidation_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-type-selectors_t01: RuntimeError
+LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError
+LayoutTests/fast/css/large-font-size-crash_t01: RuntimeError
+LayoutTests/fast/css/last-child-innerhtml_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError
+LayoutTests/fast/css/list-item-text-align_t01: RuntimeError
+LayoutTests/fast/css/max-width-none_t01: RuntimeError
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError
+LayoutTests/fast/css/media-rule-dyn_t01: RuntimeError
+LayoutTests/fast/css/media-rule-no-whitespace_t01: RuntimeError
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError
+LayoutTests/fast/css/named-colors_t01: RuntimeError
+LayoutTests/fast/css/nested-at-rules_t01: RuntimeError
+LayoutTests/fast/css/nested-first-letter-with-float-crash_t01: RuntimeError
+LayoutTests/fast/css/nth-child-implied-step_t01: RuntimeError
+LayoutTests/fast/css/nth-child-n_t01: RuntimeError
+LayoutTests/fast/css/nth-child-no-mutations_t01: RuntimeError
+LayoutTests/fast/css/nth-child-unary-prefix_t01: RuntimeError
+LayoutTests/fast/css/overflow-property_t01: RuntimeError
+LayoutTests/fast/css/padding-no-renderer_t01: RuntimeError
+LayoutTests/fast/css/padding-start-end_t01: RuntimeError
+LayoutTests/fast/css/parse-border-image-repeat-null-crash_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-comment_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-escapes_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-nth-child_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-surrogate-pairs_t01: RuntimeError
+LayoutTests/fast/css/parsing-expr-error-recovery_t01: RuntimeError
+LayoutTests/fast/css/parsing-font-variant-ligatures_t01: RuntimeError
+LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError
+LayoutTests/fast/css/parsing-text-rendering_t01: RuntimeError
+LayoutTests/fast/css/parsing-unexpected-eof_t01: RuntimeError
+LayoutTests/fast/css/percent-character-as-value_t01: RuntimeError
+LayoutTests/fast/css/position-absolute-float_t01: RuntimeError
+LayoutTests/fast/css/positioned-overflow-scroll_t01: RuntimeError
+LayoutTests/fast/css/pseudo-default-001_t01: RuntimeError
+LayoutTests/fast/css/pseudo-default-002_t01: RuntimeError
+LayoutTests/fast/css/pseudo-empty-display-none_t01: RuntimeError
+LayoutTests/fast/css/pseudo-escaped-parenthesis_t01: RuntimeError
+LayoutTests/fast/css/pseudo-invalid-001_t01: RuntimeError
+LayoutTests/fast/css/pseudo-invalid-novalidate-001_t01: RuntimeError
+LayoutTests/fast/css/pseudo-not_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-001_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-002_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-003_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-004_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-005_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-006_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-unapplied_t01: RuntimeError
+LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: RuntimeError
+LayoutTests/fast/css/pseudo-valid-002_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError
+LayoutTests/fast/css/recalc-direct-adjacent-001_t01: RuntimeError
+LayoutTests/fast/css/relative-positioned-block-crash_t01: RuntimeError
+LayoutTests/fast/css/remove-attribute-style_t01: RuntimeError
+LayoutTests/fast/css/remove-fixed-resizer-crash_t01: RuntimeError
+LayoutTests/fast/css/resize-value-compared_t01: RuntimeError
+LayoutTests/fast/css/rgba-custom-text_t01: RuntimeError
+LayoutTests/fast/css/scrollbar-crash_t01: RuntimeError
+LayoutTests/fast/css/shadow-dom-scope_t01: RuntimeError
+LayoutTests/fast/css/sheet-collection-link_t01: RuntimeError
+LayoutTests/fast/css/short-inline-style_t01: RuntimeError
+LayoutTests/fast/css/shorthand-priority_t01: RuntimeError
+LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError
+LayoutTests/fast/css/small-caps-crash_t01: RuntimeError
+LayoutTests/fast/css/space-before-charset-external_t01: RuntimeError
+LayoutTests/fast/css/sticky/remove-inline-sticky-crash_t01: RuntimeError
+LayoutTests/fast/css/sticky/remove-sticky-crash_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError
+LayoutTests/fast/css/style-sharing-grand-parent-invalidate_t01: RuntimeError
+LayoutTests/fast/css/style-sharing-type-and-readonly_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-link_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-parentStyleSheet_t01: RuntimeError
+LayoutTests/fast/css/test-setting-canvas-color_t01: RuntimeError
+LayoutTests/fast/css/text-align-initial_t01: RuntimeError
+LayoutTests/fast/css/text-align-webkit-match-parent_t01: RuntimeError
+LayoutTests/fast/css/text-rendering-priority_t01: RuntimeError
+LayoutTests/fast/css/transform-origin-parsing_t01: RuntimeError
+LayoutTests/fast/css/transition_shorthand_parsing_t01: RuntimeError
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError
+LayoutTests/fast/css/visibility-collapse-form-buttons_t01: RuntimeError
+LayoutTests/fast/css/webkit-color-adjust_t01: RuntimeError
+LayoutTests/fast/css/webkit-empty-transform-preserve3d-crash_t01: RuntimeError
+LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError
+LayoutTests/fast/css/zoom-in-length-round-trip_t01: RuntimeError
+LayoutTests/fast/css/zoom-property-parsing_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError
+LayoutTests/fast/dom/Attr/access-after-element-destruction_t01: RuntimeError
+LayoutTests/fast/dom/Attr/change-id-via-attr-node-value_t01: RuntimeError
+LayoutTests/fast/dom/Comment/comment-constructor_t01: RuntimeError
+LayoutTests/fast/dom/Comment/remove_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createHTMLDocument-title_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: Crash
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: RuntimeError
+LayoutTests/fast/dom/Document/clone-node_t01: RuntimeError
+LayoutTests/fast/dom/Document/createElement-invalid-names_t01: RuntimeError
+LayoutTests/fast/dom/Document/createElement-valid-names_t01: RuntimeError
+LayoutTests/fast/dom/Document/title-with-multiple-children_t01: RuntimeError
+LayoutTests/fast/dom/DocumentFragment/document-fragment-constructor_t01: RuntimeError
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError
+LayoutTests/fast/dom/Element/client-rect-list-argument_t01: Crash
+LayoutTests/fast/dom/Element/dimension-properties-unrendered_t01: RuntimeError
+LayoutTests/fast/dom/Element/getBoundingClientRect-getClientRects-relative-to-viewport_t01: RuntimeError
+LayoutTests/fast/dom/Element/getClientRects_t01: Crash
+LayoutTests/fast/dom/Element/id-in-frame_t01: RuntimeError
+LayoutTests/fast/dom/Element/id-in-getelement01_t01: RuntimeError
+LayoutTests/fast/dom/Element/id-in-insert-hr_t01: RuntimeError
+LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: RuntimeError
+LayoutTests/fast/dom/Element/scrollWidth_t01: RuntimeError
+LayoutTests/fast/dom/Element/setAttribute-case-insensitivity_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-prevents-rebase_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-rebase_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAreaElement/area-islink-focus-null-ptr-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: RuntimeError
+LayoutTests/fast/dom/HTMLButtonElement/change-type_t01: RuntimeError
+LayoutTests/fast/dom/HTMLButtonElement/value/getset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/clone-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/title-get_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/title-set_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-before-text-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-child-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text-form-control_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-children_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-remove-add-children_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-empty-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-false-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-ancestor-missing_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/innerHTML-selection-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-invalid-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/translate_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFontElement/size-attribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFormElement/adopt-assertion_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLFormElement/elements-not-in-document_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-without-renderer-width_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/checked-pseudo-selector_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/clone-input-checked_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/duplicate-element-names_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-checked-reset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-size-attribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-text-reset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/size-as-number_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/click-label_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/label-control_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-sheet-out-of-tree_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onerror_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/subresource_t01: RuntimeError
+LayoutTests/fast/dom/HTMLMeterElement/meter-percent-size_t01: RuntimeError
+LayoutTests/fast/dom/HTMLMeterElement/set-meter-properties_t01: RuntimeError
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLObjectElement/children-changed_t01: RuntimeError
+LayoutTests/fast/dom/HTMLObjectElement/form/test1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-children-removed_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-reset-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-validity_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/indeterminate-progress-002_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/progress-element-with-child-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/progress-element-with-style-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/set-progress-properties_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-script-invalid-url_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/dont-load-unknown-type_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/select-selectedOptions_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/selected-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/programmatically-add-style-with-onerror-handler_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/style-onload2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLStyleElement/style-onload_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/cellpadding-attribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/createCaption_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/early-acid3-65-excerpt_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/exceptions_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/rows_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/tBodies_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableRowElement/exceptions_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableRowElement/insertCell_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableSectionElement/rows_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/cloneNode_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/content-outlives-template-crash_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/contentWrappers_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/cycles_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/ownerDocument_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTextAreaElement/reset-textarea_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/added-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/clear-transient-without-delivery_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/create-during-delivery_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/delivery-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/disconnect-transient-crash_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/document-fragment-insertion_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/mutation-record-constructor_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-subtree_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observer-wrapper-dropoff-transient_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observer-wrapper-dropoff_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/takeRecords_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/transient-gc-crash_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError
+LayoutTests/fast/dom/Node/DOMNodeRemovedEvent_t01: RuntimeError
+LayoutTests/fast/dom/Node/contains-method_t01: RuntimeError
+LayoutTests/fast/dom/NodeList/childNodes-reset-cache_t01: RuntimeError
+LayoutTests/fast/dom/NodeList/childNodes-reverse-iteration_t01: RuntimeError
+LayoutTests/fast/dom/NodeList/invalidate-node-lists-when-parsing_t01: RuntimeError
+LayoutTests/fast/dom/NodeList/nodelist-moved-to-fragment-2_t01: RuntimeError
+LayoutTests/fast/dom/Range/31684_t01: RuntimeError
+LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError
+LayoutTests/fast/dom/Range/create-contextual-fragment-script-unmark-already-started_t01: RuntimeError
+LayoutTests/fast/dom/Range/deleted-range-endpoints_t01: RuntimeError
+LayoutTests/fast/dom/Range/getClientRects-character_t01: Crash
+LayoutTests/fast/dom/Range/missing-arguments_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-clone-contents_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-comparePoint_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-delete-contents-event-fire-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-extract-contents-event-fire-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-extractContents_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-assertion_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-isPointInRange_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-modifycontents_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-on-detached-node_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-processing-instructions_t01: RuntimeError
+LayoutTests/fast/dom/Range/surroundContents-for-detached-node_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/bug-17313_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/caseID_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/caseTag_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/detached-element_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/dumpNodeList_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/id-fastpath-strict_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/not-supported-namespace-in-selector_t01: RuntimeError
+LayoutTests/fast/dom/SelectorAPI/viewless-document_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style-2_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-stylesheet-without-wrapper_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/Text/previous-element-sibling_t01: RuntimeError
+LayoutTests/fast/dom/Text/text-constructor_t01: RuntimeError
+LayoutTests/fast/dom/TreeWalker/TreeWalker-basic_t01: RuntimeError
+LayoutTests/fast/dom/TreeWalker/TreeWalker-currentNode_t01: RuntimeError
+LayoutTests/fast/dom/Window/invalid-protocol_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-attribute-entities_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-attribute-ns-prefix_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-doctype_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-double-xmlns_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-element-ns-no-reemit_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer_t01: RuntimeError
+LayoutTests/fast/dom/allowed-children_t01: RuntimeError
+LayoutTests/fast/dom/anchor-origin_t01: RuntimeError
+LayoutTests/fast/dom/anchor-toString_t01: RuntimeError
+LayoutTests/fast/dom/assertion-on-node-removal_t01: RuntimeError
+LayoutTests/fast/dom/capturing-event-listeners_t01: RuntimeError
+LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError
+LayoutTests/fast/dom/class-attr-change-double-mutation-fire_t01: RuntimeError
+LayoutTests/fast/dom/click-method-on-html-element_t01: RuntimeError
+LayoutTests/fast/dom/clone-contents-0-end-offset_t01: RuntimeError
+LayoutTests/fast/dom/clone-node-form-elements-with-attr_t01: RuntimeError
+LayoutTests/fast/dom/clone-node-load-event-crash_t01: RuntimeError
+LayoutTests/fast/dom/cloneNode-below-body-attribute-merging_t01: RuntimeError
+LayoutTests/fast/dom/comment-not-documentElement_t01: RuntimeError
+LayoutTests/fast/dom/containerNode_t01: RuntimeError
+LayoutTests/fast/dom/createDocumentType2_t01: RuntimeError
+LayoutTests/fast/dom/createDocument_t01: RuntimeError
+LayoutTests/fast/dom/createElementNS-empty-namespace_t01: RuntimeError
+LayoutTests/fast/dom/createElementNS_t01: RuntimeError
+LayoutTests/fast/dom/createElement_t01: RuntimeError
+LayoutTests/fast/dom/css-cached-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError
+LayoutTests/fast/dom/css-inline-style-important_t01: RuntimeError
+LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError
+LayoutTests/fast/dom/css-mediarule-insertRule-update_t01: RuntimeError
+LayoutTests/fast/dom/css-mediarule-parentRule_t01: RuntimeError
+LayoutTests/fast/dom/css-selectorText_t01: RuntimeError
+LayoutTests/fast/dom/css-set-property-exception_t01: RuntimeError
+LayoutTests/fast/dom/css-shorthand-common-value_t01: RuntimeError
+LayoutTests/fast/dom/cssTarget-crash_t01: RuntimeError
+LayoutTests/fast/dom/custom/attribute-changed-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/created-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/invalid-type-extension-crash_t01: RuntimeError
+LayoutTests/fast/dom/custom/lifecycle-created-createElement-recursion_t01: RuntimeError
+LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: RuntimeError
+LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError
+LayoutTests/fast/dom/document-set-title-mutations_t01: RuntimeError
+LayoutTests/fast/dom/document-set-title-no-reuse_t01: RuntimeError
+LayoutTests/fast/dom/document-stylesheets-empty-style_t01: RuntimeError
+LayoutTests/fast/dom/document-width-height-force-layout_t01: RuntimeError
+LayoutTests/fast/dom/dom-instanceof_t01: RuntimeError
+LayoutTests/fast/dom/dom-parse-serialize-xmldecl_t01: RuntimeError
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError
+LayoutTests/fast/dom/domtimestamp-is-number_t01: RuntimeError
+LayoutTests/fast/dom/duplicate-ids_t01: RuntimeError
+LayoutTests/fast/dom/empty-hash-and-search_t01: RuntimeError
+LayoutTests/fast/dom/focus-contenteditable_t01: RuntimeError, Pass
+LayoutTests/fast/dom/gc-image-element-2_t01: RuntimeError
+LayoutTests/fast/dom/gc-image-element_t01: RuntimeError
+LayoutTests/fast/dom/getElementById-consistency2_t01: RuntimeError
+LayoutTests/fast/dom/getElementById-consistency4_t01: RuntimeError
+LayoutTests/fast/dom/getElementById-consistency_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/001_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/003_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/004_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/006_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/007_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/009_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/012_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/014_t01: RuntimeError
+LayoutTests/fast/dom/getelementbyname-invalidation_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError
+LayoutTests/fast/dom/html-collections-named-getter-mandatory-arg_t01: RuntimeError
+LayoutTests/fast/dom/htmlcollection-length-after-item_t01: RuntimeError
+LayoutTests/fast/dom/icon-url-list_t01: RuntimeError
+LayoutTests/fast/dom/id-attribute-with-namespace-crash_t01: RuntimeError
+LayoutTests/fast/dom/importNode-confusing-localName_t01: RuntimeError
+LayoutTests/fast/dom/importNode-prefix_t01: RuntimeError
+LayoutTests/fast/dom/importNodeHTML_t01: RuntimeError
+LayoutTests/fast/dom/inner-text-first-letter_t01: RuntimeError
+LayoutTests/fast/dom/inner-text_t01: RuntimeError
+LayoutTests/fast/dom/inner-width-height_t01: RuntimeError
+LayoutTests/fast/dom/innerHTML-detached-element_t01: RuntimeError
+LayoutTests/fast/dom/innerHTML-escaping-attribute_t01: RuntimeError
+LayoutTests/fast/dom/innerHTML-nbsp_t01: RuntimeError
+LayoutTests/fast/dom/insertAdjacentHTML-DocumentFragment-crash_t01: RuntimeError
+LayoutTests/fast/dom/javascript-backslash_t01: RuntimeError
+LayoutTests/fast/dom/jsDevicePixelRatio_t01: RuntimeError
+LayoutTests/fast/dom/legend-display-inline_t01: RuntimeError
+LayoutTests/fast/dom/length-attribute-mapping_t01: RuntimeError
+LayoutTests/fast/dom/location-hash_t01: RuntimeError
+LayoutTests/fast/dom/multiple-ids_t01: RuntimeError
+LayoutTests/fast/dom/navigator-userAgent_t01: RuntimeError
+LayoutTests/fast/dom/navigator-vendorSub_t01: RuntimeError
+LayoutTests/fast/dom/node-childNodes-idempotence_t01: RuntimeError
+LayoutTests/fast/dom/node-iterator-reference-node-removed_t01: RuntimeError
+LayoutTests/fast/dom/node-iterator-with-doctype-root_t01: RuntimeError
+LayoutTests/fast/dom/non-styled-element-id-crash_t01: RuntimeError
+LayoutTests/fast/dom/null-chardata-crash_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError
+LayoutTests/fast/dom/remove-style-element_t01: RuntimeError
+LayoutTests/fast/dom/replace-child-siblings_t01: RuntimeError
+LayoutTests/fast/dom/script-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/serialize-attribute_t01: RuntimeError
+LayoutTests/fast/dom/set-custom-validity-with-too-few-arguments_t01: RuntimeError
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/shadow/access-document-of-detached-stylesheetlist-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-element-includer_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: RuntimeError
+LayoutTests/fast/dom/shadow/event-path-not-in-document_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_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/link-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-node-list_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-text-child_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-ul-li_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError
+LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: RuntimeError
+LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError
+LayoutTests/fast/dom/style-sheet-candidate-remove-unrendered-document_t01: RuntimeError
+LayoutTests/fast/dom/text-api-arguments_t01: RuntimeError
+LayoutTests/fast/dom/text-node-attach-crash_t01: RuntimeError
+LayoutTests/fast/dom/xhtml-fragment-whitespace_t01: RuntimeError
+LayoutTests/fast/dynamic/ancestor-to-absolute_t01: RuntimeError
+LayoutTests/fast/dynamic/checkbox-selection-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/continuation-detach-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError
+LayoutTests/fast/dynamic/float-remove-above-line_t01: RuntimeError
+LayoutTests/fast/dynamic/inline-to-block-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/jQuery-animation-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/layer-no-longer-paginated_t01: RuntimeError
+LayoutTests/fast/dynamic/position-change-layout_t01: RuntimeError
+LayoutTests/fast/dynamic/style-access-late-stylesheet-load_t01: RuntimeError
+LayoutTests/fast/dynamic/subtree-common-root_t01: RuntimeError
+LayoutTests/fast/encoding/bom-in-content_t01: RuntimeError
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: RuntimeError
+LayoutTests/fast/events/clipboard-dataTransferItemList-remove_t01: RuntimeError
+LayoutTests/fast/events/create-document-crash-on-attach-event_t01: RuntimeError
+LayoutTests/fast/events/defaultprevented_t01: RuntimeError
+LayoutTests/fast/events/delayed-style-mutation-event-crash_t01: RuntimeError
+LayoutTests/fast/events/dispatch-event-being-dispatched_t01: RuntimeError
+LayoutTests/fast/events/dispatchEvent-crash_t01: RuntimeError
+LayoutTests/fast/events/event-creation_t01: RuntimeError
+LayoutTests/fast/events/event-fired-after-removal_t01: RuntimeError
+LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError
+LayoutTests/fast/events/event-listener-list-mutation_t01: RuntimeError
+LayoutTests/fast/events/event-listener-moving-documents_t01: RuntimeError
+LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError
+LayoutTests/fast/events/fire-scroll-event-element_t01: RuntimeError
+LayoutTests/fast/events/fire-scroll-event_t01: RuntimeError
+LayoutTests/fast/events/init-message-event_t01: RuntimeError
+LayoutTests/fast/events/invalid-002_t01: RuntimeError
+LayoutTests/fast/events/invalid-003_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-append-child_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-insert-before_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-replace-child_t01: RuntimeError
+LayoutTests/fast/events/no-window-load_t01: RuntimeError
+LayoutTests/fast/events/onerror-bubbling_t01: RuntimeError
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: RuntimeError
+LayoutTests/fast/events/remove-event-listener_t01: RuntimeError
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError
+LayoutTests/fast/events/scroll-during-zoom-change_t01: RuntimeError
+LayoutTests/fast/events/scroll-event-does-not-bubble_t01: RuntimeError
+LayoutTests/fast/events/selectstart-on-selectall_t01: RuntimeError
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError
+LayoutTests/fast/events/wheelevent-constructor_t01: RuntimeError
+LayoutTests/fast/events/window-load-capture_t01: RuntimeError
+LayoutTests/fast/eventsource/eventsource-attribute-listeners_t01: RuntimeError
+LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError
+LayoutTests/fast/files/blob-close-read_t01: RuntimeError
+LayoutTests/fast/files/blob-constructor_t01: RuntimeError
+LayoutTests/fast/files/file-reader-abort-in-last-progress_t01: RuntimeError
+LayoutTests/fast/files/file-reader-done-reading-abort_t01: RuntimeError
+LayoutTests/fast/files/file-reader-fffd_t01: RuntimeError
+LayoutTests/fast/files/file-reader-result-twice_t01: RuntimeError
+LayoutTests/fast/files/read-blob-as-array-buffer_t01: RuntimeError
+LayoutTests/fast/files/workers/inline-worker-via-blob-url_t01: RuntimeError
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError
+LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-after-reload-crash_t01: RuntimeError
+LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-metadata-after-write_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-unserializable_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-uri-origin_t01: RuntimeError
+LayoutTests/fast/filesystem/op-copy_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-metadata_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-parent_t01: RuntimeError
+LayoutTests/fast/filesystem/op-read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-chars_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-names_t01: RuntimeError
+LayoutTests/fast/filesystem/read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-readonly-file-object_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-temporary_t01: RuntimeError
+LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: RuntimeError
+LayoutTests/fast/flexbox/box-orient-button_t01: RuntimeError
+LayoutTests/fast/flexbox/crash-button-input-autofocus_t01: RuntimeError
+LayoutTests/fast/flexbox/inline-children-crash_t01: RuntimeError
+LayoutTests/fast/flexbox/order-iterator-crash_t01: RuntimeError
+LayoutTests/fast/flexbox/repaint-scrollbar_t01: RuntimeError
+LayoutTests/fast/flexbox/vertical-box-form-controls_t01: RuntimeError
+LayoutTests/fast/forms/4628409_t01: RuntimeError
+LayoutTests/fast/forms/HTMLOptionElement_selected2_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-rangeOverflow_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-rangeUnderflow_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-006_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-008_t01: RuntimeError
+LayoutTests/fast/forms/add-remove-form-elements-stress-test_t01: RuntimeError
+LayoutTests/fast/forms/autocomplete_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-opera-004_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-opera-007_t01: RuntimeError
+LayoutTests/fast/forms/button-click-DOM_t01: RuntimeError
+LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError
+LayoutTests/fast/forms/change-form-element-document-crash_t01: RuntimeError
+LayoutTests/fast/forms/checkValidity-003_t01: RuntimeError
+LayoutTests/fast/forms/checkbox-default-value_t01: RuntimeError
+LayoutTests/fast/forms/color/color-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/color/input-value-sanitization-color_t01: RuntimeError
+LayoutTests/fast/forms/control-detach-crash_t01: RuntimeError
+LayoutTests/fast/forms/cursor-position_t01: RuntimeError
+LayoutTests/fast/forms/dangling-form-element-crash_t01: RuntimeError
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError
+LayoutTests/fast/forms/date/date-interactive-validation-required_t01: RuntimeError
+LayoutTests/fast/forms/date/date-pseudo-classes_t01: RuntimeError
+LayoutTests/fast/forms/date/date-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/date/input-date-validation-message_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/double-focus_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-disabled_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-name_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-type_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/validation-in-fieldset_t01: RuntimeError
+LayoutTests/fast/forms/focus-style-pending_t01: RuntimeError
+LayoutTests/fast/forms/focus_t01: RuntimeError
+LayoutTests/fast/forms/form-added-to-table_t01: RuntimeError
+LayoutTests/fast/forms/form-associated-element-crash_t01: RuntimeError
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError
+LayoutTests/fast/forms/form-attribute-not-in-document_t01: RuntimeError
+LayoutTests/fast/forms/form-input-named-arguments_t01: RuntimeError
+LayoutTests/fast/forms/form-submission-create-crash_t01: RuntimeError
+LayoutTests/fast/forms/formmethod-attribute-test_t01: RuntimeError
+LayoutTests/fast/forms/image/image-error-event-crash_t01: RuntimeError
+LayoutTests/fast/forms/image/image-error-event-modifies-type-crash_t01: RuntimeError
+LayoutTests/fast/forms/image/width-and-height-of-detached-input_t01: RuntimeError
+LayoutTests/fast/forms/incremental-dom-property_t01: RuntimeError
+LayoutTests/fast/forms/indeterminate-input-types_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-maxlength_t01: RuntimeError
+LayoutTests/fast/forms/input-changing-value_t01: RuntimeError
+LayoutTests/fast/forms/input-file-set-value_t01: RuntimeError
+LayoutTests/fast/forms/input-hit-test-border_t01: RuntimeError
+LayoutTests/fast/forms/input-implicit-length-limit_t01: RuntimeError
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError
+LayoutTests/fast/forms/input-maxlength-unsupported_t01: RuntimeError
+LayoutTests/fast/forms/input-maxlength_t01: RuntimeError
+LayoutTests/fast/forms/input-multiple_t01: RuntimeError
+LayoutTests/fast/forms/input-select-webkit-user-select-none_t01: RuntimeError
+LayoutTests/fast/forms/input-type-change-focusout_t01: RuntimeError
+LayoutTests/fast/forms/input-type-change_t01: RuntimeError
+LayoutTests/fast/forms/input-value-sanitization_t01: RuntimeError
+LayoutTests/fast/forms/input-width-height-attributes_t01: RuntimeError
+LayoutTests/fast/forms/interactive-validation-select-crash_t01: RuntimeError
+LayoutTests/fast/forms/legend-absolute-position-auto-width_t01: RuntimeError
+LayoutTests/fast/forms/listbox-scroll-after-options-removed_t01: RuntimeError
+LayoutTests/fast/forms/listbox-select-all_t01: RuntimeError
+LayoutTests/fast/forms/listbox-selection-2_t01: RuntimeError
+LayoutTests/fast/forms/method-attribute_t01: RuntimeError
+LayoutTests/fast/forms/misplaced-img-form-registration_t01: RuntimeError
+LayoutTests/fast/forms/onchange-change-type_t01: RuntimeError
+LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError
+LayoutTests/fast/forms/option-label-trim-html-spaces_t01: RuntimeError
+LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError
+LayoutTests/fast/forms/option-value-and-label-changed-by-js_t01: RuntimeError
+LayoutTests/fast/forms/option-value-and-label_t01: RuntimeError
+LayoutTests/fast/forms/option-value-trim-html-spaces_t01: RuntimeError
+LayoutTests/fast/forms/output-reset-assertion-failed_t01: RuntimeError
+LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError
+LayoutTests/fast/forms/paste-into-textarea_t01: RuntimeError
+LayoutTests/fast/forms/pattern-attribute-002_t01: RuntimeError
+LayoutTests/fast/forms/percent-height-auto-width-form-controls_t01: RuntimeError
+LayoutTests/fast/forms/placeholder-dom-property_t01: RuntimeError
+LayoutTests/fast/forms/placeholder-non-textfield_t01: RuntimeError
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError
+LayoutTests/fast/forms/radio-checkbox-restore-indeterminate_t01: RuntimeError
+LayoutTests/fast/forms/required-attribute-002_t01: RuntimeError
+LayoutTests/fast/forms/search-placeholder-value-changed_t01: RuntimeError
+LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError
+LayoutTests/fast/forms/select-display-none-style-resolve_t01: RuntimeError
+LayoutTests/fast/forms/select-generated-content_t01: RuntimeError
+LayoutTests/fast/forms/select-out-of-bounds-index_t01: RuntimeError
+LayoutTests/fast/forms/select-remove-option_t01: RuntimeError
+LayoutTests/fast/forms/select-set-inner_t01: RuntimeError
+LayoutTests/fast/forms/select-set-length-with-mutation-remove_t01: RuntimeError
+LayoutTests/fast/forms/selection-direction_t01: RuntimeError
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError
+LayoutTests/fast/forms/setCustomValidity-arguments_t01: RuntimeError
+LayoutTests/fast/forms/setCustomValidity-existence_t01: RuntimeError
+LayoutTests/fast/forms/shadow-tree-exposure_t01: RuntimeError
+LayoutTests/fast/forms/slow-click_t01: RuntimeError
+LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute_t01: RuntimeError
+LayoutTests/fast/forms/submit-form-with-dirname-attribute_t01: RuntimeError
+LayoutTests/fast/forms/text-control-selection-crash_t01: RuntimeError
+LayoutTests/fast/forms/text-set-value-crash_t01: RuntimeError
+LayoutTests/fast/forms/textarea-and-mutation-events_t01: RuntimeError
+LayoutTests/fast/forms/textarea-checkValidity-crash_t01: RuntimeError
+LayoutTests/fast/forms/textarea-crlf_t01: RuntimeError
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError
+LayoutTests/fast/forms/textarea-placeholder-dom-property_t01: RuntimeError
+LayoutTests/fast/forms/textarea-placeholder-relayout-assertion_t01: RuntimeError
+LayoutTests/fast/forms/textarea-rows-cols_t01: RuntimeError
+LayoutTests/fast/forms/textarea-selection-preservation_t01: RuntimeError
+LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: RuntimeError
+LayoutTests/fast/forms/textarea-submit-crash_t01: RuntimeError
+LayoutTests/fast/forms/textarea-trailing-newline_t01: RuntimeError
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError
+LayoutTests/fast/forms/validity-property_t01: RuntimeError
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError
+LayoutTests/fast/html/adjacent-html-context-element_t01: RuntimeError
+LayoutTests/fast/html/article-element_t01: RuntimeError
+LayoutTests/fast/html/body-offset-properties_t01: RuntimeError
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-click-controls_t01: RuntimeError
+LayoutTests/fast/html/details-mouse-click_t01: RuntimeError
+LayoutTests/fast/html/disable-style-element_t01: RuntimeError
+LayoutTests/fast/html/draggable_t01: RuntimeError
+LayoutTests/fast/html/empty-fragment-id-goto-top_t01: RuntimeError
+LayoutTests/fast/html/eventhandler-attribute-non-callable_t01: RuntimeError
+LayoutTests/fast/html/figure-element_t01: RuntimeError
+LayoutTests/fast/html/header-element_t01: RuntimeError
+LayoutTests/fast/html/hgroup-element_t01: RuntimeError
+LayoutTests/fast/html/hidden-attr_t01: RuntimeError
+LayoutTests/fast/html/layout-with-pending-stylesheet_t01: RuntimeError
+LayoutTests/fast/html/main-element_t01: RuntimeError
+LayoutTests/fast/html/object-border_t01: RuntimeError
+LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError
+LayoutTests/fast/html/xhtml-serialize_t01: RuntimeError
+LayoutTests/fast/inline-block/inline-block-vertical-align-t02: RuntimeError
+LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError
+LayoutTests/fast/inline/fixed-pos-moves-with-abspos-inline-parent_t01: RuntimeError
+LayoutTests/fast/inline/fixed-pos-moves-with-abspos-parent_t01: RuntimeError
+LayoutTests/fast/inline/fixed-pos-with-transform-container-moves-with-abspos-parent_t01: RuntimeError
+LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError
+LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/inline/reattach-inlines-in-anonymous-blocks-with-out-of-flow-siblings_t01: RuntimeError
+LayoutTests/fast/innerHTML/001_t01: RuntimeError
+LayoutTests/fast/innerHTML/002_t01: RuntimeError
+LayoutTests/fast/innerHTML/003_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-case_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-custom-tag_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-svg-read_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-svg-write_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-template-crash_t01: RuntimeError
+LayoutTests/fast/innerHTML/javascript-url_t01: RuntimeError
+LayoutTests/fast/layers/negative-scroll-positions_t01: RuntimeError
+LayoutTests/fast/layers/normal-flow-hit-test_t01: RuntimeError
+LayoutTests/fast/layers/zindex-hit-test_t01: RuntimeError
+LayoutTests/fast/lists/calc-width-with-space_t01: RuntimeError
+LayoutTests/fast/lists/item-not-in-list-line-wrapping_t01: RuntimeError
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-change_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-kept_t01: RuntimeError
+LayoutTests/fast/loader/hashchange-event-async_t01: RuntimeError
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: RuntimeError
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: RuntimeError
+LayoutTests/fast/loader/stateobjects/replacestate-in-onunload_t01: RuntimeError
+LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError
+LayoutTests/fast/masking/parsing-mask_t01: RuntimeError
+LayoutTests/fast/media/invalid-lengths_t01: RuntimeError
+LayoutTests/fast/media/matchmedium-query-api_t01: RuntimeError
+LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError
+LayoutTests/fast/media/mq-append-delete_t01: RuntimeError
+LayoutTests/fast/media/mq-color-index_t02: RuntimeError
+LayoutTests/fast/media/mq-js-media-except_t03: RuntimeError
+LayoutTests/fast/media/mq-js-update-media_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCIceCandidate_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: RuntimeError
+LayoutTests/fast/mediastream/constructors_t01: RuntimeError
+LayoutTests/fast/multicol/balance-unbreakable_t01: RuntimeError
+LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/gap-non-negative_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-gap-between-pages-flipped_t01: RuntimeError
+LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: RuntimeError
+LayoutTests/fast/multicol/inline-getclientrects_t01: Crash
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t02: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t03: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t04: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t05: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t08: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance_t10: RuntimeError
+LayoutTests/fast/multicol/orphans-relayout_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/widows_t01: RuntimeError
+LayoutTests/fast/multicol/zeroColumnCount_t01: RuntimeError
+LayoutTests/fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError
+LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError
+LayoutTests/fast/overflow/scroll-vertical-not-horizontal_t01: RuntimeError
+LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError
+LayoutTests/fast/parser/foster-parent_t01: RuntimeError
+LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError
+LayoutTests/fast/parser/href-whitespace_t01: RuntimeError
+LayoutTests/fast/parser/image-tag-parses-to-HTMLImageElement_t01: RuntimeError
+LayoutTests/fast/parser/parse-wbr_t01: RuntimeError
+LayoutTests/fast/parser/residual-style-close-across-n-blocks_t01: RuntimeError
+LayoutTests/fast/parser/stray-end-tags-with-attributes-001_t01: RuntimeError
+LayoutTests/fast/parser/stray-end-tags-with-attributes-002_t01: RuntimeError
+LayoutTests/fast/parser/stray-param_t01: RuntimeError
+LayoutTests/fast/parser/strict-img-in-map_t01: RuntimeError
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor-vertical-lr_t01: RuntimeError
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-and-fixed-ancestor_t01: RuntimeError
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor-vertical-lr_t01: RuntimeError
+LayoutTests/fast/replaced/computed-image-width-with-percent-height-inside-table-cell-and-fixed-ancestor_t01: RuntimeError
+LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: RuntimeError
+LayoutTests/fast/replaced/preferred-widths_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError
+LayoutTests/fast/ruby/after-doesnt-crash_t01: RuntimeError
+LayoutTests/fast/ruby/before-block-doesnt-crash_t01: RuntimeError
+LayoutTests/fast/ruby/parse-rp_t01: RuntimeError
+LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError
+LayoutTests/fast/scrolling/scroll-element-into-view_t01: RuntimeError
+LayoutTests/fast/selectors/querySelector-in-range-crash_t01: RuntimeError
+LayoutTests/fast/selectors/querySelector-leftmost-selector-matches-ancestor_t01: RuntimeError
+LayoutTests/fast/selectors/querySelector-leftmost-selector-matches-rootNode_t01: RuntimeError
+LayoutTests/fast/selectors/querySelector-scope_t01: RuntimeError
+LayoutTests/fast/selectors/style-sharing-last-child_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-outside-none_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: RuntimeError
+LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError
+LayoutTests/fast/sub-pixel/auto-table-layout-should-avoid-text-wrapping_t01: RuntimeError
+LayoutTests/fast/sub-pixel/block-preferred-widths-with-sub-pixel-floats_t01: RuntimeError
+LayoutTests/fast/sub-pixel/boundingclientrect-subpixel-margin_t01: RuntimeError
+LayoutTests/fast/sub-pixel/client-and-offset-width_t01: RuntimeError
+LayoutTests/fast/sub-pixel/computedstylemargin_t01: RuntimeError
+LayoutTests/fast/sub-pixel/float-percentage-widths_t01: RuntimeError
+LayoutTests/fast/sub-pixel/inline-block-with-padding_t01: RuntimeError
+LayoutTests/fast/sub-pixel/shadows-computed-style_t01: RuntimeError
+LayoutTests/fast/sub-pixel/table-cells-have-stable-width_t01: RuntimeError
+LayoutTests/fast/sub-pixel/tiled-canvas-elements_t01: RuntimeError
+LayoutTests/fast/sub-pixel/vertical-align-middle-overflow_t01: RuntimeError
+LayoutTests/fast/svg/getbbox_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-angle_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-length_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-number_t01: RuntimeError
+LayoutTests/fast/table/before-child-non-table-section-add-table-crash_t01: RuntimeError
+LayoutTests/fast/table/columngroup-inside-columngroup_t01: RuntimeError
+LayoutTests/fast/table/css-table-width_t01: RuntimeError
+LayoutTests/fast/table/fixed-table-layout-toggle-colwidth_t01: RuntimeError
+LayoutTests/fast/table/fixed-table-layout-width-change_t01: RuntimeError
+LayoutTests/fast/table/form-with-non-table-display-inside-table-elements_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-bottom-edge_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-with-borders-bottom-edge_t01: RuntimeError
+LayoutTests/fast/table/html-table-width-max-width-constrained_t01: RuntimeError
+LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError
+LayoutTests/fast/table/margins-flipped-text-direction_t01: RuntimeError
+LayoutTests/fast/table/min-width-css-block-table_t01: RuntimeError
+LayoutTests/fast/table/nested-tables-with-div-offset_t01: RuntimeError
+LayoutTests/fast/table/prepend-in-anonymous-table_t01: RuntimeError
+LayoutTests/fast/table/resize-table-cell_t01: RuntimeError
+LayoutTests/fast/table/resize-table-row_t01: RuntimeError
+LayoutTests/fast/table/rowindex-comment-nodes_t01: RuntimeError
+LayoutTests/fast/table/switch-table-layout-multiple-section_t01: RuntimeError
+LayoutTests/fast/table/switch-table-layout_t01: RuntimeError
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: RuntimeError
+LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-cell-with-empty-cell_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: RuntimeError
+LayoutTests/fast/table/table-size-integer-overflow_t01: RuntimeError
+LayoutTests/fast/table/table-with-borderattr-null_t01: RuntimeError
+LayoutTests/fast/table/table-with-borderattr-set-to-null_t01: RuntimeError
+LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: RuntimeError
+LayoutTests/fast/table/td-bordercolor-attribute_t01: RuntimeError
+LayoutTests/fast/text-autosizing/table-inline-width_t01: RuntimeError
+LayoutTests/fast/text-autosizing/text-removal_t01: RuntimeError
+LayoutTests/fast/text/container-align-with-inlines_t01: RuntimeError
+LayoutTests/fast/text/decomposed-after-stacked-diacritics_t01: RuntimeError
+LayoutTests/fast/text/find-case-folding_t01: RuntimeError
+LayoutTests/fast/text/find-hidden-text_t01: RuntimeError
+LayoutTests/fast/text/find-kana_t01: RuntimeError
+LayoutTests/fast/text/find-russian_t01: RuntimeError
+LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError
+LayoutTests/fast/text/font-ligature-letter-spacing_t01: RuntimeError
+LayoutTests/fast/text/font-size-zero_t01: RuntimeError
+LayoutTests/fast/text/glyph-reordering_t01: RuntimeError
+LayoutTests/fast/text/international/iso-8859-8_t01: Crash
+LayoutTests/fast/text/line-breaks-after-closing-punctuations_t01: RuntimeError
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError
+LayoutTests/fast/text/soft-hyphen-5_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError
+LayoutTests/fast/text/text-combine-first-line-crash_t01: RuntimeError
+LayoutTests/fast/text/text-fragment-first-letter-update-crash_t01: RuntimeError
+LayoutTests/fast/text/window-find_t01: RuntimeError
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError
+LayoutTests/fast/tokenizer/doctype-search-reset_t01: RuntimeError
+LayoutTests/fast/tokenizer/entities_t02: RuntimeError
+LayoutTests/fast/tokenizer/entities_t03: RuntimeError
+LayoutTests/fast/transforms/topmost-becomes-bottomost-for-scrolling_t01: RuntimeError
+LayoutTests/fast/transforms/transform-hit-test-flipped_t01: RuntimeError
+LayoutTests/fast/transforms/transform-inside-overflow-scroll_t01: RuntimeError
+LayoutTests/fast/url/anchor_t01: RuntimeError
+LayoutTests/fast/url/file-http-base_t01: RuntimeError
+LayoutTests/fast/url/file_t01: RuntimeError
+LayoutTests/fast/url/host-lowercase-per-scheme_t01: RuntimeError
+LayoutTests/fast/url/idna2003_t01: RuntimeError
+LayoutTests/fast/url/idna2008_t01: RuntimeError
+LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError
+LayoutTests/fast/url/ipv4_t01: RuntimeError
+LayoutTests/fast/url/ipv6_t01: RuntimeError
+LayoutTests/fast/url/mailto_t01: RuntimeError
+LayoutTests/fast/url/path-url_t01: RuntimeError
+LayoutTests/fast/url/path_t01: RuntimeError
+LayoutTests/fast/url/query_t01: RuntimeError
+LayoutTests/fast/url/relative-win_t01: RuntimeError
+LayoutTests/fast/url/relative_t01: RuntimeError
+LayoutTests/fast/url/safari-extension_t01: RuntimeError
+LayoutTests/fast/url/segments_t01: RuntimeError
+LayoutTests/fast/url/standard-url_t01: RuntimeError
+LayoutTests/fast/writing-mode/auto-margins-across-boundaries_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-text-map-local-to-container_t01: Crash
+LayoutTests/fast/writing-mode/overhanging-float-legend-crash_t01: RuntimeError
+LayoutTests/fast/writing-mode/positionForPoint_t01: RuntimeError
+LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError
+LayoutTests/fast/writing-mode/vertical-inline-block-hittest_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-html-response-encoding_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-text_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-set-responsetype_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-withcredentials-before-open_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_literal_expr_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_nodeset_expr_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_numeric_expr_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_step_t01: RuntimeError
+LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError
+LayoutTests/fast/xpath/attr-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/attribute-node-predicate_t01: RuntimeError
+LayoutTests/fast/xpath/complex-id_t01: RuntimeError
+LayoutTests/fast/xpath/empty-string-substring_t01: RuntimeError
+LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/id-path_t01: RuntimeError
+LayoutTests/fast/xpath/id-simple_t01: RuntimeError
+LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError
+LayoutTests/fast/xpath/invalid-resolver_t01: RuntimeError
+LayoutTests/fast/xpath/nan-to-boolean_t01: RuntimeError
+LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError
+LayoutTests/fast/xpath/substring-nan-position_t01: RuntimeError
+LayoutTests/fast/xpath/xpath-detached-nodes_t01: RuntimeError
+LayoutTests/fast/xpath/xpath-result-eventlistener-crash_t01: RuntimeError
+LayoutTests/fast/xpath/xpath-template-element_t01: RuntimeError
+LayoutTests/fast/xsl/default-html_t01: RuntimeError
+LayoutTests/fast/xsl/extra-lf-at-end_t01: RuntimeError
+LayoutTests/fast/xsl/nbsp-in-stylesheet_t01: RuntimeError
+LayoutTests/fast/xsl/transformToFragment-XML-declaration_t01: RuntimeError
+LayoutTests/fast/xsl/xslt-bad-import-uri_t01: RuntimeError
+LayoutTests/fast/xsl/xslt-fragment-in-empty-doc_t01: RuntimeError
+LayoutTests/fast/xsl/xslt-string-parameters_t01: RuntimeError
+LayoutTests/fast/xsl/xslt-transform-to-fragment-crash_t01: RuntimeError
+LibTest/async/Future/asStream_A01_t02: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t01: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError, Pass
+LibTest/async/Stream/Stream.fromIterable_A03_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A03_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t03: RuntimeError
+LibTest/async/StreamController/addStream_A03_t01: RuntimeError
+LibTest/async/StreamController/stream_A02_t03: RuntimeError
+LibTest/async/StreamController/stream_A03_t02: RuntimeError
+LibTest/async/StreamSink/addStream_A01_t02: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: RuntimeError
+LibTest/async/Zone/registerBinaryCallback_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/fold_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/removeWhere_A02_t03: RuntimeError
+LibTest/collection/DoubleLinkedQueue/retainWhere_A02_t02: RuntimeError
+LibTest/collection/HashSet/HashSet_A04_t01: RuntimeError
+LibTest/collection/HashSet/HashSet_class_A01_t01: RuntimeError
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/contains_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/every_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/expand_A01_t01: RuntimeError
+LibTest/collection/IterableMixin/expand_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/fold_A01_t01: RuntimeError
+LibTest/collection/LinkedList/addAll_A01_t02: RuntimeError
+LibTest/collection/LinkedList/join_A01_t01: RuntimeError
+LibTest/collection/LinkedList/toString_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/LinkedListEntry_class_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/list_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A02_t02: RuntimeError
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError
+LibTest/collection/ListQueue/ListQueue.from_A01_t01: RuntimeError
+LibTest/convert/LineSplitter/fuse_A01_t01: RuntimeError
+LibTest/core/AssertionError/AssertionError_A01_t01: RuntimeError
+LibTest/core/AssertionError/message_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/CyclicInitializationError.class_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/variableName_A01_t01: RuntimeError
+LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecond_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/parse_A01_t03: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t01: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t02: RuntimeError
+LibTest/core/Duration/Duration_A01_t01: CompileTimeError
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError
+LibTest/core/Duration/inDays_A01_t01: CompileTimeError
+LibTest/core/Duration/inHours_A01_t01: CompileTimeError
+LibTest/core/Duration/inMicroseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError
+LibTest/core/Error/stackTrace_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t04: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t05: RuntimeError
+LibTest/core/Function/Function_class_A01_t01: RuntimeError
+LibTest/core/IndexError/stackTrace_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError
+LibTest/core/Runes/any_A01_t01: RuntimeError
+LibTest/core/Runes/every_A01_t01: RuntimeError
+LibTest/core/String/padRight_A01_t01: RuntimeError
+LibTest/core/String/replaceFirstMapped_A03_t01: RuntimeError
+LibTest/core/Symbol/Symbol_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t02: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t05: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A02_t03: RuntimeError
+LibTest/core/Uri/Uri.file_A02_t03: RuntimeError
+LibTest/core/Uri/queryParametersAll_A01_t04: RuntimeError
+LibTest/core/Uri/queryParametersAll_A03_t01: RuntimeError
+LibTest/core/UriData/UriData.fromBytes_A01_t03: RuntimeError
+LibTest/core/UriData/charset_A01_t01: RuntimeError
+LibTest/core/UriData/contentText_A01_t01: RuntimeError
+LibTest/core/UriData/parse_A01_t01: RuntimeError
+LibTest/core/double/INFINITY_A01_t04: RuntimeError
+LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A01_t02: CompileTimeError
+LibTest/core/double/operator_GT_A01_t02: CompileTimeError
+LibTest/core/double/operator_LT_A01_t02: CompileTimeError
+LibTest/core/double/operator_addition_A01_t08: Crash
+LibTest/core/double/operator_subtraction_A01_t06: RuntimeError
+LibTest/core/double/operator_subtraction_A01_t09: Crash
+LibTest/core/int/ceil_A01_t01: CompileTimeError
+LibTest/core/int/compareTo_A01_t01: CompileTimeError
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError
+LibTest/core/int/floor_A01_t01: CompileTimeError
+LibTest/core/int/hashCode_A01_t01: CompileTimeError
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError
+LibTest/core/int/isNegative_A01_t01: CompileTimeError
+LibTest/core/int/isOdd_A01_t01: RuntimeError
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A03_t01: CompileTimeError
+LibTest/core/int/operator_left_shift_A01_t01: RuntimeError
+LibTest/core/int/operator_remainder_A01_t03: RuntimeError
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError
+LibTest/core/int/parse_A03_t02: CompileTimeError
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError
+LibTest/html/Element/focus_A01_t01: RuntimeError
+LibTest/typed_data/Float64List/shuffle_A01_t01: RuntimeError, Pass
+Utils/tests/Expect/throws_A01_t04: RuntimeError
+WebPlatformTest/DOMEvents/approved/Event.bubbles.false_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/EventObject.multiple.dispatchEvent_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/Propagation.path.target.removed_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError
+WebPlatformTest/DOMEvents/approved/stopPropagation.deferred.effect_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError
+WebPlatformTest/Utils/test/asyncTestPass_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestTimeout_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A08_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/localName_A01_t01: RuntimeError
+WebPlatformTest/dom/collections/emptyName_A01_t02: RuntimeError
+WebPlatformTest/dom/collections/emptyName_A01_t05: RuntimeError
+WebPlatformTest/dom/events/defaultPrevented_A01_t06: RuntimeError
+WebPlatformTest/dom/events/event_constructors/Event_A01_t01: RuntimeError
+WebPlatformTest/dom/events/propagation_A01_t01: RuntimeError
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/deleteData_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/insertData_A02_t01: RuntimeError
+WebPlatformTest/dom/nodes/CharacterData/remove_A02_t02: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-createElementNS_t02: RuntimeError
+WebPlatformTest/dom/nodes/DocumentType-remove_t01: RuntimeError
+WebPlatformTest/dom/nodes/Element-childElementCount-dynamic-remove_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-contains_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-nodeName_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-parentElement_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-parentNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-textContent_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/attributes_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/attributes_A02_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/attributes_A04_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/attributes_A05_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A03_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A04_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A06_t02: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A09_t02: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A10_t02: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A02_t02: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A04_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A06_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A07_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A08_t01: RuntimeError
+WebPlatformTest/dom/ranges/Range-attributes_t02: RuntimeError
+WebPlatformTest/html-imports/link-import_t02: RuntimeError
+WebPlatformTest/html-imports/loading-import_t01: RuntimeError
+WebPlatformTest/html-templates/additions-to-the-steps-to-clone-a-node/template-clone-children_t01: RuntimeError
+WebPlatformTest/html-templates/definitions/template-contents-owner-document-type_t01: RuntimeError
+WebPlatformTest/html-templates/definitions/template-contents_t01: RuntimeError
+WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-foster-parenting/template-is-a-foster-parent-element_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-body-token_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-frameset-token_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-body-insertion-mode/ignore-html-token_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-table-insertion-mode/end-tag-table_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/appending-to-a-template/template-child-nodes_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError
+WebPlatformTest/html-templates/serializing-html-templates/outerhtml_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/Document.getElementsByClassName-null_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/Element.getElementsByClassName-null_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-newelements_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.head_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.head_t02: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t04: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t05: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/nameditem_t06: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-enumeration_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/id-name_t01: RuntimeError
+WebPlatformTest/html/semantics/disabled-elements/disabledElement_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/default_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/label_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/track_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/the-audio-element/audio_constructor_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/selection-not-application-textarea_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-datalist-element/datalistelement_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-fieldset-element/disabled_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/color_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-type-button_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-type-checkbox_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/mobiles_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/pattern_attribute_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/telephone_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/url_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: RuntimeError
+WebPlatformTest/html/semantics/grouping-content/the-li-element/grouping-li_t01: RuntimeError
+WebPlatformTest/html/semantics/grouping-content/the-ol-element/ol.start-reflection_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/inrange-outofrange_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/link_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/required-optional_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/valid-invalid_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/caption-methods_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/createTBody_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/insertRow-method_t02: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-insertRow_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-tr-element/rowIndex_t01: RuntimeError
+WebPlatformTest/html/semantics/text-level-semantics/the-a-element/a.text-getter_t01: RuntimeError
+WebPlatformTest/html/semantics/text-level-semantics/the-a-element/a.text-setter_t01: RuntimeError
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t01: RuntimeError, Pass
+WebPlatformTest/html/syntax/parsing/Document.getElementsByTagName-foreign_t02: RuntimeError
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError
+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/attributes/test-006_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/extensions-to-event-interface/event-path-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_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-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: RuntimeError
+WebPlatformTest/webstorage/event_constructor_t02: RuntimeError
+WebPlatformTest/webstorage/event_local_newvalue_t01: RuntimeError
+WebPlatformTest/webstorage/event_local_storageeventinit_t01: RuntimeError
+WebPlatformTest/webstorage/event_session_url_t01: RuntimeError
+WebPlatformTest/webstorage/storage_local_remove_t01: RuntimeError
+WebPlatformTest/webstorage/storage_local_setitem_quotaexceedederr_t01: RuntimeError
+WebPlatformTest/webstorage/storage_local_setitem_t01: RuntimeError
+WebPlatformTest/webstorage/storage_session_getitem_t02: RuntimeError
+WebPlatformTest/webstorage/storage_session_length_t01: RuntimeError
+WebPlatformTest/webstorage/storage_session_removeitem_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime == d8 && $system == linux && !$fast_startup ]
+LayoutTests/fast/canvas/canvas-drawImage-scaled-copy-to-self_t01: RuntimeError
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime == ff ]
+Language/Expressions/Additive_Expressions/syntax_t01: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError
+Language/Expressions/Constants/depending_on_itself_t03: Crash
+Language/Expressions/Constants/exception_t02/01: CompileTimeError
+Language/Expressions/Constants/integer_size_t03: CompileTimeError
+Language/Expressions/Constants/integer_size_t04: CompileTimeError
+Language/Expressions/Function_Invocation/async_generator_invokation_t08: Timeout
+Language/Expressions/Function_Invocation/async_generator_invokation_t10: Timeout
+Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
+Language/Expressions/If_null_Expressions/static_type_t01: RuntimeError
+Language/Expressions/Lists/identical_t02: RuntimeError
+Language/Expressions/Maps/identical_t02: RuntimeError
+Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
+Language/Expressions/Numbers/syntax_t06: CompileTimeError
+Language/Expressions/Numbers/syntax_t09: CompileTimeError
+Language/Expressions/Object_Identity/double_t02: RuntimeError
+Language/Expressions/Shift/integer_t02: CompileTimeError
+Language/Expressions/Type_Cast/syntax_t01: RuntimeError
+Language/Expressions/Unary_Expressions/variable_negative_t03: RuntimeError
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t01: CompileTimeError
+Language/Metadata/before_ctor_t02: RuntimeError
+Language/Metadata/before_function_t01: RuntimeError
+Language/Metadata/before_function_t02: RuntimeError
+Language/Metadata/before_function_t03: RuntimeError
+Language/Metadata/before_function_t04: RuntimeError
+Language/Metadata/before_function_t07: RuntimeError
+Language/Metadata/before_import_t01: RuntimeError
+Language/Metadata/before_param_t03: RuntimeError
+Language/Metadata/before_param_t05: RuntimeError
+Language/Metadata/before_param_t07: RuntimeError
+Language/Metadata/before_param_t09: RuntimeError
+Language/Metadata/before_variable_t02: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
+Language/Overview/Privacy/private_and_public_t18: RuntimeError
+Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError
+Language/Statements/Assert/execution_t09: RuntimeError
+Language/Types/Function_Types/call_t01: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t03: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t11: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t04: RuntimeError
+Language/Types/Interface_Types/subtype_t06: RuntimeError
+Language/Types/Interface_Types/subtype_t21: RuntimeError
+Language/Types/Interface_Types/subtype_t23: RuntimeError
+Language/Variables/constant_variable_t09: RuntimeError
+LanguageFeatures/Instantiate-to-bound/check_types/typedef_param_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_local_variable_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_return_value_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_return_value_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-cancel_t01: Timeout, Pass
+LayoutTests/fast/animation/request-animation-frame-timestamps-advance_t01: Timeout, Pass
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError
+LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError
+LayoutTests/fast/borders/border-width-percent_t01: RuntimeError
+LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError
+LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError
+LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: Timeout
+LayoutTests/fast/canvas/canvas-blend-solid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillRect-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillText-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-font-ex-units-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Timeout, Pass
+LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-resize-after-paint_t01: Timeout, Pass
+LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-stroke-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-toDataURL-crash_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-valid-image_t01: Timeout
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError
+LayoutTests/fast/canvas/setWidthResetAfterForcedRender_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-get-calls_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: Timeout
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Timeout
+LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: Timeout
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError
+LayoutTests/fast/css-generated-content/bug91547_t01: RuntimeError
+LayoutTests/fast/css-generated-content/details-before-after-content_t01: RuntimeError
+LayoutTests/fast/css-generated-content/malformed-url_t01: Timeout, RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation-before-onload_t01: RuntimeError, Pass
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: RuntimeError, Pass
+LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Timeout
+LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Timeout
+LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError
+LayoutTests/fast/css/background-serialize_t01: RuntimeError
+LayoutTests/fast/css/border-image-null-image-crash_t01: RuntimeError
+LayoutTests/fast/css/border-image-style-length_t01: RuntimeError
+LayoutTests/fast/css/border-shorthand-initialize-longhands_t01: RuntimeError
+LayoutTests/fast/css/border-start-end_t01: RuntimeError
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError
+LayoutTests/fast/css/content/content-none_t01: RuntimeError
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing-image-set_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing_t01: RuntimeError
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: RuntimeError
+LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError
+LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError, Pass
+LayoutTests/fast/css/font-face-insert-link_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError
+LayoutTests/fast/css/font-property-priority_t01: RuntimeError
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-style-shorthand_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-length-unit_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-column-rule_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-webkit-margin-collapse_t01: RuntimeError
+LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError
+LayoutTests/fast/css/image-set-setting_t01: RuntimeError
+LayoutTests/fast/css/implicit-attach-marking_t01: Timeout, Pass
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError
+LayoutTests/fast/css/invalidation/dynamic-selector-list-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError
+LayoutTests/fast/css/nested-at-rules_t01: RuntimeError
+LayoutTests/fast/css/overflow-property_t01: RuntimeError
+LayoutTests/fast/css/padding-start-end_t01: RuntimeError
+LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError
+LayoutTests/fast/css/percent-min-width-img-src-change_t01: Timeout
+LayoutTests/fast/css/pseudo-required-optional-004_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-005_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-unapplied_t01: RuntimeError
+LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Timeout
+LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Timeout
+LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError
+LayoutTests/fast/css/sheet-collection-link_t01: RuntimeError
+LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError
+LayoutTests/fast/css/space-before-charset-external_t01: RuntimeError
+LayoutTests/fast/css/style-element-process-crash_t01: Timeout
+LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-link_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError
+LayoutTests/fast/css/text-align-webkit-match-parent_t01: RuntimeError
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError
+LayoutTests/fast/css/webkit-color-adjust_t01: RuntimeError
+LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError
+LayoutTests/fast/css/zoom-property-parsing_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: RuntimeError
+LayoutTests/fast/dom/Document/createElement-valid-names_t01: RuntimeError
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError
+LayoutTests/fast/dom/Element/client-rect-list-argument_t01: RuntimeError
+LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError
+LayoutTests/fast/dom/Element/id-in-insert-hr_t01: RuntimeError
+LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: RuntimeError
+LayoutTests/fast/dom/Element/scrollWidth_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: Timeout, Pass
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: RuntimeError
+LayoutTests/fast/dom/HTMLButtonElement/value/getset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Timeout, RuntimeError
+LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Timeout
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-before-text-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-child-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text-form-control_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-children_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-remove-add-children_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-empty-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-false-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-ancestor-missing_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-invalid-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/translate_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: Timeout
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/click-label_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Timeout
+LayoutTests/fast/dom/HTMLMeterElement/set-meter-properties_t01: RuntimeError
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Timeout
+LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-validity_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/indeterminate-progress-002_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/set-progress-properties_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-script-invalid-url_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/dont-load-unknown-type_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Timeout
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/cellpadding-attribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableSectionElement/rows_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: Timeout
+LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/added-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError
+LayoutTests/fast/dom/Range/getClientRects-character_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-assertion_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/anchor-origin_t01: RuntimeError
+LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError
+LayoutTests/fast/dom/containerNode_t01: Timeout
+LayoutTests/fast/dom/css-cached-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError
+LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError
+LayoutTests/fast/dom/css-selectorText_t01: RuntimeError, Pass
+LayoutTests/fast/dom/css-shorthand-common-value_t01: RuntimeError
+LayoutTests/fast/dom/cssTarget-crash_t01: RuntimeError, Pass
+LayoutTests/fast/dom/custom/attribute-changed-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/created-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/invalid-type-extension-crash_t01: RuntimeError
+LayoutTests/fast/dom/custom/lifecycle-created-createElement-recursion_t01: RuntimeError
+LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: RuntimeError
+LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError
+LayoutTests/fast/dom/dom-parse-serialize-xmldecl_t01: RuntimeError
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError
+LayoutTests/fast/dom/empty-hash-and-search_t01: RuntimeError
+LayoutTests/fast/dom/focus-contenteditable_t01: RuntimeError, Pass
+LayoutTests/fast/dom/gc-image-element-2_t01: Timeout
+LayoutTests/fast/dom/gc-image-element_t01: Timeout
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError
+LayoutTests/fast/dom/image-object_t01: Timeout
+LayoutTests/fast/dom/javascript-backslash_t01: RuntimeError
+LayoutTests/fast/dom/length-attribute-mapping_t01: RuntimeError
+LayoutTests/fast/dom/location-hash_t01: RuntimeError
+LayoutTests/fast/dom/navigator-userAgent_t01: RuntimeError
+LayoutTests/fast/dom/non-styled-element-id-crash_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError
+LayoutTests/fast/dom/remove-body-during-body-replacement_t01: Timeout
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/shadow/access-document-of-detached-stylesheetlist-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-element-includer_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_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/link-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-node-list_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-text-child_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-ul-li_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError
+LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: RuntimeError
+LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError
+LayoutTests/fast/dynamic/checkbox-selection-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Timeout
+LayoutTests/fast/events/clipboard-clearData_t01: Timeout
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Timeout
+LayoutTests/fast/events/event-creation_t01: RuntimeError
+LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError
+LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError
+LayoutTests/fast/events/fire-scroll-event_t01: RuntimeError, Timeout
+LayoutTests/fast/events/init-message-event_t01: RuntimeError
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: RuntimeError, Pass
+LayoutTests/fast/events/invalid-002_t01: RuntimeError
+LayoutTests/fast/events/invalid-003_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-replace-child_t01: RuntimeError
+LayoutTests/fast/events/nested-event-remove-node-crash_t01: Timeout
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: RuntimeError
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError
+LayoutTests/fast/events/scroll-event-phase_t01: Timeout, Pass
+LayoutTests/fast/events/selectstart-on-selectall_t01: RuntimeError
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError
+LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError
+LayoutTests/fast/files/blob-close-read_t01: RuntimeError
+LayoutTests/fast/files/blob-constructor_t01: RuntimeError
+LayoutTests/fast/files/read-blob-as-array-buffer_t01: RuntimeError
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError
+LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-after-reload-crash_t01: RuntimeError
+LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-metadata-after-write_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-unserializable_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-uri-origin_t01: RuntimeError
+LayoutTests/fast/filesystem/op-copy_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-metadata_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-parent_t01: RuntimeError
+LayoutTests/fast/filesystem/op-read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-chars_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-names_t01: RuntimeError
+LayoutTests/fast/filesystem/read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-readonly-file-object_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-temporary_t01: RuntimeError
+LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: RuntimeError
+LayoutTests/fast/forms/autocomplete_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Timeout
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Timeout
+LayoutTests/fast/forms/autofocus-opera-004_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-opera-007_t01: Timeout
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Timeout
+LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError, Pass
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError
+LayoutTests/fast/forms/date/date-interactive-validation-required_t01: RuntimeError, Pass
+LayoutTests/fast/forms/date/date-pseudo-classes_t01: RuntimeError
+LayoutTests/fast/forms/date/input-date-validation-message_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-disabled_t01: RuntimeError
+LayoutTests/fast/forms/focus-style-pending_t01: Timeout, Pass
+LayoutTests/fast/forms/focus_t01: RuntimeError
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError
+LayoutTests/fast/forms/formmethod-attribute-button-html_t01: RuntimeError, Pass
+LayoutTests/fast/forms/formmethod-attribute-input-2_t01: RuntimeError, Pass
+LayoutTests/fast/forms/incremental-dom-property_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-maxlength_t01: RuntimeError
+LayoutTests/fast/forms/input-changing-value_t01: RuntimeError
+LayoutTests/fast/forms/input-file-set-value_t01: RuntimeError
+LayoutTests/fast/forms/input-implicit-length-limit_t01: RuntimeError
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError
+LayoutTests/fast/forms/input-maxlength-unsupported_t01: RuntimeError
+LayoutTests/fast/forms/input-type-change_t01: RuntimeError
+LayoutTests/fast/forms/input-value-sanitization_t01: RuntimeError
+LayoutTests/fast/forms/input-width-height-attributes_t01: RuntimeError
+LayoutTests/fast/forms/listbox-select-all_t01: RuntimeError
+LayoutTests/fast/forms/listbox-selection-2_t01: RuntimeError
+LayoutTests/fast/forms/missing-action_t01: RuntimeError, Pass
+LayoutTests/fast/forms/onchange-change-type_t01: RuntimeError
+LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError
+LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError
+LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError
+LayoutTests/fast/forms/paste-into-textarea_t01: RuntimeError
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError
+LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: Timeout
+LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError
+LayoutTests/fast/forms/selection-direction_t01: RuntimeError
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError
+LayoutTests/fast/forms/shadow-tree-exposure_t01: RuntimeError
+LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute_t01: RuntimeError, Pass
+LayoutTests/fast/forms/submit-form-with-dirname-attribute_t01: RuntimeError, Pass
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError
+LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: RuntimeError
+LayoutTests/fast/forms/textarea-submit-crash_t01: RuntimeError, Pass
+LayoutTests/fast/forms/textarea-trailing-newline_t01: RuntimeError
+LayoutTests/fast/forms/textfield-focus-out_t01: Timeout, Pass
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError
+LayoutTests/fast/html/adjacent-html-context-element_t01: RuntimeError
+LayoutTests/fast/html/article-element_t01: RuntimeError
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-click-controls_t01: RuntimeError
+LayoutTests/fast/html/figure-element_t01: RuntimeError
+LayoutTests/fast/html/header-element_t01: RuntimeError
+LayoutTests/fast/html/hgroup-element_t01: RuntimeError
+LayoutTests/fast/html/hidden-attr_t01: RuntimeError
+LayoutTests/fast/html/imports/import-element-removed-flag_t01: Timeout
+LayoutTests/fast/html/main-element_t01: RuntimeError
+LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError
+LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError
+LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError
+LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/innerHTML/javascript-url_t01: RuntimeError
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-change_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-kept_t01: RuntimeError
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: RuntimeError
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Timeout
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Timeout
+LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError
+LayoutTests/fast/masking/parsing-mask_t01: RuntimeError
+LayoutTests/fast/media/invalid-lengths_t01: RuntimeError
+LayoutTests/fast/media/matchmedium-query-api_t01: RuntimeError
+LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError
+LayoutTests/fast/media/mq-append-delete_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: RuntimeError
+LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError
+LayoutTests/fast/multicol/cssom-view_t01: RuntimeError
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/gap-non-negative_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-gap-between-pages-flipped_t01: RuntimeError
+LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: RuntimeError
+LayoutTests/fast/multicol/inline-getclientrects_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/widows_t01: RuntimeError
+LayoutTests/fast/multicol/zeroColumnCount_t01: RuntimeError
+LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError
+LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError
+LayoutTests/fast/parser/stray-param_t01: RuntimeError
+LayoutTests/fast/parser/strict-img-in-map_t01: RuntimeError
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError
+LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError
+LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError
+LayoutTests/fast/scrolling/scroll-element-into-view_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/parsing/parsing-shape-outside-none_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: Timeout
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Timeout, RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Timeout
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Timeout
+LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-angle_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-length_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-number_t01: RuntimeError
+LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError
+LayoutTests/fast/table/min-width-css-block-table_t01: RuntimeError
+LayoutTests/fast/table/table-size-integer-overflow_t01: RuntimeError
+LayoutTests/fast/table/td-bordercolor-attribute_t01: RuntimeError
+LayoutTests/fast/text/find-kana_t01: RuntimeError
+LayoutTests/fast/text/find-russian_t01: RuntimeError
+LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError
+LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError
+LayoutTests/fast/text/multiglyph-characters_t01: RuntimeError
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError
+LayoutTests/fast/text/window-find_t01: RuntimeError
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError
+LayoutTests/fast/url/anchor_t01: RuntimeError
+LayoutTests/fast/url/file-http-base_t01: RuntimeError
+LayoutTests/fast/url/file_t01: RuntimeError
+LayoutTests/fast/url/host-lowercase-per-scheme_t01: RuntimeError
+LayoutTests/fast/url/idna2003_t01: RuntimeError
+LayoutTests/fast/url/idna2008_t01: RuntimeError
+LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError
+LayoutTests/fast/url/ipv4_t01: RuntimeError
+LayoutTests/fast/url/ipv6_t01: RuntimeError
+LayoutTests/fast/url/mailto_t01: RuntimeError, Pass
+LayoutTests/fast/url/path_t01: RuntimeError
+LayoutTests/fast/url/query_t01: RuntimeError
+LayoutTests/fast/url/relative-win_t01: RuntimeError
+LayoutTests/fast/url/relative_t01: RuntimeError
+LayoutTests/fast/url/segments_t01: RuntimeError
+LayoutTests/fast/url/standard-url_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-text-map-local-to-container_t01: RuntimeError
+LayoutTests/fast/writing-mode/positionForPoint_t01: RuntimeError
+LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError
+LayoutTests/fast/writing-mode/vertical-inline-block-hittest_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError
+LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError
+LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError
+LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError
+LayoutTests/fast/xsl/default-html_t01: RuntimeError
+LibTest/async/Future/asStream_A01_t02: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t01: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A03_t01: RuntimeError, Timeout, Pass
+LibTest/async/Stream/Stream.fromIterable_A03_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A03_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t01: Timeout, Pass
+LibTest/async/StreamController/StreamController.broadcast_A09_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t03: RuntimeError
+LibTest/async/StreamController/addStream_A03_t01: RuntimeError
+LibTest/async/StreamController/stream_A02_t01: Timeout, Pass
+LibTest/async/StreamController/stream_A02_t03: RuntimeError
+LibTest/async/StreamController/stream_A03_t01: Timeout, Pass
+LibTest/async/StreamController/stream_A03_t02: RuntimeError
+LibTest/async/StreamSink/addStream_A01_t02: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: RuntimeError
+LibTest/async/Zone/registerBinaryCallback_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/fold_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/removeWhere_A02_t03: RuntimeError
+LibTest/collection/DoubleLinkedQueue/retainWhere_A02_t02: RuntimeError
+LibTest/collection/HashSet/HashSet_A04_t01: RuntimeError
+LibTest/collection/HashSet/HashSet_class_A01_t01: RuntimeError
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/contains_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/every_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/expand_A01_t01: RuntimeError
+LibTest/collection/IterableMixin/expand_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/fold_A01_t01: RuntimeError
+LibTest/collection/LinkedList/addAll_A01_t02: RuntimeError
+LibTest/collection/LinkedList/join_A01_t01: RuntimeError
+LibTest/collection/LinkedList/toString_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/LinkedListEntry_class_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/list_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A02_t02: RuntimeError
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError
+LibTest/collection/ListQueue/ListQueue.from_A01_t01: RuntimeError
+LibTest/convert/LineSplitter/fuse_A01_t01: RuntimeError
+LibTest/core/AssertionError/AssertionError_A01_t01: RuntimeError
+LibTest/core/AssertionError/message_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/CyclicInitializationError.class_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/variableName_A01_t01: RuntimeError
+LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecond_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/parse_A01_t03: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t01: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t02: RuntimeError
+LibTest/core/Duration/Duration_A01_t01: CompileTimeError
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError
+LibTest/core/Duration/inDays_A01_t01: CompileTimeError
+LibTest/core/Duration/inHours_A01_t01: CompileTimeError
+LibTest/core/Duration/inMicroseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError
+LibTest/core/Error/stackTrace_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t04: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t05: RuntimeError
+LibTest/core/Function/Function_class_A01_t01: RuntimeError
+LibTest/core/IndexError/stackTrace_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError
+LibTest/core/Runes/any_A01_t01: RuntimeError
+LibTest/core/Runes/every_A01_t01: RuntimeError
+LibTest/core/String/padRight_A01_t01: RuntimeError
+LibTest/core/String/replaceFirstMapped_A03_t01: RuntimeError
+LibTest/core/Symbol/Symbol_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t02: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t05: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A02_t03: RuntimeError
+LibTest/core/Uri/Uri.file_A02_t03: RuntimeError
+LibTest/core/Uri/Uri_A06_t03: Timeout, Pass
+LibTest/core/Uri/decodeComponent_A01_t02: Timeout, Pass
+LibTest/core/Uri/encodeQueryComponent_A01_t02: Timeout, Pass
+LibTest/core/Uri/queryParametersAll_A01_t04: RuntimeError
+LibTest/core/Uri/queryParametersAll_A03_t01: RuntimeError
+LibTest/core/UriData/UriData.fromBytes_A01_t03: RuntimeError
+LibTest/core/UriData/charset_A01_t01: RuntimeError
+LibTest/core/UriData/contentText_A01_t01: RuntimeError
+LibTest/core/UriData/parse_A01_t01: RuntimeError
+LibTest/core/double/INFINITY_A01_t04: RuntimeError
+LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A01_t02: CompileTimeError
+LibTest/core/double/operator_GT_A01_t02: CompileTimeError
+LibTest/core/double/operator_LT_A01_t02: CompileTimeError
+LibTest/core/double/operator_addition_A01_t08: Crash
+LibTest/core/double/operator_subtraction_A01_t06: RuntimeError
+LibTest/core/double/operator_subtraction_A01_t09: Crash
+LibTest/core/int/ceil_A01_t01: CompileTimeError
+LibTest/core/int/compareTo_A01_t01: CompileTimeError
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError
+LibTest/core/int/floor_A01_t01: CompileTimeError
+LibTest/core/int/hashCode_A01_t01: CompileTimeError
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError
+LibTest/core/int/isNegative_A01_t01: CompileTimeError
+LibTest/core/int/isOdd_A01_t01: RuntimeError
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A03_t01: CompileTimeError
+LibTest/core/int/operator_left_shift_A01_t01: RuntimeError
+LibTest/core/int/operator_remainder_A01_t03: RuntimeError
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError
+LibTest/core/int/parse_A03_t02: CompileTimeError
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: Timeout
+LibTest/html/Element/blur_A01_t01: Timeout, Pass
+LibTest/html/Element/focus_A01_t01: Timeout, Pass
+LibTest/html/Element/loadEvent_A01_t01: Timeout
+LibTest/html/Element/mouseEnterEvent_A01_t01: RuntimeError, Pass
+LibTest/html/Element/mouseOverEvent_A01_t01: RuntimeError, Pass
+LibTest/html/Element/mouseWheelEvent_A01_t01: Timeout
+LibTest/html/Element/onLoad_A01_t01: Timeout
+LibTest/html/Element/onMouseWheel_A01_t01: Timeout
+LibTest/html/HttpRequest/responseText_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onAbort_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onError_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: Timeout
+LibTest/html/IFrameElement/enteredView_A01_t01: Timeout
+LibTest/html/IFrameElement/focus_A01_t01: Timeout
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Timeout
+LibTest/typed_data/Int16List/shuffle_A01_t01: RuntimeError, Pass
+Utils/tests/Expect/throws_A01_t04: RuntimeError
+WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Timeout
+WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError
+WebPlatformTest/Utils/test/asyncTestTimeout_t01: Timeout
+WebPlatformTest/custom-elements/concepts/type_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A08_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/localName_A01_t01: RuntimeError
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-isEqualNode_t01: Timeout
+WebPlatformTest/dom/nodes/Node-nodeName_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError
+WebPlatformTest/html-imports/link-import_t02: RuntimeError
+WebPlatformTest/html-imports/loading-import_t01: RuntimeError
+WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-newelements_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-type-button_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/mobiles_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: RuntimeError, Pass
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError
+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/extensions-to-event-interface/event-path-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_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-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: RuntimeError
+WebPlatformTest/webstorage/event_constructor_t02: RuntimeError
+WebPlatformTest/webstorage/event_local_key_t01: Timeout
+WebPlatformTest/webstorage/event_local_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_local_url_t01: Timeout
+WebPlatformTest/webstorage/event_session_key_t01: Timeout
+WebPlatformTest/webstorage/event_session_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_session_url_t01: Timeout
+WebPlatformTest/webstorage/storage_local_setitem_quotaexceedederr_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime == ff && $system == windows ]
+LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: RuntimeError
+LayoutTests/fast/svg/getbbox_t01: RuntimeError
+LibTest/html/Window/close_A01_t01: RuntimeError, Pass
+LibTest/math/cos_A01_t01: RuntimeError
+LibTest/typed_data/Float32List/shuffle_A01_t01: RuntimeError, Pass
+
+[ $compiler == dart2js && $runtime == ff && $fast_startup ]
+Language/Expressions/Additive_Expressions/syntax_t01: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError
+Language/Expressions/Constants/depending_on_itself_t03: Crash
+Language/Expressions/Constants/exception_t02/01: CompileTimeError
+Language/Expressions/Constants/integer_size_t03: CompileTimeError
+Language/Expressions/Constants/integer_size_t04: CompileTimeError
+Language/Expressions/Function_Invocation/async_generator_invokation_t08: Timeout
+Language/Expressions/Function_Invocation/async_generator_invokation_t10: Timeout
+Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
+Language/Expressions/If_null_Expressions/static_type_t01: RuntimeError
+Language/Expressions/Lists/identical_t02: RuntimeError
+Language/Expressions/Maps/identical_t02: RuntimeError
+Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
+Language/Expressions/Numbers/syntax_t06: CompileTimeError
+Language/Expressions/Numbers/syntax_t09: CompileTimeError
+Language/Expressions/Object_Identity/double_t02: RuntimeError
+Language/Expressions/Shift/integer_t02: CompileTimeError
+Language/Expressions/Type_Cast/syntax_t01: RuntimeError
+Language/Expressions/Unary_Expressions/variable_negative_t03: RuntimeError
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t01: CompileTimeError
+Language/Metadata/before_ctor_t02: RuntimeError
+Language/Metadata/before_function_t01: RuntimeError
+Language/Metadata/before_function_t02: RuntimeError
+Language/Metadata/before_function_t03: RuntimeError
+Language/Metadata/before_function_t04: RuntimeError
+Language/Metadata/before_function_t07: RuntimeError
+Language/Metadata/before_import_t01: RuntimeError
+Language/Metadata/before_param_t03: RuntimeError
+Language/Metadata/before_param_t05: RuntimeError
+Language/Metadata/before_param_t07: RuntimeError
+Language/Metadata/before_param_t09: RuntimeError
+Language/Metadata/before_variable_t02: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
+Language/Overview/Privacy/private_and_public_t18: RuntimeError
+Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError
+Language/Statements/Assert/execution_t09: RuntimeError
+Language/Types/Function_Types/call_t01: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t03: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t11: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t04: RuntimeError
+Language/Types/Interface_Types/subtype_t06: RuntimeError
+Language/Types/Interface_Types/subtype_t21: RuntimeError
+Language/Types/Interface_Types/subtype_t23: RuntimeError
+Language/Variables/constant_variable_t09: RuntimeError
+LanguageFeatures/Instantiate-to-bound/check_types/typedef_param_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_local_variable_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_return_value_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_return_value_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LayoutTests/fast/animation/request-animation-frame-prefix_t01: Timeout, Pass
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError
+LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError
+LayoutTests/fast/borders/border-width-percent_t01: RuntimeError
+LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError
+LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError
+LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: Timeout
+LayoutTests/fast/canvas/canvas-blend-solid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillRect-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillText-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-font-ex-units-crash_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-imageSmoothingEnabled-repaint_t01: Timeout, Pass
+LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-stroke-zeroSizeGradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-toDataURL-crash_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-valid-image_t01: Timeout
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError
+LayoutTests/fast/canvas/gradient-addColorStop-with-invalid-color_t01: RuntimeError
+LayoutTests/fast/canvas/rgba-parsing_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/framebuffer-bindings-unaffected-on-resize_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: Timeout
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-vertex-array-object_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Timeout
+LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: Timeout
+LayoutTests/fast/canvas/webgl/webgl-layer-update_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError
+LayoutTests/fast/css-generated-content/bug91547_t01: RuntimeError
+LayoutTests/fast/css-generated-content/details-before-after-content_t01: RuntimeError
+LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-animation_t01: RuntimeError, Pass
+LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Timeout
+LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Timeout
+LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError
+LayoutTests/fast/css/background-serialize_t01: RuntimeError
+LayoutTests/fast/css/border-image-null-image-crash_t01: RuntimeError
+LayoutTests/fast/css/border-image-style-length_t01: RuntimeError
+LayoutTests/fast/css/border-shorthand-initialize-longhands_t01: RuntimeError
+LayoutTests/fast/css/border-start-end_t01: RuntimeError
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError
+LayoutTests/fast/css/content/content-none_t01: RuntimeError
+LayoutTests/fast/css/counters/complex-before_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing-image-set_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing_t01: RuntimeError
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: RuntimeError
+LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError
+LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError
+LayoutTests/fast/css/font-face-insert-link_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError
+LayoutTests/fast/css/font-property-priority_t01: RuntimeError
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-border-style-shorthand_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-borderRadius-2_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-length-unit_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zIndex-auto_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-column-rule_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-webkit-margin-collapse_t01: RuntimeError
+LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError
+LayoutTests/fast/css/image-set-setting_t01: RuntimeError
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError
+LayoutTests/fast/css/insertRule-media_t01: RuntimeError
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError
+LayoutTests/fast/css/invalidation/dynamic-selector-list-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError
+LayoutTests/fast/css/modify-ua-rules-from-javascript_t01: RuntimeError
+LayoutTests/fast/css/nested-at-rules_t01: RuntimeError
+LayoutTests/fast/css/overflow-property_t01: RuntimeError
+LayoutTests/fast/css/padding-start-end_t01: RuntimeError
+LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError
+LayoutTests/fast/css/percent-min-width-img-src-change_t01: Timeout
+LayoutTests/fast/css/pseudo-required-optional-004_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-005_t01: RuntimeError
+LayoutTests/fast/css/pseudo-required-optional-unapplied_t01: RuntimeError
+LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Timeout
+LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Timeout
+LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError
+LayoutTests/fast/css/sheet-collection-link_t01: RuntimeError
+LayoutTests/fast/css/shorthand-setProperty-important_t01: RuntimeError
+LayoutTests/fast/css/space-before-charset-external_t01: RuntimeError
+LayoutTests/fast/css/style-element-process-crash_t01: Timeout
+LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-link_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError
+LayoutTests/fast/css/text-align-webkit-match-parent_t01: RuntimeError
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError
+LayoutTests/fast/css/webkit-color-adjust_t01: RuntimeError
+LayoutTests/fast/css/word-break-user-modify-allowed-values_t01: RuntimeError
+LayoutTests/fast/css/zoom-property-parsing_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: RuntimeError
+LayoutTests/fast/dom/Document/createElement-valid-names_t01: RuntimeError
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError
+LayoutTests/fast/dom/Element/client-rect-list-argument_t01: RuntimeError
+LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError
+LayoutTests/fast/dom/Element/id-in-insert-hr_t01: RuntimeError
+LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: RuntimeError
+LayoutTests/fast/dom/Element/scrollWidth_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-port_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError
+LayoutTests/fast/dom/HTMLBaseElement/href-attribute-resolves-with-respect-to-document_t01: RuntimeError
+LayoutTests/fast/dom/HTMLButtonElement/value/getset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Timeout
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-before-text-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-child-node_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text-form-control_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-change-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-children_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto-remove-add-children_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-dir-auto_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-empty-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-false-string_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-ancestor-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-ancestor-missing_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/attr-missing-parent-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-false_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-inherit-parent-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-invalid-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/set-true_t01: RuntimeError
+LayoutTests/fast/dom/HTMLElement/translate_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: Timeout
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/click-label_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-beforeload-recursive_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Timeout
+LayoutTests/fast/dom/HTMLMeterElement/set-meter-properties_t01: RuntimeError
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Timeout
+LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError
+LayoutTests/fast/dom/HTMLOutputElement/htmloutputelement-validity_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/indeterminate-progress-002_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/set-progress-properties_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-script-invalid-url_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/dont-load-unknown-type_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Timeout
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/cellpadding-attribute_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableSectionElement/rows_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: Timeout
+LayoutTests/fast/dom/HTMLTemplateElement/xhtml-parsing-and-serialization_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/added-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/removed-out-of-order_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError
+LayoutTests/fast/dom/Range/getClientRects-character_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-assertion_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/anchor-origin_t01: RuntimeError
+LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError
+LayoutTests/fast/dom/containerNode_t01: Timeout
+LayoutTests/fast/dom/css-cached-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-delete-doc_t01: RuntimeError
+LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError
+LayoutTests/fast/dom/css-selectorText_t01: RuntimeError
+LayoutTests/fast/dom/css-shorthand-common-value_t01: RuntimeError
+LayoutTests/fast/dom/cssTarget-crash_t01: RuntimeError
+LayoutTests/fast/dom/custom/attribute-changed-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/created-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/invalid-type-extension-crash_t01: RuntimeError
+LayoutTests/fast/dom/custom/lifecycle-created-createElement-recursion_t01: RuntimeError
+LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: RuntimeError
+LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError
+LayoutTests/fast/dom/dom-parse-serialize-xmldecl_t01: RuntimeError
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError
+LayoutTests/fast/dom/empty-hash-and-search_t01: RuntimeError
+LayoutTests/fast/dom/gc-image-element-2_t01: Timeout
+LayoutTests/fast/dom/gc-image-element_t01: Timeout
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError
+LayoutTests/fast/dom/image-object_t01: Timeout
+LayoutTests/fast/dom/javascript-backslash_t01: RuntimeError
+LayoutTests/fast/dom/length-attribute-mapping_t01: RuntimeError
+LayoutTests/fast/dom/location-hash_t01: RuntimeError
+LayoutTests/fast/dom/navigator-userAgent_t01: RuntimeError
+LayoutTests/fast/dom/non-styled-element-id-crash_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError
+LayoutTests/fast/dom/remove-body-during-body-replacement_t01: Timeout
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/shadow/access-document-of-detached-stylesheetlist-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-element-includer_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_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/link-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-node-list_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-text-child_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-ul-li_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError
+LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: RuntimeError
+LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError
+LayoutTests/fast/dynamic/checkbox-selection-crash_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError
+LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Timeout
+LayoutTests/fast/events/clipboard-clearData_t01: Timeout
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Timeout
+LayoutTests/fast/events/event-creation_t01: RuntimeError
+LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError
+LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError
+LayoutTests/fast/events/fire-scroll-event_t01: RuntimeError
+LayoutTests/fast/events/init-message-event_t01: RuntimeError
+LayoutTests/fast/events/input-focus-no-duplicate-events_t01: RuntimeError, Pass
+LayoutTests/fast/events/invalid-002_t01: RuntimeError
+LayoutTests/fast/events/invalid-003_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-replace-child_t01: RuntimeError
+LayoutTests/fast/events/nested-event-remove-node-crash_t01: Timeout
+LayoutTests/fast/events/overflowchanged-event-raf-timing_t01: RuntimeError
+LayoutTests/fast/events/scoped/editing-commands_t01: RuntimeError
+LayoutTests/fast/events/selectstart-on-selectall_t01: RuntimeError
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError, Pass
+LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError
+LayoutTests/fast/files/blob-close-read_t01: RuntimeError
+LayoutTests/fast/files/blob-constructor_t01: RuntimeError
+LayoutTests/fast/files/read-blob-as-array-buffer_t01: RuntimeError
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError
+LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-after-reload-crash_t01: RuntimeError
+LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-metadata-after-write_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-unserializable_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-uri-origin_t01: RuntimeError
+LayoutTests/fast/filesystem/op-copy_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-metadata_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-parent_t01: RuntimeError
+LayoutTests/fast/filesystem/op-read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-chars_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-names_t01: RuntimeError
+LayoutTests/fast/filesystem/read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-readonly-file-object_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-temporary_t01: RuntimeError
+LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-tooLong-textarea_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-email_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: RuntimeError
+LayoutTests/fast/forms/autocomplete_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-focus-only-once_t01: Timeout
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Timeout
+LayoutTests/fast/forms/autofocus-opera-004_t01: RuntimeError
+LayoutTests/fast/forms/autofocus-opera-007_t01: Timeout
+LayoutTests/fast/forms/autofocus-readonly-attribute_t01: Timeout
+LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError
+LayoutTests/fast/forms/date/date-interactive-validation-required_t01: RuntimeError, Pass
+LayoutTests/fast/forms/date/date-pseudo-classes_t01: RuntimeError
+LayoutTests/fast/forms/date/input-date-validation-message_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-disabled_t01: RuntimeError
+LayoutTests/fast/forms/focus-style-pending_t01: Timeout
+LayoutTests/fast/forms/focus_t01: RuntimeError
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError
+LayoutTests/fast/forms/formmethod-attribute-input-2_t01: RuntimeError, Pass
+LayoutTests/fast/forms/formmethod-attribute-input-html_t01: RuntimeError, Pass
+LayoutTests/fast/forms/incremental-dom-property_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-maxlength_t01: RuntimeError
+LayoutTests/fast/forms/input-changing-value_t01: RuntimeError
+LayoutTests/fast/forms/input-file-set-value_t01: RuntimeError
+LayoutTests/fast/forms/input-implicit-length-limit_t01: RuntimeError
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError
+LayoutTests/fast/forms/input-maxlength-unsupported_t01: RuntimeError
+LayoutTests/fast/forms/input-type-change_t01: RuntimeError
+LayoutTests/fast/forms/input-value-sanitization_t01: RuntimeError
+LayoutTests/fast/forms/input-width-height-attributes_t01: RuntimeError
+LayoutTests/fast/forms/listbox-select-all_t01: RuntimeError
+LayoutTests/fast/forms/listbox-selection-2_t01: RuntimeError
+LayoutTests/fast/forms/missing-action_t01: RuntimeError, Pass
+LayoutTests/fast/forms/onchange-change-type_t01: RuntimeError
+LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError
+LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError
+LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError
+LayoutTests/fast/forms/paste-into-textarea_t01: RuntimeError
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError
+LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: Timeout
+LayoutTests/fast/forms/select-clientheight-large-size_t01: RuntimeError
+LayoutTests/fast/forms/selection-direction_t01: RuntimeError
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError
+LayoutTests/fast/forms/shadow-tree-exposure_t01: RuntimeError
+LayoutTests/fast/forms/submit-form-with-dirname-attribute-with-ancestor-dir-attribute_t01: RuntimeError, Pass
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError
+LayoutTests/fast/forms/textarea-set-defaultvalue-after-value_t01: RuntimeError
+LayoutTests/fast/forms/textarea-trailing-newline_t01: RuntimeError
+LayoutTests/fast/forms/textfield-focus-out_t01: Timeout
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError
+LayoutTests/fast/html/adjacent-html-context-element_t01: RuntimeError
+LayoutTests/fast/html/article-element_t01: RuntimeError
+LayoutTests/fast/html/details-add-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-1_t01: RuntimeError
+LayoutTests/fast/html/details-add-details-child-2_t01: RuntimeError
+LayoutTests/fast/html/details-click-controls_t01: RuntimeError
+LayoutTests/fast/html/figure-element_t01: RuntimeError
+LayoutTests/fast/html/header-element_t01: RuntimeError
+LayoutTests/fast/html/hgroup-element_t01: RuntimeError
+LayoutTests/fast/html/hidden-attr_t01: RuntimeError
+LayoutTests/fast/html/imports/import-element-removed-flag_t01: Timeout
+LayoutTests/fast/html/main-element_t01: RuntimeError
+LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError
+LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError
+LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError
+LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/innerHTML/javascript-url_t01: RuntimeError
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-change_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-kept_t01: RuntimeError
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: RuntimeError
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Timeout
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Timeout
+LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError
+LayoutTests/fast/masking/parsing-mask_t01: RuntimeError
+LayoutTests/fast/media/invalid-lengths_t01: RuntimeError
+LayoutTests/fast/media/matchmedium-query-api_t01: RuntimeError
+LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError
+LayoutTests/fast/media/mq-append-delete_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: RuntimeError
+LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError
+LayoutTests/fast/multicol/cssom-view_t01: RuntimeError
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/gap-non-negative_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-gap-between-pages-flipped_t01: RuntimeError
+LayoutTests/fast/multicol/image-inside-nested-blocks-with-border_t01: RuntimeError
+LayoutTests/fast/multicol/inline-getclientrects_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/widows_t01: RuntimeError
+LayoutTests/fast/multicol/zeroColumnCount_t01: RuntimeError
+LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError
+LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError
+LayoutTests/fast/parser/stray-param_t01: RuntimeError
+LayoutTests/fast/parser/strict-img-in-map_t01: RuntimeError
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError
+LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError
+LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError
+LayoutTests/fast/scrolling/scroll-element-into-view_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-outside-none_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: Timeout, RuntimeError, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: Timeout
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Timeout
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Timeout
+LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-angle_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-length_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-number_t01: RuntimeError
+LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError
+LayoutTests/fast/table/min-width-css-block-table_t01: RuntimeError
+LayoutTests/fast/table/table-size-integer-overflow_t01: RuntimeError
+LayoutTests/fast/table/td-bordercolor-attribute_t01: RuntimeError
+LayoutTests/fast/text/find-kana_t01: RuntimeError
+LayoutTests/fast/text/find-russian_t01: RuntimeError
+LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError
+LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError
+LayoutTests/fast/text/multiglyph-characters_t01: RuntimeError
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError
+LayoutTests/fast/text/window-find_t01: RuntimeError
+LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError
+LayoutTests/fast/url/anchor_t01: RuntimeError
+LayoutTests/fast/url/file-http-base_t01: RuntimeError
+LayoutTests/fast/url/file_t01: RuntimeError
+LayoutTests/fast/url/host-lowercase-per-scheme_t01: RuntimeError
+LayoutTests/fast/url/idna2003_t01: RuntimeError
+LayoutTests/fast/url/idna2008_t01: RuntimeError
+LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError
+LayoutTests/fast/url/ipv4_t01: RuntimeError
+LayoutTests/fast/url/ipv6_t01: RuntimeError
+LayoutTests/fast/url/mailto_t01: RuntimeError
+LayoutTests/fast/url/path_t01: RuntimeError
+LayoutTests/fast/url/query_t01: RuntimeError
+LayoutTests/fast/url/relative-win_t01: RuntimeError
+LayoutTests/fast/url/relative_t01: RuntimeError
+LayoutTests/fast/url/segments_t01: RuntimeError
+LayoutTests/fast/url/standard-url_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-hit-test-overflow_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-text-map-local-to-container_t01: RuntimeError
+LayoutTests/fast/writing-mode/positionForPoint_t01: RuntimeError
+LayoutTests/fast/writing-mode/table-hit-test_t01: RuntimeError
+LayoutTests/fast/writing-mode/vertical-inline-block-hittest_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError
+LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError
+LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError
+LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError
+LayoutTests/fast/xsl/default-html_t01: RuntimeError
+LibTest/async/Future/Future.delayed_A01_t02: RuntimeError, Pass
+LibTest/async/Future/asStream_A01_t02: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t01: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A03_t01: Timeout, Pass
+LibTest/async/Stream/Stream.fromIterable_A03_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A03_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t01: Timeout, Pass
+LibTest/async/StreamController/StreamController.broadcast_A09_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t03: RuntimeError
+LibTest/async/StreamController/addStream_A03_t01: RuntimeError
+LibTest/async/StreamController/stream_A02_t01: Timeout, Pass
+LibTest/async/StreamController/stream_A02_t03: RuntimeError
+LibTest/async/StreamController/stream_A03_t01: Timeout, Pass
+LibTest/async/StreamController/stream_A03_t02: RuntimeError
+LibTest/async/StreamSink/addStream_A01_t02: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: RuntimeError
+LibTest/async/Zone/registerBinaryCallback_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/fold_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/removeWhere_A02_t03: RuntimeError
+LibTest/collection/DoubleLinkedQueue/retainWhere_A02_t02: RuntimeError
+LibTest/collection/HashSet/HashSet_A04_t01: RuntimeError
+LibTest/collection/HashSet/HashSet_class_A01_t01: RuntimeError
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/contains_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/every_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/expand_A01_t01: RuntimeError
+LibTest/collection/IterableMixin/expand_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/fold_A01_t01: RuntimeError
+LibTest/collection/LinkedList/addAll_A01_t02: RuntimeError
+LibTest/collection/LinkedList/join_A01_t01: RuntimeError
+LibTest/collection/LinkedList/toString_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/LinkedListEntry_class_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/list_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A02_t02: RuntimeError
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError
+LibTest/collection/ListQueue/ListQueue.from_A01_t01: RuntimeError
+LibTest/convert/LineSplitter/fuse_A01_t01: RuntimeError
+LibTest/core/AssertionError/AssertionError_A01_t01: RuntimeError
+LibTest/core/AssertionError/message_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/CyclicInitializationError.class_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/variableName_A01_t01: RuntimeError
+LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecond_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/parse_A01_t03: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t01: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t02: RuntimeError
+LibTest/core/Duration/Duration_A01_t01: CompileTimeError
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError
+LibTest/core/Duration/inDays_A01_t01: CompileTimeError
+LibTest/core/Duration/inHours_A01_t01: CompileTimeError
+LibTest/core/Duration/inMicroseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError
+LibTest/core/Error/stackTrace_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t04: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t05: RuntimeError
+LibTest/core/Function/Function_class_A01_t01: RuntimeError
+LibTest/core/IndexError/stackTrace_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError
+LibTest/core/Runes/any_A01_t01: RuntimeError
+LibTest/core/Runes/every_A01_t01: RuntimeError
+LibTest/core/String/padRight_A01_t01: RuntimeError
+LibTest/core/String/replaceFirstMapped_A03_t01: RuntimeError
+LibTest/core/Symbol/Symbol_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t02: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t05: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A02_t03: RuntimeError
+LibTest/core/Uri/Uri.file_A02_t03: RuntimeError
+LibTest/core/Uri/decodeComponent_A01_t02: Timeout, Pass
+LibTest/core/Uri/encodeQueryComponent_A01_t02: Timeout
+LibTest/core/Uri/queryParametersAll_A01_t04: RuntimeError
+LibTest/core/Uri/queryParametersAll_A03_t01: RuntimeError
+LibTest/core/UriData/UriData.fromBytes_A01_t03: RuntimeError
+LibTest/core/UriData/charset_A01_t01: RuntimeError
+LibTest/core/UriData/contentText_A01_t01: RuntimeError
+LibTest/core/UriData/parse_A01_t01: RuntimeError
+LibTest/core/double/INFINITY_A01_t04: RuntimeError
+LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A01_t02: CompileTimeError
+LibTest/core/double/operator_GT_A01_t02: CompileTimeError
+LibTest/core/double/operator_LT_A01_t02: CompileTimeError
+LibTest/core/double/operator_addition_A01_t08: Crash
+LibTest/core/double/operator_subtraction_A01_t06: RuntimeError
+LibTest/core/double/operator_subtraction_A01_t09: Crash
+LibTest/core/int/ceil_A01_t01: CompileTimeError
+LibTest/core/int/compareTo_A01_t01: CompileTimeError
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError
+LibTest/core/int/floor_A01_t01: CompileTimeError
+LibTest/core/int/hashCode_A01_t01: CompileTimeError
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError
+LibTest/core/int/isNegative_A01_t01: CompileTimeError
+LibTest/core/int/isOdd_A01_t01: RuntimeError
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A03_t01: CompileTimeError
+LibTest/core/int/operator_left_shift_A01_t01: RuntimeError
+LibTest/core/int/operator_remainder_A01_t03: RuntimeError
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError
+LibTest/core/int/parse_A03_t02: CompileTimeError
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: Timeout
+LibTest/html/Element/blur_A01_t01: Timeout
+LibTest/html/Element/focus_A01_t01: Timeout
+LibTest/html/Element/loadEvent_A01_t01: Timeout
+LibTest/html/Element/mouseEnterEvent_A01_t01: RuntimeError
+LibTest/html/Element/mouseWheelEvent_A01_t01: Timeout
+LibTest/html/Element/onLoad_A01_t01: Timeout
+LibTest/html/Element/onMouseWheel_A01_t01: Timeout
+LibTest/html/HttpRequest/responseText_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onAbort_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onError_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: Timeout
+LibTest/html/IFrameElement/enteredView_A01_t01: Timeout
+LibTest/html/IFrameElement/focus_A01_t01: Timeout
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Timeout
+Utils/tests/Expect/throws_A01_t04: RuntimeError
+WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Timeout
+WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError
+WebPlatformTest/Utils/test/asyncTestTimeout_t01: Timeout
+WebPlatformTest/custom-elements/concepts/type_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A08_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/localName_A01_t01: RuntimeError
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-isEqualNode_t01: Timeout
+WebPlatformTest/dom/nodes/Node-nodeName_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError
+WebPlatformTest/html-imports/link-import_t02: RuntimeError
+WebPlatformTest/html-imports/loading-import_t01: RuntimeError
+WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/node-document-changes_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-newelements_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setSelectionRange_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-type-button_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/mobiles_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError
+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/extensions-to-event-interface/event-path-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_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-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: RuntimeError
+WebPlatformTest/webstorage/event_constructor_t02: RuntimeError
+WebPlatformTest/webstorage/event_local_key_t01: Timeout
+WebPlatformTest/webstorage/event_local_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_local_url_t01: Timeout
+WebPlatformTest/webstorage/event_session_key_t01: Timeout
+WebPlatformTest/webstorage/event_session_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_session_url_t01: Timeout
+WebPlatformTest/webstorage/storage_local_setitem_quotaexceedederr_t01: RuntimeError
+
+[ $compiler == dart2js && $runtime != ff && $system != macos && !$fast_startup ]
+LayoutTests/fast/canvas/webgl/tex-input-validation_t01: RuntimeError
+LayoutTests/fast/dom/vertical-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: RuntimeError
+
+[ $compiler == dart2js && $runtime != ff && !$fast_startup ]
+LayoutTests/fast/css/cssText-shorthand_t01: RuntimeError
+LayoutTests/fast/dom/DOMException/XPathException_t01: RuntimeError
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: RuntimeError
+LayoutTests/fast/table/css-table-max-height_t01: RuntimeError
+LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-right-edge_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: RuntimeError
+LayoutTests/fast/table/margins-perpendicular-containing-block_t01: RuntimeError
+LayoutTests/fast/table/min-max-width-preferred-size_t01: RuntimeError
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: RuntimeError
+LayoutTests/fast/table/table-width-exceeding-max-width_t01: RuntimeError
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError
+LayoutTests/fast/text/find-spaces_t01: RuntimeError
+LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError
+LayoutTests/fast/text/international/combining-marks-position_t01: RuntimeError, Pass
+LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError
+LayoutTests/fast/transforms/hit-test-large-scale_t01: RuntimeError
+LibTest/math/cos_A01_t01: RuntimeError
+WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: RuntimeError
+
+[ $compiler == dart2js && $runtime == safari ]
+Language/Expressions/Additive_Expressions/syntax_t01: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t04: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t06: RuntimeError
+Language/Expressions/Await_Expressions/evaluation_throws_t07: RuntimeError
+Language/Expressions/Constants/depending_on_itself_t03: Crash
+Language/Expressions/Constants/exception_t02/01: CompileTimeError
+Language/Expressions/Constants/integer_size_t03: CompileTimeError
+Language/Expressions/Constants/integer_size_t04: CompileTimeError
+Language/Expressions/Function_Invocation/async_generator_invokation_t08: Timeout
+Language/Expressions/Function_Invocation/async_generator_invokation_t10: Timeout
+Language/Expressions/Identifier_Reference/evaluation_variable_or_parameter_t02: RuntimeError
+Language/Expressions/If_null_Expressions/static_type_t01: RuntimeError
+Language/Expressions/Lists/identical_t02: RuntimeError
+Language/Expressions/Maps/identical_t02: RuntimeError
+Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
+Language/Expressions/Numbers/syntax_t06: CompileTimeError
+Language/Expressions/Numbers/syntax_t09: CompileTimeError
+Language/Expressions/Object_Identity/double_t02: RuntimeError
+Language/Expressions/Shift/integer_t02: CompileTimeError
+Language/Expressions/Type_Cast/syntax_t01: RuntimeError
+Language/Expressions/Unary_Expressions/variable_negative_t03: RuntimeError
+Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
+Language/Libraries_and_Scripts/top_level_syntax_t01: CompileTimeError
+Language/Metadata/before_ctor_t02: RuntimeError
+Language/Metadata/before_function_t01: RuntimeError
+Language/Metadata/before_function_t02: RuntimeError
+Language/Metadata/before_function_t03: RuntimeError
+Language/Metadata/before_function_t04: RuntimeError
+Language/Metadata/before_function_t07: RuntimeError
+Language/Metadata/before_import_t01: RuntimeError
+Language/Metadata/before_param_t03: RuntimeError
+Language/Metadata/before_param_t05: RuntimeError
+Language/Metadata/before_param_t07: RuntimeError
+Language/Metadata/before_param_t09: RuntimeError
+Language/Metadata/before_variable_t02: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t23: RuntimeError
+Language/Mixins/Mixin_Application/syntax_t25: RuntimeError
+Language/Overview/Privacy/private_and_public_t18: RuntimeError
+Language/Reference/Operator_Precedence/precedence_15_unary_prefix_t08: RuntimeError
+Language/Statements/Assert/execution_t09: RuntimeError
+Language/Types/Function_Types/call_t01: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t03: RuntimeError
+Language/Types/Function_Types/subtype_named_args_t11: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t01: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t02: RuntimeError
+Language/Types/Function_Types/subtype_optional_args_t04: RuntimeError
+Language/Types/Interface_Types/subtype_t06: RuntimeError
+Language/Types/Interface_Types/subtype_t21: RuntimeError
+Language/Types/Interface_Types/subtype_t23: RuntimeError
+Language/Variables/constant_variable_t09: RuntimeError
+LanguageFeatures/Instantiate-to-bound/check_types/typedef_param_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_local_variable_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/interface_compositionality_return_value_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_arguments_binding_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A51_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_class_member_fail_A53_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_global_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A51_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A52_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_local_variable_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/named_function_types_fail_return_value_fail_A53_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A31_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_arguments_binding_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A31_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t02: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_class_member_fail_A32_t03: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A31_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_local_variable_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/dynamic/generated/positional_function_types_fail_return_value_fail_A32_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_arguments_binding_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t01: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t02: RuntimeError
+LanguageFeatures/Subtyping/static/generated/interface_compositionality_class_member_A02_t03: RuntimeError
+LayoutTests/fast/backgrounds/background-position-parsing-2_t01: RuntimeError
+LayoutTests/fast/backgrounds/background-shorthand-with-backgroundSize-style_t01: RuntimeError
+LayoutTests/fast/backgrounds/repeat/parsing-background-repeat_t01: RuntimeError
+LayoutTests/fast/borders/border-image-width-numbers-computed-style_t01: RuntimeError
+LayoutTests/fast/canvas/2d.composite.globalAlpha.fillPath_t01: RuntimeError
+LayoutTests/fast/canvas/2d.fillText.gradient_t01: RuntimeError
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.gradient_t01: Timeout
+LayoutTests/fast/canvas/2d.text.draw.fill.maxWidth.negative_t01: RuntimeError
+LayoutTests/fast/canvas/DrawImageSinglePixelStretch_t01: Timeout
+LayoutTests/fast/canvas/canvas-blend-solid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-color-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-global-alpha_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-gradient-over-pattern_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-color_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-image-over-gradient_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-pattern-over-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-text_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-blending-transforms_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-canvas_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-composite-stroke-alpha_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-composite-text-alpha_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-drawImage-scaled-copy-to-self_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-fillRect_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-fillStyle-no-quirks-parsing_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-font-consistency_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-invalid_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-getImageData-rounding_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-googol-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lose-restore-max-int-size_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-modify-emptyPath_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-putImageData_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-quadratic-same-endpoint_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-scale-shadowBlur_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-state-intact-after-putImageData_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokePath-gradient-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokePath-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/drawImage-with-broken-image_t01: RuntimeError
+LayoutTests/fast/canvas/drawImage-with-valid-image_t01: Timeout
+LayoutTests/fast/canvas/getPutImageDataPairTest_t01: RuntimeError
+LayoutTests/fast/canvas/set-colors_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/WebGLContextEvent_t01: Timeout, Pass
+LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/copy-tex-image-and-sub-image-2d_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/draw-elements-out-of-bounds_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/get-active-test_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-object-get-calls_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/gl-teximage_t01: Timeout
+LayoutTests/fast/canvas/webgl/glsl-conformance_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/incorrect-context-object-behaviour_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-copies-indices_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/index-validation-with-resized-buffer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/oes-element-index-uint_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-image_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgb565_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba4444_t01: Timeout
+LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video-rgba5551_t01: Timeout
+LayoutTests/fast/canvas/webgl/texImageTest_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/texture-active-bind_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-color-profile_t01: Timeout
+LayoutTests/fast/canvas/webgl/texture-complete_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/texture-transparent-pixels-initialized_t01: Timeout
+LayoutTests/fast/canvas/webgl/viewport-unchanged-upon-resize_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/webgl-specific_t01: RuntimeError
+LayoutTests/fast/css-generated-content/bug91547_t01: RuntimeError
+LayoutTests/fast/css-generated-content/malformed-url_t01: RuntimeError
+LayoutTests/fast/css-generated-content/pseudo-element-events_t01: Timeout
+LayoutTests/fast/css-generated-content/pseudo-transition-event_t01: Timeout
+LayoutTests/fast/css-grid-layout/breadth-size-resolution-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/calc-resolution-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-columns_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/flex-content-resolution-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-auto-flow-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-border-padding-grid-item_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-element-padding-margin_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-area-get-set_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-bad-named-area-auto-placement_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-change-order-auto-flow_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-horiz-bt_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows-vert-rl_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-auto-columns-rows_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-margin-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/grid-item-order-auto-flow-resolution_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/justify-self-cell_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/minmax-fixed-logical-height-only_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-grid-item-in-percent-grid-track_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/percent-padding-margin-resolution-grid-item-update_t01: RuntimeError
+LayoutTests/fast/css-grid-layout/place-cell-by-index_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-blocks_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-column-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-flex-items_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/intrinsic-sized-replaced-absolutes_t01: RuntimeError
+LayoutTests/fast/css-intrinsic-dimensions/width-shrinks-avoid-floats_t01: RuntimeError
+LayoutTests/fast/css/MarqueeLayoutTest_t01: RuntimeError
+LayoutTests/fast/css/aspect-ratio-inheritance_t01: RuntimeError
+LayoutTests/fast/css/auto-min-size_t01: RuntimeError
+LayoutTests/fast/css/background-serialize_t01: RuntimeError
+LayoutTests/fast/css/border-image-style-length_t01: RuntimeError
+LayoutTests/fast/css/box-sizing-border-box-dynamic-padding-border-update_t01: RuntimeError
+LayoutTests/fast/css/content/content-none_t01: RuntimeError
+LayoutTests/fast/css/content/content-quotes-05_t01: RuntimeError
+LayoutTests/fast/css/cursor-parsing-image-set_t01: RuntimeError
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: RuntimeError
+LayoutTests/fast/css/device-aspect-ratio_t01: RuntimeError
+LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError
+LayoutTests/fast/css/dynamic-class-pseudo-elements_t01: RuntimeError
+LayoutTests/fast/css/fixed-width-intrinsic-width-excludes-scrollbars_t01: RuntimeError
+LayoutTests/fast/css/font-face-cache-bug_t01: RuntimeError
+LayoutTests/fast/css/font-face-insert-link_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-load_t01: Timeout
+LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: Timeout
+LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError
+LayoutTests/fast/css/fontface-properties_t01: RuntimeError
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError
+LayoutTests/fast/css/getComputedStyle/counterIncrement-without-counter_t01: RuntimeError, Pass
+LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError, Pass
+LayoutTests/fast/css/getComputedStyle/getComputedStyle-zoom-and-background-size_t01: RuntimeError, Pass
+LayoutTests/fast/css/html-attr-case-sensitivity_t01: RuntimeError
+LayoutTests/fast/css/image-set-setting_t01: RuntimeError
+LayoutTests/fast/css/inherited-properties-rare-text_t01: RuntimeError
+LayoutTests/fast/css/invalid-predefined-color_t01: RuntimeError
+LayoutTests/fast/css/invalidation/targeted-class-host-pseudo_t01: RuntimeError
+LayoutTests/fast/css/invalidation/toggle-style-inside-shadow-root_t01: RuntimeError
+LayoutTests/fast/css/link-alternate-stylesheet-1_t01: RuntimeError
+LayoutTests/fast/css/media-query-recovery_t01: RuntimeError
+LayoutTests/fast/css/parsing-css-nth-child_t01: RuntimeError
+LayoutTests/fast/css/parsing-page-rule_t01: RuntimeError
+LayoutTests/fast/css/parsing-unexpected-eof_t01: RuntimeError
+LayoutTests/fast/css/percent-min-width-img-src-change_t01: Timeout
+LayoutTests/fast/css/pseudo-target-indirect-sibling-001_t01: Timeout
+LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Timeout
+LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-004_t01: RuntimeError
+LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError
+LayoutTests/fast/css/sheet-collection-link_t01: RuntimeError
+LayoutTests/fast/css/space-before-charset-external_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-scoping-nodes-different-order_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-shadow-crash_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-dom-operation_t01: RuntimeError
+LayoutTests/fast/css/style-scoped/style-scoped-with-important-rule_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-link_t01: RuntimeError
+LayoutTests/fast/css/stylesheet-enable-first-alternate-on-load-sheet_t01: RuntimeError
+LayoutTests/fast/css/unicode-bidi-computed-value_t01: RuntimeError, Pass
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-line_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-underline-position_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-indent/getComputedStyle/getComputedStyle-text-indent-inherited_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocument-namespace-err_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocumentType-err_t01: RuntimeError, Pass
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-strict-mode-wtih-checkbox_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-user-select-none_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-with-first-letter-style_t01: RuntimeError
+LayoutTests/fast/dom/Element/attribute-uppercase_t01: RuntimeError
+LayoutTests/fast/dom/Element/client-rect-list-argument_t01: RuntimeError
+LayoutTests/fast/dom/Element/getClientRects_t01: RuntimeError
+LayoutTests/fast/dom/Element/offsetTop-table-cell_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/remove-href-from-focused-anchor_t01: Timeout
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-host_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-pathname_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-protocol_t01: RuntimeError
+LayoutTests/fast/dom/HTMLButtonElement/value/getset_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-open_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-return-value_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/dialog-scrolled-viewport_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/inert-node-is-unselectable_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/multiple-centered-dialogs_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/submit-dialog-close-event_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/synthetic-click-inert_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-relative_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDialogElement/top-layer-position-static_t01: RuntimeError
+LayoutTests/fast/dom/HTMLDocument/active-element-gets-unforcusable_t01: Timeout
+LayoutTests/fast/dom/HTMLDocument/set-focus-on-valid-element_t01: Timeout
+LayoutTests/fast/dom/HTMLImageElement/image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLImageElement/image-natural-width-height_t01: Timeout
+LayoutTests/fast/dom/HTMLImageElement/parse-src_t01: RuntimeError
+LayoutTests/fast/dom/HTMLInputElement/input-image-alt-text_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLabelElement/form/test1_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-nonexistent_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/link-onerror-stylesheet-with-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-before-page-load_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload-stylesheet-with-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/link-onload2_t01: RuntimeError
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onerror_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload_t01: Timeout
+LayoutTests/fast/dom/HTMLLinkElement/prefetch_t01: Timeout
+LayoutTests/fast/dom/HTMLOptionElement/collection-setter-getter_t01: RuntimeError
+LayoutTests/fast/dom/HTMLProgressElement/indeterminate-progress-002_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/async-false-inside-async-false-load_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/async-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-inline-script_t01: RuntimeError
+LayoutTests/fast/dom/HTMLScriptElement/defer-onbeforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/defer-script-invalid-url_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/dont-load-unknown-type_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-in-beforeload_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/remove-source_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-for-attribute-unexpected-execution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-reexecution_t01: Timeout
+LayoutTests/fast/dom/HTMLScriptElement/script-set-src_t01: Timeout
+LayoutTests/fast/dom/HTMLStyleElement/style-onerror-with-existent-and-non-existent-import_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableElement/insert-row_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTableSectionElement/rows_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/cycles-in-shadow_t01: RuntimeError
+LayoutTests/fast/dom/HTMLTemplateElement/innerHTML-inert_t01: Timeout
+LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/weak-callback-gc-crash_t01: RuntimeError
+LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError
+LayoutTests/fast/dom/Range/getClientRects-character_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-created-during-remove-children_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-detached-exceptions_t01: RuntimeError
+LayoutTests/fast/dom/Range/range-insertNode-splittext_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-style_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/empty-shadow-style_t01: RuntimeError
+LayoutTests/fast/dom/XMLSerializer-double-xmlns_t01: RuntimeError
+LayoutTests/fast/dom/characterdata-api-arguments_t01: RuntimeError
+LayoutTests/fast/dom/css-cached-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule-twice_t01: RuntimeError
+LayoutTests/fast/dom/css-insert-import-rule_t01: RuntimeError
+LayoutTests/fast/dom/css-selectorText_t01: RuntimeError
+LayoutTests/fast/dom/cssTarget-crash_t01: RuntimeError, Pass
+LayoutTests/fast/dom/custom/attribute-changed-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/created-callback_t01: RuntimeError
+LayoutTests/fast/dom/custom/lifecycle-created-createElement-recursion_t01: RuntimeError
+LayoutTests/fast/dom/custom/unresolved-pseudoclass_t01: RuntimeError
+LayoutTests/fast/dom/custom/upgrade-candidate-remove-crash_t01: RuntimeError
+LayoutTests/fast/dom/domparser-parsefromstring-mimetype-support_t01: RuntimeError
+LayoutTests/fast/dom/empty-hash-and-search_t01: RuntimeError
+LayoutTests/fast/dom/gc-image-element-2_t01: Timeout
+LayoutTests/fast/dom/gc-image-element_t01: Timeout
+LayoutTests/fast/dom/getElementsByClassName/010_t01: RuntimeError
+LayoutTests/fast/dom/getElementsByClassName/011_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-in-rtl_t01: RuntimeError
+LayoutTests/fast/dom/horizontal-scrollbar-when-dir-change_t01: RuntimeError
+LayoutTests/fast/dom/image-object_t01: Timeout
+LayoutTests/fast/dom/non-styled-element-id-crash_t01: RuntimeError
+LayoutTests/fast/dom/partial-layout-overlay-scrollbars_t01: RuntimeError
+LayoutTests/fast/dom/set-innerHTML_t01: RuntimeError
+LayoutTests/fast/dom/shadow/access-document-of-detached-stylesheetlist-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/base-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-element-includer_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-dynamic-attribute-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-relative-selector-css-text_t01: RuntimeError
+LayoutTests/fast/dom/shadow/content-pseudo-element-with-host-pseudo-class_t01: RuntimeError
+LayoutTests/fast/dom/shadow/distribution-for-event-path_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elementfrompoint_t01: RuntimeError
+LayoutTests/fast/dom/shadow/elements-in-frameless-document_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getComputedStyle-composed-parent-dirty_t01: RuntimeError
+LayoutTests/fast/dom/shadow/getelementbyid-in-orphan_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/link-in-shadow-tree_t01: RuntimeError
+LayoutTests/fast/dom/shadow/offsetWidth-host-style-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/olderShadowRoot_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-checked-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-optgroup_t01: RuntimeError
+LayoutTests/fast/dom/shadow/pseudoclass-update-disabled-option_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-content-crash_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-disable_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-hierarchy-exception_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-removechild-and-blur-event_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-node-list_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-root-text-child_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadow-ul-li_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowdom-for-input-type-change_t01: RuntimeError
+LayoutTests/fast/dom/shadow/shadowroot-host_t01: RuntimeError
+LayoutTests/fast/dom/shadow/sibling-rules-dynamic-changes_t01: RuntimeError
+LayoutTests/fast/dom/shadow/stale-distribution-after-shadow-removal_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-counter_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-image_t01: RuntimeError
+LayoutTests/fast/dynamic/crash-generated-text_t01: RuntimeError
+LayoutTests/fast/events/clipboard-clearData_t01: Timeout
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Timeout
+LayoutTests/fast/events/event-creation_t01: RuntimeError
+LayoutTests/fast/events/event-listener-html-non-html-confusion_t01: RuntimeError
+LayoutTests/fast/events/event-on-xhr-document_t01: RuntimeError
+LayoutTests/fast/events/init-message-event_t01: RuntimeError
+LayoutTests/fast/events/invalid-002_t01: RuntimeError
+LayoutTests/fast/events/invalid-003_t01: RuntimeError
+LayoutTests/fast/events/mutation-during-replace-child_t01: RuntimeError
+LayoutTests/fast/events/nested-event-remove-node-crash_t01: Timeout
+LayoutTests/fast/events/tabindex-removal-from-focused-element_t01: RuntimeError
+LayoutTests/fast/exclusions/parsing/parsing-wrap-through_t01: RuntimeError
+LayoutTests/fast/files/blob-close-read_t01: RuntimeError
+LayoutTests/fast/files/blob-constructor_t01: RuntimeError
+LayoutTests/fast/files/file-reader-abort-in-last-progress_t01: RuntimeError
+LayoutTests/fast/files/file-reader-done-reading-abort_t01: RuntimeError, Pass
+LayoutTests/fast/files/read-blob-as-array-buffer_t01: RuntimeError
+LayoutTests/fast/filesystem/async-operations_t01: RuntimeError
+LayoutTests/fast/filesystem/directory-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-after-reload-crash_t01: RuntimeError
+LayoutTests/fast/filesystem/file-entry-to-uri_t01: RuntimeError
+LayoutTests/fast/filesystem/file-metadata-after-write_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-abort-continue_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-events_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-truncate-extend_t01: RuntimeError
+LayoutTests/fast/filesystem/file-writer-write-overlapped_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-unserializable_t01: RuntimeError
+LayoutTests/fast/filesystem/filesystem-uri-origin_t01: RuntimeError
+LayoutTests/fast/filesystem/op-copy_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-metadata_t01: RuntimeError
+LayoutTests/fast/filesystem/op-get-parent_t01: RuntimeError
+LayoutTests/fast/filesystem/op-read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-chars_t01: RuntimeError
+LayoutTests/fast/filesystem/op-restricted-names_t01: RuntimeError
+LayoutTests/fast/filesystem/read-directory_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-readonly-file-object_t01: RuntimeError
+LayoutTests/fast/filesystem/simple-temporary_t01: RuntimeError
+LayoutTests/fast/filesystem/snapshot-file-with-gc_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-customError_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-typeMismatch-url_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-valueMissing-004_t01: RuntimeError
+LayoutTests/fast/forms/autocomplete_t01: RuntimeError
+LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError
+LayoutTests/fast/forms/color/color-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/color/input-value-sanitization-color_t01: RuntimeError
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-onblur-setvalue-onfocusremoved_t01: RuntimeError, Pass
+LayoutTests/fast/forms/date/ValidityState-typeMismatch-date_t01: RuntimeError
+LayoutTests/fast/forms/date/date-pseudo-classes_t01: RuntimeError
+LayoutTests/fast/forms/date/date-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/date/input-date-validation-message_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-input-type_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/datetimelocal-setrangetext_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasdate-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/datetimelocal/input-valueasnumber-datetimelocal_t01: RuntimeError
+LayoutTests/fast/forms/form-attribute-nonexistence-form-id_t01: RuntimeError
+LayoutTests/fast/forms/input-appearance-elementFromPoint_t01: RuntimeError
+LayoutTests/fast/forms/input-inputmode_t01: RuntimeError
+LayoutTests/fast/forms/input-value-sanitization_t01: RuntimeError
+LayoutTests/fast/forms/menulist-submit-without-selection_t01: RuntimeError, Pass
+LayoutTests/fast/forms/option-change-single-selected_t01: RuntimeError
+LayoutTests/fast/forms/option-strip-unicode-spaces_t01: RuntimeError
+LayoutTests/fast/forms/parser-associated-form-removal_t01: RuntimeError
+LayoutTests/fast/forms/plaintext-mode-1_t01: RuntimeError
+LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError
+LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError
+LayoutTests/fast/forms/textarea-selection-preservation_t01: RuntimeError
+LayoutTests/fast/html/adjacent-html-context-element_t01: RuntimeError
+LayoutTests/fast/html/hidden-attr_t01: RuntimeError
+LayoutTests/fast/html/imports/import-element-removed-flag_t01: Timeout
+LayoutTests/fast/html/select-dropdown-consistent-background-color_t01: RuntimeError
+LayoutTests/fast/inline/boundingBox-with-continuation_t01: RuntimeError
+LayoutTests/fast/inline/inline-position-top-align_t01: RuntimeError
+LayoutTests/fast/inline/parent-inline-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/inline/positioned-element-padding-contributes-width_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-svg-write_t01: RuntimeError
+LayoutTests/fast/innerHTML/javascript-url_t01: RuntimeError
+LayoutTests/fast/lists/marker-preferred-margins_t01: RuntimeError
+LayoutTests/fast/loader/about-blank-hash-change_t01: Timeout
+LayoutTests/fast/loader/about-blank-hash-kept_t01: Timeout
+LayoutTests/fast/loader/loadInProgress_t01: RuntimeError, Pass
+LayoutTests/fast/loader/local-css-allowed-in-strict-mode_t01: RuntimeError
+LayoutTests/fast/loader/onhashchange-attribute-listeners_t01: Timeout
+LayoutTests/fast/loader/scroll-position-restored-on-back_t01: Timeout
+LayoutTests/fast/masking/parsing-clip-path-shape_t01: RuntimeError
+LayoutTests/fast/masking/parsing-mask_t01: RuntimeError
+LayoutTests/fast/media/matchmedium-query-api_t01: RuntimeError
+LayoutTests/fast/media/media-query-list-syntax_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCIceCandidate_t01: RuntimeError
+LayoutTests/fast/mediastream/RTCPeerConnection-AddRemoveStream_t01: Timeout, Pass
+LayoutTests/fast/mediastream/RTCPeerConnection_t01: RuntimeError
+LayoutTests/fast/mediastream/constructors_t01: RuntimeError
+LayoutTests/fast/multicol/balance-unbreakable_t01: RuntimeError
+LayoutTests/fast/multicol/break-after-always-bottom-margin_t01: RuntimeError
+LayoutTests/fast/multicol/cssom-view_t01: RuntimeError
+LayoutTests/fast/multicol/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-end-of-column_t01: RuntimeError
+LayoutTests/fast/multicol/hit-test-float_t01: RuntimeError
+LayoutTests/fast/multicol/inline-getclientrects_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance-images_t01: RuntimeError
+LayoutTests/fast/multicol/newmulticol/balance-maxheight_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-lr/float-truncation_t01: RuntimeError
+LayoutTests/fast/multicol/vertical-rl/float-truncation_t01: RuntimeError
+LayoutTests/fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto_t01: RuntimeError
+LayoutTests/fast/overflow/scrollbar-restored_t01: RuntimeError
+LayoutTests/fast/parser/fragment-parser-doctype_t01: RuntimeError
+LayoutTests/fast/replaced/available-height-for-content_t01: RuntimeError
+LayoutTests/fast/replaced/container-width-zero_t01: RuntimeError
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-table-cell-ignore-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-height_t01: RuntimeError
+LayoutTests/fast/replaced/table-percent-width_t01: RuntimeError
+LayoutTests/fast/ruby/ruby-line-height_t01: RuntimeError
+LayoutTests/fast/scrolling/scroll-element-into-view_t01: RuntimeError
+LayoutTests/fast/shapes/parsing/parsing-shape-margin_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-different-writing-modes-left_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t01: RuntimeError
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-rounded-boxes_t02: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-boundary-events_t01: Timeout, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-cancel_t01: RuntimeError
+LayoutTests/fast/speechsynthesis/speech-synthesis-pause-resume_t01: Timeout, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-speak_t01: Timeout, Pass
+LayoutTests/fast/speechsynthesis/speech-synthesis-utterance-uses-voice_t01: Timeout
+LayoutTests/fast/storage/storage-disallowed-in-data-url_t01: RuntimeError
+LayoutTests/fast/sub-pixel/shadows-computed-style_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-angle_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-length_t01: RuntimeError
+LayoutTests/fast/svg/whitespace-number_t01: RuntimeError
+LayoutTests/fast/table/fixed-table-layout-width-change_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-bottom-edge_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-with-borders-bottom-edge_t01: RuntimeError
+LayoutTests/fast/table/html-table-width-max-width-constrained_t01: RuntimeError
+LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError, Pass
+LayoutTests/fast/table/margins-flipped-text-direction_t01: RuntimeError
+LayoutTests/fast/table/min-width-css-block-table_t01: RuntimeError
+LayoutTests/fast/table/nested-tables-with-div-offset_t01: RuntimeError
+LayoutTests/fast/table/switch-table-layout-multiple-section_t01: RuntimeError
+LayoutTests/fast/table/switch-table-layout_t01: RuntimeError
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows_t01: RuntimeError
+LayoutTests/fast/table/table-colgroup-present-after-table-row_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-cell-with-empty-cell_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t01: RuntimeError
+LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: RuntimeError
+LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: RuntimeError
+LayoutTests/fast/text/find-case-folding_t01: RuntimeError
+LayoutTests/fast/text/find-russian_t01: RuntimeError
+LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError
+LayoutTests/fast/text/glyph-reordering_t01: RuntimeError
+LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-empty-inline-hebrew_t01: RuntimeError
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError
+LayoutTests/fast/text/multiglyph-characters_t01: RuntimeError
+LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError
+LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError
+LayoutTests/fast/url/anchor_t01: RuntimeError
+LayoutTests/fast/url/file-http-base_t01: RuntimeError
+LayoutTests/fast/url/file_t01: RuntimeError
+LayoutTests/fast/url/idna2003_t01: RuntimeError
+LayoutTests/fast/url/idna2008_t01: RuntimeError
+LayoutTests/fast/url/invalid-urls-utf8_t01: RuntimeError
+LayoutTests/fast/url/ipv4_t01: RuntimeError
+LayoutTests/fast/url/ipv6_t01: RuntimeError
+LayoutTests/fast/url/path_t01: RuntimeError
+LayoutTests/fast/url/query_t01: RuntimeError
+LayoutTests/fast/url/relative-win_t01: RuntimeError
+LayoutTests/fast/url/relative_t01: RuntimeError
+LayoutTests/fast/url/segments_t01: RuntimeError
+LayoutTests/fast/url/standard-url_t01: RuntimeError
+LayoutTests/fast/writing-mode/flipped-blocks-text-map-local-to-container_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-html-document-responsetype-quirks_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responseXML-xml-text-responsetype_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open-sync-request_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Borrowed/od_20000608_t01: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_node_test_t02: RuntimeError
+LayoutTests/fast/xpath/4XPath/Core/test_parser_t01: RuntimeError
+LayoutTests/fast/xpath/ambiguous-operators_t01: RuntimeError
+LayoutTests/fast/xpath/ensure-null-namespace_t01: RuntimeError
+LayoutTests/fast/xpath/implicit-node-args_t01: RuntimeError
+LayoutTests/fast/xpath/node-name-case-sensitivity_t02: RuntimeError
+LayoutTests/fast/xpath/py-dom-xpath/expressions_t01: RuntimeError
+LayoutTests/fast/xsl/default-html_t01: RuntimeError
+LibTest/async/Future/asStream_A01_t02: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t01: RuntimeError
+LibTest/async/Stream/Stream.fromFutures_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A02_t01: RuntimeError
+LibTest/async/Stream/Stream.fromIterable_A03_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t02: RuntimeError
+LibTest/async/Stream/Stream.periodic_A04_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A03_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A09_t03: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t02: RuntimeError
+LibTest/async/StreamController/StreamController.broadcast_A10_t03: RuntimeError
+LibTest/async/StreamController/addStream_A03_t01: RuntimeError
+LibTest/async/StreamController/stream_A02_t03: RuntimeError
+LibTest/async/StreamController/stream_A03_t02: RuntimeError
+LibTest/async/StreamSink/addStream_A01_t02: RuntimeError
+LibTest/async/StreamTransformer/StreamTransformer.fromHandlers_A01_t03: RuntimeError
+LibTest/async/Zone/registerBinaryCallback_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/fold_A01_t01: RuntimeError
+LibTest/collection/DoubleLinkedQueue/removeWhere_A02_t03: RuntimeError
+LibTest/collection/DoubleLinkedQueue/retainWhere_A02_t02: RuntimeError
+LibTest/collection/HashSet/HashSet_A04_t01: RuntimeError
+LibTest/collection/HashSet/HashSet_class_A01_t01: RuntimeError
+LibTest/collection/IterableBase/IterableBase_class_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/contains_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/every_A01_t02: RuntimeError
+LibTest/collection/IterableMixin/expand_A01_t01: RuntimeError
+LibTest/collection/IterableMixin/expand_A02_t01: RuntimeError
+LibTest/collection/IterableMixin/fold_A01_t01: RuntimeError
+LibTest/collection/LinkedList/addAll_A01_t02: RuntimeError
+LibTest/collection/LinkedList/join_A01_t01: RuntimeError
+LibTest/collection/LinkedList/toString_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/LinkedListEntry_class_A03_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertAfter_A02_t02: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/insertBefore_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/list_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/next_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t02: RuntimeError
+LibTest/collection/LinkedListEntry/previous_A01_t03: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A01_t01: RuntimeError
+LibTest/collection/LinkedListEntry/unlink_A02_t02: RuntimeError
+LibTest/collection/ListMixin/ListMixin_class_A01_t01: RuntimeError
+LibTest/collection/ListQueue/ListQueue.from_A01_t01: RuntimeError
+LibTest/convert/LineSplitter/fuse_A01_t01: RuntimeError
+LibTest/core/AssertionError/AssertionError_A01_t01: RuntimeError
+LibTest/core/AssertionError/message_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/CyclicInitializationError.class_A01_t01: RuntimeError
+LibTest/core/CyclicInitializationError/variableName_A01_t01: RuntimeError
+LibTest/core/DateTime/DateTime.fromMicrosecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecond_A01_t01: RuntimeError
+LibTest/core/DateTime/microsecondsSinceEpoch_A01_t01: RuntimeError
+LibTest/core/DateTime/parse_A01_t03: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t01: RuntimeError
+LibTest/core/DateTime/to8601String_A01_t02: RuntimeError
+LibTest/core/Duration/Duration_A01_t01: CompileTimeError
+LibTest/core/Duration/Duration_A02_t01: CompileTimeError
+LibTest/core/Duration/inDays_A01_t01: CompileTimeError
+LibTest/core/Duration/inHours_A01_t01: CompileTimeError
+LibTest/core/Duration/inMicroseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inMilliseconds_A01_t01: CompileTimeError
+LibTest/core/Duration/inSeconds_A01_t01: CompileTimeError
+LibTest/core/Error/stackTrace_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t01: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t04: RuntimeError
+LibTest/core/Expando/operator_square_brackets_A01_t05: RuntimeError
+LibTest/core/Function/Function_class_A01_t01: RuntimeError
+LibTest/core/IndexError/stackTrace_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: RuntimeError
+LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: RuntimeError
+LibTest/core/Runes/any_A01_t01: RuntimeError
+LibTest/core/Runes/every_A01_t01: RuntimeError
+LibTest/core/String/padRight_A01_t01: RuntimeError
+LibTest/core/String/replaceFirstMapped_A03_t01: RuntimeError
+LibTest/core/Symbol/Symbol_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t02: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromBytes_A01_t05: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t01: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t03: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A01_t04: RuntimeError
+LibTest/core/Uri/Uri.dataFromString_A02_t03: RuntimeError
+LibTest/core/Uri/Uri.file_A02_t03: RuntimeError
+LibTest/core/Uri/queryParametersAll_A01_t04: RuntimeError
+LibTest/core/Uri/queryParametersAll_A03_t01: RuntimeError
+LibTest/core/UriData/UriData.fromBytes_A01_t03: RuntimeError
+LibTest/core/UriData/charset_A01_t01: RuntimeError
+LibTest/core/UriData/contentText_A01_t01: RuntimeError
+LibTest/core/UriData/parse_A01_t01: RuntimeError
+LibTest/core/double/INFINITY_A01_t04: RuntimeError
+LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError
+LibTest/core/double/isInfinite_A01_t03: CompileTimeError
+LibTest/core/double/operator_GE_A01_t02: CompileTimeError
+LibTest/core/double/operator_GT_A01_t02: CompileTimeError
+LibTest/core/double/operator_LT_A01_t02: CompileTimeError
+LibTest/core/double/operator_addition_A01_t08: Crash
+LibTest/core/double/operator_subtraction_A01_t06: RuntimeError
+LibTest/core/double/operator_subtraction_A01_t09: Crash
+LibTest/core/double/roundToDouble_A01_t01: RuntimeError
+LibTest/core/double/round_A01_t01: RuntimeError
+LibTest/core/int/ceil_A01_t01: CompileTimeError
+LibTest/core/int/compareTo_A01_t01: CompileTimeError
+LibTest/core/int/floorToDouble_A01_t01: CompileTimeError
+LibTest/core/int/floor_A01_t01: CompileTimeError
+LibTest/core/int/hashCode_A01_t01: CompileTimeError
+LibTest/core/int/isInfinite_A01_t01: CompileTimeError
+LibTest/core/int/isNegative_A01_t01: CompileTimeError
+LibTest/core/int/isOdd_A01_t01: RuntimeError
+LibTest/core/int/operator_AND_A01_t01: CompileTimeError
+LibTest/core/int/operator_GE_A01_t01: CompileTimeError
+LibTest/core/int/operator_LT_A01_t01: CompileTimeError
+LibTest/core/int/operator_XOR_A01_t01: CompileTimeError
+LibTest/core/int/operator_addition_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A01_t01: CompileTimeError
+LibTest/core/int/operator_equality_A03_t01: CompileTimeError
+LibTest/core/int/operator_left_shift_A01_t01: RuntimeError
+LibTest/core/int/operator_remainder_A01_t03: RuntimeError
+LibTest/core/int/operator_subtraction_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t01: CompileTimeError
+LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError
+LibTest/core/int/operator_unary_minus_A01_t01: CompileTimeError
+LibTest/core/int/parse_A03_t02: CompileTimeError
+LibTest/core/int/roundToDouble_A01_t01: CompileTimeError
+LibTest/core/int/truncateToDouble_A01_t01: CompileTimeError
+LibTest/html/CanvasRenderingContext2D/addEventListener_A01_t03: Timeout
+LibTest/html/Element/getClientRects_A01_t02: RuntimeError, Pass
+LibTest/html/Element/isContentEditable_A01_t01: RuntimeError, Pass
+LibTest/html/Element/loadEvent_A01_t01: Timeout
+LibTest/html/Element/mouseWheelEvent_A01_t01: Timeout
+LibTest/html/Element/onLoad_A01_t01: Timeout
+LibTest/html/Element/onMouseWheel_A01_t01: Timeout
+LibTest/html/Element/transitionEndEvent_A01_t01: Timeout
+LibTest/html/HttpRequest/responseText_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onError_A01_t02: Timeout
+LibTest/html/HttpRequestUpload/onLoadEnd_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoadStart_A01_t01: Timeout
+LibTest/html/HttpRequestUpload/onLoad_A01_t01: Timeout
+LibTest/html/IFrameElement/enteredView_A01_t01: Timeout
+LibTest/html/IFrameElement/getClientRects_A01_t02: RuntimeError, Pass
+LibTest/html/IFrameElement/onMouseWheel_A01_t01: Timeout
+LibTest/html/IFrameElement/onTransitionEnd_A01_t01: Timeout, Pass
+LibTest/math/atan_A01_t01: RuntimeError
+Utils/tests/Expect/throws_A01_t04: RuntimeError
+WebPlatformTest/DOMEvents/approved/ProcessingInstruction.DOMCharacterDataModified_t01: Timeout
+WebPlatformTest/DOMEvents/approved/addEventListener.optional.useCapture_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t01: RuntimeError
+WebPlatformTest/Utils/test/asyncTestFail_t02: RuntimeError
+WebPlatformTest/Utils/test/asyncTestTimeout_t01: Timeout
+WebPlatformTest/custom-elements/concepts/type_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/concepts/type_A08_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElementNS_A05_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A01_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A02_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/createElement_A04_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A01_t02: RuntimeError
+WebPlatformTest/custom-elements/instantiating/isAttribute_A03_t01: RuntimeError
+WebPlatformTest/custom-elements/instantiating/localName_A01_t01: RuntimeError
+WebPlatformTest/dom/events/type_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: RuntimeError, Pass
+WebPlatformTest/dom/nodes/DOMImplementation-createDocument_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-adoptNode_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-insertBefore_t01: RuntimeError
+WebPlatformTest/dom/nodes/Node-isEqualNode_t01: Timeout
+WebPlatformTest/dom/nodes/Node-nodeName_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A02_t01: RuntimeError, Pass
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A07_t03: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttribute_A03_t01: RuntimeError
+WebPlatformTest/html-imports/link-import_t02: RuntimeError
+WebPlatformTest/html-imports/loading-import_t01: RuntimeError
+WebPlatformTest/html-templates/innerhtml-on-templates/innerhtml_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/additions-to-the-in-head-insertion-mode/generating-of-implied-end-tags_t01: RuntimeError
+WebPlatformTest/html-templates/parsing-html-templates/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context_t01: RuntimeError
+WebPlatformTest/html-templates/template-element/template-as-a-descendant_t01: RuntimeError
+WebPlatformTest/html/browsers/browsing-the-web/read-media/pageload-video_t01: Timeout
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.body-setter_t01: RuntimeError
+WebPlatformTest/html/dom/documents/dom-tree-accessors/document.getElementsByName-namespace_t01: RuntimeError
+WebPlatformTest/html/dom/elements/global-attributes/dataset-get_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/error-codes/error_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLMediaElement/addTextTrack_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/HTMLElement/HTMLTrackElement/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues_t01: Timeout
+WebPlatformTest/html/semantics/embedded-content/media-elements/interfaces/TextTrack/kind_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/selection_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/textfieldselection/textfieldselection-setRangeText_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-button-element/button-validation_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-datalist-element/datalistelement_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-elements-matches_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-form-element/form-nameditem_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/color_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/datetime_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/input-type-button_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/mobiles_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/month_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/password_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/range_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/time_t02: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/type-change-state_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-input-element/week_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-option-element/option-text-spaces_t01: RuntimeError
+WebPlatformTest/html/semantics/forms/the-textarea-element/textarea-type_t01: RuntimeError
+WebPlatformTest/html/semantics/interactive-elements/the-dialog-element/dialog-close_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/checked_t01: RuntimeError
+WebPlatformTest/html/semantics/selectors/pseudo-classes/focus_t01: RuntimeError, Pass
+WebPlatformTest/html/semantics/selectors/pseudo-classes/indeterminate_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/cellIndex_t01: RuntimeError
+WebPlatformTest/html/semantics/tabular-data/the-table-element/table-rows_t01: RuntimeError
+WebPlatformTest/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol_t00: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/extensions-to-element-interface/attributes/test-001_t01: RuntimeError
+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/extensions-to-event-interface/event-path-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-009_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-011_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-attributes/test-013_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/shadowroot-object/shadowroot-methods/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-004_t02: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-content-html-element/test-005_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-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/elements-and-dom-objects/the-shadow-html-element/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-dispatch/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/event-retargeting/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-007_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/events-that-are-always-stopped/test-008_t01: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t04: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-focus-events/test-001_t06: RuntimeError
+WebPlatformTest/shadow-dom/events/retargeting-relatedtarget/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-and-their-shadow-trees/test-004_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/html-elements-in-shadow-trees/html-forms/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/custom-pseudo-elements/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/distributed-pseudo-element/test-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/hosting-multiple-shadow-trees/test-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/distribution-003_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/lower-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/nested-shadow-trees/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/reprojection/test-001_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/satisfying-matching-criteria/test-006_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/ownerdocument-002_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-005_t01: RuntimeError
+WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-011_t01: RuntimeError
+WebPlatformTest/webstorage/event_constructor_t02: RuntimeError
+WebPlatformTest/webstorage/event_local_key_t01: Timeout
+WebPlatformTest/webstorage/event_local_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_local_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_local_url_t01: Timeout
+WebPlatformTest/webstorage/event_session_key_t01: Timeout
+WebPlatformTest/webstorage/event_session_newvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_oldvalue_t01: Timeout
+WebPlatformTest/webstorage/event_session_storagearea_t01: Timeout
+WebPlatformTest/webstorage/event_session_url_t01: Timeout
+WebPlatformTest/webstorage/storage_session_setitem_quotaexceedederr_t01: Timeout
+
+[ $compiler == dart2js && $runtime == safari && $fast_startup ]
+LayoutTests/fast/canvas/canvas-alphaImageData-behavior_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-blend-image_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-composite-alpha_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-composite-canvas_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-composite-image_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-drawImage-scaled-copy-to-self_t01: RuntimeError
+LayoutTests/fast/canvas/canvas-lineDash_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-lineWidth-intact-after-strokeRect_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-scale-fillRect-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokePath-alpha-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokePath-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokeRect-gradient-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-style-intact-after-text_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/text-globalAlpha_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/canvas-test_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError, Pass
+LayoutTests/fast/css/computed-offset-with-zoom_t01: RuntimeError
+LayoutTests/fast/css/counters/counter-cssText_t01: RuntimeError
+LayoutTests/fast/css/cssText-shorthand_t01: RuntimeError
+LayoutTests/fast/css/font-face-unicode-range-monospace_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-columns_t01: RuntimeError
+LayoutTests/fast/css/invalid-not-with-simple-selector-sequence_t01: RuntimeError
+LayoutTests/fast/css/parsing-object-position_t01: RuntimeError
+LayoutTests/fast/css/pseudo-any_t01: RuntimeError, Pass
+LayoutTests/fast/css/shadow-current-color_t01: RuntimeError
+LayoutTests/fast/css/sticky/parsing-position-sticky_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last-inherited_t01: RuntimeError
+LayoutTests/fast/css3-text/css3-text-align-last/getComputedStyle/getComputedStyle-text-align-last_t01: RuntimeError
+LayoutTests/fast/dom/Attr/direction-attribute-set-and-cleared_t01: RuntimeError
+LayoutTests/fast/dom/DOMException/XPathException_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: RuntimeError, Pass
+LayoutTests/fast/dom/HTMLSelectElement/selected-index-preserved-when-option-text-changes_t01: RuntimeError
+LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError
+LayoutTests/fast/files/file-reader-readystate_t01: RuntimeError
+LayoutTests/fast/filesystem/input-access-entries_t01: RuntimeError
+LayoutTests/fast/forms/date-multiple-fields/date-multiple-fields-change-layout-by-value_t01: RuntimeError
+LayoutTests/fast/forms/date/date-input-type_t01: RuntimeError
+LayoutTests/fast/forms/date/input-valueasnumber-date_t01: RuntimeError
+LayoutTests/fast/forms/menulist-submit-without-selection_t01: RuntimeError, Pass
+LayoutTests/fast/inline/continuation-inlines-inserted-in-reverse-after-block_t01: RuntimeError
+LayoutTests/fast/innerHTML/innerHTML-uri-resolution_t01: RuntimeError
+LayoutTests/fast/media/media-query-list_t01: RuntimeError
+LayoutTests/fast/mediastream/getusermedia_t01: RuntimeError, Pass
+LayoutTests/fast/multicol/balance-short-trailing-empty-block_t01: RuntimeError
+LayoutTests/fast/multicol/balance-trailing-border_t01: RuntimeError
+LayoutTests/fast/multicol/balance-trailing-border_t02: RuntimeError
+LayoutTests/fast/multicol/columns-shorthand-parsing_t02: RuntimeError
+LayoutTests/fast/replaced/iframe-with-percentage-height-within-table-with-anonymous-table-cell_t01: RuntimeError
+LayoutTests/fast/replaced/preferred-widths_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: RuntimeError, Pass
+LayoutTests/fast/sub-pixel/table-rows-have-stable-height_t01: RuntimeError
+LayoutTests/fast/table/absolute-table-percent-lengths_t01: RuntimeError
+LayoutTests/fast/table/css-table-max-height_t01: RuntimeError
+LayoutTests/fast/table/css-table-width-with-border-padding_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-right-edge_t01: RuntimeError
+LayoutTests/fast/table/hittest-tablecell-with-borders-right-edge_t01: RuntimeError
+LayoutTests/fast/table/margins-perpendicular-containing-block_t01: RuntimeError
+LayoutTests/fast/table/min-max-width-preferred-size_t01: RuntimeError
+LayoutTests/fast/table/switch-table-layout-dynamic-cells_t01: RuntimeError
+LayoutTests/fast/table/table-all-rowspans-height-distribution-in-rows-except-overlapped_t01: RuntimeError
+LayoutTests/fast/table/table-width-exceeding-max-width_t01: RuntimeError
+LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError
+LayoutTests/fast/text/find-spaces_t01: RuntimeError
+LayoutTests/fast/text/font-ligatures-linebreak-word_t01: RuntimeError
+LayoutTests/fast/text/font-ligatures-linebreak_t01: RuntimeError
+LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError
+LayoutTests/fast/text/selection-exceptions_t01: RuntimeError
+LayoutTests/fast/transforms/bounding-rect-zoom_t01: RuntimeError
+LayoutTests/fast/transforms/hit-test-large-scale_t01: RuntimeError
+LayoutTests/fast/writing-mode/vertical-font-vmtx-units-per-em_t01: RuntimeError
+LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-sync-request_t01: RuntimeError
+LibTest/html/Element/isContentEditable_A02_t01: RuntimeError
+LibTest/html/IFrameElement/getClientRects_A01_t02: RuntimeError, Pass
+LibTest/html/IFrameElement/isContentEditable_A01_t01: RuntimeError
+LibTest/html/Window/close_A01_t01: RuntimeError
+LibTest/math/cos_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: RuntimeError, Pass
+WebPlatformTest/dom/nodes/Document-createElementNS_t01: RuntimeError, Pass
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A02_t01: RuntimeError, Pass
+WebPlatformTest/html/semantics/scripting-1/the-script-element/async_t11: RuntimeError
+
+[ $compiler == dart2js && $runtime == safari && !$fast_startup ]
+LayoutTests/fast/canvas/canvas-alphaImageData-behavior_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-composite-alpha_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-composite-image_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-getImageData_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-lineDash_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-lineWidth-intact-after-strokeRect_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-scale-drawImage-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-scale-fillPath-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-scale-fillRect-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-strokeRect-alpha-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-style-intact-after-text_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/canvas-transforms-fillRect-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/fillText-shadow_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/text-globalAlpha_t01: RuntimeError, Pass
+LayoutTests/fast/canvas/webgl/canvas-test_t01: RuntimeError, Pass
+LayoutTests/fast/css/focus-display-block-inline_t01: RuntimeError, Pass
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: RuntimeError, Pass
+LayoutTests/fast/forms/autofocus-input-css-style-change_t01: RuntimeError, Pass
+LayoutTests/fast/mediastream/getusermedia_t01: RuntimeError, Pass
+LayoutTests/fast/shapes/shape-outside-floats/shape-outside-floats-image-margin_t02: RuntimeError, Pass
+WebPlatformTest/dom/nodes/Document-createElementNS_t01: RuntimeError, Pass
+
+[ $compiler == dart2js && $runtime != safari ]
+LayoutTests/fast/canvas/canvas-lineDash_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/buffer-data-array-buffer_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/context-lost_t01: RuntimeError
+LayoutTests/fast/canvas/webgl/uninitialized-test_t01: RuntimeError
+LayoutTests/fast/css/background-clip-text_t01: RuntimeError
+LayoutTests/fast/css/border-radius-property-value_t01: RuntimeError
+LayoutTests/fast/css/child-selector-implicit-tbody_t01: RuntimeError
+LayoutTests/fast/css/getPropertyValue-border_t01: RuntimeError
+LayoutTests/fast/css/url-with-multi-byte-unicode-escape_t01: RuntimeError
+LayoutTests/fast/dom/DOMImplementation/createDocumentType-err_t01: RuntimeError
+LayoutTests/fast/dom/Document/CaretRangeFromPoint/replace-element_t01: RuntimeError
+LayoutTests/fast/dom/HTMLAnchorElement/set-href-attribute-search_t01: RuntimeError
+LayoutTests/fast/dom/HTMLSelectElement/change-multiple-preserve-selection_t01: RuntimeError
+LayoutTests/fast/dom/StyleSheet/detached-parent-rule-without-wrapper_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/offset-position-writing-modes_t01: RuntimeError
+LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError
+LayoutTests/fast/eventsource/eventsource-constructor_t01: RuntimeError
+LayoutTests/fast/forms/ValidityState-tooLong-input_t01: RuntimeError
+LayoutTests/fast/forms/fieldset/fieldset-elements_t01: RuntimeError
+LayoutTests/fast/forms/menulist-submit-without-selection_t01: RuntimeError, Pass
+LayoutTests/fast/forms/select-change-popup-to-listbox-in-event-handler_t01: RuntimeError
+LayoutTests/fast/forms/select-clientheight-with-multiple-attr_t01: RuntimeError
+LayoutTests/fast/forms/select-list-box-mouse-focus_t01: RuntimeError
+LayoutTests/fast/forms/selection-start-end-readonly_t01: RuntimeError
+LayoutTests/fast/html/aside-element_t01: RuntimeError
+LayoutTests/fast/html/details-add-child-1_t01: RuntimeError
+LayoutTests/fast/html/figcaption-element_t01: RuntimeError
+LayoutTests/fast/html/footer-element_t01: RuntimeError
+LayoutTests/fast/html/mark-element_t01: RuntimeError
+LayoutTests/fast/html/section-element_t01: RuntimeError
+LayoutTests/fast/masking/parsing-mask-source-type_t01: RuntimeError
+LayoutTests/fast/mediastream/getusermedia_t01: RuntimeError
+LayoutTests/fast/multicol/flipped-blocks-hit-test_t01: RuntimeError
+LayoutTests/fast/text/pre-wrap-trailing-tab_t01: RuntimeError
+LibTest/html/Element/blur_A01_t01: RuntimeError
+LibTest/html/HttpRequest/overrideMimeType_A01_t01: RuntimeError
+LibTest/html/IFrameElement/focus_A01_t01: RuntimeError
+LibTest/math/log_A01_t01: RuntimeError
+WebPlatformTest/dom/nodes/DOMImplementation-createDocumentType_t01: RuntimeError
+WebPlatformTest/dom/nodes/Document-createElementNS_t01: RuntimeError
+WebPlatformTest/dom/nodes/attributes/setAttributeNS_A02_t01: RuntimeError
+WebPlatformTest/html/semantics/grouping-content/the-ol-element/ol.start-reflection_t02: RuntimeError
+
+[ $compiler == dart2js && $system != macos ]
+LayoutTests/fast/text/zero-width-characters_t01: RuntimeError
diff --git a/tests/co19_2/co19_2-kernel.status b/tests/co19_2/co19_2-kernel.status
index 3e28235..a1c4e33 100644
--- a/tests/co19_2/co19_2-kernel.status
+++ b/tests/co19_2/co19_2-kernel.status
@@ -13,16 +13,8 @@
 Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t04: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t05: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Abstract_Instance_Members/same_name_static_method_in_superclass_t06: MissingCompileTimeError # Legal, see #33235
-Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t01: MissingCompileTimeError # Issue 34191
-Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t02: MissingCompileTimeError # Issue 34191
-Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t03: MissingCompileTimeError # Issue 34191
-Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t02: MissingCompileTimeError # Issue 34192
 Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: MissingCompileTimeError # Issue 34192
 Language/Classes/Constructors/Factories/arguments_type_t01: MissingCompileTimeError # Issue 33308
-Language/Classes/Constructors/Factories/const_modifier_t01: MissingCompileTimeError # Issue 34161
-Language/Classes/Constructors/Factories/const_modifier_t02: MissingCompileTimeError # Issue 34161
-Language/Classes/Constructors/Factories/default_value_t01: MissingCompileTimeError # Issue 34160
-Language/Classes/Constructors/Factories/default_value_t02: MissingCompileTimeError # Issue 34160
 Language/Classes/Constructors/Factories/function_type_t01: MissingCompileTimeError # Issue 31590
 Language/Classes/Constructors/Factories/function_type_t02: MissingCompileTimeError # Issue 31590
 Language/Classes/Constructors/Generative_Constructors/final_variables_t01: CompileTimeError # Expects a warning, but this is an error in Dart 2
@@ -47,7 +39,6 @@
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t06: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t07: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Instance_Methods/same_name_static_member_in_superclass_t09: MissingCompileTimeError # Legal, see #33235
-Language/Classes/Instance_Variables/constant_t01: MissingCompileTimeError # Issue 32326
 Language/Classes/Setters/instance_setter_t01: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Setters/instance_setter_t02: MissingCompileTimeError # Legal, see #33235
 Language/Classes/Setters/instance_setter_t03: MissingCompileTimeError # Legal, see #33235
@@ -76,12 +67,6 @@
 Language/Expressions/Constants/constant_map_t02: MissingCompileTimeError # Legal because of implicit const
 Language/Expressions/Constants/depending_on_itself_t03: MissingCompileTimeError # Issue 34189
 Language/Expressions/Constants/equals_expression_t03: MissingCompileTimeError # Issue 34192
-Language/Expressions/Constants/exception_t01: MissingCompileTimeError # Issue 31936
-Language/Expressions/Constants/exception_t03: MissingCompileTimeError # Issue 31936
-Language/Expressions/Constants/exception_t04: MissingCompileTimeError # Issue 31936
-Language/Expressions/Constants/literal_string_t02: MissingCompileTimeError # Issue 34192
-Language/Expressions/Constants/no_other_constant_expressions_t11: MissingCompileTimeError # Issue 34192
-Language/Expressions/Constants/ternary_operator_t02: MissingCompileTimeError # Issue 34192
 Language/Expressions/Equality/syntax_t01: CompileTimeError
 Language/Expressions/Function_Expressions/syntax_t05: CompileTimeError
 Language/Expressions/Function_Invocation/async_cleanup_t01: CompileTimeError
@@ -93,15 +78,11 @@
 Language/Expressions/Function_Invocation/async_cleanup_t07: CompileTimeError
 Language/Expressions/Function_Invocation/async_cleanup_t08: CompileTimeError
 Language/Expressions/Instance_Creation/Const/arguments_t03: MissingCompileTimeError # Legal because of implicit const
-Language/Expressions/Instance_Creation/Const/exception_t01: MissingCompileTimeError # Issue 31936
 Language/Expressions/Instance_Creation/Const/parameterized_type_t01: CompileTimeError
 Language/Expressions/Instance_Creation/Const/parameterized_type_t02: CompileTimeError
 Language/Expressions/Instance_Creation/New/evaluation_t16: MissingCompileTimeError # Issue 33308
 Language/Expressions/Instance_Creation/New/evaluation_t17: MissingCompileTimeError # Issue 33308
 Language/Expressions/Instance_Creation/New/evaluation_t18: MissingCompileTimeError # Issue 33308
-Language/Expressions/Instance_Creation/New/generic_type_t01: MissingCompileTimeError # Issue 32972
-Language/Expressions/Instance_Creation/New/generic_type_t02: MissingCompileTimeError # Issue 32972
-Language/Expressions/Instance_Creation/New/generic_type_t03: MissingCompileTimeError # Issue 32972
 Language/Expressions/Instance_Creation/New/redirecting_factory_constructor_t02: MissingCompileTimeError # Issue 33308
 Language/Expressions/Instance_Creation/New/syntax_t04: MissingCompileTimeError # Legal because of implicit new
 Language/Expressions/Instance_Creation/New/type_argument_t01: MissingCompileTimeError # Issue 33308
@@ -112,7 +93,6 @@
 Language/Expressions/Maps/equal_keys_t01: MissingCompileTimeError
 Language/Expressions/Maps/key_value_equals_operator_t01: MissingCompileTimeError # Issue 32557
 Language/Expressions/Method_Invocation/Ordinary_Invocation/accessible_instance_member_t04: CompileTimeError
-Language/Expressions/Method_Invocation/Ordinary_Invocation/function_type_t01: MissingCompileTimeError # Issue 32975
 Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t02: CompileTimeError
 Language/Expressions/Multiplicative_Expressions/syntax_t01: CompileTimeError
 Language/Expressions/Postfix_Expressions/syntax_t01: CompileTimeError
@@ -137,8 +117,6 @@
 Language/Generics/upper_bound_t01: MissingCompileTimeError # Issue 33308
 Language/Libraries_and_Scripts/Exports/reexport_t01: MissingCompileTimeError # Issue 12916
 Language/Libraries_and_Scripts/Exports/same_name_t01: MissingCompileTimeError # Issue 12916
-Language/Libraries_and_Scripts/Imports/invalid_uri_t01: MissingCompileTimeError # Issue 33650
-Language/Metadata/compilation_t03: MissingCompileTimeError # Issue 34205
 Language/Mixins/Mixin_Application/deferred_t01: MissingCompileTimeError # Issue 30273
 Language/Mixins/Mixin_Application/static_warning_t01: MissingCompileTimeError # Mixin super equirement
 Language/Mixins/Mixin_Application/syntax_t21: CompileTimeError # The test even says in the comment it should be a compile time error
@@ -160,18 +138,9 @@
 Language/Statements/Continue/label_t07: MissingCompileTimeError # Issue 34206
 Language/Statements/Switch/equal_operator_t01: MissingCompileTimeError # Issue 32557
 Language/Statements/Switch/equal_operator_t02: MissingCompileTimeError # Issue 32557
-Language/Statements/Switch/execution_t01: MissingCompileTimeError # Issue 34207
-Language/Statements/Switch/expressions_t01: MissingCompileTimeError # Issue 34207
-Language/Statements/Switch/expressions_t02: MissingCompileTimeError # Issue 34207
-Language/Statements/Switch/expressions_t04: MissingCompileTimeError # Issue 34207
-Language/Statements/Switch/type_t01: MissingCompileTimeError # Issue 34207
-Language/Statements/Switch/type_t02: MissingCompileTimeError # Issue 34207
 Language/Statements/Try/catch_scope_t01: CompileTimeError
 Language/Types/Dynamic_Type_System/malbounded_type_error_t01: MissingCompileTimeError # Issue 33308
 Language/Types/Interface_Types/subtype_t30: CompileTimeError
-Language/Types/Parameterized_Types/arity_mismatch_t01: MissingCompileTimeError # Issue 32972
-Language/Types/Parameterized_Types/arity_mismatch_t05: MissingCompileTimeError # Issue 32972
-Language/Types/Parameterized_Types/arity_mismatch_t07: MissingCompileTimeError # Issue 32972
 Language/Types/Parameterized_Types/malbounded_t01: MissingCompileTimeError # Issue 33308
 Language/Types/Parameterized_Types/malbounded_t02: MissingCompileTimeError # Issue 33308
 Language/Types/Parameterized_Types/malbounded_t03: MissingCompileTimeError # Issue 33308
@@ -181,32 +150,63 @@
 Language/Types/Static_Types/malformed_type_t01/04: MissingCompileTimeError # Issue 33308
 Language/Types/Static_Types/malformed_type_t01/05: MissingCompileTimeError # Issue 33308
 Language/Types/Static_Types/malformed_type_t01/06: MissingCompileTimeError # Issue 33308
-Language/Types/Type_Void/returning_t03: MissingCompileTimeError # Issue 30470
-Language/Types/Type_Void/returning_t04: MissingCompileTimeError # Issue 30470
-Language/Types/Type_Void/returning_t05: MissingCompileTimeError # Issue 30470
 Language/Types/Type_Void/syntax_t08: MissingCompileTimeError # Issue 33308
-Language/Types/Type_Void/using_t01: MissingCompileTimeError # Issue 30470
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t01: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t03: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t04: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t05: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t06: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t07: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t08: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t09: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t10: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t12: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t13: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t14: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t15: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t17: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t18: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t20: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t21: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_l1_t01: MissingCompileTimeError
+Language/Types/Type_Void/syntax_t09: CompileTimeError # Test contains a compile-time error
+Language/Types/Type_Void/using_t02: CompileTimeError # Test contains a compile-time error
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t01: MissingCompileTimeError # Please triage this failure
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t11: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_named_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t01: MissingCompileTimeError # Please triage this failure
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t11: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_optparam_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t01: MissingCompileTimeError # Please triage this failure
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t11: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_param_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t01: MissingCompileTimeError # Issue 33308
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t03: MissingCompileTimeError # Issue 33805
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t04: MissingCompileTimeError # Issue 33805
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t05: MissingCompileTimeError # Issue 33805
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t06: MissingCompileTimeError # Issue 33597
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t07: MissingCompileTimeError # Issue 33597
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t08: MissingCompileTimeError # Issue 33597
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t09: MissingCompileTimeError # Issue 33597
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t10: MissingCompileTimeError # Issue 33597
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t12: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t13: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t14: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t15: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t16: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t17: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t18: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t19: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t20: MissingCompileTimeError # Issue 34087
+LanguageFeatures/Instantiate-to-bound/Callable/Callable_ret_extends_neg_assign_l1_t21: MissingCompileTimeError # Issue 34087
 LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_l1_t04: MissingCompileTimeError
 LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_l1_t05: MissingCompileTimeError
-LanguageFeatures/Instantiate-to-bound/class/custom_extends_neg_l2_t01: MissingCompileTimeError
 LanguageFeatures/Instantiate-to-bound/function/function_named_extends_neg_assign_l1_t01: MissingCompileTimeError
 LanguageFeatures/Instantiate-to-bound/function/function_named_extends_neg_assign_l1_t03: MissingCompileTimeError
 LanguageFeatures/Instantiate-to-bound/function/function_named_extends_neg_assign_l1_t04: MissingCompileTimeError
@@ -270,13 +270,46 @@
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l1_t04: MissingCompileTimeError
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l1_t05: MissingCompileTimeError
 LanguageFeatures/Instantiate-to-bound/typedef/typedef_ret_extends_neg_l2_t02: MissingCompileTimeError
-LibTest/collection/Maps/forEach_A01_t01: CompileTimeError
+LanguageFeatures/int-to-double/arguments_binding_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/arguments_binding_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_class_member_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_class_member_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_global_variable_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_global_variable_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_local_variable_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_local_variable_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_super_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_super_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_this_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/assignment_this_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/max_acceptable_value_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/min_acceptable_values_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t02: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t03: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/representation_t04: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/return_value_t01: CompileTimeError # Please triage this failure
+LanguageFeatures/int-to-double/return_value_t02: CompileTimeError # Please triage this failureLibTest/collection/Maps/forEach_A01_t01: CompileTimeError
 LibTest/collection/Maps/forEach_A01_t03: CompileTimeError
 LibTest/collection/Maps/forEach_A01_t04: CompileTimeError
 LibTest/collection/Maps/forEach_A01_t05: CompileTimeError
 LibTest/collection/Maps/forEach_A01_t06: CompileTimeError
 LibTest/collection/Maps/forEach_A02_t01: CompileTimeError
 
+[ $compiler != dart2js && $fasta ]
+Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t01: MissingCompileTimeError # Issue 34191
+Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t02: MissingCompileTimeError # Issue 34191
+Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t03: MissingCompileTimeError # Issue 34191
+Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t02: MissingCompileTimeError # Issue 34192
+Language/Expressions/Constants/exception_t01: MissingCompileTimeError # Issue 31936
+Language/Expressions/Constants/exception_t03: MissingCompileTimeError # Issue 31936
+Language/Expressions/Constants/exception_t04: MissingCompileTimeError # Issue 31936
+Language/Expressions/Constants/literal_string_t02: MissingCompileTimeError # Issue 34192
+Language/Expressions/Constants/no_other_constant_expressions_t11: MissingCompileTimeError # Issue 34192
+Language/Expressions/Constants/ternary_operator_t02: MissingCompileTimeError # Issue 34192
+Language/Expressions/Instance_Creation/Const/exception_t01: MissingCompileTimeError # Issue 31936
+Language/Metadata/compilation_t03: MissingCompileTimeError # Issue 34205
+
 [ $strong && ($compiler == dartk || $compiler == dartkb) ]
 Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t01: Crash
 Language/Expressions/Additive_Expressions/syntax_t01: RuntimeError
diff --git a/tests/co19_2/co19_2-runtime.status b/tests/co19_2/co19_2-runtime.status
index 6033fda..7e3177d 100644
--- a/tests/co19_2/co19_2-runtime.status
+++ b/tests/co19_2/co19_2-runtime.status
@@ -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.
 
-[ $runtime != none && !$checked ]
+[ $compiler != dart2js && $runtime != none && !$checked ]
 LibTest/async/Future/catchError_A03_t05: RuntimeError
 
 [ $compiler == fasta || $runtime == dart_precompiled || $runtime == flutter || $runtime == vm ]
diff --git a/tests/compiler/dart2js/analysis_options.yaml b/tests/compiler/dart2js/analysis_options.yaml
index 1bdb858..40dc4a9 100644
--- a/tests/compiler/dart2js/analysis_options.yaml
+++ b/tests/compiler/dart2js/analysis_options.yaml
@@ -3,8 +3,6 @@
 # BSD-style license that can be found in the LICENSE file.
 
 analyzer:
-  strong-mode: true
-
   language:
     enableSuperMixins: false
 
diff --git a/tests/compiler/dart2js/analyze_dart_test.dart b/tests/compiler/dart2js/analyze_dart_test.dart
deleted file mode 100644
index 6d3f559..0000000
--- a/tests/compiler/dart2js/analyze_dart_test.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:testing/src/run_tests.dart" as testing show main;
-
-main() {
-  // This method is async, but keeps a port open to prevent the VM from exiting
-  // prematurely.
-  return testing.main(<String>[
-    "--config=pkg/compiler/testing_dart.json",
-    "--verbose",
-    "analyze"
-  ]);
-}
diff --git a/tests/compiler/dart2js/closure/data/instantiation1.dart b/tests/compiler/dart2js/closure/data/instantiation1.dart
index 9e86e11..22e5276 100644
--- a/tests/compiler/dart2js/closure/data/instantiation1.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation1.dart
@@ -11,7 +11,6 @@
   /*element: B.method:hasThis*/
   method() {
     return
-        /*kernel.hasThis*/
         /*strong.fields=[this],free=[this],hasThis*/
         /*omit.hasThis*/
         () {
diff --git a/tests/compiler/dart2js/closure/data/instantiation2.dart b/tests/compiler/dart2js/closure/data/instantiation2.dart
index dc0c408..c1f6335 100644
--- a/tests/compiler/dart2js/closure/data/instantiation2.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation2.dart
@@ -11,7 +11,6 @@
   /*element: B.method:hasThis*/
   method() {
     return
-        /*kernel.hasThis*/
         /*strong.fields=[this],free=[this],hasThis*/
         /*omit.fields=[this],free=[this],hasThis*/
         () {
diff --git a/tests/compiler/dart2js/closure/data/list_literal_untested_strong_trust.dart b/tests/compiler/dart2js/closure/data/list_literal_untested_strong_trust.dart
index 5d3b976..e6a6e1a 100644
--- a/tests/compiler/dart2js/closure/data/list_literal_untested_strong_trust.dart
+++ b/tests/compiler/dart2js/closure/data/list_literal_untested_strong_trust.dart
@@ -6,7 +6,6 @@
 
 @NoInline()
 method<T>() {
-  /*kernel.*/
   /*omit.*/
   /*strong.fields=[T],free=[T]*/
   dynamic local() => <T>[];
diff --git a/tests/compiler/dart2js/closure/data/list_literal_untested_trust.dart b/tests/compiler/dart2js/closure/data/list_literal_untested_trust.dart
index a89aa0e..e394d32 100644
--- a/tests/compiler/dart2js/closure/data/list_literal_untested_trust.dart
+++ b/tests/compiler/dart2js/closure/data/list_literal_untested_trust.dart
@@ -9,7 +9,6 @@
   /*element: A.method:hasThis*/
   @NoInline()
   method() {
-    /*kernel.hasThis*/
     /*omit.hasThis*/
     /*strong.fields=[this],free=[this],hasThis*/
     dynamic local() => <T>[];
diff --git a/tests/compiler/dart2js/closure/data/map_literal_untested_strong_trust.dart b/tests/compiler/dart2js/closure/data/map_literal_untested_strong_trust.dart
index db1a485..d6c830b 100644
--- a/tests/compiler/dart2js/closure/data/map_literal_untested_strong_trust.dart
+++ b/tests/compiler/dart2js/closure/data/map_literal_untested_strong_trust.dart
@@ -6,7 +6,6 @@
 
 @NoInline()
 method<T>() {
-  /*kernel.*/
   /*omit.*/
   /*strong.fields=[T],free=[T]*/
   dynamic local() => <T, int>{};
diff --git a/tests/compiler/dart2js/closure/data/map_literal_untested_trust.dart b/tests/compiler/dart2js/closure/data/map_literal_untested_trust.dart
index dfc0fa5..fe4e3ae 100644
--- a/tests/compiler/dart2js/closure/data/map_literal_untested_trust.dart
+++ b/tests/compiler/dart2js/closure/data/map_literal_untested_trust.dart
@@ -9,7 +9,6 @@
   /*element: A.method:hasThis*/
   @NoInline()
   method() {
-    /*kernel.hasThis*/
     /*omit.hasThis*/
     /*strong.fields=[this],free=[this],hasThis*/
     dynamic local() => <T, int>{};
diff --git a/tests/compiler/dart2js/closure/data/test_type.dart b/tests/compiler/dart2js/closure/data/test_type.dart
index 63cd76b..afa2f5b 100644
--- a/tests/compiler/dart2js/closure/data/test_type.dart
+++ b/tests/compiler/dart2js/closure/data/test_type.dart
@@ -38,7 +38,6 @@
 class Class3<T> {
   /*element: Class3.method3:hasThis*/
   method3(dynamic o) {
-    /*kernel.fields=[o],free=[o],hasThis*/
     /*omit.fields=[o],free=[o],hasThis*/
     /*strong.fields=[o,this],free=[o,this],hasThis*/
     T local() => o;
diff --git a/tests/compiler/dart2js/closure/data/type_annotations.dart b/tests/compiler/dart2js/closure/data/type_annotations.dart
index cf9d582..84a8a53 100644
--- a/tests/compiler/dart2js/closure/data/type_annotations.dart
+++ b/tests/compiler/dart2js/closure/data/type_annotations.dart
@@ -48,7 +48,6 @@
 class Class2<T> {
   /*element: Class2.method2:hasThis*/
   method2() {
-    /*kernel.hasThis*/
     /*omit.hasThis*/
     /*strong.fields=[this],free=[this],hasThis*/
     dynamic local(T t) => t;
@@ -64,7 +63,6 @@
 class Class3<T> {
   /*element: Class3.method3:hasThis*/
   method3(dynamic o) {
-    /*kernel.fields=[o],free=[o],hasThis*/
     /*omit.fields=[o],free=[o],hasThis*/
     /*strong.fields=[o,this],free=[o,this],hasThis*/
     T local() => o;
@@ -108,7 +106,6 @@
 class Class6<T> {
   /*element: Class6.method6:hasThis*/
   method6() {
-    /*kernel.hasThis*/
     /*omit.hasThis*/
     /*strong.fields=[this],free=[this],hasThis*/
     dynamic local(T t) {
@@ -129,7 +126,6 @@
 class Class7<T> {
   /*element: Class7.method7:hasThis*/
   method7(dynamic o) {
-    /*kernel.fields=[o],free=[o],hasThis*/
     /*omit.fields=[o],free=[o],hasThis*/
     /*strong.fields=[o,this],free=[o,this],hasThis*/
     T local() {
diff --git a/tests/compiler/dart2js/codegen/expect_annotations_test.dart b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
index d23eb44..93f0714 100644
--- a/tests/compiler/dart2js/codegen/expect_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
@@ -68,15 +68,15 @@
       'AssumeDynamicClass is unresolved.');
 
   void testTypeMatch(FunctionEntity function, TypeMask expectedParameterType,
-      TypeMask expectedReturnType, TypesInferrer inferrer) {
+      TypeMask expectedReturnType, GlobalTypeInferenceResults results) {
     compiler.codegenWorldBuilder.forEachParameterAsLocal(function,
         (Local parameter) {
-      TypeMask type = inferrer.getTypeOfParameter(parameter);
+      TypeMask type = results.resultOfParameter(parameter);
       Expect.equals(
           expectedParameterType, simplify(type, closedWorld), "$parameter");
     });
     if (expectedReturnType != null) {
-      TypeMask type = inferrer.getReturnTypeOfMember(function);
+      TypeMask type = results.resultOfMember(function).returnType;
       Expect.equals(
           expectedReturnType, simplify(type, closedWorld), "$function");
     }
@@ -107,13 +107,13 @@
         optimizerHints.assumeDynamic(
             closedWorld.elementEnvironment, closedWorld.commonElements, method),
         "Unexpected annotation of @AssumeDynamic on '$method'.");
-    TypesInferrer inferrer = compiler.globalInference.typesInferrerInternal;
+    GlobalTypeInferenceResults results =
+        compiler.globalInference.resultsForTesting;
     if (expectTrustTypeAnnotations && expectedParameterType != null) {
-      testTypeMatch(
-          method, expectedParameterType, expectedReturnType, inferrer);
+      testTypeMatch(method, expectedParameterType, expectedReturnType, results);
     } else if (expectAssumeDynamic) {
       testTypeMatch(
-          method, closedWorld.abstractValueDomain.dynamicType, null, inferrer);
+          method, closedWorld.abstractValueDomain.dynamicType, null, results);
     }
   }
 
diff --git a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
index 900a628..f7feed2 100644
--- a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
@@ -55,8 +55,8 @@
     var result = await runCompiler(
         memorySourceFiles: {'main.dart': TEST}, options: options);
     var compiler = result.compiler;
-    var typesInferrer = compiler.globalInference.typesInferrerInternal;
-    var closedWorld = typesInferrer.closedWorld;
+    var results = compiler.globalInference.resultsForTesting;
+    var closedWorld = results.closedWorld;
     var elementEnvironment = closedWorld.elementEnvironment;
 
     ClassEntity classA =
@@ -64,14 +64,14 @@
 
     checkReturn(String name, TypeMask type) {
       MemberEntity element = elementEnvironment.lookupClassMember(classA, name);
-      var mask = typesInferrer.getReturnTypeOfMember(element);
+      var mask = results.resultOfMember(element).returnType;
       Expect.isTrue(type.containsMask(mask, closedWorld));
     }
 
     checkType(String name, type) {
       MemberEntity element = elementEnvironment.lookupClassMember(classA, name);
-      Expect.isTrue(type.containsMask(
-          typesInferrer.getTypeOfMember(element), closedWorld));
+      Expect.isTrue(
+          type.containsMask(results.resultOfMember(element).type, closedWorld));
     }
 
     var intMask =
diff --git a/tests/compiler/dart2js/codegen/type_inference8_test.dart b/tests/compiler/dart2js/codegen/type_inference8_test.dart
index 1b14a0b..b3d232e 100644
--- a/tests/compiler/dart2js/codegen/type_inference8_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference8_test.dart
@@ -37,13 +37,13 @@
       memorySourceFiles: {'main.dart': TEST1},
       options: [Flags.disableInlining]);
   var compiler = result.compiler;
-  var typesInferrer = compiler.globalInference.typesInferrerInternal;
-  var closedWorld = typesInferrer.closedWorld;
+  var results = compiler.globalInference.resultsForTesting;
+  var closedWorld = results.closedWorld;
   var elementEnvironment = closedWorld.elementEnvironment;
   var commonMasks = closedWorld.abstractValueDomain;
   var element = elementEnvironment.lookupLibraryMember(
       elementEnvironment.mainLibrary, 'foo');
-  var mask = typesInferrer.getReturnTypeOfMember(element);
+  var mask = results.resultOfMember(element).returnType;
   var falseType =
       new ValueTypeMask(commonMasks.boolType, new FalseConstantValue());
   // 'foo' should always return false
@@ -52,7 +52,7 @@
   dynamic bar = elementEnvironment.lookupLibraryMember(
       elementEnvironment.mainLibrary, 'bar');
   compiler.codegenWorldBuilder.forEachParameterAsLocal(bar, (barArg) {
-    var barArgMask = typesInferrer.getTypeOfParameter(barArg);
+    var barArgMask = results.resultOfParameter(barArg);
     Expect.equals(falseType, barArgMask);
   });
   var barCode = compiler.backend.getGeneratedCode(bar);
@@ -85,19 +85,19 @@
       memorySourceFiles: {'main.dart': TEST2},
       options: [Flags.disableInlining]);
   var compiler = result.compiler;
-  var typesInferrer = compiler.globalInference.typesInferrerInternal;
-  var commonMasks = typesInferrer.closedWorld.abstractValueDomain;
-  var closedWorld = typesInferrer.closedWorld;
+  var results = compiler.globalInference.resultsForTesting;
+  var closedWorld = results.closedWorld;
+  var commonMasks = closedWorld.abstractValueDomain;
   var elementEnvironment = closedWorld.elementEnvironment;
   var element = elementEnvironment.lookupLibraryMember(
       elementEnvironment.mainLibrary, 'foo');
-  var mask = typesInferrer.getReturnTypeOfMember(element);
+  var mask = results.resultOfMember(element).returnType;
   // Can't infer value for foo's return type, it could be either true or false
   Expect.identical(commonMasks.boolType, mask);
   dynamic bar = elementEnvironment.lookupLibraryMember(
       elementEnvironment.mainLibrary, 'bar');
   compiler.codegenWorldBuilder.forEachParameterAsLocal(bar, (barArg) {
-    var barArgMask = typesInferrer.getTypeOfParameter(barArg);
+    var barArgMask = results.resultOfParameter(barArg);
     // The argument to bar should have the same type as the return type of foo
     Expect.identical(commonMasks.boolType, barArgMask);
   });
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 2c3682a..f6d4117 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -2,7 +2,6 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-analyze_dart_test: Slow, Pass
 analyze_test: Slow, Pass
 async_await_syntax_test: Pass # DON'T CHANGE THIS LINE -- Don't mark these tests as failing. Instead, fix the errors/warnings that they report or update the whitelist in the test-files to temporarily allow digression.
 boolified_operator_test: Fail # Issue 8001
@@ -15,6 +14,7 @@
 codegen/simple_function_subtype_test: Fail # simple_function_subtype_test is temporarily(?) disabled due to new method for building function type tests.
 codegen/string_escapes_test: Fail # Issue 33060
 deferred_loading/deferred_loading_test: Slow, Pass
+end_to_end/dump_info_test: Slow, Pass
 equivalence/id_equivalence1_test: Pass, Slow
 equivalence/id_equivalence2_test: Pass, Slow
 generate_code_with_compile_time_errors_test: RuntimeError # not supported yet with the new FE.
diff --git a/tests/compiler/dart2js/deferred_loading/libs/type_argument_dependency_lib2.dart b/tests/compiler/dart2js/deferred_loading/libs/type_argument_dependency_lib2.dart
index a5a50fd..81e799e 100644
--- a/tests/compiler/dart2js/deferred_loading/libs/type_argument_dependency_lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/libs/type_argument_dependency_lib2.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: A:OutputUnit(1, {c})*/
 /*strong.class: A:OutputUnit(main, {})*/
 /*omit.class: A:OutputUnit(main, {})*/
 class A {
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 6cb57c2..1bda357 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -559,7 +559,6 @@
           new AnnotatedCode.fromText(annotatedCode, commentStart, commentEnd)
     };
     Map<String, MemberAnnotations<IdValue>> expectedMaps = {
-      kernelMarker: new MemberAnnotations<IdValue>(),
       strongMarker: new MemberAnnotations<IdValue>(),
       omitMarker: new MemberAnnotations<IdValue>(),
     };
@@ -800,7 +799,6 @@
   throw new UnsupportedError('Unsupported id $id.');
 }
 
-const String kernelMarker = 'kernel.';
 const String strongMarker = 'strong.';
 const String omitMarker = 'omit.';
 
@@ -819,7 +817,7 @@
 /// annotations without prefixes.
 void computeExpectedMap(Uri sourceUri, AnnotatedCode code,
     Map<String, MemberAnnotations<IdValue>> maps) {
-  List<String> mapKeys = [kernelMarker, strongMarker, omitMarker];
+  List<String> mapKeys = [strongMarker, omitMarker];
   Map<String, AnnotatedCode> split = splitByPrefixes(code, mapKeys);
 
   split.forEach((String marker, AnnotatedCode code) {
diff --git a/tests/compiler/dart2js/impact/data/async.dart b/tests/compiler/dart2js/impact/data/async.dart
index 8f67a76..7098aef 100644
--- a/tests/compiler/dart2js/impact/data/async.dart
+++ b/tests/compiler/dart2js/impact/data/async.dart
@@ -61,15 +61,6 @@
   _wrapJsFunctionForAsync]*/
 testAsyncStar() async* {}
 
-/*kernel.element: testLocalSyncStar:
- static=[
-  _IterationMarker.endOfIteration,
-  _IterationMarker.uncaughtError,
-  _IterationMarker.yieldStar,
-  _makeSyncStarIterable<dynamic>(1),
-  def:local],
- type=[inst:Function]
-*/
 /*strong.element: testLocalSyncStar:
  static=[
   _IterationMarker.endOfIteration,
@@ -94,18 +85,6 @@
   return local;
 }
 
-/*kernel.element: testLocalAsync:
- static=[
-  StreamIterator.,
-  _asyncAwait,
-  _asyncRethrow,
-  _asyncReturn,
-  _asyncStartSync,
-  _makeAsyncAwaitCompleter<dynamic>(0),
-  _wrapJsFunctionForAsync,
-  def:local],
- type=[inst:Function]
-*/
 /*strong.element: testLocalAsync:
  static=[
   StreamIterator.,
@@ -133,18 +112,6 @@
   return local;
 }
 
-/*kernel.element: testLocalAsyncStar:
- static=[
- StreamIterator.,
-  _IterationMarker.yieldSingle,
-  _IterationMarker.yieldStar,
-  _asyncStarHelper,
-  _makeAsyncStarStreamController<dynamic>(1),
-  _streamOfController,
-  _wrapJsFunctionForAsync,
-  def:local],
- type=[inst:Function]
-*/
 /*strong.element: testLocalAsyncStar:
  static=[
   StreamIterator.,
@@ -172,17 +139,6 @@
   return local;
 }
 
-/*kernel.element: testAnonymousSyncStar:
- static=[
-  _IterationMarker.endOfIteration,
-  _IterationMarker.uncaughtError,
-  _IterationMarker.yieldStar,
-  _makeSyncStarIterable<dynamic>(1),
-  def:<anonymous>],
- type=[
-  check:Iterable<dynamic>,
-  inst:Function]
-*/
 /*strong.element: testAnonymousSyncStar:
  static=[
   _IterationMarker.endOfIteration,
@@ -206,20 +162,6 @@
   return () sync* {};
 }
 
-/*kernel.element: testAnonymousAsync:
- static=[
-  StreamIterator.,
-  _asyncAwait,
-  _asyncRethrow,
-  _asyncReturn,
-  _asyncStartSync,
-  _makeAsyncAwaitCompleter<dynamic>(0),
-  _wrapJsFunctionForAsync,
-  def:<anonymous>],
- type=[
-  check:Future<dynamic>,
-  inst:Function]
-*/
 /*strong.element: testAnonymousAsync:
  static=[
   StreamIterator.,
@@ -246,20 +188,6 @@
   return () async {};
 }
 
-/*kernel.element: testAnonymousAsyncStar:
- static=[
-  StreamIterator.,
-  _IterationMarker.yieldSingle,
-  _IterationMarker.yieldStar,
-  _asyncStarHelper,
-  _makeAsyncStarStreamController<dynamic>(1),
-  _streamOfController,
-  _wrapJsFunctionForAsync,
-  def:<anonymous>],
- type=[
-  check:Stream<dynamic>,
-  inst:Function]
-*/
 /*strong.element: testAnonymousAsyncStar:
  static=[
   StreamIterator.,
@@ -286,23 +214,6 @@
   return () async* {};
 }
 
-/*kernel.element: testAsyncForIn:
- dynamic=[
-  cancel(0),
-  current,
-  moveNext(0)],
- static=[
-  StreamIterator.,
-  _asyncAwait,
-  _asyncRethrow,
-  _asyncReturn,
-  _asyncStartSync,
-  _makeAsyncAwaitCompleter<dynamic>(0),
-  _wrapJsFunctionForAsync],
- type=[
-  inst:JSNull,
-  inst:Null]
-*/
 /*strong.element: testAsyncForIn:
  dynamic=[
   cancel(0),
@@ -327,24 +238,6 @@
   await for (var e in o) {}
 }
 
-/*kernel.element: testAsyncForInTyped:
- dynamic=[
-  cancel(0),
-  current,
-  moveNext(0)],
- static=[
-  StreamIterator.,
-  _asyncAwait,
-  _asyncRethrow,
-  _asyncReturn,
-  _asyncStartSync,
-  _makeAsyncAwaitCompleter<dynamic>(0),
-  _wrapJsFunctionForAsync],
- type=[
-  check:int,
-  inst:JSNull,
-  inst:Null]
-*/
 /*strong.element: testAsyncForInTyped:
  dynamic=[
   cancel(0),
diff --git a/tests/compiler/dart2js/impact/data/classes.dart b/tests/compiler/dart2js/impact/data/classes.dart
index 3085091..20267d2 100644
--- a/tests/compiler/dart2js/impact/data/classes.dart
+++ b/tests/compiler/dart2js/impact/data/classes.dart
@@ -137,10 +137,6 @@
 testForwardingConstructor() => new ForwardingConstructorClass(null);
 
 class ForwardingConstructorTypedSuperClass {
-  /*kernel.element: ForwardingConstructorTypedSuperClass.:
-   static=[Object.(0)],
-   type=[check:int]
-  */
   /*strong.element: ForwardingConstructorTypedSuperClass.:
    static=[Object.(0)],
    type=[inst:JSBool,param:int]
@@ -158,10 +154,6 @@
 testForwardingConstructorTyped() => new ForwardingConstructorTypedClass(null);
 
 class ForwardingConstructorGenericSuperClass<T> {
-  /*kernel.element: ForwardingConstructorGenericSuperClass.:
-   static=[Object.(0)],
-   type=[check:ForwardingConstructorGenericSuperClass.T]
-  */
   /*strong.element: ForwardingConstructorGenericSuperClass.:
    static=[
     Object.(0),
@@ -199,17 +191,6 @@
 }
 
 enum Enum {
-  /*kernel.element: Enum.A:static=[Enum.(2)],
-   type=[
-    check:Enum,
-    inst:JSDouble,
-    inst:JSInt,
-    inst:JSNumber,
-    inst:JSPositiveInt,
-    inst:JSString,
-    inst:JSUInt31,
-    inst:JSUInt32]
-  */
   /*strong.element: Enum.A:static=[Enum.(2)],
    type=[
     inst:JSBool,
@@ -228,12 +209,6 @@
 /*element: testEnum:static=[Enum.A]*/
 testEnum() => Enum.A;
 
-/*kernel.element: staticGenericMethod:
- type=[
-  check:List<staticGenericMethod.T>,
-  check:staticGenericMethod.T,
-  inst:List<dynamic>]
- */
 /*strong.element: staticGenericMethod:
  static=[
   checkSubtype,
@@ -256,10 +231,6 @@
 */
 List<T> staticGenericMethod<T>(T arg) => [arg];
 
-/*kernel.element: testStaticGenericMethod:
-  static=[staticGenericMethod(1)],
-  type=[inst:JSBool]
-*/
 /*strong.element: testStaticGenericMethod:
   static=[staticGenericMethod<bool>(1)],
   type=[inst:JSBool]
@@ -268,14 +239,6 @@
   staticGenericMethod<bool>(true);
 }
 
-/*kernel.element: testInstanceGenericMethod:
- dynamic=[call(1),genericMethod(1)],
- static=[
-  GenericClass.generative(0),
-  assertIsSubtype,
-  throwTypeError],
- type=[inst:JSBool]
-*/
 /*strong.element: testInstanceGenericMethod:
  dynamic=[genericMethod<bool>(1)],
  static=[
@@ -292,7 +255,6 @@
   // ignore: UNUSED_FIELD
   final _field;
 
-  /*kernel.element: AbstractClass.:type=[check:AbstractClass,inst:JSNull]*/
   /*strong.element: AbstractClass.:type=[inst:JSNull]*/
   factory AbstractClass() => null;
 }
@@ -330,13 +292,6 @@
 class GenericClass<X, Y> {
   const GenericClass.generative();
 
-  /*kernel.element: GenericClass.genericMethod:
-   type=[
-    check:Map<GenericClass.X,genericMethod.T>,
-    check:genericMethod.T,
-    inst:JSNull,
-    inst:Map<dynamic,dynamic>]
-  */
   /*strong.element: GenericClass.genericMethod:
    static=[
     checkSubtype,
diff --git a/tests/compiler/dart2js/impact/data/constructors.dart b/tests/compiler/dart2js/impact/data/constructors.dart
index 440aded..ab690a7 100644
--- a/tests/compiler/dart2js/impact/data/constructors.dart
+++ b/tests/compiler/dart2js/impact/data/constructors.dart
@@ -131,7 +131,6 @@
 testImplicitConstructor() => new ClassImplicitConstructor();
 
 class ClassFactoryConstructor {
-  /*kernel.element: ClassFactoryConstructor.:type=[check:ClassFactoryConstructor,inst:JSNull]*/
   /*strong.element: ClassFactoryConstructor.:type=[inst:JSNull]*/
   factory ClassFactoryConstructor() => null;
 }
@@ -143,7 +142,6 @@
   /*element: Class.generative:static=[Object.(0)]*/
   const Class.generative();
 
-  /*kernel.element: Class.fact:type=[check:Class,inst:JSNull]*/
   /*strong.element: Class.fact:type=[inst:JSNull]*/
   factory Class.fact() => null;
 
@@ -154,7 +152,6 @@
   /*element: GenericClass.generative:static=[Object.(0)]*/
   const GenericClass.generative();
 
-  /*kernel.element: GenericClass.fact:type=[check:GenericClass<GenericClass.X,GenericClass.Y>,inst:JSNull]*/
   /*strong.element: GenericClass.fact:type=[inst:JSBool,inst:JSNull,param:Object]*/
   factory GenericClass.fact() => null;
 
diff --git a/tests/compiler/dart2js/impact/data/fallthrough.dart b/tests/compiler/dart2js/impact/data/fallthrough.dart
deleted file mode 100644
index a49177a..0000000
--- a/tests/compiler/dart2js/impact/data/fallthrough.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: main:
- static=[testSwitchWithFallthrough(1)],
- type=[inst:JSNull]
-*/
-main() {
-  testSwitchWithFallthrough(null);
-}
-
-/*element: testSwitchWithFallthrough:
- static=[
-  FallThroughError._create(2),
-  throwExpression,
-  wrapException],
- type=[inst:JSDouble,
-  inst:JSInt,
-  inst:JSNumber,
-  inst:JSPositiveInt,
-  inst:JSString,
-  inst:JSUInt31,
-  inst:JSUInt32]
-*/
-testSwitchWithFallthrough(o) {
-  switch (o) {
-    case 0:
-    // ignore: CASE_BLOCK_NOT_TERMINATED
-    case 1:
-      o = 2;
-    case 2:
-      o = 3;
-      return;
-    case 3:
-    default:
-  }
-}
diff --git a/tests/compiler/dart2js/impact/data/initializers.dart b/tests/compiler/dart2js/impact/data/initializers.dart
index a262272..0155408 100644
--- a/tests/compiler/dart2js/impact/data/initializers.dart
+++ b/tests/compiler/dart2js/impact/data/initializers.dart
@@ -28,11 +28,9 @@
   testGenericClass();
 }
 
-/*kernel.element: testDefaultValuesPositional:type=[check:bool,inst:JSBool]*/
 /*strong.element: testDefaultValuesPositional:type=[inst:JSBool,param:bool]*/
 testDefaultValuesPositional([bool value = false]) {}
 
-/*kernel.element: testDefaultValuesNamed:type=[check:bool,inst:JSBool]*/
 /*strong.element: testDefaultValuesNamed:type=[inst:JSBool,param:bool]*/
 testDefaultValuesNamed({bool value: false}) {}
 
@@ -86,7 +84,6 @@
 
 /*element: ClassInstanceFieldWithInitializer.:static=[Object.(0)]*/
 class ClassInstanceFieldWithInitializer {
-  /*kernel.element: ClassInstanceFieldWithInitializer.field:type=[inst:JSBool]*/
   /*strong.element: ClassInstanceFieldWithInitializer.field:type=[inst:JSBool,param:bool]*/
   var field = false;
 }
@@ -96,7 +93,6 @@
 
 /*element: ClassInstanceFieldTyped.:static=[Object.(0)]*/
 class ClassInstanceFieldTyped {
-  /*kernel.element: ClassInstanceFieldTyped.field:type=[check:int,inst:JSNull]*/
   /*strong.element: ClassInstanceFieldTyped.field:type=[inst:JSBool,inst:JSNull,param:int]*/
   int field;
 }
@@ -124,7 +120,6 @@
 testSuperInitializer() => new ClassSuperInitializer();
 
 class ClassGeneric<T> {
-  /*kernel.element: ClassGeneric.:static=[Object.(0)],type=[check:ClassGeneric.T]*/
   /*strong.element: ClassGeneric.:
    static=[
     Object.(0),
diff --git a/tests/compiler/dart2js/impact/data/invokes.dart b/tests/compiler/dart2js/impact/data/invokes.dart
index 1633c30..ae0262a 100644
--- a/tests/compiler/dart2js/impact/data/invokes.dart
+++ b/tests/compiler/dart2js/impact/data/invokes.dart
@@ -115,18 +115,9 @@
   topLevelFunction3(15, c: 16, b: 17);
 }
 
-/*kernel.element: topLevelFunction1Typed:type=[check:int,check:void]*/
 /*strong.element: topLevelFunction1Typed:type=[inst:JSBool,param:int]*/
 void topLevelFunction1Typed(int a) {}
 
-/*kernel.element: topLevelFunction2Typed:
- type=[
-  check:String,
-  check:double,
-  check:int,
-  check:num,
-  inst:JSNull]
-*/
 /*strong.element: topLevelFunction2Typed:
  type=[
   inst:JSBool,
@@ -137,14 +128,6 @@
 */
 int topLevelFunction2Typed(String a, [num b, double c]) => null;
 
-/*kernel.element: topLevelFunction3Typed:
- type=[
-  check:List<int>,
-  check:Map<String,bool>,
-  check:bool,
-  check:double,
-  inst:JSNull]
-*/
 /*strong.element: topLevelFunction3Typed:
  static=[
   checkSubtype,
@@ -169,30 +152,6 @@
   return null;
 }
 
-/*kernel.element: testTopLevelInvokeTyped:
- static=[
-  topLevelFunction1Typed(1),
-  topLevelFunction2Typed(1),
-  topLevelFunction2Typed(2),
-  topLevelFunction2Typed(3),
-  topLevelFunction3Typed(1),
-  topLevelFunction3Typed(1,b),
-  topLevelFunction3Typed(1,b,c),
-  topLevelFunction3Typed(1,b,c),
-  topLevelFunction3Typed(1,c)],
- type=[
-  inst:JSBool,
-  inst:JSDouble,
-  inst:JSInt,
-  inst:JSNull,
-  inst:JSNumber,
-  inst:JSPositiveInt,
-  inst:JSString,
-  inst:JSUInt31,
-  inst:JSUInt32,
-  inst:List<dynamic>,
-  inst:Map<dynamic,dynamic>]
-*/
 /*strong.element: testTopLevelInvokeTyped:
  static=[
   topLevelFunction1Typed(1),
@@ -229,7 +188,6 @@
   topLevelFunction3Typed(false, c: {'16': false}, b: [17]);
 }
 
-/*kernel.element: topLevelFunctionTyped1:type=[check:void Function(num)]*/
 /*strong.element: topLevelFunctionTyped1:
  static=[
   checkSubtype,
@@ -249,7 +207,6 @@
 */
 topLevelFunctionTyped1(void a(num b)) {}
 
-/*kernel.element: topLevelFunctionTyped2:type=[check:void Function(num,[String])]*/
 /*strong.element: topLevelFunctionTyped2:
  static=[
   checkSubtype,
@@ -269,9 +226,6 @@
 */
 topLevelFunctionTyped2(void a(num b, [String c])) {}
 
-/*kernel.element: topLevelFunctionTyped3:
- type=[check:void Function(num,{String c,int d})]
-*/
 /*strong.element: topLevelFunctionTyped3:
  static=[
   checkSubtype,
@@ -291,9 +245,6 @@
 */
 topLevelFunctionTyped3(void a(num b, {String c, int d})) {}
 
-/*kernel.element: topLevelFunctionTyped4:
- type=[check:void Function(num,{int c,String d})]
-*/
 /*strong.element: topLevelFunctionTyped4:
  static=[
   checkSubtype,
@@ -337,7 +288,6 @@
 /*element: testTopLevelGetterGet:static=[topLevelGetter]*/
 testTopLevelGetterGet() => topLevelGetter;
 
-/*kernel.element: topLevelGetterTyped:type=[check:int,inst:JSNull]*/
 /*strong.element: topLevelGetterTyped:type=[inst:JSNull]*/
 int get topLevelGetterTyped => null;
 
@@ -350,7 +300,6 @@
 /*element: testTopLevelSetterSet:static=[set:topLevelSetter],type=[inst:JSNull]*/
 testTopLevelSetterSet() => topLevelSetter = null;
 
-/*kernel.element: topLevelSetterTyped=:type=[check:int,check:void]*/
 /*strong.element: topLevelSetterTyped=:type=[inst:JSBool,param:int]*/
 void set topLevelSetterTyped(int value) {}
 
@@ -381,28 +330,24 @@
 /*element: testTopLevelFieldFinal:static=[topLevelFieldFinal]*/
 testTopLevelFieldFinal() => topLevelFieldFinal;
 
-/*kernel.element: topLevelFieldTyped:type=[check:int,inst:JSNull]*/
 /*strong.element: topLevelFieldTyped:type=[inst:JSBool,inst:JSNull,param:int]*/
 int topLevelFieldTyped;
 
 /*element: testTopLevelFieldTyped:static=[topLevelFieldTyped]*/
 testTopLevelFieldTyped() => topLevelFieldTyped;
 
-/*kernel.element: topLevelFieldGeneric1:type=[check:GenericClass<dynamic,dynamic>,inst:JSNull]*/
 /*strong.element: topLevelFieldGeneric1:type=[inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
 GenericClass topLevelFieldGeneric1;
 
 /*element: testTopLevelFieldGeneric1:static=[topLevelFieldGeneric1]*/
 testTopLevelFieldGeneric1() => topLevelFieldGeneric1;
 
-/*kernel.element: topLevelFieldGeneric2:type=[check:GenericClass<dynamic,dynamic>,inst:JSNull]*/
 /*strong.element: topLevelFieldGeneric2:type=[inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
 GenericClass<dynamic, dynamic> topLevelFieldGeneric2;
 
 /*element: testTopLevelFieldGeneric2:static=[topLevelFieldGeneric2]*/
 testTopLevelFieldGeneric2() => topLevelFieldGeneric2;
 
-/*kernel.element: topLevelFieldGeneric3:type=[check:GenericClass<int,String>,inst:JSNull]*/
 /*strong.element: topLevelFieldGeneric3:
  static=[
   checkSubtype,
@@ -511,16 +456,6 @@
   var l = 42;
 }
 
-/*kernel.element: testLocalWithInitializerTyped:
- type=[
-  check:int,
-  inst:JSDouble,
-  inst:JSInt,
-  inst:JSNumber,
-  inst:JSPositiveInt,
-  inst:JSUInt31,
-  inst:JSUInt32]
-*/
 /*strong.element: testLocalWithInitializerTyped:
  type=[
   inst:JSDouble,
@@ -535,7 +470,6 @@
   int l = 42;
 }
 
-/*kernel.element: testLocalFunction:static=[def:localFunction],type=[inst:Function]*/
 /*strong.element: testLocalFunction:
  static=[
   computeSignature,
@@ -556,10 +490,6 @@
   localFunction() {}
 }
 
-/*kernel.element: testLocalFunctionTyped:
- static=[def:localFunction],
- type=[check:String,check:int,inst:Function,inst:JSNull]
-*/
 /*strong.element: testLocalFunctionTyped:
  static=[
   computeSignature,
@@ -581,9 +511,9 @@
   int localFunction(String a) => null;
 }
 
-/*kernel.element: testLocalFunctionInvoke:static=[def:localFunction],
-  type=[inst:Function]*/
-/*strong.element: testLocalFunctionInvoke:static=[computeSignature,
+/*strong.element: testLocalFunctionInvoke:
+ dynamic=[call(0)],
+ static=[computeSignature,
   def:localFunction,
   getRuntimeTypeArguments,
   getRuntimeTypeInfo,
@@ -600,8 +530,6 @@
   localFunction();
 }
 
-/*kernel.element: testLocalFunctionGet:static=[def:localFunction],
-  type=[inst:Function]*/
 /*strong.element: testLocalFunctionGet:static=[computeSignature,
   def:localFunction,
   getRuntimeTypeArguments,
@@ -618,8 +546,6 @@
   localFunction;
 }
 
-/*kernel.element: testClosure:static=[def:<anonymous>],
-  type=[inst:Function]*/
 /*strong.element: testClosure:static=[computeSignature,
   def:<anonymous>,
   getRuntimeTypeArguments,
@@ -635,11 +561,6 @@
   () {};
 }
 
-/*kernel.element: testClosureInvoke:
- dynamic=[call(0)],
- static=[def:<anonymous>],
- type=[inst:Function]
-*/
 /*strong.element: testClosureInvoke:
  dynamic=[call(0)],
  static=[computeSignature,
diff --git a/tests/compiler/dart2js/impact/data/jsinterop.dart b/tests/compiler/dart2js/impact/data/jsinterop.dart
index 053d722..1687434 100644
--- a/tests/compiler/dart2js/impact/data/jsinterop.dart
+++ b/tests/compiler/dart2js/impact/data/jsinterop.dart
@@ -14,7 +14,6 @@
   testJsInteropClass();
 }
 
-/*kernel.element: testJsInteropMethod:type=[check:int]*/
 /*strong.element: testJsInteropMethod:*/
 @JS()
 external int testJsInteropMethod();
@@ -24,23 +23,6 @@
   /*element: JsInteropClass.:static=[JavaScriptObject.(0)]*/
   external JsInteropClass();
 
-  /*kernel.element: JsInteropClass.method:
-   type=[
-    check:double,
-    native:ApplicationCacheErrorEvent,
-    native:DomError,
-    native:DomException,
-    native:ErrorEvent,
-    native:GenericClass<dynamic>,
-    native:JsInteropClass,
-    native:MediaError,
-    native:NavigatorUserMediaError,
-    native:OverconstrainedError,
-    native:PositionError,
-    native:SensorErrorEvent,
-    native:SpeechRecognitionError,
-    native:SqlError]
-  */
   /*strong.element: JsInteropClass.method:
    type=[
     native:ApplicationCacheErrorEvent,
@@ -61,10 +43,6 @@
   external double method();
 }
 
-/*kernel.element: testJsInteropClass:
- dynamic=[call(0),method(0)],
- static=[JsInteropClass.(0)]
-*/
 /*strong.element: testJsInteropClass:
  dynamic=[method(0)],
  static=[JsInteropClass.(0)]
@@ -76,12 +54,6 @@
 /*element: GenericClass.:static=[JavaScriptObject.(0)]*/
 @JS()
 class GenericClass<T> {
-  /*kernel.element: GenericClass.method:
-   type=[
-    check:GenericClass<dynamic>,
-    check:void Function(GenericClass.T),
-    inst:JSNull]
-  */
   /*strong.element: GenericClass.method:
    static=[
     checkSubtype,
@@ -103,10 +75,6 @@
   external GenericClass method([Callback<T> callback]);
 }
 
-/*kernel.element: testOptionalGenericFunctionTypeArgument:
- dynamic=[call(0),method(0)],
- static=[GenericClass.(0)]
-*/
 /*strong.element: testOptionalGenericFunctionTypeArgument:
  dynamic=[method(0)],
  static=[GenericClass.(0)]
diff --git a/tests/compiler/dart2js/impact/data/literals.dart b/tests/compiler/dart2js/impact/data/literals.dart
index 65a8ea5..a23b41b 100644
--- a/tests/compiler/dart2js/impact/data/literals.dart
+++ b/tests/compiler/dart2js/impact/data/literals.dart
@@ -98,49 +98,15 @@
 /*element: testConstSymbol:static=[Symbol.,Symbol.(1),Symbol.validated],type=[inst:JSString,inst:Symbol]*/
 testConstSymbol() => const Symbol('main');
 
-/*kernel.element: complexSymbolField1:
- dynamic=[==,length],
- type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSString,inst:JSUInt31,inst:JSUInt32]
-*/
 /*strong.element: complexSymbolField1:
  dynamic=[==,length],
  type=[inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSString,inst:JSUInt31,inst:JSUInt32,param:bool]
 */
 const complexSymbolField1 = "true".length == 4;
 
-/*kernel.element: complexSymbolField2:dynamic=[toString(0)],static=[S],type=[inst:JSBool,inst:JSNull,inst:JSString]*/
 /*strong.element: complexSymbolField2:dynamic=[toString(0)],static=[S],type=[inst:JSBool,inst:JSNull,inst:JSString,param:String]*/
 const complexSymbolField2 = "true" "false" "${true}${null}";
 
-/*kernel.element: complexSymbolField3:
-dynamic=[+,unary-],
-static=[
- GenericClass.generative(0),
- String.fromEnvironment(1),
- Symbol.,assertIsSubtype,
- bool.fromEnvironment(1,defaultValue),
- identical(2),
- int.fromEnvironment(1,defaultValue),
- override,
- testComplexConstSymbol,
- throwTypeError],
-type=[
- check:int,
- inst:ConstantMap<dynamic,dynamic>,
- inst:ConstantProtoMap<dynamic,dynamic>,
- inst:ConstantStringMap<dynamic,dynamic>,
- inst:GeneralConstantMap<dynamic,dynamic>,
- inst:JSBool,
- inst:JSDouble,
- inst:JSInt,
- inst:JSNumber,
- inst:JSPositiveInt,
- inst:JSString,
- inst:JSUInt31,
- inst:JSUInt32,
- inst:List<int>,
- inst:Symbol]
-*/
 /*strong.element: complexSymbolField3:dynamic=[+,unary-],static=[GenericClass.generative(0),String.fromEnvironment(1),Symbol.,assertIsSubtype,bool.fromEnvironment(1,defaultValue),checkSubtype,getRuntimeTypeArgument,getRuntimeTypeArgumentIntercepted,getRuntimeTypeInfo,getTypeArgumentByIndex,identical(2),int.fromEnvironment(1,defaultValue),override,setRuntimeTypeInfo,testComplexConstSymbol,throwTypeError],type=[inst:ConstantMap<dynamic,dynamic>,inst:ConstantProtoMap<dynamic,dynamic>,inst:ConstantStringMap<dynamic,dynamic>,inst:GeneralConstantMap<dynamic,dynamic>,inst:JSArray<dynamic>,inst:JSBool,inst:JSDouble,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSInt,inst:JSMutableArray<dynamic>,inst:JSNumber,inst:JSPositiveInt,inst:JSString,inst:JSUInt31,inst:JSUInt32,inst:JSUnmodifiableArray<dynamic>,inst:List<int>,inst:Symbol,param:Map<Object,Object>]*/
 const complexSymbolField3 = const {
   0: const bool.fromEnvironment('a', defaultValue: true),
@@ -153,12 +119,10 @@
   override: const GenericClass<int, String>.generative(),
 };
 
-/*kernel.element: complexSymbolField:static=[complexSymbolField1,complexSymbolField2,complexSymbolField3]*/
 /*strong.element: complexSymbolField:static=[complexSymbolField1,complexSymbolField2,complexSymbolField3],type=[inst:JSBool,param:Object]*/
 const complexSymbolField =
     complexSymbolField1 ? complexSymbolField2 : complexSymbolField3;
 
-/*kernel.element: testComplexConstSymbol:static=[Symbol.,Symbol.(1),Symbol.validated,complexSymbolField],type=[inst:Symbol]*/
 /*strong.element: testComplexConstSymbol:static=[Symbol.,Symbol.(1),Symbol.validated,complexSymbolField],type=[impl:String,inst:JSBool,inst:Symbol]*/
 testComplexConstSymbol() => const Symbol(complexSymbolField);
 
@@ -177,14 +141,12 @@
 /*element: testEmptyListLiteralDynamic:type=[inst:List<dynamic>]*/
 testEmptyListLiteralDynamic() => <dynamic>[];
 
-/*kernel.element: testEmptyListLiteralTyped:type=[check:String,inst:List<String>]*/
 /*strong.element: testEmptyListLiteralTyped:type=[inst:List<String>]*/
 testEmptyListLiteralTyped() => <String>[];
 
 /*element: testEmptyListLiteralConstant:type=[inst:List<dynamic>]*/
 testEmptyListLiteralConstant() => const [];
 
-/*kernel.element: testNonEmptyListLiteral:type=[inst:JSBool,inst:List<dynamic>]*/
 /*strong.element: testNonEmptyListLiteral:type=[inst:JSBool,inst:List<bool>]*/
 testNonEmptyListLiteral() => [true];
 
@@ -194,7 +156,6 @@
 /*element: testEmptyMapLiteralDynamic:type=[inst:Map<dynamic,dynamic>]*/
 testEmptyMapLiteralDynamic() => <dynamic, dynamic>{};
 
-/*kernel.element: testEmptyMapLiteralTyped:type=[check:String,check:int,inst:Map<String,int>]*/
 /*strong.element: testEmptyMapLiteralTyped:type=[inst:Map<String,int>]*/
 testEmptyMapLiteralTyped() => <String, int>{};
 
@@ -206,7 +167,6 @@
  inst:GeneralConstantMap<dynamic,dynamic>]*/
 testEmptyMapLiteralConstant() => const {};
 
-/*kernel.element: testNonEmptyMapLiteral:type=[inst:JSBool,inst:JSNull,inst:Map<dynamic,dynamic>]*/
 /*strong.element: testNonEmptyMapLiteral:type=[inst:JSBool,inst:JSNull,inst:Map<Null,bool>]*/
 testNonEmptyMapLiteral() => {null: true};
 
diff --git a/tests/compiler/dart2js/impact/data/native.dart b/tests/compiler/dart2js/impact/data/native.dart
index f396310a..d147208 100644
--- a/tests/compiler/dart2js/impact/data/native.dart
+++ b/tests/compiler/dart2js/impact/data/native.dart
@@ -22,10 +22,6 @@
   testNativeMethodReturns();
 }
 
-/*kernel.element: testJSCall:
- static=[JS(3)],
- type=[inst:JSNull,inst:JSString,native:bool,native:int]
-*/
 /*strong.element: testJSCall:
  static=[JS<dynamic>(3)],
  type=[inst:JSNull,inst:JSString,native:bool,native:int]
@@ -60,17 +56,6 @@
 
 @Native("NativeClass")
 class NativeClass {
-  /*kernel.element: NativeClass.field:
-   type=[
-    check:Object,
-    inst:JSNull,
-    native:JSExtendableArray<JSExtendableArray.E>,
-    native:Object,
-    native:String,
-    native:bool,
-    native:double,
-    native:int]
-  */
   /*strong.element: NativeClass.field:
    type=[
     inst:JSBool,
@@ -91,10 +76,6 @@
   }
 }
 
-/*kernel.element: testNativeField:
- dynamic=[field],
- type=[check:NativeClass]
-*/
 /*strong.element: testNativeField:
  dynamic=[field],
  static=[defineProperty],
diff --git a/tests/compiler/dart2js/impact/data/statements.dart b/tests/compiler/dart2js/impact/data/statements.dart
index 9ab5130..d7b466f 100644
--- a/tests/compiler/dart2js/impact/data/statements.dart
+++ b/tests/compiler/dart2js/impact/data/statements.dart
@@ -65,17 +65,6 @@
     return 1;
 }
 
-/*kernel.element: testForIn:
- dynamic=[
-  current,
-  iterator,
-  moveNext(0)],
- static=[
-  checkConcurrentModificationError],
- type=[
-  inst:JSNull,
-  inst:Null]
-*/
 /*strong.element: testForIn:
  dynamic=[
   current,
@@ -93,18 +82,6 @@
   for (var e in o) {}
 }
 
-/*kernel.element: testForInTyped:
- dynamic=[
-  current,
-  iterator,
-  moveNext(0)],
- static=[
-  checkConcurrentModificationError],
- type=[
-  check:int,
-  inst:JSNull,
-  inst:Null]
-*/
 /*strong.element: testForInTyped:
  dynamic=[
   current,
diff --git a/tests/compiler/dart2js/impact/impact_test.dart b/tests/compiler/dart2js/impact/impact_test.dart
index 76a1b43..6f1a653 100644
--- a/tests/compiler/dart2js/impact/impact_test.dart
+++ b/tests/compiler/dart2js/impact/impact_test.dart
@@ -20,7 +20,7 @@
   asyncTest(() async {
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, const ImpactDataComputer(),
-        args: args, skipForStrong: ['fallthrough.dart'], testFrontend: true);
+        args: args, testFrontend: true);
   });
 }
 
diff --git a/tests/compiler/dart2js/inference/data/await.dart b/tests/compiler/dart2js/inference/data/await.dart
index 07c562b..0461584 100644
--- a/tests/compiler/dart2js/inference/data/await.dart
+++ b/tests/compiler/dart2js/inference/data/await.dart
@@ -17,7 +17,7 @@
 
 /*element: _method1:[null]*/
 _method1(
-    /*kernel.[null|subclass=Object]*/
+
     /*strong.[null|subclass=JSInt]*/
     o) {}
 
@@ -34,7 +34,7 @@
 
 /*element: _method2:[null]*/
 _method2(
-    /*kernel.[null|subclass=Object]*/
+
     /*strong.[null|subclass=JSInt]*/
     o) {}
 
@@ -54,7 +54,7 @@
 
 /*element: _method4:[null]*/
 _method4(
-    /*kernel.[null|subclass=Object]*/
+
     /*strong.[null|subclass=JSInt]*/
     o) {}
 
diff --git a/tests/compiler/dart2js/inference/data/call_in_loop.dart b/tests/compiler/dart2js/inference/data/call_in_loop.dart
index 6296d5f..5c1a6eb 100644
--- a/tests/compiler/dart2js/inference/data/call_in_loop.dart
+++ b/tests/compiler/dart2js/inference/data/call_in_loop.dart
@@ -12,14 +12,10 @@
     /*current: [exact=ArrayIterator]*/
     /*moveNext: [exact=ArrayIterator]*/
     for (var a in []) {
-      // ignore: invocation_of_non_function_expression
-      (T) /*invoke: [exact=TypeImpl]*/ (a);
-      // ignore: invocation_of_non_function_expression
-      (Object) /*invoke: [exact=TypeImpl]*/ ();
-      // ignore: invocation_of_non_function_expression
-      (this) /*invoke: [exact=Class]*/ ();
-      // ignore: invocation_of_non_function_expression
-      (1) /*invoke: [exact=JSUInt31]*/ ();
+      (T as dynamic) /*invoke: [exact=TypeImpl]*/ (a);
+      (Object as dynamic) /*invoke: [exact=TypeImpl]*/ ();
+      (this as dynamic) /*invoke: [exact=Class]*/ ();
+      (1 as dynamic) /*invoke: [exact=JSUInt31]*/ ();
     }
   }
 }
diff --git a/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart b/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart
index 5d5c0f4..64aa174 100644
--- a/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart
+++ b/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart
@@ -6,7 +6,6 @@
 
 import "package:expect/expect.dart";
 
-/*kernel.element: f:[subclass=JSNumber]*/
 /*strong.element: f:[subclass=JSInt]*/
 int f(int /*[null|subclass=Object]*/ i) => 2 /*invoke: [exact=JSUInt31]*/ * i;
 
diff --git a/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart b/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
index eb8b96c..f948462 100644
--- a/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
+++ b/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
@@ -64,10 +64,9 @@
   probe2methods(methods);
 }
 
-/*kernel.element: probe2res:[null|subclass=Object]*/
 /*strong.element: probe2res:[null|subclass=JSInt]*/
 probe2res(
-        /*kernel.[null|subclass=Object]*/
+
         /*strong.[null|subclass=JSInt]*/
         x) =>
     x;
diff --git a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
index d42efcd..43e20c2 100644
--- a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
@@ -28,19 +28,19 @@
   var local = c. /*[exact=Class]*/ method;
   local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
   local();
   local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
   local.call();
   return local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
 }
diff --git a/tests/compiler/dart2js/inference/data/closurization_local_call.dart b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
index c14d3c4..9de0340 100644
--- a/tests/compiler/dart2js/inference/data/closurization_local_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
@@ -25,19 +25,19 @@
   var local = /*[exact=JSUInt31]*/ () => 42;
   local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
   local();
   local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
   local.call();
   return local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
 }
diff --git a/tests/compiler/dart2js/inference/data/closurization_static_call.dart b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
index 7881009..4f5ac7d 100644
--- a/tests/compiler/dart2js/inference/data/closurization_static_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
@@ -28,19 +28,19 @@
   var local = method;
   local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
   local();
   local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
   local.call();
   return local
       .
-      /*kernel.invoke: [subtype=Function]*/
+
       /*strong.invoke: [subclass=Closure]*/
       toString();
 }
diff --git a/tests/compiler/dart2js/inference/data/deferred_load_get.dart b/tests/compiler/dart2js/inference/data/deferred_load_get.dart
index a4b0fb6..cbe93e3 100644
--- a/tests/compiler/dart2js/inference/data/deferred_load_get.dart
+++ b/tests/compiler/dart2js/inference/data/deferred_load_get.dart
@@ -5,7 +5,7 @@
 import 'package:expect/expect.dart' deferred as expect;
 
 // Synthetic getter added by kernel.
-/*kernel.element: __loadLibrary_expect:[null|subclass=Object]*/
+
 /*strong.element: __loadLibrary_expect:[null|exact=_Future]*/
 
 /*element: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/erroneous_super_get.dart b/tests/compiler/dart2js/inference/data/erroneous_super_get.dart
deleted file mode 100644
index 4850cab..0000000
--- a/tests/compiler/dart2js/inference/data/erroneous_super_get.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: main:[null]*/
-main() {
-  missingSuperFieldAccess();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Access of missing super field.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super4.:[exact=Super4]*/
-class Super4 {}
-
-/*element: Sub4.:[exact=Sub4]*/
-class Sub4 extends Super4 {
-  /*element: Sub4.method:[empty]*/
-  // ignore: UNDEFINED_SUPER_GETTER
-  method() => super.field;
-}
-
-/*element: missingSuperFieldAccess:[null]*/
-missingSuperFieldAccess() {
-  new Sub4(). /*invoke: [exact=Sub4]*/ method();
-}
diff --git a/tests/compiler/dart2js/inference/data/erroneous_super_invoke.dart b/tests/compiler/dart2js/inference/data/erroneous_super_invoke.dart
deleted file mode 100644
index 19cf31c..0000000
--- a/tests/compiler/dart2js/inference/data/erroneous_super_invoke.dart
+++ /dev/null
@@ -1,160 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: main:[null]*/
-main() {
-  missingSuperMethodInvoke();
-  superMethodInvokeMissingArgument();
-  superMethodInvokeExtraArgument();
-  superMethodInvokeExtraNamedArgument();
-  missingSuperMethodInvokeNoSuchMethod();
-  abstractSuperMethodInvokeNoSuchMethod();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of missing super method.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super4.:[exact=Super4]*/
-class Super4 {}
-
-/*element: Sub4.:[exact=Sub4]*/
-class Sub4 extends Super4 {
-  /*element: Sub4.method:[empty]*/
-  method() {
-    // ignore: UNDEFINED_SUPER_METHOD
-    var a = super.method();
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: missingSuperMethodInvoke:[null]*/
-missingSuperMethodInvoke() {
-  new Sub4(). /*invoke: [exact=Sub4]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method with missing argument.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super5.:[exact=Super5]*/
-class Super5 {
-  /*element: Super5.method1:[exact=JSUInt31]*/
-  method1(/*[exact=JSUInt31]*/ x) => 42;
-}
-
-/*element: Sub5.:[exact=Sub5]*/
-class Sub5 extends Super5 {
-  /*element: Sub5.method2:[empty]*/
-  method2() {
-    super.method1(0);
-    // ignore: NOT_ENOUGH_REQUIRED_ARGUMENTS
-    var a = super.method1();
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: superMethodInvokeMissingArgument:[null]*/
-superMethodInvokeMissingArgument() {
-  new Sub5(). /*invoke: [exact=Sub5]*/ method2();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method with extra argument.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super6.:[exact=Super6]*/
-class Super6 {
-  /*element: Super6.method:[exact=JSUInt31]*/
-  method() => 42;
-}
-
-/*element: Sub6.:[exact=Sub6]*/
-class Sub6 extends Super6 {
-  /*element: Sub6.method:[empty]*/
-  method() {
-    // ignore: EXTRA_POSITIONAL_ARGUMENTS
-    var a = super.method(0);
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: superMethodInvokeExtraArgument:[null]*/
-superMethodInvokeExtraArgument() {
-  new Sub6(). /*invoke: [exact=Sub6]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method with extra named argument.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super7.:[exact=Super7]*/
-class Super7 {
-  /*element: Super7.method:[exact=JSUInt31]*/
-  method() => 42;
-}
-
-/*element: Sub7.:[exact=Sub7]*/
-class Sub7 extends Super7 {
-  /*element: Sub7.method:[empty]*/
-  method() {
-    // ignore: UNDEFINED_NAMED_PARAMETER
-    var a = super.method(a: 0);
-    return a. /*invoke: [empty]*/ abs();
-  }
-}
-
-/*element: superMethodInvokeExtraNamedArgument:[null]*/
-superMethodInvokeExtraNamedArgument() {
-  new Sub7(). /*invoke: [exact=Sub7]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of super method caught by noSuchMethod.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super8.:[exact=Super8]*/
-class Super8 {
-  /*element: Super8.noSuchMethod:[exact=JSUInt31]*/
-  noSuchMethod(/*[null|subclass=Object]*/ _) => 42;
-}
-
-/*element: Sub8.:[exact=Sub8]*/
-class Sub8 extends Super8 {
-  /*element: Sub8.method:[subclass=JSPositiveInt]*/
-  method() {
-    // ignore: UNDEFINED_SUPER_METHOD
-    var a = super.method();
-    return a. /*invoke: [exact=JSUInt31]*/ abs();
-  }
-}
-
-/*element: missingSuperMethodInvokeNoSuchMethod:[null]*/
-missingSuperMethodInvokeNoSuchMethod() {
-  new Sub8(). /*invoke: [exact=Sub8]*/ method();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Invocation of abstract super method caught by noSuchMethod.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super9.:[exact=Super9]*/
-class Super9 {
-  method();
-
-  /*element: Super9.noSuchMethod:[exact=JSUInt31]*/
-  noSuchMethod(/*[null|subclass=Object]*/ im) => 42;
-}
-
-/*element: Sub9.:[exact=Sub9]*/
-class Sub9 extends Super9 {
-  /*element: Sub9.method:[exact=JSUInt31]*/
-  // ignore: abstract_super_member_reference
-  method() => super.method();
-}
-
-/*element: abstractSuperMethodInvokeNoSuchMethod:[null]*/
-abstractSuperMethodInvokeNoSuchMethod() {
-  new Sub9(). /*invoke: [exact=Sub9]*/ method();
-}
diff --git a/tests/compiler/dart2js/inference/data/erroneous_super_set.dart b/tests/compiler/dart2js/inference/data/erroneous_super_set.dart
deleted file mode 100644
index d100a00..0000000
--- a/tests/compiler/dart2js/inference/data/erroneous_super_set.dart
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: main:[null]*/
-main() {
-  missingSuperFieldUpdate();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Update of missing super field.
-////////////////////////////////////////////////////////////////////////////////
-
-/*element: Super4.:[exact=Super4]*/
-class Super4 {}
-
-/*element: Sub4.:[exact=Sub4]*/
-class Sub4 extends Super4 {
-  /*element: Sub4.method:[empty]*/
-  method() {
-    // ignore: UNDEFINED_SUPER_SETTER
-    var a = super.field = new Sub4();
-    return a. /*[empty]*/ method;
-  }
-}
-
-/*element: missingSuperFieldUpdate:[null]*/
-missingSuperFieldUpdate() {
-  new Sub4(). /*invoke: [exact=Sub4]*/ method();
-}
diff --git a/tests/compiler/dart2js/inference/data/field_type.dart b/tests/compiler/dart2js/inference/data/field_type.dart
index da7880c..ed69820 100644
--- a/tests/compiler/dart2js/inference/data/field_type.dart
+++ b/tests/compiler/dart2js/inference/data/field_type.dart
@@ -351,7 +351,7 @@
 class A16 {
   // TODO(johnniwinther): Investigate why these include `null`. The ast version
   // didn't.
-  /*kernel.element: A16.f16:Union([exact=JSString], [null|exact=JSUInt31])*/
+
   /*strong.element: A16.f16:Union([exact=JSString], [null|exact=JSUInt31])*/
   var f16;
 
@@ -470,8 +470,7 @@
     /*iterator: [exact=A20]*/
     /*current: [exact=A20]*/
     /*moveNext: [exact=A20]*/
-    for (/*kernel.update: [exact=A20]*/ /*strong.update: [exact=A20]*/ f20
-        in a) {}
+    for (/*update: [exact=A20]*/ f20 in a) {}
   }
 
   /*element: A20.iterator:[exact=A20]*/
@@ -610,7 +609,7 @@
 
   /*element: A24.+:Value([exact=JSString], value: "foo")*/
   operator +(
-          /*kernel.[exact=JSUInt31]*/
+
           /*strong.[empty]*/
           other) =>
       'foo';
diff --git a/tests/compiler/dart2js/inference/data/for_in.dart b/tests/compiler/dart2js/inference/data/for_in.dart
index 562897a..9db65d4 100644
--- a/tests/compiler/dart2js/inference/data/for_in.dart
+++ b/tests/compiler/dart2js/inference/data/for_in.dart
@@ -32,7 +32,6 @@
 // Return element from a for-in loop on a list literal.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*kernel.element: forInReturn:[null|subclass=Object]*/
 /*strong.element: forInReturn:[null|subclass=JSInt]*/
 forInReturn() {
   /*iterator: Container([exact=JSExtendableArray], element: [exact=JSUInt31], length: 3)*/
diff --git a/tests/compiler/dart2js/inference/data/general.dart b/tests/compiler/dart2js/inference/data/general.dart
index 1b2d806..2b7f50d 100644
--- a/tests/compiler/dart2js/inference/data/general.dart
+++ b/tests/compiler/dart2js/inference/data/general.dart
@@ -593,7 +593,7 @@
   var a = topLevelGetter();
   // Make [a] a captured variable. This should disable receiver
   // specialization on [a].
-  (/*kernel.[null|subclass=Object]*/
+  (
       /*strong.[null|exact=JSString]*/
       () => a.toString())();
   a - 42;
@@ -674,7 +674,6 @@
   /*element: A.generative:[exact=A]*/
   A.generative();
 
-  /*kernel.element: A.==:Union([exact=JSBool], [exact=JSUInt31])*/
   /*strong.element: A.==:[exact=JSBool]*/
   operator ==(/*Union([exact=JSString], [exact=JSUInt31])*/ other) =>
       42 as dynamic;
diff --git a/tests/compiler/dart2js/inference/data/js_interop.dart b/tests/compiler/dart2js/inference/data/js_interop.dart
index c20543d..34767e1 100644
--- a/tests/compiler/dart2js/inference/data/js_interop.dart
+++ b/tests/compiler/dart2js/inference/data/js_interop.dart
@@ -10,6 +10,7 @@
 /*element: main:[null]*/
 main() {
   anonymousClass();
+  jsInteropClass();
 }
 
 @JS()
@@ -20,6 +21,30 @@
       {/*[exact=JSUInt31]*/ a, /*Value([exact=JSString], value: "")*/ b});
 }
 
-/*kernel.element: anonymousClass:[null|subclass=Object]*/
 /*strong.element: anonymousClass:[null|subclass=JavaScriptObject]*/
 anonymousClass() => new Class1(a: 1, b: '');
+
+@JS()
+class JsInteropClass {
+  /*element: JsInteropClass.:[null|subclass=Object]*/
+  external JsInteropClass();
+
+  /*element: JsInteropClass.getter:[null|subclass=Object]*/
+  external int get getter;
+
+  external void set setter(int /*[subclass=JSInt]*/ value);
+
+  /*element: JsInteropClass.method:[null|subclass=Object]*/
+  external int method(int /*[exact=JSUInt31]*/ a);
+}
+
+/*element: jsInteropClass:[subclass=JSInt]*/
+jsInteropClass() {
+  JsInteropClass cls = new JsInteropClass();
+  return cls. /*update: [null|subclass=JavaScriptObject]*/ setter =
+      cls. /*[null|subclass=JavaScriptObject]*/ getter
+          /*invoke: [null|subclass=JSInt]*/ +
+          cls. /*invoke: [subclass=JavaScriptObject]*/ method(0)
+          /*invoke: [subclass=JSInt]*/ +
+          10;
+}
diff --git a/tests/compiler/dart2js/inference/data/map_tracer_const.dart b/tests/compiler/dart2js/inference/data/map_tracer_const.dart
index 4da5254..b434740 100644
--- a/tests/compiler/dart2js/inference/data/map_tracer_const.dart
+++ b/tests/compiler/dart2js/inference/data/map_tracer_const.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.element: closure:Union([exact=JSDouble], [exact=JSUInt31])*/
 /*strong.element: closure:[exact=JSUInt31]*/
 int closure(int /*Union([exact=JSDouble], [exact=JSUInt31])*/ x) {
   return x;
diff --git a/tests/compiler/dart2js/inference/data/optimizer_hints.dart b/tests/compiler/dart2js/inference/data/optimizer_hints.dart
index 57ea72c..85c19bd 100644
--- a/tests/compiler/dart2js/inference/data/optimizer_hints.dart
+++ b/tests/compiler/dart2js/inference/data/optimizer_hints.dart
@@ -57,7 +57,6 @@
 // As above but without the annotation.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*kernel.element: notTrustReturnTypeString:[null|subclass=Object]*/
 /*strong.element: notTrustReturnTypeString:[null|exact=JSString]*/
 String notTrustReturnTypeString() {
   return _assumeDynamic(0);
@@ -83,7 +82,7 @@
 /*element: _notTrustParameterTypeString:[null]*/
 _notTrustParameterTypeString(
     String
-        /*kernel.[null|subclass=Object]*/
+
         /*strong.[null|exact=JSString]*/
         o) {}
 
diff --git a/tests/compiler/dart2js/inference/data/parameters_notrust.dart b/tests/compiler/dart2js/inference/data/parameters_notrust.dart
index d031544..861df2d 100644
--- a/tests/compiler/dart2js/inference/data/parameters_notrust.dart
+++ b/tests/compiler/dart2js/inference/data/parameters_notrust.dart
@@ -20,7 +20,6 @@
 // within the method and therefore infer the return type to be an int.
 ////////////////////////////////////////////////////////////////////////////////
 
-/*kernel.element: _dontTrustParameters:Union([exact=JSString], [exact=JSUInt31])*/
 /*strong.element: _dontTrustParameters:[exact=JSUInt31]*/
 _dontTrustParameters(int /*Union([exact=JSString], [exact=JSUInt31])*/ i) {
   return i;
diff --git a/tests/compiler/dart2js/inference/data/switch3.dart b/tests/compiler/dart2js/inference/data/switch3.dart
deleted file mode 100644
index 1ebcd71..0000000
--- a/tests/compiler/dart2js/inference/data/switch3.dart
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: foo:[null|exact=JSUInt31]*/
-foo(int /*[subclass=JSInt]*/ x) {
-  var a;
-  switch (x) {
-    // ignore: case_block_not_terminated
-    case 1:
-      a = 1;
-    case 2: // illegal fall through
-      a = 2;
-      break;
-  }
-
-  return a;
-}
-
-/*element: main:[null]*/
-main() {
-  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
-}
diff --git a/tests/compiler/dart2js/inference/data/switch4.dart b/tests/compiler/dart2js/inference/data/switch4.dart
deleted file mode 100644
index 579bab4..0000000
--- a/tests/compiler/dart2js/inference/data/switch4.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: foo:[exact=JSUInt31]*/
-foo(int /*[subclass=JSInt]*/ x) {
-  var a;
-  switch (x) {
-    // ignore: case_block_not_terminated
-    case 1:
-      a = 1;
-    case 2: // illegal fall through
-      a = 2;
-      break;
-    default:
-      a = 0;
-  }
-
-  return a;
-}
-
-/*element: main:[null]*/
-main() {
-  foo(new DateTime.now(). /*[exact=DateTime]*/ millisecondsSinceEpoch);
-}
diff --git a/tests/compiler/dart2js/inference/data/type_literal.dart b/tests/compiler/dart2js/inference/data/type_literal.dart
index b0d8246..f90ee3c 100644
--- a/tests/compiler/dart2js/inference/data/type_literal.dart
+++ b/tests/compiler/dart2js/inference/data/type_literal.dart
@@ -12,7 +12,6 @@
 /*element: typeLiteral:[exact=TypeImpl]*/
 typeLiteral() => Object;
 
-/*kernel.element: typeLiteralToString:[null|subclass=Object]*/
 /*strong.element: typeLiteralToString:[exact=JSString]*/
 typeLiteralToString() => (Object). /*invoke: [exact=TypeImpl]*/ toString();
 
diff --git a/tests/compiler/dart2js/inference/data/use_static_types.dart b/tests/compiler/dart2js/inference/data/use_static_types.dart
index 7e40669..9906d25 100644
--- a/tests/compiler/dart2js/inference/data/use_static_types.dart
+++ b/tests/compiler/dart2js/inference/data/use_static_types.dart
@@ -18,19 +18,16 @@
   invokeGenericMethods();
 }
 
-/*kernel.element: invokeFunction1:[null|subclass=Object]*/
 /*strong.element: invokeFunction1:[null|subclass=A]*/
 invokeFunction1(A Function() /*[subclass=Closure]*/ f) {
   return f();
 }
 
-/*kernel.element: invokeFunction2:[null|subclass=Object]*/
 /*strong.element: invokeFunction2:[null|exact=B]*/
 invokeFunction2(B Function() /*[subclass=Closure]*/ f) {
   return f();
 }
 
-/*kernel.element: invokeFunction3:[null|subclass=Object]*/
 /*strong.element: invokeFunction3:[null|exact=C]*/
 invokeFunction3(C Function() /*[subclass=Closure]*/ f) {
   return f();
@@ -39,25 +36,21 @@
 /*element: genericFunction:[null|subclass=Object]*/
 T genericFunction<T>(T Function() /*[subclass=Closure]*/ f) => f();
 
-/*kernel.element: invokeGenericFunction1:[null|subclass=Object]*/
 /*strong.element: invokeGenericFunction1:[null|subclass=A]*/
 invokeGenericFunction1() {
   return genericFunction<A>(/*[exact=A]*/ () => new A());
 }
 
-/*kernel.element: invokeGenericFunction2:[null|subclass=Object]*/
 /*strong.element: invokeGenericFunction2:[null|exact=B]*/
 invokeGenericFunction2() {
   return genericFunction<B>(/*[exact=B]*/ () => new B());
 }
 
-/*kernel.element: invokeGenericFunction3:[null|subclass=Object]*/
 /*strong.element: invokeGenericFunction3:[null|exact=C]*/
 invokeGenericFunction3() {
   return genericFunction<C>(/*[exact=C]*/ () => new C());
 }
 
-/*kernel.element: invokeGenericLocalFunction1:[null|subclass=Object]*/
 /*strong.element: invokeGenericLocalFunction1:[null|subclass=A]*/
 invokeGenericLocalFunction1() {
   /*[null|subclass=Object]*/
@@ -65,7 +58,6 @@
   return local<A>(/*[exact=A]*/ () => new A());
 }
 
-/*kernel.element: invokeGenericLocalFunction2:[null|subclass=Object]*/
 /*strong.element: invokeGenericLocalFunction2:[null|exact=B]*/
 invokeGenericLocalFunction2() {
   /*[null|subclass=Object]*/
@@ -73,7 +65,6 @@
   return local<B>(/*[exact=B]*/ () => new B());
 }
 
-/*kernel.element: invokeGenericLocalFunction3:[null|subclass=Object]*/
 /*strong.element: invokeGenericLocalFunction3:[null|exact=C]*/
 invokeGenericLocalFunction3() {
   /*[null|subclass=Object]*/
@@ -143,47 +134,38 @@
   superMethodInvoke() => super.functionTypedMethod()();
 }
 
-/*kernel.element: invokeInstanceMethod1:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeInstanceMethod1:[subclass=A]*/
 invokeInstanceMethod1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ method();
 
-/*kernel.element: invokeInstanceMethod2:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeInstanceMethod2:[exact=B]*/
 invokeInstanceMethod2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ method();
 
-/*kernel.element: invokeInstanceMethod3:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeInstanceMethod3:[exact=C]*/
 invokeInstanceMethod3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ method();
 
-/*kernel.element: invokeInstanceGetter1:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeInstanceGetter1:[subclass=A]*/
 invokeInstanceGetter1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
     c. /*[exact=GenericClass]*/ getter;
 
-/*kernel.element: invokeInstanceGetter2:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeInstanceGetter2:[exact=B]*/
 invokeInstanceGetter2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
     c. /*[exact=GenericClass]*/ getter;
 
-/*kernel.element: invokeInstanceGetter3:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeInstanceGetter3:[exact=C]*/
 invokeInstanceGetter3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
     c. /*[exact=GenericClass]*/ getter;
 
-/*kernel.element: accessInstanceField1:Union([exact=C], [subclass=A])*/
 /*strong.element: accessInstanceField1:[subclass=A]*/
 accessInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
     c. /*[exact=GenericClass]*/ field;
 
-/*kernel.element: accessInstanceField2:Union([exact=C], [subclass=A])*/
 /*strong.element: accessInstanceField2:[exact=B]*/
 accessInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
     c. /*[exact=GenericClass]*/ field;
 
-/*kernel.element: accessInstanceField3:Union([exact=C], [subclass=A])*/
 /*strong.element: accessInstanceField3:[exact=C]*/
 accessInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
     c. /*[exact=GenericClass]*/ field;
@@ -224,53 +206,44 @@
 accessSuperField3(GenericSubclass<C> /*[exact=GenericSubclass]*/ c) =>
     c. /*invoke: [exact=GenericSubclass]*/ superField();
 
-/*kernel.element: invokeFunctionTypedInstanceMethod1:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceMethod1:[null|subclass=A]*/
 invokeFunctionTypedInstanceMethod1(
         GenericClass<A> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
 
-/*kernel.element: invokeFunctionTypedInstanceMethod2:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceMethod2:[null|exact=B]*/
 invokeFunctionTypedInstanceMethod2(
         GenericClass<B> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
 
-/*kernel.element: invokeFunctionTypedInstanceMethod3:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceMethod3:[null|exact=C]*/
 invokeFunctionTypedInstanceMethod3(
         GenericClass<C> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedMethod()();
 
-/*kernel.element: invokeFunctionTypedInstanceGetter1:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceGetter1:[null|subclass=A]*/
 invokeFunctionTypedInstanceGetter1(
         GenericClass<A> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedGetter();
 
-/*kernel.element: invokeFunctionTypedInstanceGetter2:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceGetter2:[null|exact=B]*/
 invokeFunctionTypedInstanceGetter2(
         GenericClass<B> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedGetter();
 
-/*kernel.element: invokeFunctionTypedInstanceGetter3:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceGetter3:[null|exact=C]*/
 invokeFunctionTypedInstanceGetter3(
         GenericClass<C> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedGetter();
 
-/*kernel.element: invokeFunctionTypedInstanceField1:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceField1:[null|subclass=A]*/
 invokeFunctionTypedInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedField();
 
-/*kernel.element: invokeFunctionTypedInstanceField2:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceField2:[null|exact=B]*/
 invokeFunctionTypedInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedField();
 
-/*kernel.element: invokeFunctionTypedInstanceField3:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedInstanceField3:[null|exact=C]*/
 invokeFunctionTypedInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
     c. /*invoke: [exact=GenericClass]*/ functionTypedField();
@@ -384,126 +357,102 @@
 
 /*element: Subclass.:[exact=Subclass]*/
 class Subclass extends Class {
-  /*kernel.element: Subclass.superMethod1:Union([exact=C], [subclass=A])*/
   /*strong.element: Subclass.superMethod1:[subclass=A]*/
   superMethod1() {
     return super.genericMethod<A>(new A());
   }
 
-  /*kernel.element: Subclass.superMethod2:Union([exact=C], [subclass=A])*/
   /*strong.element: Subclass.superMethod2:[exact=B]*/
   superMethod2() {
     return super.genericMethod<B>(new B());
   }
 
-  /*kernel.element: Subclass.superMethod3:Union([exact=C], [subclass=A])*/
   /*strong.element: Subclass.superMethod3:[exact=C]*/
   superMethod3() {
     return super.genericMethod<C>(new C());
   }
 
-  /*kernel.element: Subclass.functionTypedSuperMethod1:[null|subclass=Object]*/
   /*strong.element: Subclass.functionTypedSuperMethod1:[null|subclass=A]*/
   functionTypedSuperMethod1() {
     return super.functionTypedGenericMethod<A>(new A())();
   }
 
-  /*kernel.element: Subclass.functionTypedSuperMethod2:[null|subclass=Object]*/
   /*strong.element: Subclass.functionTypedSuperMethod2:[null|exact=B]*/
   functionTypedSuperMethod2() {
     return super.functionTypedGenericMethod<B>(new B())();
   }
 
-  /*kernel.element: Subclass.functionTypedSuperMethod3:[null|subclass=Object]*/
   /*strong.element: Subclass.functionTypedSuperMethod3:[null|exact=C]*/
   functionTypedSuperMethod3() {
     return super.functionTypedGenericMethod<C>(new C())();
   }
 }
 
-/*kernel.element: invokeGenericMethod1:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericMethod1:[subclass=A]*/
 invokeGenericMethod1(A /*[exact=A]*/ a) => genericMethod<A>(a);
 
-/*kernel.element: invokeGenericMethod2:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericMethod2:[exact=B]*/
 invokeGenericMethod2(B /*[exact=B]*/ b) => genericMethod<B>(b);
 
-/*kernel.element: invokeGenericMethod3:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericMethod3:[exact=C]*/
 invokeGenericMethod3(C /*[exact=C]*/ c) => genericMethod<C>(c);
 
-/*kernel.element: invokeGenericInstanceMethod1:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericInstanceMethod1:[subclass=A]*/
 invokeGenericInstanceMethod1() =>
     new Class(). /*invoke: [exact=Class]*/ genericMethod<A>(new A());
 
-/*kernel.element: invokeGenericInstanceMethod2:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericInstanceMethod2:[exact=B]*/
 invokeGenericInstanceMethod2() =>
     new Class(). /*invoke: [exact=Class]*/ genericMethod<B>(new B());
 
-/*kernel.element: invokeGenericInstanceMethod3:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericInstanceMethod3:[exact=C]*/
 invokeGenericInstanceMethod3() =>
     new Class(). /*invoke: [exact=Class]*/ genericMethod<C>(new C());
 
-/*kernel.element: invokeGenericSuperMethod1:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericSuperMethod1:[subclass=A]*/
 invokeGenericSuperMethod1() =>
     new Subclass(). /*invoke: [exact=Subclass]*/ superMethod1();
 
-/*kernel.element: invokeGenericSuperMethod2:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericSuperMethod2:[exact=B]*/
 invokeGenericSuperMethod2() =>
     new Subclass(). /*invoke: [exact=Subclass]*/ superMethod2();
 
-/*kernel.element: invokeGenericSuperMethod3:Union([exact=C], [subclass=A])*/
 /*strong.element: invokeGenericSuperMethod3:[exact=C]*/
 invokeGenericSuperMethod3() =>
     new Subclass(). /*invoke: [exact=Subclass]*/ superMethod3();
 
-/*kernel.element: invokeFunctionTypedGenericMethod1:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericMethod1:[null|subclass=A]*/
 invokeFunctionTypedGenericMethod1(A /*[exact=A]*/ a) =>
     functionTypedGenericMethod<A>(a)();
 
-/*kernel.element: invokeFunctionTypedGenericMethod2:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericMethod2:[null|exact=B]*/
 invokeFunctionTypedGenericMethod2(B /*[exact=B]*/ b) =>
     functionTypedGenericMethod<B>(b)();
 
-/*kernel.element: invokeFunctionTypedGenericMethod3:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericMethod3:[null|exact=C]*/
 invokeFunctionTypedGenericMethod3(C /*[exact=C]*/ c) =>
     functionTypedGenericMethod<C>(c)();
 
-/*kernel.element: invokeFunctionTypedGenericInstanceMethod1:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericInstanceMethod1:[null|subclass=A]*/
 invokeFunctionTypedGenericInstanceMethod1() => new Class()
     . /*invoke: [exact=Class]*/ functionTypedGenericMethod<A>(new A())();
 
-/*kernel.element: invokeFunctionTypedGenericInstanceMethod2:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericInstanceMethod2:[null|exact=B]*/
 invokeFunctionTypedGenericInstanceMethod2() => new Class()
     . /*invoke: [exact=Class]*/ functionTypedGenericMethod<B>(new B())();
 
-/*kernel.element: invokeFunctionTypedGenericInstanceMethod3:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericInstanceMethod3:[null|exact=C]*/
 invokeFunctionTypedGenericInstanceMethod3() => new Class()
     . /*invoke: [exact=Class]*/ functionTypedGenericMethod<C>(new C())();
 
-/*kernel.element: invokeFunctionTypedGenericSuperMethod1:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericSuperMethod1:[null|subclass=A]*/
 invokeFunctionTypedGenericSuperMethod1() =>
     new Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod1();
 
-/*kernel.element: invokeFunctionTypedGenericSuperMethod2:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericSuperMethod2:[null|exact=B]*/
 invokeFunctionTypedGenericSuperMethod2() =>
     new Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod2();
 
-/*kernel.element: invokeFunctionTypedGenericSuperMethod3:[null|subclass=Object]*/
 /*strong.element: invokeFunctionTypedGenericSuperMethod3:[null|exact=C]*/
 invokeFunctionTypedGenericSuperMethod3() =>
     new Subclass(). /*invoke: [exact=Subclass]*/ functionTypedSuperMethod3();
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/inference/inference_test_helper.dart
index 736f033..293e0d5 100644
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart
+++ b/tests/compiler/dart2js/inference/inference_test_helper.dart
@@ -22,14 +22,6 @@
 const List<String> skipForStrong = const <String>[
   // TODO(johnniwinther): Remove this when issue 31767 is fixed.
   'mixin_constructor_default_parameter_values.dart',
-  // These contain compile-time errors:
-  'erroneous_super_get.dart',
-  'erroneous_super_invoke.dart',
-  'erroneous_super_set.dart',
-  'switch3.dart',
-  'switch4.dart',
-  // TODO(johnniwinther): Make a strong mode clean version of this?
-  'call_in_loop.dart',
 ];
 
 main(List<String> args) {
@@ -81,7 +73,7 @@
 /// IR visitor for computing inference data for a member.
 class TypeMaskIrComputer extends IrDataExtractor {
   final GlobalTypeInferenceResults results;
-  GlobalTypeInferenceElementResult result;
+  GlobalTypeInferenceMemberResult result;
   final KernelToElementMapForBuilding _elementMap;
   final KernelToLocalsMap _localsMap;
   final ClosureDataLookup _closureDataLookup;
@@ -114,9 +106,7 @@
   }
 
   String getParameterValue(Local parameter) {
-    GlobalTypeInferenceParameterResult elementResult =
-        results.resultOfParameter(parameter);
-    return getTypeMaskValue(elementResult.type);
+    return getTypeMaskValue(results.resultOfParameter(parameter));
   }
 
   String getTypeMaskValue(TypeMask typeMask) {
diff --git a/tests/compiler/dart2js/inference/list_tracer_test.dart b/tests/compiler/dart2js/inference/list_tracer_test.dart
index d474b9d..e475be6 100644
--- a/tests/compiler/dart2js/inference/list_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_test.dart
@@ -210,13 +210,13 @@
   var result = await runCompiler(memorySourceFiles: {'main.dart': source});
   Expect.isTrue(result.isSuccess);
   var compiler = result.compiler;
-  var typesInferrer = compiler.globalInference.typesInferrerInternal;
-  var closedWorld = typesInferrer.closedWorld;
+  var results = compiler.globalInference.resultsForTesting;
+  var closedWorld = results.closedWorld;
   var commonMasks = closedWorld.abstractValueDomain;
 
   checkType(String name, type) {
     var element = findMember(closedWorld, name);
-    ContainerTypeMask mask = typesInferrer.getTypeOfMember(element);
+    ContainerTypeMask mask = results.resultOfMember(element).type;
     if (nullify) type = type.nullable();
     Expect.equals(type, simplify(mask.elementType, closedWorld), name);
   }
diff --git a/tests/compiler/dart2js/inference/load_deferred_library_test.dart b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
index a6d709c..c9e89ff 100644
--- a/tests/compiler/dart2js/inference/load_deferred_library_test.dart
+++ b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
@@ -56,10 +56,9 @@
   MemberDefinition definition =
       backendStrategy.elementMap.getMemberDefinition(loadDeferredLibrary);
   ir.Procedure procedure = definition.node;
-  typeMask = compiler.globalInference.resultsForTesting
-      .resultOfParameter(localsMap
-          .getLocalVariable(procedure.function.positionalParameters.first))
-      .type;
+  typeMask = compiler.globalInference.resultsForTesting.resultOfParameter(
+      localsMap
+          .getLocalVariable(procedure.function.positionalParameters.first));
 
   if (trust) {
     Expect.equals(
diff --git a/tests/compiler/dart2js/inference/map_tracer_test.dart b/tests/compiler/dart2js/inference/map_tracer_test.dart
index 44426e8..aa7e497 100644
--- a/tests/compiler/dart2js/inference/map_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/map_tracer_test.dart
@@ -5,7 +5,6 @@
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/inferrer/type_graph_inferrer.dart';
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:compiler/src/types/abstract_value_domain.dart';
 import 'package:compiler/src/world.dart';
@@ -230,27 +229,27 @@
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
   TypeMask keyType, valueType;
-  TypeGraphInferrer typesInferrer =
-      compiler.globalInference.typesInferrerInternal;
-  JClosedWorld closedWorld = typesInferrer.closedWorld;
+  GlobalTypeInferenceResults results =
+      compiler.globalInference.resultsForTesting;
+  JClosedWorld closedWorld = results.closedWorld;
   AbstractValueDomain commonMasks = closedWorld.abstractValueDomain;
   TypeMask emptyType = new TypeMask.nonNullEmpty();
   MemberEntity aKey = findMember(closedWorld, 'aKey');
-  TypeMask aKeyType = typesInferrer.getTypeOfMember(aKey);
+  TypeMask aKeyType = results.resultOfMember(aKey).type;
   if (keyElementName != null) {
     MemberEntity keyElement = findMember(closedWorld, keyElementName);
-    keyType = typesInferrer.getTypeOfMember(keyElement);
+    keyType = results.resultOfMember(keyElement).type;
   }
   if (valueElementName != null) {
     MemberEntity valueElement = findMember(closedWorld, valueElementName);
-    valueType = typesInferrer.getTypeOfMember(valueElement);
+    valueType = results.resultOfMember(valueElement).type;
   }
   if (keyType == null) keyType = emptyType;
   if (valueType == null) valueType = emptyType;
 
   checkType(String name, keyType, valueType) {
     MemberEntity element = findMember(closedWorld, name);
-    MapTypeMask mask = typesInferrer.getTypeOfMember(element);
+    MapTypeMask mask = results.resultOfMember(element).type;
     Expect.equals(keyType, simplify(mask.keyType, closedWorld), name);
     Expect.equals(valueType, simplify(mask.valueType, closedWorld), name);
   }
diff --git a/tests/compiler/dart2js/inference/side_effects/closure_call.dart b/tests/compiler/dart2js/inference/side_effects/closure_call.dart
deleted file mode 100644
index 7aaf687..0000000
--- a/tests/compiler/dart2js/inference/side_effects/closure_call.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/*element: method:SideEffects(reads nothing; writes nothing)*/
-method() {}
-
-/*element: callExpression:SideEffects(reads anything; writes anything)*/
-callExpression() => (method)();
-
-/*element: Super.:SideEffects(reads nothing; writes nothing)*/
-class Super {
-  var field;
-
-  /*element: Super.getter:SideEffects(reads nothing; writes nothing)*/
-  get getter => null;
-}
-
-/*element: Class.:SideEffects(reads nothing; writes nothing)*/
-class Class extends Super {
-  /*element: Class.callSuperField:SideEffects(reads anything; writes anything)*/
-  callSuperField() => field();
-
-  /*element: Class.callSuperGetter:SideEffects(reads anything; writes anything)*/
-  callSuperGetter() => getter();
-
-  /*element: Class.call:SideEffects(reads nothing; writes nothing)*/
-  call() {}
-}
-
-/*element: callCall:SideEffects(reads anything; writes anything)*/
-callCall(c) => c.call();
-
-/*element: main:SideEffects(reads anything; writes anything)*/
-main() {
-  var c = new Class();
-  callExpression();
-  c.callSuperField();
-  c.callSuperGetter();
-  callCall(c);
-}
diff --git a/tests/compiler/dart2js/inference/side_effects_test.dart b/tests/compiler/dart2js/inference/side_effects_test.dart
index d97b477..4908291 100644
--- a/tests/compiler/dart2js/inference/side_effects_test.dart
+++ b/tests/compiler/dart2js/inference/side_effects_test.dart
@@ -22,9 +22,7 @@
     Directory dataDir =
         new Directory.fromUri(Platform.script.resolve('side_effects'));
     await checkTests(dataDir, const SideEffectsDataComputer(),
-        args: args,
-        options: [stopAfterTypeInference],
-        skipForStrong: ['closure_call.dart']);
+        args: args, options: [stopAfterTypeInference]);
   });
 }
 
diff --git a/tests/compiler/dart2js/rti/data/async_foreach.dart b/tests/compiler/dart2js/rti/data/async_foreach.dart
index 775cdbe..b847743 100644
--- a/tests/compiler/dart2js/rti/data/async_foreach.dart
+++ b/tests/compiler/dart2js/rti/data/async_foreach.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:*/
 /*strong.class: Class:direct,explicit=[Class.T],implicit=[Class.T],needsArgs*/
 /*omit.class: Class:needsArgs*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart b/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart
index 2e390bf..4afe488 100644
--- a/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart
+++ b/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:*/
 /*strong.class: Class:direct,explicit=[Class.T],implicit=[Class.T],needsArgs*/
 /*omit.class: Class:*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/async_local.dart b/tests/compiler/dart2js/rti/data/async_local.dart
index 45f0a91..10f865a 100644
--- a/tests/compiler/dart2js/rti/data/async_local.dart
+++ b/tests/compiler/dart2js/rti/data/async_local.dart
@@ -9,7 +9,7 @@
   //
   // This happens because the closure is thought as possibly going to the
   // async.errorHandler callback.
-  /*kernel.*/
+
   /*strong.needsSignature*/
   /*omit.needsSignature*/
   local(object, stacktrace) => null;
diff --git a/tests/compiler/dart2js/rti/data/async_local_nonasync.dart b/tests/compiler/dart2js/rti/data/async_local_nonasync.dart
index 4651639..b18d28a 100644
--- a/tests/compiler/dart2js/rti/data/async_local_nonasync.dart
+++ b/tests/compiler/dart2js/rti/data/async_local_nonasync.dart
@@ -5,7 +5,7 @@
 main() {
   // If any method was `async`, this would have triggered the need for the
   // signature on this closure. See the 'async_local.dart' test.
-  /*kernel.*/
+
   /*strong.*/
   /*omit.*/
   local(object, stacktrace) => null;
diff --git a/tests/compiler/dart2js/rti/data/async_local_typed.dart b/tests/compiler/dart2js/rti/data/async_local_typed.dart
index 40de910..5d4c863 100644
--- a/tests/compiler/dart2js/rti/data/async_local_typed.dart
+++ b/tests/compiler/dart2js/rti/data/async_local_typed.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:*/
 /*strong.class: Class:explicit=[Class<int>],needsArgs*/
 /*omit.class: Class:*/
 class Class<T> {}
@@ -12,7 +11,7 @@
   // implementation the closure, with type
   // `dynamic Function(dynamic, Class<int>)`, is not a potential subtype and
   // therefore doesn't need its signature.
-  /*kernel.*/
+
   /*strong.needsSignature*/
   /*omit.*/
   local(object, Class<int> stacktrace) => null;
diff --git a/tests/compiler/dart2js/rti/data/call_typed_generic.dart b/tests/compiler/dart2js/rti/data/call_typed_generic.dart
index 69a082c1..7509783 100644
--- a/tests/compiler/dart2js/rti/data/call_typed_generic.dart
+++ b/tests/compiler/dart2js/rti/data/call_typed_generic.dart
@@ -5,11 +5,9 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*kernel.class: A:needsArgs*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 /*omit.class: A:*/
 class A<T> {
-  /*kernel.element: A.call:needsSignature*/
   /*strong.element: A.call:*/
   /*omit.element: A.call:*/
   call(T t) {}
diff --git a/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart b/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart
index cb5b8c4..fd20af7 100644
--- a/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart
+++ b/tests/compiler/dart2js/rti/data/call_typed_generic_strong.dart
@@ -5,11 +5,9 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*kernel.class: A:needsArgs*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 /*omit.class: A:*/
 class A<T> {
-  /*kernel.element: A.call:needsSignature*/
   /*strong.element: A.call:*/
   /*omit.element: A.call:*/
   call(T t) {}
diff --git a/tests/compiler/dart2js/rti/data/closure.dart b/tests/compiler/dart2js/rti/data/closure.dart
index eb55472..a77b268 100644
--- a/tests/compiler/dart2js/rti/data/closure.dart
+++ b/tests/compiler/dart2js/rti/data/closure.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: A:needsArgs*/
 /*omit.class: A:needsArgs*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
@@ -14,7 +13,7 @@
   f() {
     // TODO(johnniwinther): Optimize local function type signature need.
     return
-        /*kernel.*/
+
         /*strong.needsSignature*/
         /*omit.needsSignature*/
         (int t) {};
diff --git a/tests/compiler/dart2js/rti/data/closure_generic_unneeded_strong.dart b/tests/compiler/dart2js/rti/data/closure_generic_unneeded_strong.dart
index f14aa06..1e461ee 100644
--- a/tests/compiler/dart2js/rti/data/closure_generic_unneeded_strong.dart
+++ b/tests/compiler/dart2js/rti/data/closure_generic_unneeded_strong.dart
@@ -4,7 +4,6 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: A:*/
 /*omit.class: A:*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
diff --git a/tests/compiler/dart2js/rti/data/closure_unneeded.dart b/tests/compiler/dart2js/rti/data/closure_unneeded.dart
index f14aa06..1e461ee 100644
--- a/tests/compiler/dart2js/rti/data/closure_unneeded.dart
+++ b/tests/compiler/dart2js/rti/data/closure_unneeded.dart
@@ -4,7 +4,6 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: A:*/
 /*omit.class: A:*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart
index aed8273..d9574d0 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_is2_strong.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: A:*/
 /*omit.class: A:*/
 /*strong.class: A:explicit=[A]*/
 class A {
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart
index 7dffcff..f620594 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off3_strong.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: A:*/
 /*omit.class: A:*/
 /*strong.class: A:explicit=[A]*/
 class A {
diff --git a/tests/compiler/dart2js/rti/data/function_subtype_local5.dart b/tests/compiler/dart2js/rti/data/function_subtype_local5.dart
index 7119670..3d1b80c 100644
--- a/tests/compiler/dart2js/rti/data/function_subtype_local5.dart
+++ b/tests/compiler/dart2js/rti/data/function_subtype_local5.dart
@@ -18,11 +18,11 @@
 class C<T> {
   void test(String nameOfT, bool expectedResult) {
     // TODO(johnniwinther): Optimize local function type signature need.
-    /*kernel.*/
+
     /*strong.needsSignature*/
     /*omit.needsSignature*/
     int foo(bool a, [String b]) => null;
-    /*kernel.*/
+
     /*strong.needsSignature*/
     /*omit.needsSignature*/
     int baz(bool a, {String b}) => null;
diff --git a/tests/compiler/dart2js/rti/data/generic_class_is2.dart b/tests/compiler/dart2js/rti/data/generic_class_is2.dart
index acef47b..8f6cc6c 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_is2.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_is2.dart
@@ -8,7 +8,6 @@
 /*class: A:implicit=[List<A<C2>>,List<A<C>>]*/
 class A<T> {}
 
-/*kernel.class: A1:*/
 /*omit.class: A1:*/
 /*strong.class: A1:implicit=[A1]*/
 class A1 implements A<C1> {}
diff --git a/tests/compiler/dart2js/rti/data/generic_creation.dart b/tests/compiler/dart2js/rti/data/generic_creation.dart
index 25b4a20..cdae93c 100644
--- a/tests/compiler/dart2js/rti/data/generic_creation.dart
+++ b/tests/compiler/dart2js/rti/data/generic_creation.dart
@@ -5,49 +5,43 @@
 import "package:expect/expect.dart";
 
 /*class: A:needsArgs*/
-/*kernel.element: A.:needsSignature*/
+
 /*strong.element: A.:*/
 /*omit.element: A.:*/
 class A<X, Y, Z> {
-  /*kernel.element: A.shift:needsSignature*/
   /*strong.element: A.shift:*/
   /*omit.element: A.shift:*/
   shift() => new A<Z, X, Y>();
 
-  /*kernel.element: A.swap:needsSignature*/
   /*strong.element: A.swap:*/
   /*omit.element: A.swap:*/
   swap() => new A<Z, Y, X>();
 
-  /*kernel.element: A.first:needsSignature*/
   /*strong.element: A.first:*/
   /*omit.element: A.first:*/
   first() => new A<X, X, X>();
 
-  /*kernel.element: A.last:needsSignature*/
   /*strong.element: A.last:*/
   /*omit.element: A.last:*/
   last() => new A<Z, Z, Z>();
 
-  /*kernel.element: A.wrap:needsSignature*/
   /*strong.element: A.wrap:*/
   /*omit.element: A.wrap:*/
   wrap() => new A<A<X, X, X>, A<Y, Y, Y>, A<Z, Z, Z>>();
 }
 
-/*kernel.element: B.:needsSignature*/
 /*strong.element: B.:*/
 /*omit.element: B.:*/
 class B extends A<U, V, W> {}
 
 /*class: C:needsArgs*/
-/*kernel.element: C.:needsSignature*/
+
 /*strong.element: C.:*/
 /*omit.element: C.:*/
 class C<T> extends A<U, T, W> {}
 
 /*class: D:needsArgs*/
-/*kernel.element: D.:needsSignature*/
+
 /*strong.element: D.:*/
 /*omit.element: D.:*/
 class D<X, Y, Z> extends A<Y, Z, X> {}
@@ -58,12 +52,10 @@
 
 class W {}
 
-/*kernel.element: sameType:needsSignature*/
 /*strong.element: sameType:*/
 /*omit.element: sameType:*/
 sameType(a, b) => Expect.equals(a.runtimeType, b.runtimeType);
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
index 2d0d2ce..04ef2e4 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
@@ -8,7 +8,6 @@
 /*class: B:deps=[method],explicit=[B<A>],needsArgs*/
 class B<T> {}
 
-/*kernel.element: method:*/
 /*strong.element: method:needsArgs*/
 /*omit.element: method:needsArgs*/
 method<T>() => new B<T>();
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is.dart b/tests/compiler/dart2js/rti/data/generic_method_is.dart
index 6339de6..972f756 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_is.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_is.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.element: method:direct,explicit=[method.T]*/
 /*strong.element: method:direct,explicit=[method.T],needsArgs*/
 /*omit.element: method:direct,explicit=[method.T],needsArgs*/
 method<T>(T t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart
index 957e2cd..522514b 100644
--- a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart
+++ b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05_strong.dart
@@ -4,11 +4,9 @@
 
 // Test derived from language_2/generic_methods_dynamic_test/05
 
-/*kernel.class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SubListIterable],explicit=[JSArray],needsArgs*/
 /*omit.class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SubListIterable],explicit=[JSArray],needsArgs*/
 /*strong.class: global#JSArray:deps=[ArrayIterator,EmptyIterable,List,ListIterable,SubListIterable],direct,explicit=[Iterable<JSArray.E>,JSArray,JSArray.E,JSArray<ArrayIterator.E>,List<JSArray.E>],implicit=[JSArray.E],needsArgs*/
 
-/*kernel.class: global#List:deps=[C.bar,EmptyIterable,Iterable,JSArray,ListIterable],explicit=[List,List<B>],needsArgs*/
 /*omit.class: global#List:deps=[C.bar,EmptyIterable,Iterable,JSArray,ListIterable],explicit=[List,List<B>],needsArgs*/
 /*strong.class: global#List:deps=[C.bar,EmptyIterable,Iterable,JSArray,ListIterable,makeListFixedLength],direct,explicit=[List,List.E,List<B>,List<JSArray.E>,List<String>,List<makeListFixedLength.T>],implicit=[List.E],needsArgs*/
 
@@ -16,13 +14,11 @@
 
 class A {}
 
-/*kernel.class: B:explicit=[List<B>]*/
 /*omit.class: B:explicit=[List<B>]*/
 /*strong.class: B:explicit=[List<B>],implicit=[B]*/
 class B {}
 
 class C {
-  /*kernel.element: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   /*omit.element: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   /*strong.element: C.bar:direct,explicit=[Iterable<bar.T>],implicit=[bar.T],needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   List<T> bar<T>(Iterable<T> t) => <T>[t.first];
diff --git a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart
index c6a1e97..2959bc1 100644
--- a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart
+++ b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a_strong.dart
@@ -6,7 +6,6 @@
 
 import "package:expect/expect.dart";
 
-/*kernel.class: A:deps=[C.bar],explicit=[A<B>],needsArgs*/
 /*omit.class: A:deps=[C.bar],explicit=[A<B>],needsArgs*/
 /*strong.class: A:deps=[C.bar],direct,explicit=[A.T,A<B>,A<bar.T>],needsArgs*/
 class A<T> {
@@ -15,13 +14,11 @@
   A(this.field);
 }
 
-/*kernel.class: B:explicit=[A<B>]*/
 /*omit.class: B:explicit=[A<B>]*/
 /*strong.class: B:explicit=[A<B>],implicit=[B]*/
 class B {}
 
 class C {
-  /*kernel.element: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   /*omit.element: C.bar:needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   /*strong.element: C.bar:explicit=[A<bar.T>],implicit=[bar.T],indirect,needsArgs,selectors=[Selector(call, bar, arity=1, types=1)]*/
   A<T> bar<T>(A<T> t) => new A<T>(t.field);
diff --git a/tests/compiler/dart2js/rti/data/indirect_through_static.dart b/tests/compiler/dart2js/rti/data/indirect_through_static.dart
index f8c9344..e548a31 100644
--- a/tests/compiler/dart2js/rti/data/indirect_through_static.dart
+++ b/tests/compiler/dart2js/rti/data/indirect_through_static.dart
@@ -2,17 +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.
 
-/*kernel.class: A:*/
 /*strong.class: A:implicit=[A]*/
 /*omit.class: A:implicit=[A]*/
 abstract class A {}
 
 class B implements A {}
 
-/*kernel.class: C:
- deps=[lookup],
- explicit=[C<lookup.T>]
-*/
 /*strong.class: C:
   deps=[lookup],
   explicit=[C<lookup.T>,Map<String,C>],
@@ -31,7 +26,6 @@
   map['x'] = new C<B>();
 }
 
-/*kernel.element: lookup:direct,explicit=[C<lookup.T>]*/
 /*strong.element: lookup:direct,explicit=[C<lookup.T>],needsArgs*/
 /*omit.element: lookup:direct,explicit=[C<lookup.T>],needsArgs*/
 C<T> lookup<T>(String key) {
diff --git a/tests/compiler/dart2js/rti/data/instantiation2.dart b/tests/compiler/dart2js/rti/data/instantiation2.dart
index 5fc92bb..48c7b6c 100644
--- a/tests/compiler/dart2js/rti/data/instantiation2.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation2.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.element: f:direct,explicit=[f.T]*/
 /*strong.element: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 /*omit.element: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 bool f<T>(T a) => a is T;
diff --git a/tests/compiler/dart2js/rti/data/instantiation4.dart b/tests/compiler/dart2js/rti/data/instantiation4.dart
index 35f00d4..1fcdac2 100644
--- a/tests/compiler/dart2js/rti/data/instantiation4.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation4.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.element: f:direct,explicit=[f.T]*/
 /*strong.element: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 /*omit.element: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 bool f<T>(T a) => a is T;
diff --git a/tests/compiler/dart2js/rti/data/instantiation6.dart b/tests/compiler/dart2js/rti/data/instantiation6.dart
index 86b3684..672e987 100644
--- a/tests/compiler/dart2js/rti/data/instantiation6.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation6.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.element: f:direct,explicit=[f.T]*/
 /*strong.element: f:deps=[method],direct,explicit=[f.T],needsArgs,needsInst=[<method.S>]*/
 /*omit.element: f:deps=[method],direct,explicit=[f.T],needsArgs,needsInst=[<method.S>]*/
 bool f<T>(T a) => a is T;
diff --git a/tests/compiler/dart2js/rti/data/list_to_set.dart b/tests/compiler/dart2js/rti/data/list_to_set.dart
index 427ecc9..60c98f7 100644
--- a/tests/compiler/dart2js/rti/data/list_to_set.dart
+++ b/tests/compiler/dart2js/rti/data/list_to_set.dart
@@ -2,11 +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.
 
-/*kernel.class: global#List:deps=[Class,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin],explicit=[List],implicit=[List.E],indirect,needsArgs*/
 /*strong.class: global#List:deps=[Class,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin,makeListFixedLength],direct,explicit=[List,List.E,List<JSArray.E>,List<String>,List<makeListFixedLength.T>],implicit=[List.E],needsArgs*/
 /*omit.class: global#List:deps=[Class,EmptyIterable,Iterable,JSArray,ListIterable,SetMixin],explicit=[List],implicit=[List.E],indirect,needsArgs*/
 
-/*kernel.class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SetMixin,SubListIterable],explicit=[JSArray],implicit=[JSArray.E],indirect,needsArgs*/
 /*strong.class: global#JSArray:deps=[ArrayIterator,EmptyIterable,List,ListIterable,SetMixin,SubListIterable],explicit=[Iterable<JSArray.E>,JSArray,JSArray.E,JSArray<ArrayIterator.E>,List<JSArray.E>],implicit=[JSArray.E],indirect,needsArgs*/
 /*omit.class: global#JSArray:deps=[EmptyIterable,List,ListIterable,SetMixin,SubListIterable],explicit=[JSArray],implicit=[JSArray.E],indirect,needsArgs*/
 
diff --git a/tests/compiler/dart2js/rti/data/local_function_signatures.dart b/tests/compiler/dart2js/rti/data/local_function_signatures.dart
index 1704785..27ed472 100644
--- a/tests/compiler/dart2js/rti/data/local_function_signatures.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_signatures.dart
@@ -6,7 +6,6 @@
 
 class Class1 {
   method1() {
-    /*kernel.*/
     /*strong.needsSignature*/
     /*omit.needsSignature*/
     num local(num n) => null;
@@ -24,7 +23,6 @@
   }
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*omit.class: Class2:needsArgs*/
 /*strong.class: Class2:direct,explicit=[Class2.T],needsArgs*/
 class Class2<T> {
@@ -44,7 +42,6 @@
   }
 }
 
-/*kernel.class: Class4:*/
 /*omit.class: Class4:*/
 /*strong.class: Class4:direct,explicit=[Class4.T],needsArgs*/
 class Class4<T> {
diff --git a/tests/compiler/dart2js/rti/data/map_literal.dart b/tests/compiler/dart2js/rti/data/map_literal.dart
index 1bda5e6..2c7349d 100644
--- a/tests/compiler/dart2js/rti/data/map_literal.dart
+++ b/tests/compiler/dart2js/rti/data/map_literal.dart
@@ -2,19 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: global#Map:*/
 /*omit.class: global#Map:*/
 /*strong.class: global#Map:explicit=[Map],indirect,needsArgs*/
 
-/*kernel.class: global#LinkedHashMap:deps=[Map]*/
 /*omit.class: global#LinkedHashMap:deps=[Map]*/
 /*strong.class: global#LinkedHashMap:deps=[Map],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
 
-/*kernel.class: global#JsLinkedHashMap:deps=[LinkedHashMap]*/
 /*omit.class: global#JsLinkedHashMap:deps=[LinkedHashMap]*/
 /*strong.class: global#JsLinkedHashMap:deps=[LinkedHashMap],direct,explicit=[JsLinkedHashMap.K,JsLinkedHashMap.V,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],needsArgs*/
 
-/*kernel.class: global#double:explicit=[double]*/
 /*omit.class: global#double:explicit=[double]*/
 /*strong.class: global#double:explicit=[double],implicit=[double]*/
 
diff --git a/tests/compiler/dart2js/rti/data/map_literal_checked.dart b/tests/compiler/dart2js/rti/data/map_literal_checked.dart
deleted file mode 100644
index d48447a..0000000
--- a/tests/compiler/dart2js/rti/data/map_literal_checked.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
-/*class: global#JsLinkedHashMap:deps=[LinkedHashMap],direct,explicit=[Iterable<JsLinkedHashMap.K>,JsLinkedHashMap.K,JsLinkedHashMap.V,JsLinkedHashMap<JsLinkedHashMap.K,JsLinkedHashMap.V>,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],needsArgs*/
-/*class: global#double:explicit=[double],implicit=[double]*/
-/*class: global#JSDouble:*/
-
-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
index b883fe0..80569bd 100644
--- a/tests/compiler/dart2js/rti/data/map_to_set.dart
+++ b/tests/compiler/dart2js/rti/data/map_to_set.dart
@@ -2,19 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: global#Map:deps=[Class],needsArgs*/
 /*omit.class: global#Map:deps=[Class],needsArgs*/
 /*strong.class: global#Map:deps=[Class,JsLinkedHashMap,MapMixin],explicit=[Map,Map<JsLinkedHashMap.K,JsLinkedHashMap.V>,Map<MapMixin.K,MapMixin.V>],indirect,needsArgs*/
 
-/*kernel.class: global#LinkedHashMap:deps=[Map],needsArgs*/
 /*omit.class: global#LinkedHashMap:deps=[Map],needsArgs*/
 /*strong.class: global#LinkedHashMap:deps=[Map],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
 
-/*kernel.class: global#JsLinkedHashMap:deps=[LinkedHashMap],implicit=[JsLinkedHashMap.K],needsArgs*/
 /*omit.class: global#JsLinkedHashMap:deps=[LinkedHashMap],implicit=[JsLinkedHashMap.K],needsArgs*/
 /*strong.class: global#JsLinkedHashMap:deps=[LinkedHashMap],explicit=[JsLinkedHashMap.K,JsLinkedHashMap.V,Map<JsLinkedHashMap.K,JsLinkedHashMap.V>,void Function(JsLinkedHashMap.K,JsLinkedHashMap.V)],implicit=[JsLinkedHashMap.K,JsLinkedHashMap.V],indirect,needsArgs*/
 
-/*kernel.class: global#double:explicit=[double]*/
 /*omit.class: global#double:explicit=[double]*/
 /*strong.class: global#double:explicit=[double],implicit=[double]*/
 
@@ -27,7 +23,6 @@
   set is Set<String>;
 }
 
-/*kernel.class: Class:needsArgs*/
 /*omit.class: Class:needsArgs*/
 /*strong.class: Class:implicit=[Class.S,Class.T],indirect,needsArgs*/
 class Class<T, S> {
diff --git a/tests/compiler/dart2js/rti/data/method_signatures.dart b/tests/compiler/dart2js/rti/data/method_signatures.dart
index b76455a..83bca5c 100644
--- a/tests/compiler/dart2js/rti/data/method_signatures.dart
+++ b/tests/compiler/dart2js/rti/data/method_signatures.dart
@@ -15,11 +15,9 @@
   Object method3(num n) => null;
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:direct,explicit=[Class2.T],needsArgs*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.method4:needsSignature*/
   /*strong.element: Class2.method4:*/
   /*omit.element: Class2.method4:*/
   num method4(T n) => null;
@@ -31,7 +29,6 @@
   T method5(num n) => null;
 }
 
-/*kernel.class: Class4:*/
 /*omit.class: Class4:*/
 /*strong.class: Class4:direct,explicit=[Class4.T],needsArgs*/
 class Class4<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
index 3fb3610..69a3f14 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
@@ -4,17 +4,14 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
index a573e8b..2757f5a 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
@@ -4,31 +4,25 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
-  /*kernel.needsSignature*/
   /*strong.needsArgs,needsSignature*/
   /*omit.needsArgs,needsSignature*/
   T local1a<T>() => null;
 
-  /*kernel.needsSignature*/
   /*strong.needsArgs,needsSignature*/
   /*omit.needsArgs,needsSignature*/
   T local1b<T>() => null;
 
-  /*kernel.needsSignature*/
   /*strong.direct,explicit=[local2.T],needsArgs,needsSignature*/
   /*omit.needsArgs,needsSignature*/
   T local2<T>(T t, String s) => t;
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
index c32e678..d650fb6 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
@@ -6,16 +6,13 @@
 
 String method() => null;
 
-/*kernel.class: Class1:needsArgs*/
 /*omit.class: Class1:needsArgs*/
 /*strong.class: Class1:direct,explicit=[Class1.T],needsArgs*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 
-  /*kernel.element: Class1.method:needsSignature*/
   /*strong.element: Class1.method:*/
   /*omit.element: Class1.method:*/
   method() {
@@ -34,17 +31,14 @@
   }
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
index 91267c0..33973ff 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
@@ -4,11 +4,9 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
@@ -16,33 +14,28 @@
   // TODO(johnniwinther): Currently only methods that use class type variables
   // in their signature are marked as 'needs signature'. Change this to mark
   // all methods that need to support access to their function type at runtime.
-  /*kernel.element: Class1.method1a:needsSignature*/
+
   /*strong.element: Class1.method1a:*/
   /*omit.element: Class1.method1a:*/
   method1a() => null;
 
-  /*kernel.element: Class1.method1b:needsSignature*/
   /*strong.element: Class1.method1b:*/
   /*omit.element: Class1.method1b:*/
   method1b() => null;
 
-  /*kernel.element: Class1.method2:needsSignature*/
   /*strong.element: Class1.method2:*/
   /*omit.element: Class1.method2:*/
   method2(t, s) => t;
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
index e2aa421..82ed29c 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
@@ -4,42 +4,34 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: Class1:needsArgs*/
 /*omit.class: Class1:needsArgs*/
 /*strong.class: Class1:direct,explicit=[Class1.T],needsArgs*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 
-  /*kernel.element: Class1.method1a:needsSignature*/
   /*strong.element: Class1.method1a:needsSignature*/
   /*omit.element: Class1.method1a:needsSignature*/
   T method1a() => null;
 
-  /*kernel.element: Class1.method1b:needsSignature*/
   /*strong.element: Class1.method1b:needsSignature*/
   /*omit.element: Class1.method1b:needsSignature*/
   T method1b() => null;
 
-  /*kernel.element: Class1.method2:needsSignature*/
   /*strong.element: Class1.method2:needsSignature*/
   /*omit.element: Class1.method2:needsSignature*/
   T method2(T t, String s) => t;
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
index af2cce5..219ee28 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
@@ -4,32 +4,26 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.element: method1a:needsSignature*/
 /*strong.element: method1a:*/
 /*omit.element: method1a:*/
 method1a() => null;
 
-/*kernel.element: method1b:needsSignature*/
 /*strong.element: method1b:*/
 /*omit.element: method1b:*/
 method1b() => null;
 
-/*kernel.element: method2:needsSignature*/
 /*strong.element: method2:*/
 /*omit.element: method2:*/
 method2(t, s) => t;
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
index 23d1a3b..4d501bb 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
@@ -4,32 +4,26 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.element: method1a:needsSignature*/
 /*strong.element: method1a:needsArgs*/
 /*omit.element: method1a:needsArgs*/
 T method1a<T>() => null;
 
-/*kernel.element: method1b:needsSignature*/
 /*strong.element: method1b:needsArgs*/
 /*omit.element: method1b:needsArgs*/
 T method1b<T>() => null;
 
-/*kernel.element: method2:needsSignature*/
 /*strong.element: method2:direct,explicit=[method2.T],needsArgs*/
 /*omit.element: method2:needsArgs*/
 T method2<T>(T t, String s) => t;
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
index 4f871d6..2735441 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
@@ -4,42 +4,34 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:*/
 /*omit.class: Class1:*/
 class Class1<S> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 
-  /*kernel.element: Class1.method1a:needsSignature*/
   /*strong.element: Class1.method1a:needsArgs*/
   /*omit.element: Class1.method1a:needsArgs*/
   T method1a<T>() => null;
 
-  /*kernel.element: Class1.method1b:needsSignature*/
   /*strong.element: Class1.method1b:needsArgs*/
   /*omit.element: Class1.method1b:needsArgs*/
   T method1b<T>() => null;
 
-  /*kernel.element: Class1.method2:needsSignature*/
   /*strong.element: Class1.method2:direct,explicit=[method2.T],needsArgs*/
   /*omit.element: Class1.method2:needsArgs*/
   T method2<T>(T t, String s) => t;
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
index 4eb0481..53f3285 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
@@ -2,26 +2,21 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
-  /*kernel.needsSignature*/
   /*strong.needsSignature*/
   /*omit.*/
   local1() {}
 
-  /*kernel.needsSignature*/
   /*strong.needsSignature*/
   /*omit.*/
   local2(int i, String s) => i;
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
index c2d9ef4..209cf08 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
@@ -2,26 +2,21 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
-  /*kernel.needsSignature*/
   /*strong.needsArgs,needsSignature*/
   /*omit.*/
   local1<T>() {}
 
-  /*kernel.needsSignature*/
   /*strong.needsArgs,needsSignature,selectors=[Selector(call, call, arity=2, types=1)]*/
   /*omit.*/
   local2<T>(t, s) => t;
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
index fbc1805..0496521 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
@@ -2,32 +2,26 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 
-  /*kernel.element: Class1.method:needsSignature*/
   /*strong.element: Class1.method:needsSignature*/
   /*omit.element: Class1.method:*/
   T method() => null;
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
index 72d9834..318d8e8 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
@@ -4,28 +4,23 @@
 
 /*class: Class1:*/
 class Class1 {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 
-  /*kernel.element: Class1.method:needsSignature*/
   /*strong.element: Class1.method:needsArgs*/
   /*omit.element: Class1.method:*/
   T method<T>() => null;
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
index 86081c3..810ca7a 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: method1:needsSignature*/
 /*strong.element: method1:*/
 /*omit.element: method1:*/
 method1() {}
 
-/*kernel.element: method2:needsSignature*/
 /*strong.element: method2:*/
 /*omit.element: method2:*/
 method2(int i, String s) => i;
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
index f64f35f..1fcaa30 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class:needsArgs*/
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
-  /*kernel.element: Class.:needsSignature*/
   /*strong.element: Class.:*/
   /*omit.element: Class.:*/
   Class();
 }
 
-/*kernel.element: method1:needsSignature*/
 /*strong.element: method1:needsArgs*/
 /*omit.element: method1:*/
 method1<T>() {}
 
-/*kernel.element: method2:needsSignature*/
 /*strong.element: method2:needsArgs*/
 /*omit.element: method2:*/
 method2<T>(t, s) => t;
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
index 3c7aed7..0f6cce7 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
@@ -6,12 +6,10 @@
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
-  /*kernel.element: Class1a.:needsSignature*/
   /*strong.element: Class1a.:*/
   /*omit.element: Class1a.:*/
   Class1a();
 
-  /*kernel.element: Class1a.==:needsSignature*/
   /*strong.element: Class1a.==:*/
   /*omit.element: Class1a.==:*/
   bool operator ==(other) {
@@ -22,7 +20,6 @@
 
 /*class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a<T> {
-  /*kernel.element: Class1b.:needsSignature*/
   /*strong.element: Class1b.:*/
   /*omit.element: Class1b.:*/
   Class1b();
@@ -32,23 +29,19 @@
 // this class.
 /*class: Class1c:needsArgs*/
 class Class1c<T> implements Class1a<T> {
-  /*kernel.element: Class1c.:needsSignature*/
   /*strong.element: Class1c.:*/
   /*omit.element: Class1c.:*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
index 72fb155..eb04620 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
@@ -6,12 +6,10 @@
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
-  /*kernel.element: Class1a.:needsSignature*/
   /*strong.element: Class1a.:*/
   /*omit.element: Class1a.:*/
   Class1a();
 
-  /*kernel.element: Class1a.==:needsSignature*/
   /*strong.element: Class1a.==:*/
   /*omit.element: Class1a.==:*/
   bool operator ==(other) {
@@ -22,7 +20,6 @@
 
 /*class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a<T> {
-  /*kernel.element: Class1b.:needsSignature*/
   /*strong.element: Class1b.:*/
   /*omit.element: Class1b.:*/
   Class1b();
@@ -32,23 +29,19 @@
 // this class.
 /*class: Class1c:needsArgs*/
 class Class1c<T> implements Class1a<T> {
-  /*kernel.element: Class1c.:needsSignature*/
   /*strong.element: Class1c.:*/
   /*omit.element: Class1c.:*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
index 4994e58..e83b5cf 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
@@ -6,12 +6,10 @@
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
-  /*kernel.element: Class1a.:needsSignature*/
   /*strong.element: Class1a.:*/
   /*omit.element: Class1a.:*/
   Class1a();
 
-  /*kernel.element: Class1a.==:needsSignature*/
   /*strong.element: Class1a.==:*/
   /*omit.element: Class1a.==:*/
   bool operator ==(other) {
@@ -22,7 +20,6 @@
 
 /*class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a<T> {
-  /*kernel.element: Class1b.:needsSignature*/
   /*strong.element: Class1b.:*/
   /*omit.element: Class1b.:*/
   Class1b();
@@ -32,23 +29,19 @@
 // this class.
 /*class: Class1c:needsArgs*/
 class Class1c<T> implements Class1a<T> {
-  /*kernel.element: Class1c.:needsSignature*/
   /*strong.element: Class1c.:*/
   /*omit.element: Class1c.:*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
index 3eb953a..f3f3b67 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
@@ -6,12 +6,10 @@
 
 /*class: Class1a:needsArgs*/
 class Class1a<T> {
-  /*kernel.element: Class1a.:needsSignature*/
   /*strong.element: Class1a.:*/
   /*omit.element: Class1a.:*/
   Class1a();
 
-  /*kernel.element: Class1a.==:needsSignature*/
   /*strong.element: Class1a.==:*/
   /*omit.element: Class1a.==:*/
   bool operator ==(other) {
@@ -22,7 +20,6 @@
 
 /*class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a<T> {
-  /*kernel.element: Class1b.:needsSignature*/
   /*strong.element: Class1b.:*/
   /*omit.element: Class1b.:*/
   Class1b();
@@ -32,23 +29,19 @@
 // this class.
 /*class: Class1c:needsArgs*/
 class Class1c<T> implements Class1a<T> {
-  /*kernel.element: Class1c.:needsSignature*/
   /*strong.element: Class1c.:*/
   /*omit.element: Class1c.:*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart
index d93f282..56285d2 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart
@@ -6,42 +6,33 @@
 
 /*strong.class: Class1a:explicit=[Class1a]*/
 class Class1a {
-  /*kernel.element: Class1a.:needsSignature*/
   Class1a();
 }
 
-/*kernel.class: Class1b:needsArgs*/
 /*strong.class: Class1b:needsArgs*/
 /*omit.class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a {
-  /*kernel.element: Class1b.:needsSignature*/
   Class1b();
 }
 
-/*kernel.class: Class1c:needsArgs*/
 /*strong.class: Class1c:needsArgs*/
 /*omit.class: Class1c:needsArgs*/
 class Class1c<T> extends Class1a {
-  /*kernel.element: Class1c.:needsSignature*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   Class2();
 }
 
-/*kernel.element: test:needsSignature*/
 /*strong.element: test:*/
 /*omit.element: test:*/
 test(Class1a c, Type type) {
   return c.runtimeType == type;
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart
index 36cb66d..2aff7c1 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart
@@ -4,46 +4,36 @@
 
 import 'package:expect/expect.dart';
 
-/*kernel.class: Class1a:needsArgs*/
 /*strong.class: Class1a:explicit=[Class1a],needsArgs*/
 /*omit.class: Class1a:needsArgs*/
 class Class1a<T> {
-  /*kernel.element: Class1a.:needsSignature*/
   Class1a();
 }
 
-/*kernel.class: Class1b:needsArgs*/
 /*strong.class: Class1b:needsArgs*/
 /*omit.class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a<T> {
-  /*kernel.element: Class1b.:needsSignature*/
   Class1b();
 }
 
-/*kernel.class: Class1c:needsArgs*/
 /*strong.class: Class1c:needsArgs*/
 /*omit.class: Class1c:needsArgs*/
 class Class1c<T> extends Class1a<T> {
-  /*kernel.element: Class1c.:needsSignature*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   Class2();
 }
 
-/*kernel.element: test:needsSignature*/
 /*strong.element: test:*/
 /*omit.element: test:*/
 test(Class1a c, Type type) {
   return c.runtimeType == type;
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart
index 5cf6134..a1748f4 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart
@@ -6,52 +6,41 @@
 
 /*strong.class: Class1a:explicit=[Class1a]*/
 class Class1a {
-  /*kernel.element: Class1a.:needsSignature*/
   Class1a();
 }
 
-/*kernel.class: Class1b:needsArgs*/
 /*strong.class: Class1b:needsArgs*/
 /*omit.class: Class1b:needsArgs*/
 class Class1b<T> extends Class1a {
-  /*kernel.element: Class1b.:needsSignature*/
   Class1b();
 }
 
-/*kernel.class: Class1c:needsArgs*/
 /*strong.class: Class1c:needsArgs*/
 /*omit.class: Class1c:needsArgs*/
 class Class1c<T> extends Class1a {
-  /*kernel.element: Class1c.:needsSignature*/
   Class1c();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   Class2();
 }
 
-/*kernel.class: Class3:needsArgs*/
 /*strong.class: Class3:explicit=[Class3]*/
 /*omit.class: Class3:*/
 class Class3<T> {
   final Class1a field;
 
-  /*kernel.element: Class3.:needsSignature*/
   Class3(this.field);
 }
 
-/*kernel.element: test:needsSignature*/
 /*strong.element: test:*/
 /*omit.element: test:*/
 test(Class3 c, Type type) {
   return c.field.runtimeType == type;
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
index 5275254..ae67754 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
@@ -2,37 +2,30 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:*/
 /*strong.class: Class1:*/
 /*omit.class: Class1:*/
 class Class1 {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.class: Class3:needsArgs*/
 /*strong.class: Class3:needsArgs*/
 /*omit.class: Class3:*/
 class Class3<T> implements Class1 {
-  /*kernel.element: Class3.:needsSignature*/
   /*strong.element: Class3.:*/
   /*omit.element: Class3.:*/
   Class3();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
index 6124657..3c36e34 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
index fdff124..91058ce 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
index ba06a77..2b9902a 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
index 79f159b..22f8349 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
index 5d18fbe..fb64484 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
@@ -2,27 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:needsArgs*/
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:needsArgs*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
index 5275254..ae67754 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
@@ -2,37 +2,30 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: Class1:*/
 /*strong.class: Class1:*/
 /*omit.class: Class1:*/
 class Class1 {
-  /*kernel.element: Class1.:needsSignature*/
   /*strong.element: Class1.:*/
   /*omit.element: Class1.:*/
   Class1();
 }
 
-/*kernel.class: Class2:needsArgs*/
 /*strong.class: Class2:*/
 /*omit.class: Class2:*/
 class Class2<T> {
-  /*kernel.element: Class2.:needsSignature*/
   /*strong.element: Class2.:*/
   /*omit.element: Class2.:*/
   Class2();
 }
 
-/*kernel.class: Class3:needsArgs*/
 /*strong.class: Class3:needsArgs*/
 /*omit.class: Class3:*/
 class Class3<T> implements Class1 {
-  /*kernel.element: Class3.:needsSignature*/
   /*strong.element: Class3.:*/
   /*omit.element: Class3.:*/
   Class3();
 }
 
-/*kernel.element: main:needsSignature*/
 /*strong.element: main:*/
 /*omit.element: main:*/
 main() {
diff --git a/tests/compiler/dart2js/rti/data/subtype_named_args.dart b/tests/compiler/dart2js/rti/data/subtype_named_args.dart
index f4fad6e3..5e6bbe2 100644
--- a/tests/compiler/dart2js/rti/data/subtype_named_args.dart
+++ b/tests/compiler/dart2js/rti/data/subtype_named_args.dart
@@ -6,23 +6,100 @@
 
 import 'package:expect/expect.dart';
 
-/*class: A:explicit=[dynamic Function({a:A,b:B,c:C,d:D}),dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]*/
+/*strong.class: A:
+ explicit=[
+  A,G<A,A1,A1,A1>,
+  dynamic Function({a:A,b:A1,c:A1,d:A1}),
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,A1,A1,A1>,l:List<List<A1>>,m:Map<num,num>}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),
+  dynamic Function({v:dynamic Function({a:A,b:B,c:C,d:D}),x:int,y:bool,z:List<Map>}),
+  dynamic Function({v:dynamic,x:A,y:G,z:dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic})})]
+*/
+/*omit.class: A:
+ explicit=[
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]
+*/
 class A {}
 
+/*strong.class: A1:explicit=[A1,G<A,A1,A1,A1>,List<List<A1>>,dynamic Function({a:A,b:A1,c:A1,d:A1}),dynamic Function({g:G<A,A1,A1,A1>,l:List<List<A1>>,m:Map<num,num>})]*/
 class A1 {}
 
+/*strong.class: A2:explicit=[A2]*/
 class A2 {}
 
-/*class: B:explicit=[dynamic Function({a:A,b:B,c:C,d:D}),dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]*/
+/*strong.class: B:
+ explicit=[
+  B,
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),
+  dynamic Function({v:dynamic Function({a:A,b:B,c:C,d:D}),x:int,y:bool,z:List<Map>}),
+  dynamic Function({v:dynamic,x:A,y:G,z:dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic})})]
+*/
+/*omit.class: B:
+ explicit=[
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]
+*/
 class B implements A, A1, A2 {}
 
-/*class: C:explicit=[dynamic Function({a:A,b:B,c:C,d:D}),dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]*/
+/*strong.class: C:
+ explicit=[
+  C,
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),dynamic Function({v:dynamic Function({a:A,b:B,c:C,d:D}),x:int,y:bool,z:List<Map>}),
+  dynamic Function({v:dynamic,x:A,y:G,z:dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic})})]
+*/
+/*omit.class: C:
+ explicit=[
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]
+*/
 class C implements B {}
 
-/*class: D:explicit=[dynamic Function({a:A,b:B,c:C,d:D}),dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]*/
+/*strong.class: D:
+ explicit=[
+  D,G<D,D,D,D>,List<List<D>>,
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({a:D,b:D,c:D,d:D}),
+  dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),dynamic Function({g:G<D,D,D,D>,l:List<List<D>>,m:Map<int,int>}),
+  dynamic Function({v:dynamic Function({a:A,b:B,c:C,d:D}),x:int,y:bool,z:List<Map>}),dynamic Function({v:dynamic,x:A,y:G,z:dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic})})]
+*/
+/*omit.class: D:
+ explicit=[
+  dynamic Function({a:A,b:B,c:C,d:D}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]
+*/
 class D implements C {}
 
-/*class: G:explicit=[dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]*/
+/*strong.class: G:
+ explicit=[
+  G,G<A,A1,A1,A1>,G<D,D,D,D>,
+  dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic}),
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,A1,A1,A1>,l:List<List<A1>>,m:Map<num,num>}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),
+  dynamic Function({g:G<D,D,D,D>,l:List<List<D>>,m:Map<int,int>}),
+  dynamic Function({v:dynamic,x:A,y:G,z:dynamic Function({b:B,f:dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),g:G<A,B,C,D>,x:dynamic})})],
+ needsArgs
+*/
+/*omit.class: G:
+ explicit=[
+  dynamic Function({f1:dynamic Function({a:A,b:B,c:C,d:D}),f2:dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>}),f3:dynamic Function({v:dynamic,x:dynamic,y:dynamic,z:dynamic})}),
+  dynamic Function({g:G<A,B,C,D>,l:List<List<B>>,m:Map<num,int>})]
+*/
 class G<T, S, U, W> {}
 
 typedef classesFunc({A a, B b, C c, D d});
@@ -43,31 +120,57 @@
 typedef okWithDynamicFunc_2({int x, bool y, List<Map> z, classesFunc v});
 
 main() {
-  Expect.isTrue(({D a, B b, C c, A d}) {} is classesFunc);
-  Expect.isTrue(({A a, A b, A c, A d}) {} is classesFunc);
-  Expect.isTrue(({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
-  Expect.isTrue(({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
-  Expect.isTrue(({D a, D b, D c, D d}) {} is classesFunc);
-  Expect.isTrue(({var a, var b, var c, var d}) {} is classesFunc);
-  Expect.isTrue(({Object a, Object b, Object c, Object d}) {} is classesFunc);
-
-  Expect.isTrue(({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
-      is genericsFunc);
   Expect.isTrue(
+      /*strong.needsSignature*/
+      ({D a, B b, C c, A d}) {} is classesFunc);
+  Expect.isTrue(
+      /*needsSignature*/
+      ({A a, A b, A c, A d}) {} is classesFunc);
+  Expect.isTrue(
+      /*strong.needsSignature*/
+      ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
+  Expect.isTrue(
+      /*strong.needsSignature*/
+      ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
+  Expect.isTrue(
+      /*strong.needsSignature*/
+      ({D a, D b, D c, D d}) {} is classesFunc);
+  Expect.isTrue(
+      /*needsSignature*/
+      ({var a, var b, var c, var d}) {} is classesFunc);
+  Expect.isTrue(
+      /*needsSignature*/
+      ({Object a, Object b, Object c, Object d}) {} is classesFunc);
+
+  Expect.isTrue(
+      /*needsSignature*/
+      ({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
+          is genericsFunc);
+  Expect.isTrue(
+      /*strong.needsSignature*/
       ({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {} is genericsFunc);
-  Expect.isTrue(({var m, var l, var g}) {} is genericsFunc);
-  Expect.isTrue(({Object m, Object l, Object g}) {} is genericsFunc);
-
-  Expect.isTrue(({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
   Expect.isTrue(
+      /*needsSignature*/
+      ({var m, var l, var g}) {} is genericsFunc);
+  Expect.isTrue(
+      /*needsSignature*/
+      ({Object m, Object l, Object g}) {} is genericsFunc);
+
+  Expect.isTrue(
+      /*strong.needsSignature*/
+      ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
+  Expect.isTrue(
+      /*strong.needsSignature*/
       ({int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
 
   Expect.isTrue((
       {okWithClassesFunc_1 f1,
       okWithGenericsFunc_1 f2,
       okWithDynamicFunc_1 f3}) {} is funcFunc);
-  Expect.isTrue((
-      {okWithClassesFunc_2 f1,
-      okWithGenericsFunc_2 f2,
-      okWithDynamicFunc_2 f3}) {} is funcFunc);
+  Expect.isTrue(
+      /*needsSignature*/
+      (
+          {okWithClassesFunc_2 f1,
+          okWithGenericsFunc_2 f2,
+          okWithDynamicFunc_2 f3}) {} is funcFunc);
 }
diff --git a/tests/compiler/dart2js/rti/data/subtype_named_args1.dart b/tests/compiler/dart2js/rti/data/subtype_named_args1.dart
index 8d5cf9c..5af335e 100644
--- a/tests/compiler/dart2js/rti/data/subtype_named_args1.dart
+++ b/tests/compiler/dart2js/rti/data/subtype_named_args1.dart
@@ -6,14 +6,18 @@
 
 import "package:expect/expect.dart";
 
+/*strong.class: A:explicit=[A,dynamic Function({a:A})]*/
 class A {}
 
-/*class: B:explicit=[dynamic Function({a:B}),dynamic Function({f:dynamic Function({a:B})})]*/
+/*strong.class: B:explicit=[B,dynamic Function({a:B}),dynamic Function({f:dynamic Function({a:B})})]*/
+/*omit.class: B:explicit=[dynamic Function({a:B}),dynamic Function({f:dynamic Function({a:B})})]*/
 class B implements A {}
 
-/*class: C:explicit=[dynamic Function({c:C})]*/
+/*strong.class: C:explicit=[C,dynamic Function({a:C}),dynamic Function({c:C})]*/
+/*omit.class: C:explicit=[dynamic Function({c:C})]*/
 class C implements B {}
 
+/*strong.class: D:explicit=[D,dynamic Function({a:D})]*/
 class D implements C {}
 
 typedef t1({B a});
@@ -31,31 +35,31 @@
 typedef okWithT1_4({D a});
 
 main() {
-  Expect.isTrue(({A a}) {} is t1);
-  Expect.isTrue(({B a}) {} is t1);
-  Expect.isTrue(({C a}) {} is t1);
-  Expect.isTrue(({D a}) {} is t1);
-  Expect.isTrue(({Object a}) {} is t1);
-  Expect.isTrue(({var a}) {} is t1);
+  Expect.isTrue(/*needsSignature*/ ({A a}) {} is t1);
+  Expect.isTrue(/*needsSignature*/ ({B a}) {} is t1);
+  Expect.isTrue(/*strong.needsSignature*/ ({C a}) {} is t1);
+  Expect.isTrue(/*strong.needsSignature*/ ({D a}) {} is t1);
+  Expect.isTrue(/*needsSignature*/ ({Object a}) {} is t1);
+  Expect.isTrue(/*needsSignature*/ ({var a}) {} is t1);
 
-  Expect.isTrue(({A c}) {} is t2);
-  Expect.isTrue(({B c}) {} is t2);
-  Expect.isTrue(({C c}) {} is t2);
+  Expect.isTrue(/*needsSignature*/ ({A c}) {} is t2);
+  Expect.isTrue(/*needsSignature*/ ({B c}) {} is t2);
+  Expect.isTrue(/*needsSignature*/ ({C c}) {} is t2);
   Expect.isTrue(({D c}) {} is t2);
-  Expect.isTrue(({Object c}) {} is t2);
-  Expect.isTrue(({var c}) {} is t2);
+  Expect.isTrue(/*needsSignature*/ ({Object c}) {} is t2);
+  Expect.isTrue(/*needsSignature*/ ({var c}) {} is t2);
 
-  Expect.isTrue(({num i}) {} is t3);
-  Expect.isTrue(({int i}) {} is t3);
-  Expect.isTrue(({Object i}) {} is t3);
-  Expect.isTrue(({var i}) {} is t3);
+  Expect.isTrue(/*needsSignature*/ ({num i}) {} is t3);
+  Expect.isTrue(/*needsSignature*/ ({int i}) {} is t3);
+  Expect.isTrue(/*needsSignature*/ ({Object i}) {} is t3);
+  Expect.isTrue(/*needsSignature*/ ({var i}) {} is t3);
 
   Expect.isTrue(({A v}) {} is t4);
   Expect.isTrue(({B v}) {} is t4);
   Expect.isTrue(({C v}) {} is t4);
   Expect.isTrue(({D v}) {} is t4);
-  Expect.isTrue(({Object v}) {} is t4);
-  Expect.isTrue(({var v}) {} is t4);
+  Expect.isTrue(/*needsSignature*/ ({Object v}) {} is t4);
+  Expect.isTrue(/*needsSignature*/ ({var v}) {} is t4);
   Expect.isTrue(({num v}) {} is t4);
   Expect.isTrue(({int v}) {} is t4);
   Expect.isTrue(({Map v}) {} is t4);
@@ -64,30 +68,30 @@
   Expect.isTrue(({t8 v}) {} is t4);
   Expect.isTrue(({t7 v}) {} is t4);
 
-  Expect.isTrue(({Map m}) {} is t5);
+  Expect.isTrue(/*needsSignature*/ ({Map m}) {} is t5);
   Expect.isTrue(({Map<List, t8> m}) {} is t5);
-  Expect.isTrue(({Object m}) {} is t5);
-  Expect.isTrue(({var m}) {} is t5);
+  Expect.isTrue(/*needsSignature*/ ({Object m}) {} is t5);
+  Expect.isTrue(/*needsSignature*/ ({var m}) {} is t5);
   Expect.isTrue(({Map<List, List> m}) {} is t5);
   Expect.isTrue(({Map<int, t8> m}) {} is t5);
 
-  Expect.isTrue(({Map<num, num> m}) {} is t6);
+  Expect.isTrue(/*needsSignature*/ ({Map<num, num> m}) {} is t6);
   Expect.isTrue(({Map<int, int> m}) {} is t6);
-  Expect.isTrue(({Map m}) {} is t6);
-  Expect.isTrue(({Object m}) {} is t6);
-  Expect.isTrue(({var m}) {} is t6);
+  Expect.isTrue(/*needsSignature*/ ({Map m}) {} is t6);
+  Expect.isTrue(/*needsSignature*/ ({Object m}) {} is t6);
+  Expect.isTrue(/*needsSignature*/ ({var m}) {} is t6);
 
   Expect.isTrue(({okWithT1_1 f}) {} is t7);
-  Expect.isTrue(({okWithT1_2 f}) {} is t7);
-  Expect.isTrue(({okWithT1_3 f}) {} is t7);
-  Expect.isTrue(({okWithT1_4 f}) {} is t7);
+  Expect.isTrue(/*needsSignature*/ ({okWithT1_2 f}) {} is t7);
+  Expect.isTrue(/*needsSignature*/ ({okWithT1_3 f}) {} is t7);
+  Expect.isTrue(/*needsSignature*/ ({okWithT1_4 f}) {} is t7);
 
-  Expect.isTrue(({A a}) {} is t8);
-  Expect.isTrue(({B a}) {} is t8);
-  Expect.isTrue(({C a}) {} is t8);
-  Expect.isTrue(({D a}) {} is t8);
-  Expect.isTrue(({Object a}) {} is t8);
-  Expect.isTrue(({var a}) {} is t8);
+  Expect.isTrue(/*needsSignature*/ ({A a}) {} is t8);
+  Expect.isTrue(/*needsSignature*/ ({B a}) {} is t8);
+  Expect.isTrue(/*strong.needsSignature*/ ({C a}) {} is t8);
+  Expect.isTrue(/*strong.needsSignature*/ ({D a}) {} is t8);
+  Expect.isTrue(/*needsSignature*/ ({Object a}) {} is t8);
+  Expect.isTrue(/*needsSignature*/ ({var a}) {} is t8);
   Expect.isTrue(({num a}) {} is t8);
   Expect.isTrue(({int a}) {} is t8);
   Expect.isTrue(({Map a}) {} is t8);
diff --git a/tests/compiler/dart2js/rti/data/tear_off_generic.dart b/tests/compiler/dart2js/rti/data/tear_off_generic.dart
index c8263c4..24cc2ee 100644
--- a/tests/compiler/dart2js/rti/data/tear_off_generic.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off_generic.dart
@@ -2,11 +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.
 
-/*kernel.class: A:needsArgs*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 /*omit.class: A:*/
 class A<T> {
-  /*kernel.element: A.m:needsSignature*/
   /*strong.element: A.m:*/
   /*omit.element: A.m:*/
   void m(T t) {}
diff --git a/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart b/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart
index 7437085..24cc2ee 100644
--- a/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off_generic_strong.dart
@@ -5,7 +5,6 @@
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 /*omit.class: A:*/
 class A<T> {
-  /*kernel.element: A.m:needsSignature*/
   /*strong.element: A.m:*/
   /*omit.element: A.m:*/
   void m(T t) {}
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
index c5ff693..0c52e5e 100644
--- a/tests/compiler/dart2js/rti/disable_rti_test.dart
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -73,14 +73,7 @@
   runTest() async {
     CompilationResult result = await runCompiler(
         memorySourceFiles: {'main.dart': code},
-        // TODO(johnniwinther): This test fails if inlining is disabled. This
-        // is because the selector for calling `local1` matches `H.call` which
-        // is not considered live be resolution. We need to mark function-call
-        // selectors separately from dynamic calls and class-calls as to not
-        // mix these in codegen. Currently this test works without
-        // --disable-inlining, but the option should be re-enabled to ensure
-        // the intended coverage.
-        options: [Flags.disableRtiOptimization /*, Flags.disableInlining*/]);
+        options: [Flags.disableRtiOptimization, Flags.disableInlining]);
     Expect.isTrue(result.isSuccess);
     Compiler compiler = result.compiler;
     JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
diff --git a/tests/compiler/dart2js/rti/emission/call_typed.dart b/tests/compiler/dart2js/rti/emission/call_typed.dart
deleted file mode 100644
index 6cb2e55..0000000
--- a/tests/compiler/dart2js/rti/emission/call_typed.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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 'package:meta/dart2js.dart';
-
-/*class: A:checks=[],functionType,instance*/
-class A {
-  call(int i) {}
-}
-
-@noInline
-test(o) => o is Function(int);
-
-main() {
-  Expect.isTrue(test(new A()));
-  Expect.isFalse(test(null));
-}
diff --git a/tests/compiler/dart2js/rti/emission/call_typed_generic.dart b/tests/compiler/dart2js/rti/emission/call_typed_generic.dart
deleted file mode 100644
index b4173d9..0000000
--- a/tests/compiler/dart2js/rti/emission/call_typed_generic.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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 'package:meta/dart2js.dart';
-
-/*class: A:checks=[$signature],instance*/
-class A<T> {
-  call(T t) {}
-}
-
-@noInline
-test(o) => o is Function(int);
-
-main() {
-  Expect.isTrue(test(new A<int>()));
-  Expect.isFalse(test(new A<String>()));
-}
diff --git a/tests/compiler/dart2js/rti/emission/closure_function.dart b/tests/compiler/dart2js/rti/emission/closure_function.dart
index 1874f1a..b09023f 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function.dart
@@ -9,7 +9,7 @@
 
 main() {
   test(
-      /*kernel.checks=[],functionType,instance*/
+
       /*strong.checks=[],instance*/
       /*omit.checks=[],instance*/
       () {});
diff --git a/tests/compiler/dart2js/rti/emission/closure_function_type.dart b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
index b37395b..56d1d56 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function_type.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
@@ -10,7 +10,7 @@
 main() {
   test(/*checks=[],functionType,instance*/ () {});
   test(
-      /*kernel.checks=[],functionType,instance*/
+
       /*strong.checks=[],instance*/
       /*omit.checks=[],instance*/
       (a) {});
diff --git a/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart b/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart
index 52b2ec9..df19f23 100644
--- a/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart
@@ -11,7 +11,7 @@
     // TODO(johnniwinther): The signature is not needed since the type isn't a
     // potential subtype of the checked function types.
     return
-        /*kernel.checks=[$signature],instance*/
+
         /*strong.checks=[],instance*/
         /*omit.checks=[],instance*/
         (T t, String s) {};
diff --git a/tests/compiler/dart2js/rti/emission/event_callback.dart b/tests/compiler/dart2js/rti/emission/event_callback.dart
index bb6068f..0c11ed5 100644
--- a/tests/compiler/dart2js/rti/emission/event_callback.dart
+++ b/tests/compiler/dart2js/rti/emission/event_callback.dart
@@ -4,14 +4,11 @@
 
 import 'dart:html';
 
-/*kernel.class: global#Event:checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
 /*strong.class: global#Event:checkedInstance,checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
 
-/*kernel.class: global#MouseEvent:checks=[$isMouseEvent],instance,typeArgument*/
 /*strong.class: global#MouseEvent:checks=[$isMouseEvent],instance,typeArgument*/
 /*omit.class: global#MouseEvent:instance*/
 
-/*kernel.class: global#KeyboardEvent:checks=[$isKeyboardEvent],instance,typeArgument*/
 /*strong.class: global#KeyboardEvent:checks=[$isKeyboardEvent],instance,typeArgument*/
 /*omit.class: global#KeyboardEvent:instance*/
 
diff --git a/tests/compiler/dart2js/rti/emission/function_subtype_call2.dart b/tests/compiler/dart2js/rti/emission/function_subtype_call2.dart
deleted file mode 100644
index d26680e..0000000
--- a/tests/compiler/dart2js/rti/emission/function_subtype_call2.dart
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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 for constructors and initializers.
-
-// Based on tests/language/function_subtype_call2_test.dart
-
-import 'package:expect/expect.dart';
-
-typedef void Foo(bool a, [String b]);
-typedef void Bar(bool a, [String b]);
-typedef void Baz(bool a, {String b});
-typedef void Boz(bool a);
-
-/*class: C1:checks=[$signature]*/
-class C1<T> {
-  void call(T a, [String b]) {}
-}
-
-/*class: D1:checks=[$asC1],instance*/
-class D1<S, T> extends C1<T> {}
-
-/*class: C2:checks=[$signature]*/
-class C2<T> {
-  void call(T a, {String b}) {}
-}
-
-/*class: D2:checks=[$asC2],instance*/
-class D2<S, T> extends C2<T> {}
-
-main() {
-  Expect.isTrue(new D1<String, bool>() is Foo, 'new D1<String, bool>() is Foo');
-  Expect.isTrue(new D1<String, bool>() is Bar, 'new D1<String, bool>() is Bar');
-  Expect.isFalse(
-      new D1<String, bool>() is Baz, 'new D1<String, bool>() is Baz');
-  Expect.isTrue(new D1<String, bool>() is Boz, 'new D1<String, bool>() is Boz');
-
-  Expect.isFalse(new D1<bool, int>() is Foo, 'new D1<bool, int>() is Foo');
-  Expect.isFalse(new D1<bool, int>() is Bar, 'new D1<bool, int>() is Bar');
-  Expect.isFalse(new D1<bool, int>() is Baz, 'new D1<bool, int>() is Baz');
-  Expect.isFalse(new D1<bool, int>() is Boz, 'new D1<bool, int>() is Boz');
-
-  Expect.isTrue(new D1() is Foo, 'new D1() is Foo');
-  Expect.isTrue(new D1() is Bar, 'new D1() is Bar');
-  Expect.isFalse(new D1() is Baz, 'new D1() is Baz');
-  Expect.isTrue(new D1() is Boz, 'new D1() is Boz');
-
-  Expect.isFalse(
-      new D2<String, bool>() is Foo, 'new D2<String, bool>() is Foo');
-  Expect.isFalse(
-      new D2<String, bool>() is Bar, 'new D2<String, bool>() is Bar');
-  Expect.isTrue(new D2<String, bool>() is Baz, 'new D2<String, bool>() is Baz');
-  Expect.isTrue(new D2<String, bool>() is Boz, 'new D2<String, bool>() is Boz');
-
-  Expect.isFalse(new D2<bool, int>() is Foo, 'new D2<bool, int>() is Foo');
-  Expect.isFalse(new D2<bool, int>() is Bar, 'new D2<bool, int>() is Bar');
-  Expect.isFalse(new D2<bool, int>() is Baz, 'new D2<bool, int>() is Baz');
-  Expect.isFalse(new D2<bool, int>() is Boz, 'new D2<bool, int>() is Boz');
-
-  Expect.isFalse(new D2() is Foo, 'new D2() is Foo');
-  Expect.isFalse(new D2() is Bar, 'new D2() is Bar');
-  Expect.isTrue(new D2() is Baz, 'new D2() is Baz');
-  Expect.isTrue(new D2() is Boz, 'new D2() is Boz');
-}
diff --git a/tests/compiler/dart2js/rti/emission/function_type_argument.dart b/tests/compiler/dart2js/rti/emission/function_type_argument.dart
deleted file mode 100644
index 97ce3ce..0000000
--- a/tests/compiler/dart2js/rti/emission/function_type_argument.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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 'package:meta/dart2js.dart';
-
-/*class: C:checks=[],functionType,instance,typeArgument*/
-class C {
-  call(int i) {}
-}
-
-/*class: D:checks=[],functionType,instance,typeArgument*/
-class D {
-  call(double i) {}
-}
-
-@noInline
-test1(o) => o is Function(int);
-
-@noInline
-test2(o) => o is List<Function(int)>;
-
-main() {
-  Expect.isTrue(test1(new C()));
-  Expect.isFalse(test1(new D()));
-  Expect.isTrue(test2(<C>[]));
-  Expect.isFalse(test2(<D>[]));
-}
diff --git a/tests/compiler/dart2js/rti/emission/indirect_through_static.dart b/tests/compiler/dart2js/rti/emission/indirect_through_static.dart
index 2813753..3571daa 100644
--- a/tests/compiler/dart2js/rti/emission/indirect_through_static.dart
+++ b/tests/compiler/dart2js/rti/emission/indirect_through_static.dart
@@ -2,17 +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.
 
-/*kernel.class: A:*/
 /*strong.class: A:checkedInstance,checks=[],typeArgument*/
 /*omit.class: A:checkedInstance,checks=[],typeArgument*/
 abstract class A {}
 
-/*kernel.class: B:checks=[],typeArgument*/
 /*strong.class: B:checks=[$isA],typeArgument*/
 /*omit.class: B:checks=[$isA],typeArgument*/
 class B implements A {}
 
-/*kernel.class: C:checks=[],instance*/
 /*strong.class: C:checkedInstance,checks=[],instance,typeArgument*/
 /*omit.class: C:checkedInstance,checks=[],instance,typeArgument*/
 class C<T> {}
diff --git a/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart b/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart
index 963c073..49c64c3 100644
--- a/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart
+++ b/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart
@@ -12,7 +12,6 @@
 import 'package:expect/expect.dart';
 import 'package:js/js.dart';
 
-/*kernel.class: A:checkedTypeArgument,checks=[],typeArgument*/
 /*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
 /*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
 @JS()
diff --git a/tests/compiler/dart2js/rti/emission/list.dart b/tests/compiler/dart2js/rti/emission/list.dart
index 0c8d312..fa99c20 100644
--- a/tests/compiler/dart2js/rti/emission/list.dart
+++ b/tests/compiler/dart2js/rti/emission/list.dart
@@ -4,18 +4,15 @@
 
 import 'package:meta/dart2js.dart';
 
-/*kernel.class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/
 /*strong.class: global#JSArray:checkedInstance,checks=[$isIterable,$isList],instance*/
 /*omit.class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/
 
 /*class: global#Iterable:checkedInstance*/
 
-/*kernel.class: A:checkedTypeArgument,checks=[],typeArgument*/
 /*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
 /*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
-/*kernel.class: B:checks=[],typeArgument*/
 /*strong.class: B:checkedInstance,checks=[],typeArgument*/
 /*omit.class: B:checks=[],typeArgument*/
 class B {}
diff --git a/tests/compiler/dart2js/rti/emission/map_literal.dart b/tests/compiler/dart2js/rti/emission/map_literal.dart
index f9eb53b..acb2eb3 100644
--- a/tests/compiler/dart2js/rti/emission/map_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/map_literal.dart
@@ -2,13 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/*kernel.class: global#Map:instance*/
 /*strong.class: global#Map:checkedInstance,instance*/
 
 /*class: global#LinkedHashMap:*/
 /*class: global#JsLinkedHashMap:checks=[],instance*/
 
-/*kernel.class: global#double:checks=[],instance,typeArgument*/
 /*strong.class: global#double:checkedInstance,checks=[],instance,typeArgument*/
 
 /*class: global#JSDouble:checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/map_literal_checked.dart b/tests/compiler/dart2js/rti/emission/map_literal_checked.dart
deleted file mode 100644
index a54e67f..0000000
--- a/tests/compiler/dart2js/rti/emission/map_literal_checked.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for 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:checkedInstance,instance*/
-/*class: global#LinkedHashMap:checkedInstance*/
-/*class: global#JsLinkedHashMap:checkedInstance,checks=[$isLinkedHashMap],instance*/
-/*class: global#double:checkedInstance,checks=[],instance,typeArgument*/
-/*class: global#JSNumber:checks=[$isdouble,$isnum],instance*/
-/*class: global#JSDouble:checks=[],instance*/
-
-main() {
-  <int, double>{}[0] = 0.5;
-}
diff --git a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
index c10ef59..759210b 100644
--- a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
+++ b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
@@ -6,25 +6,32 @@
 
 import 'package:expect/expect.dart';
 
-/*class: A:checkedTypeArgument,checks=[],typeArgument*/
+/*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
+/*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
-/*class: A1:checkedTypeArgument,checks=[],typeArgument*/
+/*strong.class: A1:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
+/*omit.class: A1:checkedTypeArgument,checks=[],typeArgument*/
 class A1 {}
 
-/*class: A2:checkedTypeArgument,checks=[],typeArgument*/
+/*strong.class: A2:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
+/*omit.class: A2:checkedTypeArgument,checks=[],typeArgument*/
 class A2 {}
 
-/*class: B:checkedTypeArgument,checks=[$isA,$isA1,$isA2],typeArgument*/
+/*strong.class: B:checkedInstance,checkedTypeArgument,checks=[$isA,$isA1,$isA2],typeArgument*/
+/*omit.class: B:checkedTypeArgument,checks=[$isA,$isA1,$isA2],typeArgument*/
 class B implements A, A1, A2 {}
 
-/*class: C:checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB],typeArgument*/
+/*strong.class: C:checkedInstance,checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB],typeArgument*/
+/*omit.class: C:checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB],typeArgument*/
 class C implements B {}
 
-/*class: D:checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB,$isC],typeArgument*/
+/*strong.class: D:checkedInstance,checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB,$isC],typeArgument*/
+/*omit.class: D:checkedTypeArgument,checks=[$isA,$isA1,$isA2,$isB,$isC],typeArgument*/
 class D implements C {}
 
-/*class: G:checkedTypeArgument,checks=[],typeArgument*/
+/*strong.class: G:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
+/*omit.class: G:checkedTypeArgument,checks=[],typeArgument*/
 class G<T, S, U, W> {}
 
 typedef classesFunc({A a, B b, C c, D d});
@@ -45,52 +52,63 @@
 typedef okWithDynamicFunc_2({int x, bool y, List<Map> z, classesFunc v});
 
 main() {
-  Expect.isTrue(/*checks=[],functionType,instance*/ ({D a, B b, C c, A d}) {}
-      is classesFunc);
-  Expect.isTrue(/*checks=[],functionType,instance*/ ({A a, A b, A c, A d}) {}
-      is classesFunc);
   Expect.isTrue(
-      /*checks=[],functionType,instance*/ ({D a, A1 b, A1 c, A1 d}) {}
-          is classesFunc);
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({D a, B b, C c, A d}) {} is classesFunc);
   Expect.isTrue(
-      /*checks=[],functionType,instance*/ ({D a, A2 b, A2 c, A2 d}) {}
-          is classesFunc);
-  Expect.isTrue(/*checks=[],functionType,instance*/ ({D a, D b, D c, D d}) {}
-      is classesFunc);
+      /*checks=[],functionType,instance*/
+      ({A a, A b, A c, A d}) {} is classesFunc);
   Expect.isTrue(
-      /*checks=[],functionType,instance*/ ({var a, var b, var c, var d}) {}
-          is classesFunc);
-  Expect.isTrue(/*checks=[],functionType,instance*/ (
-      {Object a, Object b, Object c, Object d}) {} is classesFunc);
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
+  Expect.isTrue(
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
+  Expect.isTrue(
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({D a, D b, D c, D d}) {} is classesFunc);
+  Expect.isTrue(
+      /*checks=[],functionType,instance*/
+      ({var a, var b, var c, var d}) {} is classesFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/
+      ({Object a, Object b, Object c, Object d}) {} is classesFunc);
 
-  Expect.isTrue(/*checks=[],functionType,instance*/ (
-      {Map<num, num> m,
-      List<List<A1>> l,
-      G<A, A1, A1, A1> g}) {} is genericsFunc);
-  Expect.isTrue(
-      /*checks=[],functionType,instance*/ (
-          {Map<int, int> m,
-          List<List<D>> l,
-          G<D, D, D, D> g}) {} is genericsFunc);
-  Expect.isTrue(
-      /*checks=[],functionType,instance*/ ({var m, var l, var g}) {}
+  Expect.isTrue(/*checks=[],functionType,instance*/
+      ({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
           is genericsFunc);
   Expect.isTrue(
-      /*checks=[],functionType,instance*/ ({Object m, Object l, Object g}) {}
-          is genericsFunc);
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {} is genericsFunc);
+  Expect.isTrue(
+      /*checks=[],functionType,instance*/
+      ({var m, var l, var g}) {} is genericsFunc);
+  Expect.isTrue(
+      /*checks=[],functionType,instance*/
+      ({Object m, Object l, Object g}) {} is genericsFunc);
 
   Expect.isTrue(
-      /*checks=[],functionType,instance*/ ({A x, G y, mixFunc z, var v}) {}
-          is dynamicFunc);
-  Expect.isTrue(/*checks=[],functionType,instance*/ (
-      {int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
+  Expect.isTrue(
+      /*strong.checks=[],functionType,instance*/
+      /*omit.checks=[],instance*/
+      ({int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
 
-  Expect.isTrue(/*checks=[],functionType,instance*/ (
-      {okWithClassesFunc_1 f1,
-      okWithGenericsFunc_1 f2,
-      okWithDynamicFunc_1 f3}) {} is funcFunc);
-  Expect.isTrue(/*checks=[],functionType,instance*/ (
-      {okWithClassesFunc_2 f1,
-      okWithGenericsFunc_2 f2,
-      okWithDynamicFunc_2 f3}) {} is funcFunc);
+  Expect.isTrue(
+      /*checks=[],instance*/
+      (
+          {okWithClassesFunc_1 f1,
+          okWithGenericsFunc_1 f2,
+          okWithDynamicFunc_1 f3}) {} is funcFunc);
+  Expect.isTrue(/*checks=[],functionType,instance*/
+      (
+          {okWithClassesFunc_2 f1,
+          okWithGenericsFunc_2 f2,
+          okWithDynamicFunc_2 f3}) {} is funcFunc);
 }
diff --git a/tests/compiler/dart2js/rti/rti_emission_test.dart b/tests/compiler/dart2js/rti/rti_emission_test.dart
index 9659eb6..b925439 100644
--- a/tests/compiler/dart2js/rti/rti_emission_test.dart
+++ b/tests/compiler/dart2js/rti/rti_emission_test.dart
@@ -23,29 +23,8 @@
     cacheRtiDataForTesting = true;
     Directory dataDir =
         new Directory.fromUri(Platform.script.resolve('emission'));
-    await checkTests(
-      dataDir,
-      const RtiEmissionDataComputer(),
-      args: args,
-      testOmit: true,
-      skipForStrong: [
-        // Dart 1 semantics:
-        'call.dart',
-        'call_typed.dart',
-        'call_typed_generic.dart',
-        'function_subtype_call2.dart',
-        'function_type_argument.dart',
-        'map_literal_checked.dart',
-        // TODO(johnniwinther): Optimize local function type signature need.
-        'subtype_named_args.dart',
-
-        // TODO(johnniwinther): Fix crash.
-        'call_strong.dart',
-
-        // TODO(34095):
-        'list.dart',
-      ],
-    );
+    await checkTests(dataDir, const RtiEmissionDataComputer(),
+        args: args, testOmit: true);
   });
 }
 
diff --git a/tests/compiler/dart2js/rti/rti_need_test_helper.dart b/tests/compiler/dart2js/rti/rti_need_test_helper.dart
index dc94ae7..b90042e 100644
--- a/tests/compiler/dart2js/rti/rti_need_test_helper.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test_helper.dart
@@ -33,12 +33,6 @@
     Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
     await checkTests(dataDir, const RtiNeedDataComputer(),
         options: [],
-        skipForStrong: [
-          'map_literal_checked.dart',
-          // TODO(johnniwinther): Optimize local function type signature need.
-          'subtype_named_args.dart',
-          'subtype_named_args1.dart',
-        ],
         args: args,
         testOmit: true,
         shardIndex: shardIndex ?? 0,
diff --git a/tests/compiler/dart2js/rti/emission/call.dart b/tests/compiler/dart2js_extra/call_is_function_test.dart
similarity index 81%
rename from tests/compiler/dart2js/rti/emission/call.dart
rename to tests/compiler/dart2js_extra/call_is_function_test.dart
index 82ebfee..8bafb85 100644
--- a/tests/compiler/dart2js/rti/emission/call.dart
+++ b/tests/compiler/dart2js_extra/call_is_function_test.dart
@@ -5,7 +5,6 @@
 import 'package:expect/expect.dart';
 import 'package:meta/dart2js.dart';
 
-/*class: A:checks=[$isFunction],functionType,instance*/
 class A {
   call() {}
 }
@@ -14,6 +13,6 @@
 test(o) => o is Function;
 
 main() {
-  Expect.isTrue(test(new A()));
+  Expect.isFalse(test(new A()));
   Expect.isFalse(test(null));
 }
diff --git a/tests/compiler/dart2js_extra/call_uninlined_test.dart b/tests/compiler/dart2js_extra/call_uninlined_test.dart
new file mode 100644
index 0000000..ab0e750
--- /dev/null
+++ b/tests/compiler/dart2js_extra/call_uninlined_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.
+
+import 'package:expect/expect.dart';
+
+class H {
+  call() {}
+}
+
+main() {
+  print(new H());
+  method();
+}
+
+method() {
+  local1() {}
+
+  local1(); // This call wrongfully triggers enqueueing of H.call in codegen.
+}
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 13e682f..4e25eef 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -3,10 +3,15 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dart2js ]
+23264_test: RuntimeError
 bounds_check4a_test: RuntimeError # Issue 32741
 bounds_check4b_test: RuntimeError # Issue 32741
 class_test: Fail
+closure_capture2_test: RuntimeError
 constant_javascript_semantics4_test: Fail, OK
+constant_javascript_semantics_test/03: CompileTimeError
+constant_javascript_semantics_test/04: CompileTimeError
+constant_javascript_semantics_test/none: CompileTimeError
 generic_class_is_test: Fail # Issue 32004
 jsinterop_test/01: MissingCompileTimeError # Issue 34174
 jsinterop_test/02: MissingCompileTimeError # Issue 34174
@@ -34,7 +39,16 @@
 non_jsinterop_test/42: MissingCompileTimeError # Issue 34174
 non_jsinterop_test/46: MissingCompileTimeError # Issue 34174
 non_jsinterop_test/51: MissingCompileTimeError # Issue 34174
+private_symbol_literal_test/01: MissingCompileTimeError
+private_symbol_literal_test/02: MissingCompileTimeError
+private_symbol_literal_test/03: MissingCompileTimeError
+private_symbol_literal_test/04: MissingCompileTimeError
+private_symbol_literal_test/05: MissingCompileTimeError
+private_symbol_literal_test/06: MissingCompileTimeError
+regress/4562_test/none: CompileTimeError
+round_constant_folding_test: CompileTimeError
 statements_test: Fail
+type_constant_switch_test/01: MissingCompileTimeError
 typed_locals_test: Pass, Fail
 
 [ $compiler != dart2js ]
@@ -63,7 +77,7 @@
 [ $compiler == dart2js && $runtime == chrome && $csp ]
 deferred/load_in_correct_order_test: SkipByDesign # Purposely uses `eval`
 
-[ $compiler == dart2js && $runtime == d8 && $fasta ]
+[ $compiler == dart2js && $runtime == d8 ]
 deferred_fail_and_retry_test: RuntimeError # Uses XHR in dart:html
 deferred_with_csp_nonce_test: RuntimeError # Uses dart:html
 unconditional_dartio_import_test: RuntimeError # Uses dart:io
@@ -74,7 +88,7 @@
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
-[ $compiler == dart2js && $checked && $fasta ]
+[ $compiler == dart2js && $checked ]
 dummy_compiler_test: Crash
 local_signature_test: Crash
 minus_zero_test/01: MissingCompileTimeError
@@ -85,39 +99,15 @@
 js_interop_optional_arg_test: RuntimeError # Issue 31082
 js_interop_test: RuntimeError # Issue 31082
 
-[ $compiler == dart2js && $fasta ]
-23264_test: RuntimeError
-closure_capture2_test: RuntimeError
-constant_javascript_semantics_test/03: CompileTimeError
-constant_javascript_semantics_test/04: CompileTimeError
-constant_javascript_semantics_test/none: CompileTimeError
-private_symbol_literal_test/01: MissingCompileTimeError
-private_symbol_literal_test/02: MissingCompileTimeError
-private_symbol_literal_test/03: MissingCompileTimeError
-private_symbol_literal_test/04: MissingCompileTimeError
-private_symbol_literal_test/05: MissingCompileTimeError
-private_symbol_literal_test/06: MissingCompileTimeError
-regress/4562_test/none: CompileTimeError
-round_constant_folding_test: CompileTimeError
-type_constant_switch_test/01: MissingCompileTimeError
-
-[ $compiler == dart2js && $fasta && $minified ]
-closure_capture2_test: Pass # Passes for the wrong reason
-deferred/reflect_multiple_annotations_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-deferred/reflect_multiple_default_arg_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
-
-[ $compiler == dart2js && !$fasta ]
-expose_this1_test: RuntimeError # Issue 31254
-expose_this2_test: RuntimeError # Issue 31254
-string_interpolation_dynamic_test: Fail # CRLF handling clarified, see Issue 23562
-string_interpolation_test: Fail # CRLF handling clarified, see Issue 23562
-
 [ $compiler == dart2js && !$host_checked ]
 dummy_compiler_test: RuntimeError, Slow # Issue 32439. self-hosting doesn't work with CFE yet.
 
 [ $compiler == dart2js && $minified ]
+closure_capture2_test: Pass # Passes for the wrong reason
 code_motion_exception_test: Skip # Requires unminified operator names.
+deferred/reflect_multiple_annotations_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
 deferred/reflect_multiple_annotations_test: Fail
+deferred/reflect_multiple_default_arg_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
 deferred/reflect_multiple_default_arg_test: Fail
 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().
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index cc56706..0d9594f 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -5,11 +5,6 @@
 [ $compiler == dart2js ]
 bound_closure_super_test: RuntimeError
 fake_thing_test: RuntimeError # Issue 13010
-
-[ $browser ]
-*: Skip
-
-[ $compiler == dart2js && $fasta ]
 field_type2_test: CompileTimeError # Issue 33762
 field_type_test: CompileTimeError # Issue 33762
 native_exceptions1_frog_test: CompileTimeError # Issue 33762
@@ -23,5 +18,8 @@
 subclassing_super_field_1_test: RuntimeError
 subclassing_super_field_2_test: RuntimeError
 
+[ $browser ]
+*: Skip
+
 [ $compiler == dart2js && $minified ]
 optimization_hints_test: RuntimeError, OK # Test relies on unminified names.
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 5e33b55..f41c498 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -8,8 +8,61 @@
 *: Skip
 
 [ $compiler == dart2js ]
+apply3_test: RuntimeError # mirrors not supported
+big_integer_arith_vm_test/add: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/div: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/gcd: CompileTimeError # Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/mod: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/modInv: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/modPow: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/mul: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/negate: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/none: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/overflow: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/shift: CompileTimeError # Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/sub: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_arith_vm_test/trunDiv: CompileTimeError #Large integer literal. Not representable in JS.
+big_integer_parsed_arith_vm_test: RuntimeError
+big_integer_parsed_div_rem_vm_test: RuntimeError
+big_integer_parsed_mul_div_vm_test: RuntimeError
+bit_twiddling_bigint_test: CompileTimeError #Large integer literal. Not representable in JS.
+bit_twiddling_test: CompileTimeError # Large integer literal. Not representable in JS.
+compare_to2_test: RuntimeError
+date_time_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+double_ceil_test: CompileTimeError # Large integer literal. Not representable in JS.
+double_floor_test: CompileTimeError # Large integer literal. Not representable in JS.
+double_parse_test/01: RuntimeError
+double_round_test: CompileTimeError # Large integer literal. Not representable in JS.
+double_truncate_test: CompileTimeError # Large integer literal. Not representable in JS.
 error_stack_trace1_test: RuntimeError # Issue 12399
+growable_list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+hash_set_test/01: RuntimeError
+int_ceil_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_ceil_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_floor_test: CompileTimeError #Large integer literal. Not representable in JS.
+int_floor_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_from_environment_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_modulo_arith_test/bignum: CompileTimeError # Large integer literal. Not representable in JS.
+int_modulo_arith_test/modPow: CompileTimeError # Large integer literal. Not representable in JS.
+int_modulo_arith_test/none: CompileTimeError # Large integer literal. Not representable in JS.
+int_parse_radix_test/01: RuntimeError
+int_parse_radix_test/02: CompileTimeError
+int_round_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_round_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_to_int_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_truncate_test: CompileTimeError # Large integer literal. Not representable in JS.
+int_truncate_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
+integer_to_radix_string_test: CompileTimeError # Large integer literal. Not representable in JS.
+integer_to_string_test/01: CompileTimeError # Large integer literal. Not representable in JS.
+iterable_return_type_test/02: RuntimeError
+nan_infinity_test/01: RuntimeError
+num_parse_test/01: CompileTimeError # Large integer literal. Not representable in JS.
+num_parse_test/none: CompileTimeError # Large integer literal. Not representable in JS.
+num_sign_test: CompileTimeError # Large integer literal. Not representable in JS.
 regexp/pcre_test: Pass, Slow # Issue 21593
+regress_r21715_test: CompileTimeError # Large integer literal. Not representable in JS.
+string_base_vm_test: RuntimeError
+symbol_reserved_word_test/03: RuntimeError
 
 [ $compiler == precompiler ]
 apply3_test: SkipByDesign # Imports dart:mirrors
@@ -139,7 +192,7 @@
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
-[ $compiler == dart2js && $checked && $fasta ]
+[ $compiler == dart2js && $checked ]
 big_integer_arith_vm_test/add: CompileTimeError
 big_integer_arith_vm_test/div: CompileTimeError
 big_integer_arith_vm_test/gcd: CompileTimeError
@@ -201,62 +254,7 @@
 [ $compiler == dart2js && $fast_startup ]
 apply3_test: Fail # mirrors not supported
 
-[ $compiler == dart2js && $fasta ]
-apply3_test: RuntimeError # mirrors not supported
-big_integer_arith_vm_test/add: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/div: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/gcd: CompileTimeError # Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/mod: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/modInv: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/modPow: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/mul: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/negate: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/none: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/overflow: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/shift: CompileTimeError # Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/sub: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_arith_vm_test/trunDiv: CompileTimeError #Large integer literal. Not representable in JS.
-big_integer_parsed_arith_vm_test: RuntimeError
-big_integer_parsed_div_rem_vm_test: RuntimeError
-big_integer_parsed_mul_div_vm_test: RuntimeError
-bit_twiddling_bigint_test: CompileTimeError #Large integer literal. Not representable in JS.
-bit_twiddling_test: CompileTimeError # Large integer literal. Not representable in JS.
-compare_to2_test: RuntimeError
-date_time_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-double_ceil_test: CompileTimeError # Large integer literal. Not representable in JS.
-double_floor_test: CompileTimeError # Large integer literal. Not representable in JS.
-double_parse_test/01: RuntimeError
-double_round_test: CompileTimeError # Large integer literal. Not representable in JS.
-double_truncate_test: CompileTimeError # Large integer literal. Not representable in JS.
-growable_list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-hash_set_test/01: RuntimeError
-int_ceil_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_ceil_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_floor_test: CompileTimeError #Large integer literal. Not representable in JS.
-int_floor_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_from_environment_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_modulo_arith_test/bignum: CompileTimeError # Large integer literal. Not representable in JS.
-int_modulo_arith_test/modPow: CompileTimeError # Large integer literal. Not representable in JS.
-int_modulo_arith_test/none: CompileTimeError # Large integer literal. Not representable in JS.
-int_parse_radix_test/01: RuntimeError
-int_parse_radix_test/02: CompileTimeError
-int_round_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_round_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_to_int_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_truncate_test: CompileTimeError # Large integer literal. Not representable in JS.
-int_truncate_to_double_test: CompileTimeError # Large integer literal. Not representable in JS.
-integer_to_radix_string_test: CompileTimeError # Large integer literal. Not representable in JS.
-integer_to_string_test/01: CompileTimeError # Large integer literal. Not representable in JS.
-iterable_return_type_test/02: RuntimeError
-nan_infinity_test/01: RuntimeError
-num_parse_test/01: CompileTimeError # Large integer literal. Not representable in JS.
-num_parse_test/none: CompileTimeError # Large integer literal. Not representable in JS.
-num_sign_test: CompileTimeError # Large integer literal. Not representable in JS.
-regress_r21715_test: CompileTimeError # Large integer literal. Not representable in JS.
-string_base_vm_test: RuntimeError
-symbol_reserved_word_test/03: RuntimeError
-
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $compiler == dart2js && $host_checked ]
 apply3_test: RuntimeError
 big_integer_arith_vm_test/add: CompileTimeError
 big_integer_arith_vm_test/div: CompileTimeError
@@ -298,7 +296,7 @@
 num_sign_test: CompileTimeError
 regress_r21715_test: CompileTimeError
 
-[ $compiler == dart2js && $fasta && $minified ]
+[ $compiler == dart2js && $minified ]
 apply3_test: RuntimeError
 big_integer_arith_vm_test/add: CompileTimeError
 big_integer_arith_vm_test/div: CompileTimeError
@@ -342,30 +340,6 @@
 symbol_operator_test/03: RuntimeError # Issue 27394
 symbol_operator_test/none: RuntimeError
 
-[ $compiler == dart2js && !$fasta ]
-big_integer_*: Skip # VM specific test.
-bit_twiddling_bigint_test: RuntimeError # Requires bigint support.
-compare_to2_test: RuntimeError, OK # Requires bigint support.
-double_parse_test/01: Pass, Fail # JS implementations disagree on U+0085 being whitespace.
-hash_set_test/01: RuntimeError # Issue 11551
-int_modulo_arith_test/bignum: RuntimeError # No bigints.
-int_modulo_arith_test/modPow: RuntimeError # No bigints.
-int_parse_radix_test/01: Pass, Fail # JS implementations disagree on U+0085 being whitespace.
-int_parse_radix_test/02: Fail # No bigints.
-integer_to_radix_string_test: RuntimeError # issue 22045
-integer_to_string_test/01: RuntimeError # Issue 1533
-iterable_return_type_test/02: RuntimeError # Dart2js does not support Uint64*.
-list_unmodifiable_test: Pass, RuntimeError # Issue 28712
-nan_infinity_test/01: Fail # Issue 11551
-regress_r21715_test: RuntimeError # Requires bigint support.
-string_base_vm_test: RuntimeError, OK # VM specific test.
-symbol_reserved_word_test/02: CompileTimeError # bug 20191
-symbol_reserved_word_test/03: RuntimeError # bug 19972, new Symbol('void') should be allowed.
-symbol_reserved_word_test/04: MissingCompileTimeError
-symbol_reserved_word_test/05: Crash # bug 20191
-symbol_reserved_word_test/07: MissingCompileTimeError
-symbol_reserved_word_test/10: MissingCompileTimeError
-
 [ $compiler != dart2js && $fasta ]
 big_integer_arith_vm_test/add: CompileTimeError
 big_integer_arith_vm_test/div: CompileTimeError
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index dda114e..9c87583 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -12,14 +12,42 @@
 unicode_test: RuntimeError
 
 [ $compiler == dart2analyzer ]
-int_parse_radix_bad_handler_test: MissingCompileTimeError
 iterable_element_at_test/static: Pass
 num_sign_test: Crash, Pass # Issue 31768
 
 [ $compiler == dart2js ]
 bigint_from_test: RuntimeError # Issue 32589
+bigint_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+bit_twiddling_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+compare_to2_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
+date_time_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+double_ceil_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+double_floor_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+double_round_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+double_truncate_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+growable_list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_ceil_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_ceil_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_floor_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_floor_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_from_environment_int64_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_parse_radix_int64_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_parse_radix_int64_test/02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_parse_radix_int64_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_parse_radix_test/01: RuntimeError
+int_round_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_round_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_to_int_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_truncate_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+int_truncate_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+integer_arith_vm_test/modPow: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+integer_arith_vm_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+integer_to_string_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 list_unmodifiable_test: Pass, RuntimeError # Issue 28712
+num_parse_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+num_parse_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+num_sign_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 
 [ $compiler != dartdevc ]
 error_stack_trace_test/static: MissingCompileTimeError
@@ -89,6 +117,7 @@
 [ !$strong ]
 cast_test: SkipByDesign # Uses generic method parameters.
 iterable_where_type_test: SkipByDesign
+map_test: SkipByDesign
 regress_33166_test: SkipByDesign # Not a Dart 1 test
 
 [ $arch == simarmv5te && ($runtime == dart_precompiled || $runtime == vm) ]
@@ -99,7 +128,7 @@
 stopwatch_test: Skip # Flaky test due to expected performance behaviour.
 
 # All static_tests have expected compile-time errors.
-[ $compiler != app_jitk && $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $compiler != fasta && $strong ]
+[ $compiler != app_jitk && $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $compiler != fasta && $strong ]
 core_runtime_types_static_test: MissingCompileTimeError
 splay_tree_test/01: MissingCompileTimeError
 splay_tree_test/02: MissingCompileTimeError
@@ -107,18 +136,15 @@
 string_replace_static_test: MissingCompileTimeError
 string_static_test: MissingCompileTimeError
 
-[ $compiler != app_jitk && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $compiler != fasta ]
+[ $compiler != app_jitk && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $compiler != fasta ]
 iterable_element_at_test/static: MissingCompileTimeError
 
-[ $compiler != app_jitk && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $compiler != fasta && ($compiler != dart2analyzer || !$strong) ]
+[ $compiler != app_jitk && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $compiler != fasta && ($compiler != dart2analyzer || !$strong) ]
 iterable_mapping_test/01: MissingCompileTimeError
 
-[ $compiler != app_jitk && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkp && $runtime != none ]
+[ $compiler != app_jitk && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk && $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $runtime != none ]
 map_keys2_test: RuntimeError # needs Dart 2 is checks
 
-[ $compiler == dart2analyzer && $strong ]
-int_parse_radix_bad_handler_test: Pass
-
 [ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && $compiler != dartdevk ]
 bigint_js_test: SkipByDesign # JavaScript-specific test
 
@@ -147,7 +173,7 @@
 [ $compiler == dart2js && !$browser ]
 package_resource_test: RuntimeError # Issue 26842
 
-[ $compiler == dart2js && $checked && $fasta && $strong ]
+[ $compiler == dart2js && $checked && $strong ]
 apply3_test: RuntimeError
 collection_of_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
@@ -179,7 +205,7 @@
 map_test: Crash # tests/corelib_2/map_test.dart:903:7: Internal problem: Unhandled Null in installDefaultConstructor.
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 
-[ $compiler == dart2js && $fast_startup && $fasta && $strong ]
+[ $compiler == dart2js && $fast_startup && $strong ]
 error_stack_trace1_test: RuntimeError
 growable_list_test: RuntimeError
 integer_to_radix_string_test/01: RuntimeError
@@ -192,38 +218,7 @@
 nan_infinity_test/01: RuntimeError
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 
-[ $compiler == dart2js && $fasta ]
-bigint_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-bit_twiddling_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-compare_to2_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-date_time_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-double_ceil_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-double_floor_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-double_round_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-double_truncate_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-growable_list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_ceil_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_ceil_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_floor_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_floor_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_from_environment_int64_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_parse_radix_int64_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_parse_radix_int64_test/02: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_parse_radix_int64_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_parse_radix_test/01: RuntimeError
-int_round_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_round_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_to_int_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_truncate_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-int_truncate_to_double_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-integer_arith_vm_test/modPow: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-integer_arith_vm_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-integer_to_string_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-num_parse_test/01: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-num_parse_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-num_sign_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-
-[ $compiler == dart2js && $fasta && $minified && $strong ]
+[ $compiler == dart2js && $minified && $strong ]
 dynamic_nosuchmethod_test: RuntimeError
 error_stack_trace1_test: RuntimeError # Issue 12399
 growable_list_test: RuntimeError # Concurrent modifications test always runs
@@ -243,12 +238,6 @@
 symbol_operator_test/none: RuntimeError
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 
-[ $compiler == dart2js && $fasta && !$strong ]
-*: SkipByDesign
-
-[ $compiler == dart2js && !$fasta ]
-*: SkipByDesign
-
 [ $compiler == dart2js && $strong ]
 error_stack_trace1_test: RuntimeError # Issue 12399
 growable_list_test: RuntimeError # Concurrent modifications test always runs
@@ -264,6 +253,9 @@
 regexp/pcre_test: RuntimeError
 symbol_reserved_word_test/03: RuntimeError # Issue 19972, new Symbol('void') should be allowed.
 
+[ $compiler == dart2js && !$strong ]
+*: SkipByDesign
+
 [ $compiler != dart2js && $fasta ]
 bool_from_environment2_test/03: MissingCompileTimeError
 string_from_environment3_test/03: MissingCompileTimeError
@@ -305,27 +297,6 @@
 from_environment_const_type_undefined_test/16: MissingCompileTimeError
 string_base_vm_static_test: MissingCompileTimeError
 
-[ $compiler == none && $runtime == vm && !$checked && !$fasta ]
-from_environment_const_type_test/02: MissingCompileTimeError
-from_environment_const_type_test/03: MissingCompileTimeError
-from_environment_const_type_test/04: MissingCompileTimeError
-from_environment_const_type_test/06: MissingCompileTimeError
-from_environment_const_type_test/07: MissingCompileTimeError
-from_environment_const_type_test/08: MissingCompileTimeError
-from_environment_const_type_test/09: MissingCompileTimeError
-from_environment_const_type_test/11: MissingCompileTimeError
-from_environment_const_type_test/12: MissingCompileTimeError
-from_environment_const_type_test/13: MissingCompileTimeError
-from_environment_const_type_test/14: MissingCompileTimeError
-from_environment_const_type_test/16: MissingCompileTimeError
-from_environment_const_type_undefined_test/02: MissingCompileTimeError
-from_environment_const_type_undefined_test/03: MissingCompileTimeError
-from_environment_const_type_undefined_test/04: MissingCompileTimeError
-from_environment_const_type_undefined_test/06: MissingCompileTimeError
-from_environment_const_type_undefined_test/07: MissingCompileTimeError
-from_environment_const_type_undefined_test/08: MissingCompileTimeError
-iterable_generate_test/01: RuntimeError
-
 [ $compiler == none && ($runtime == flutter || $runtime == vm) ]
 iterable_to_set_test: RuntimeError # is-checks do not implement strong mode type system
 
@@ -340,10 +311,6 @@
 apply_test: Skip # Uses new Symbol via symbolMapToStringMap helper
 error_stack_trace1_test: Skip # Expects unobfuscated stack trace
 
-[ $compiler == app_jit || $compiler == none || $compiler == precompiler ]
-symbol_test/02: MissingCompileTimeError # Issue 11669
-symbol_test/03: MissingCompileTimeError # Issue 11669
-
 [ $runtime != none && ($compiler == dart2js || $compiler == dartdevc || $compiler == dartdevk) ]
 bit_twiddling_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
 compare_to2_test: RuntimeError, OK # Requires fixed-size int64 support.
@@ -461,6 +428,8 @@
 symbol_reserved_word_test/10: MissingCompileTimeError # Issue 11669, 19972, With the exception of 'void', const Symbol() should not accept reserved words.
 symbol_reserved_word_test/12: RuntimeError # Issue 11669, With the exception of 'void', new Symbol() should not accept reserved words.
 symbol_test/01: Fail, Pass # Issue 11669
+symbol_test/02: MissingCompileTimeError # Issue 11669
+symbol_test/03: MissingCompileTimeError # Issue 11669
 symbol_test/none: Fail # Issue 11669
 unicode_test: Fail # Issue 6706
 
@@ -585,8 +554,8 @@
 symbol_reserved_word_test/12: RuntimeError # Issue 29921
 symbol_test/none: RuntimeError # Issue 29921
 typed_data_with_limited_ints_test: Skip # Requires fixed-size int64 support.
-uri_test: Pass, Slow
 uri_parse_test: Pass, Slow
+uri_test: Pass, Slow
 
 [ $compiler == precompiler || $runtime == vm && !$checked && !$strong ]
 int_parse_radix_test/badTypes: RuntimeError # wrong exception returned
@@ -607,6 +576,6 @@
 regexp/UC16_test: RuntimeError
 
 [ $hot_reload || $hot_reload_rollback ]
-bigint_parse_radix_test: Pass, Timeout # Issue 31659
+bigint_parse_radix_test: Pass, Timeout, Crash # Issue 31659. Issue 34361.
 bigint_test: Pass, Timeout # Issue 31659
 integer_parsed_mul_div_vm_test: Pass, Slow # Slow
diff --git a/tests/corelib_2/map_test.dart b/tests/corelib_2/map_test.dart
index 275b5e6..5c9e9a4 100644
--- a/tests/corelib_2/map_test.dart
+++ b/tests/corelib_2/map_test.dart
@@ -27,6 +27,7 @@
   testMapLiteral();
   testNullValue();
   testTypes();
+  testUnmodifiableMaps();
 
   testWeirdStringKeys(new Map());
   testWeirdStringKeys(new Map<String, String>());
@@ -703,8 +704,7 @@
   int id;
   Equalizer(this.id);
   int get hashCode => id;
-  bool operator ==(Object other) =>
-      other is Equalizer && id == (other as Equalizer).id;
+  bool operator ==(Object other) => other is Equalizer && id == other.id;
 }
 
 /**
@@ -721,7 +721,7 @@
   // The double-fang operator falsely claims that a vampire is equal to
   // any of its sire's generation.
   bool operator ==(Object other) =>
-      other is Vampire && generation - 1 == (other as Vampire).generation;
+      other is Vampire && generation - 1 == other.generation;
 }
 
 void testCustomMap<K, V>(Map<K, V> typedMap) {
@@ -1026,3 +1026,21 @@
   Expect.equals(103, map.remove(0x20000000000000));
   testLength(1, map);
 }
+
+void testUnmodifiableMaps() {
+  void checkUnmodifiable(Map<int, int> map) {
+    Expect.throws(() => map[0] = 0);
+    Expect.throws(() => map.addAll({0: 0}));
+    Expect.throws(() => map.addEntries({0: 0}.entries));
+    Expect.throws(() => map.clear());
+    Expect.throws(() => map.putIfAbsent(0, () => 0));
+    Expect.throws(() => map.remove(0));
+    Expect.throws(() => map.removeWhere((k, v) => true));
+    Expect.throws(() => map.update(0, (v) => v, ifAbsent: () => 0));
+    Expect.throws(() => map.updateAll((k, v) => v));
+  }
+
+  checkUnmodifiable(const {1: 1});
+  checkUnmodifiable(Map.unmodifiable({1: 1}));
+  checkUnmodifiable(UnmodifiableMapView({1: 1}));
+}
diff --git a/tests/html/deferred_multi_app.dart b/tests/html/deferred_multi_app.dart
deleted file mode 100644
index b1fd7c5..0000000
--- a/tests/html/deferred_multi_app.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for 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 "deferred_multi_app_lib.dart" deferred as lib;
-import "dart:async";
-import "dart:html";
-import "package:expect/expect.dart";
-
-main() {
-  Element state = querySelector("#state");
-  if (state.text == "1") {
-    lib.loadLibrary().then((_) {
-      var a = lib.one();
-      Expect.equals("one", a);
-      window.postMessage(a, '*');
-    });
-    state.text = "2";
-  } else {
-    new Timer(new Duration(milliseconds: 100), () {
-      lib.loadLibrary().then((_) {
-        var a = lib.two();
-        Expect.equals("two", a);
-        window.postMessage(a, '*');
-      });
-    });
-  }
-}
diff --git a/tests/html/deferred_multi_app_htmltest.html b/tests/html/deferred_multi_app_htmltest.html
deleted file mode 100644
index 554adf8..0000000
--- a/tests/html/deferred_multi_app_htmltest.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-for 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 two instances of a script does not interfere when loading the same
-deferred library.
-
-START_HTML_DART_TEST
-{
-  "scripts": ["deferred_multi_app.dart", "deferred_multi_app_lib.dart"],
-  "expectedMessages": ["one", "two"]
-}
-END_HTML_DART_TEST
--->
-<html>
-  <body>
-    <div id="state">1</div>
-    <script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
-    <script src="deferred_multi_app.dart" type="application/dart"></script>
-    <script src="deferred_multi_app.dart" type="application/dart"></script>
-  </body>
-</html>
diff --git a/tests/html/deferred_multi_app_lib.dart b/tests/html/deferred_multi_app_lib.dart
deleted file mode 100644
index de4e651..0000000
--- a/tests/html/deferred_multi_app_lib.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-one() {
-  return "one";
-}
-
-two() {
-  return "two";
-}
diff --git a/tests/html/html.status b/tests/html/html.status
index 1a02eae..c05e1b0 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -30,21 +30,30 @@
 custom/document_register_type_extensions_test/construction: Pass, Timeout # Roll 50 failure
 custom/document_register_type_extensions_test/registration: Pass, Timeout # Roll 50 failure
 custom/entered_left_view_test/shadow_dom: Pass, Timeout # Roll 50 failure
+custom/mirrors_2_test: RuntimeError
+custom/mirrors_test: RuntimeError
 fileapi_test/directoryReader: Pass, Timeout # Roll 50 failure
 fileapi_test/entry: Pass, Timeout # Roll 50 failure
+fileapi_test/entry: RuntimeError
 fileapi_test/fileEntry: Pass, Timeout # Roll 50 failure
 fileapi_test/getDirectory: Pass, Timeout # Roll 50 failure
 fileapi_test/getFile: Pass, Timeout # Roll 50 failure
 indexeddb_1_test/functional: Pass, Timeout # Roll 50 failure
+indexeddb_1_test/functional: RuntimeError
 indexeddb_2_test: Pass, Timeout # Roll 50 failure
 indexeddb_3_test: Pass, Timeout # Roll 50 failure
+indexeddb_3_test: RuntimeError
 indexeddb_4_test: Pass, Timeout # Roll 50 failure
 indexeddb_5_test: Pass, Timeout # Roll 50 failure
+indexeddb_5_test: RuntimeError
 input_element_test/attributes: Fail # Issue 21555
 isolates_test: SkipByDesign
 js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
+js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_side_cast_exp_test: Pass, RuntimeError # Roll 50 failure
+js_typed_interop_test/static_method_tearoff_1: RuntimeError
 mirrors_js_typed_interop_test: Pass, Slow
+mirrors_js_typed_interop_test: SkipByDesign
 svgelement_test/PathElement: Pass, RuntimeError # Roll 50 failure
 worker_api_test: SkipByDesign
 wrapping_collections_test: SkipByDesign # Testing an issue that is only relevant to Dartium
@@ -62,7 +71,6 @@
 crypto_test/supported: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 css_test/supportsPointConversions: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 custom/document_register_type_extensions_test/single-parameter: Fail # Issue 13193.
-deferred_multi_app_htmltest: Skip # Times out on IE.  Issue 21537
 element_animate_test: Fail # Element.animate not supported on these browsers.
 element_test/click: Fail # IE does not support firing this event.
 element_types_test/supported_content: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
@@ -90,12 +98,10 @@
 media_stream_test/supported_media: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 mediasource_test/functional: Pass, Fail # Fails on Windows 8
 mediasource_test/supported: Pass, Fail # Should pass on Windows 8
-no_linked_scripts_htmltest: Skip # Times out on IE.  Issue 21537
 notification_test/supported_notification: Fail # Notification not supported on IE
 postmessage_structured_test/more_primitives: Fail # Does not support the MessageEvent constructor.
 request_animation_frame_test: Skip # Times out. Issue 22167
 rtc_test/supported: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
-scripts_htmltest: Skip # Times out on IE.  Issue 21537
 serialized_script_value_test: Fail
 shadow_dom_test/supported: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 speechrecognition_test/supported: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
@@ -110,7 +116,6 @@
 touchevent_test/supported: Fail # IE does not support TouchEvents
 transferables_test: Pass, Fail # Issues 20659.
 transition_event_test/functional: Skip # Times out. Issue 22167
-two_scripts_htmltest: Skip # Times out on IE.  Issue 21537
 webgl_1_test/functional: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 websocket_test/websocket: Fail # Issue 7875. Closed with "working as intended".
 websql_test: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
@@ -192,7 +197,7 @@
 speechrecognition_test/types: Fail # TODO(dart2js-team): Please triage this failure.
 xhr_test/json: Fail # TODO(dart2js-team): Please triage this failure.
 
-[ $compiler == dart2js && $runtime == d8 && $fasta ]
+[ $compiler == dart2js && $runtime == d8 ]
 async_spawnuri_test: RuntimeError
 audiobuffersourcenode_test: RuntimeError
 audiocontext_test: RuntimeError
@@ -362,7 +367,7 @@
 xhr_test: RuntimeError
 xsltprocessor_test: RuntimeError
 
-[ $compiler == dart2js && $runtime == d8 && $fasta && $minified ]
+[ $compiler == dart2js && $runtime == d8 && $minified ]
 fontface_loaded_test: RuntimeError
 streams_test: RuntimeError
 
@@ -402,9 +407,6 @@
 custom/js_custom_test: Fail # Issue 14643
 
 [ $compiler == dart2js && $checked ]
-js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
-
-[ $compiler == dart2js && $checked && $fasta ]
 canvasrenderingcontext2d_test/drawImage_image_element: Timeout
 canvasrenderingcontext2d_test/drawImage_video_element: Timeout
 canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Timeout
@@ -440,6 +442,7 @@
 indexeddb_1_test/functional: RuntimeError
 indexeddb_2_test: RuntimeError
 indexeddb_4_test: RuntimeError
+js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
 js_test/JsObject.fromBrowserObject(): RuntimeError
 js_test/JsObject.jsify(): RuntimeError
 js_util_test/js_util.jsify(): RuntimeError
@@ -486,19 +489,7 @@
 custom/mirrors_test: Fail # mirrors not supported
 mirrors_js_typed_interop_test: Fail # mirrors not supported
 
-[ $compiler == dart2js && $fasta ]
-custom/mirrors_2_test: RuntimeError
-custom/mirrors_test: RuntimeError
-deferred_multi_app_htmltest: CompileTimeError
-fileapi_test/entry: RuntimeError
-indexeddb_1_test/functional: RuntimeError
-indexeddb_3_test: RuntimeError
-indexeddb_5_test: RuntimeError
-js_typed_interop_default_arg_test/explicit_argument: RuntimeError
-js_typed_interop_test/static_method_tearoff_1: RuntimeError
-mirrors_js_typed_interop_test: SkipByDesign
-
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $compiler == dart2js && $host_checked ]
 fontface_loaded_test: RuntimeError
 streams_test: RuntimeError
 
@@ -524,10 +515,6 @@
 transition_event_test/functional: Skip # Times out. Issue 22167
 
 [ $runtime == chrome && $csp ]
-deferred_multi_app_htmltest: SkipByDesign # uses inline script
-no_linked_scripts_htmltest: SkipByDesign # uses inline script
-scripts_htmltest: SkipByDesign # uses inline script
-two_scripts_htmltest: SkipByDesign # uses inline script
 worker_test/functional: SkipByDesign # starts worker with inline script
 
 [ $runtime == chrome || $runtime == chromeOnAndroid ]
diff --git a/tests/html/no_linked_scripts_htmltest.html b/tests/html/no_linked_scripts_htmltest.html
deleted file mode 100644
index 3ec0861..0000000
--- a/tests/html/no_linked_scripts_htmltest.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<!--
-START_HTML_DART_TEST
-{
-  "scripts": [ ],
-  "expectedMessages": ["hest", "fisk"]
-}
-END_HTML_DART_TEST
--->
-<html>
-<head>
-  <script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
-  <title>No Linked Scripts HTML test</title>
-</head><body>
-  <h1>No Linked Scripts HTML test</h1>
-  <script>
-    window.postMessage('fisk', '*');
-    window.postMessage('ged', '*');
-    window.postMessage('fisk', '*');
-
-    function delayed() {
-      parent.postMessage('ko', '*');
-      window.postMessage('hest', '*');
-    }
-    setTimeout(delayed, 500);
-  </script>
-</body>
-</html>
diff --git a/tests/html/scripts_htmltest.html b/tests/html/scripts_htmltest.html
deleted file mode 100644
index 1819595..0000000
--- a/tests/html/scripts_htmltest.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<!--
-START_HTML_DART_TEST
-{
-  "scripts": ["scripts_test_dart.dart", "scripts_test_js.js"],
-  "expectedMessages": ["crab", "fish", "squid", "sea urchin"]
-}
-END_HTML_DART_TEST
--->
-<html>
-<head>
-  <script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
-  <title>Scripts HTML test</title>
-</head><body>
-  <h1>Scripts HTML test</h1>
-  <script src="scripts_test_dart.dart" type="application/dart"></script>
-  <script src="scripts_test_js.js"></script>
-</body>
-</html>
diff --git a/tests/html/scripts_test_dart.dart b/tests/html/scripts_test_dart.dart
deleted file mode 100644
index cd7bc5a..0000000
--- a/tests/html/scripts_test_dart.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// 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.
-
-library ScriptsTestDart;
-
-import 'dart:html';
-import 'dart:async';
-
-main() {
-  window.postMessage('squid', '*');
-  window.postMessage('tiger', '*'); // Unexpected message OK.
-  new Timer(new Duration(seconds: 1), () {
-    window.postMessage('squid', '*'); // Duplicate message OK.
-    window.postMessage('sea urchin', '*');
-  });
-}
diff --git a/tests/html/scripts_test_js.js b/tests/html/scripts_test_js.js
deleted file mode 100644
index 552d418..0000000
--- a/tests/html/scripts_test_js.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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.
-
-window.postMessage('fish', '*');
-
-function delayed() {
-  window.postMessage('cow', '*');  // Unexpected message OK.
-  parent.postMessage('weasel', '*');  // Message to parent OK.
-  window.postMessage('crab', '*');
-}
-setTimeout(delayed, 500);
diff --git a/tests/html/two_scripts_htmltest.html b/tests/html/two_scripts_htmltest.html
deleted file mode 100644
index 1a244ca..0000000
--- a/tests/html/two_scripts_htmltest.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<!--
-START_HTML_DART_TEST
-{
-  "scripts": ["two_scripts_test_first.dart", "two_scripts_test_second.dart"],
-  "expectedMessages":
-      ["first_local", "first_global", "second_local", "second_global"]
-}
-END_HTML_DART_TEST
--->
-<html>
-<head>
-  <script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
-  <title>Two Scripts HTML test</title>
-</head><body>
-  <h1>Two Scripts HTML test</h1>
-  <script src="two_scripts_test_first.dart" type="application/dart"></script>
-  <script src="two_scripts_test_second.dart" type="application/dart"></script>
-</body>
-</html>
diff --git a/tests/html/two_scripts_test_first.dart b/tests/html/two_scripts_test_first.dart
deleted file mode 100644
index 6a1f1d1..0000000
--- a/tests/html/two_scripts_test_first.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-library TwoScriptsTestFirst;
-
-import 'dart:html';
-
-aGlobalFunction() {
-  window.postMessage('first_global', '*');
-}
-
-main() {
-  window.postMessage('first_local', '*');
-  aGlobalFunction();
-}
diff --git a/tests/html/two_scripts_test_second.dart b/tests/html/two_scripts_test_second.dart
deleted file mode 100644
index b959396..0000000
--- a/tests/html/two_scripts_test_second.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-library TwoScriptsTestSecond;
-
-import 'dart:html';
-
-aGlobalFunction() {
-  window.postMessage('second_global', '*');
-}
-
-main() {
-  window.postMessage('second_local', '*');
-  aGlobalFunction();
-}
diff --git a/tests/kernel/kernel.status b/tests/kernel/kernel.status
index f00e5df..82cce18 100644
--- a/tests/kernel/kernel.status
+++ b/tests/kernel/kernel.status
@@ -6,6 +6,8 @@
 unsorted/invocation_errors_test: Pass
 unsorted/nsm_dispatcher_test: Skip # The test uses Symbol without MirrorsUsed
 unsorted/simple_literal_test/01: Skip # The test expects error for large integer literal.
+unsorted/super_mixin_test: RuntimeError
+unsorted/try_finally_test: Crash
 
 [ !$fasta ]
 unsorted/loop_test: Skip # This test uses optional new/const.
@@ -16,16 +18,9 @@
 [ $compiler == dart2analyzer && $runtime == none ]
 unsorted/super_mixin_test: CompileTimeError
 
-[ $compiler == dart2js && $fasta ]
-unsorted/super_mixin_test: RuntimeError
-unsorted/try_finally_test: Crash
-
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $compiler == dart2js && $host_checked ]
 unsorted/super_mixin_test: Crash
 
-[ $compiler == dart2js && !$fasta ]
-unsorted/super_mixin_test: CompileTimeError
-
 [ $compiler == dart2js && !$strong ]
 unsorted/types_test: RuntimeError
 
diff --git a/tests/language/language.status b/tests/language/language.status
index b5fd39b0..a655de2 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -330,7 +330,6 @@
 large_class_declaration_test: SkipSlow # Uses too much memory.
 
 [ $arch == ia32 && $compiler == none && $runtime == vm && $system == windows ]
-disassemble_test: Pass, Crash # Issue 34030
 vm/optimized_stacktrace_test: Pass, Crash # Issue 28276
 
 [ $arch == ia32 && $mode == release && $runtime == vm ]
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index bac34af..a7b9138 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -6,283 +6,12 @@
 switch_case_warn_test: Skip # Analyzer only, see language_analyzer2.status
 
 [ $compiler == dart2js ]
+arithmetic_test: CompileTimeError # Int larger than 64 bits
 async_await_test: RuntimeError # sync-async is on by default
+async_star_cancel_while_paused_test: RuntimeError
 asyncstar_throw_in_catch_test: RuntimeError # sync-async is on by default
 await_nonfuture_test: RuntimeError # sync-async is on by default
 await_not_started_immediately_test: RuntimeError # sync-async is on by default
-full_stacktrace1_test: Pass, RuntimeError # Issue 12698
-full_stacktrace2_test: Pass, RuntimeError # Issue 12698
-full_stacktrace3_test: Pass, RuntimeError # Issue 12698
-issue23244_test: RuntimeError # 23244
-library_env_test/has_no_html_support: RuntimeError, OK
-main_test/03: MissingRuntimeError # dart:isolate not supported
-vm/*: Skip # Issue 12699
-
-[ $arch == ia32 && $compiler == dart2js && $runtime == d8 ]
-new_expression2_negative_test: Pass, Crash # Flaky, issue 31131
-
-[ $builder_tag == win7 && $compiler == dart2js && $fasta ]
-deep_nesting2_negative_test: Crash
-illegal_declaration_test/01: Crash
-issue1578_negative_test: Crash
-regress_23051_test/01: Crash
-
-[ $compiler == dart2js && $runtime == chrome && $system == macos ]
-await_future_test: Pass, Timeout # Issue 26735
-
-[ $compiler == dart2js && $runtime == chromeOnAndroid ]
-override_field_test/02: Pass, Slow # TODO(kasperl): Please triage.
-
-[ $compiler == dart2js && $runtime == d8 && $fasta ]
-int_round_to_double_test: RuntimeError # Large integer literal. Not valid in dart2.
-regress_23408_test: RuntimeError
-
-[ $compiler == dart2js && $runtime == ff ]
-round_test: Pass, Fail, OK # Fixed in ff 35. Common JavaScript engine Math.round bug.
-
-[ $compiler == dart2js && $runtime != ff && $fasta ]
-stacktrace_test: RuntimeError # Issue 12698
-
-[ $compiler == dart2js && $runtime == jsshell && !$fasta ]
-async_star_no_cancel2_test: RuntimeError # Need triage
-async_star_no_cancel_test: RuntimeError # Need triage
-async_star_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
-await_for_test: Skip # Jsshell does not provide periodic timers, Issue 7728
-regress_23996_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
-
-[ $compiler == dart2js && $runtime == none ]
-*: Fail, Pass # TODO(ahe): Triage these tests.
-
-[ $compiler == dart2js && $runtime == none && $fasta ]
-*: Fail, Pass, Crash # TODO(sigmund): we should have no crashes when migration completes
-
-[ $compiler == dart2js && $runtime == safari ]
-round_test: Fail, OK # Common JavaScript engine Math.round bug.
-
-[ $compiler == dart2js && $runtime == safari && $fasta ]
-call_nonexistent_constructor_test/02: RuntimeError
-named_parameters2_test: RuntimeError
-named_parameters3_test: RuntimeError
-named_parameters4_test: RuntimeError
-
-[ $compiler == dart2js && $system == windows && $fasta ]
-deep_nesting2_negative_test: Pass, Crash
-illegal_declaration_test/01: Pass, Crash
-issue1578_negative_test: Pass, Crash
-regress_23051_test/01: Pass, Crash
-
-[ $compiler == dart2js && $system == windows && !$fasta && ($runtime == chrome || $runtime == ff) ]
-string_literals_test: RuntimeError # Issue 27533
-
-[ $compiler == dart2js && $browser ]
-config_import_test: RuntimeError # Test flag is not passed to the compiler.
-library_env_test/has_io_support: RuntimeError, OK # dart2js doesn't support io when using '--categories=Client'.
-
-[ $compiler == dart2js && !$browser ]
-library_env_test/has_no_io_support: RuntimeError, OK # dart2js supports io when using '--categories=all'.
-
-[ $compiler == dart2js && !$browser && $fasta ]
-config_import_corelib_test: RuntimeError, OK # all dart:* are supported when using '--categories=all'.
-
-[ $compiler == dart2js && $checked && $fasta ]
-arithmetic_test: CompileTimeError
-assertion_initializer_const_function_test/01: RuntimeError
-assertion_initializer_test: RuntimeError
-assign_static_type_test/01: Fail
-assign_static_type_test/02: MissingCompileTimeError
-async_return_types_test/nestedFuture: Fail # Issue 26429
-async_return_types_test/wrongTypeParameter: Fail # Issue 26429
-closure_type_test/01: RuntimeError # Issue 12745
-closure_type_test/none: RuntimeError # Issue 12745
-compile_time_constant_checked2_test/01: MissingCompileTimeError
-compile_time_constant_checked2_test/02: MissingCompileTimeError
-compile_time_constant_checked2_test/03: MissingCompileTimeError
-compile_time_constant_checked2_test/04: MissingCompileTimeError
-compile_time_constant_checked2_test/05: MissingCompileTimeError
-compile_time_constant_checked2_test/06: MissingCompileTimeError
-compile_time_constant_checked3_test/01: MissingCompileTimeError
-compile_time_constant_checked3_test/02: MissingCompileTimeError
-compile_time_constant_checked3_test/03: MissingCompileTimeError
-compile_time_constant_checked3_test/04: MissingCompileTimeError
-compile_time_constant_checked3_test/05: MissingCompileTimeError
-compile_time_constant_checked3_test/06: MissingCompileTimeError
-compile_time_constant_checked4_test/01: MissingCompileTimeError
-compile_time_constant_checked4_test/02: MissingCompileTimeError
-compile_time_constant_checked4_test/03: MissingCompileTimeError
-compile_time_constant_checked5_test/03: MissingCompileTimeError
-compile_time_constant_checked5_test/04: MissingCompileTimeError
-compile_time_constant_checked5_test/08: MissingCompileTimeError
-compile_time_constant_checked5_test/09: MissingCompileTimeError
-compile_time_constant_checked5_test/13: MissingCompileTimeError
-compile_time_constant_checked5_test/14: MissingCompileTimeError
-compile_time_constant_checked5_test/18: MissingCompileTimeError
-compile_time_constant_checked5_test/19: MissingCompileTimeError
-compile_time_constant_checked_test/01: Fail
-compile_time_constant_checked_test/02: MissingCompileTimeError
-compile_time_constant_checked_test/03: Fail
-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/20: MissingCompileTimeError
-const_constructor2_test/22: MissingCompileTimeError
-const_constructor2_test/24: MissingCompileTimeError
-const_constructor3_test/02: MissingCompileTimeError
-const_constructor3_test/04: MissingCompileTimeError
-const_init2_test/02: MissingCompileTimeError
-deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred_constraints_type_annotation_test/type_annotation1: Fail # Missing dynamic type error
-deferred_constraints_type_annotation_test/type_annotation_generic1: Fail # Missing dynamic type error
-deferred_constraints_type_annotation_test/type_annotation_generic4: Fail # Missing dynamic type error
-deopt_inlined_function_lazy_test: CompileTimeError
-factory_redirection_test/08: Fail
-factory_redirection_test/09: Fail
-factory_redirection_test/10: Fail
-factory_redirection_test/12: Fail
-factory_redirection_test/13: Fail
-factory_redirection_test/14: Fail
-generalized_void_syntax_test: RuntimeError
-generic_functions_test: RuntimeError
-generic_methods_test: RuntimeError
-guess_cid_test: CompileTimeError
-int2_test: CompileTimeError
-internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-list_literal1_test/01: MissingCompileTimeError
-malbounded_instantiation_test/01: RuntimeError # Issue 12702
-malbounded_redirecting_factory2_test/02: Fail
-malbounded_redirecting_factory2_test/03: Fail
-malbounded_redirecting_factory2_test/04: Fail
-malbounded_type_cast2_test: RuntimeError # Issue 14121
-malbounded_type_cast_test: RuntimeError # Issue 14121
-malbounded_type_test2_test: RuntimeError # Issue 14121
-malbounded_type_test_test/03: Fail # Issue 14121
-malbounded_type_test_test/04: Fail # Issue 14121
-malformed2_test/00: RuntimeError
-malformed2_test/01: MissingCompileTimeError
-map_literal1_test/01: MissingCompileTimeError
-mint_compares_test: CompileTimeError
-number_identity_test: CompileTimeError
-redirecting_factory_infinite_steps_test/01: Fail
-redirecting_factory_malbounded_test/01: Fail
-regress_26133_test: RuntimeError # Issue 26429
-regress_29405_test: RuntimeError # Issue 29422
-stacktrace_demangle_ctors_test: RuntimeError
-stacktrace_test: RuntimeError
-super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
-type_check_const_function_typedef2_test/00: MissingCompileTimeError
-type_parameter_test/01: Crash # Internal Error: Unexpected type variable in static context.
-type_parameter_test/02: Crash # Internal Error: Unexpected type variable in static context.
-type_parameter_test/03: Crash # Internal Error: Unexpected type variable in static context.
-type_parameter_test/04: Crash # Internal Error: Unexpected type variable in static context.
-type_parameter_test/05: Crash # Internal Error: Unexpected type variable in static context.
-type_parameter_test/06: Crash # Internal Error: Unexpected type variable in static context.
-type_parameter_test/none: Crash # Internal Error: Unexpected type variable in static context.
-type_variable_bounds2_test/01: RuntimeError # Issue 12702
-type_variable_bounds2_test/04: RuntimeError # Issue 12702
-type_variable_bounds3_test/00: Fail # Issue 12702
-type_variable_bounds_test/02: Fail # Issue 12702
-type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
-
-[ $compiler == dart2js && $checked && $fasta && $host_checked ]
-generic_functions_test: Crash
-generic_methods_test: Crash
-
-[ $compiler == dart2js && $checked && !$fasta ]
-async_return_types_test/nestedFuture: Fail # Issue 26429
-async_return_types_test/wrongTypeParameter: Fail # Issue 26429
-closure_type_test: Fail # Issue 12745
-default_factory2_test/01: Fail # Issue 14121
-malbounded_instantiation_test/01: Fail # Issue 12702
-malbounded_redirecting_factory2_test/02: Fail # Issue 12825
-malbounded_redirecting_factory2_test/03: Fail # Issue 12825
-malbounded_redirecting_factory_test/02: Fail # Issue 12825
-malbounded_redirecting_factory_test/03: Fail # Issue 12825
-malbounded_type_cast2_test: Fail # Issue 14121
-malbounded_type_cast_test: Fail # Issue 14121
-malbounded_type_test2_test: Fail # Issue 14121
-malbounded_type_test_test/03: Fail # Issue 14121
-malbounded_type_test_test/04: Fail # Issue 14121
-regress_26133_test: RuntimeError # Issue 26429
-regress_29405_test: Fail # Issue 29422
-type_variable_bounds2_test/01: Fail # Issue 12702
-type_variable_bounds2_test/04: Fail # Issue 12702
-type_variable_bounds2_test/06: Pass # Issue 12702 (pass for the wrong reasons).
-type_variable_bounds3_test/00: Fail # Issue 12702
-type_variable_bounds_test/02: Fail # Issue 12702
-
-[ $compiler == dart2js && !$checked ]
-assertion_test: RuntimeError
-generic_test: RuntimeError, OK
-issue13474_test: RuntimeError, OK
-map_literal4_test: RuntimeError, OK # Checked mode required.
-named_parameters_type_test/01: MissingRuntimeError, OK
-named_parameters_type_test/02: MissingRuntimeError, OK
-named_parameters_type_test/03: MissingRuntimeError, OK
-positional_parameters_type_test/01: MissingRuntimeError, OK
-positional_parameters_type_test/02: MissingRuntimeError, OK
-type_checks_in_factory_method_test: RuntimeError # Issue 12746
-
-[ $compiler == dart2js && !$checked && $enable_asserts ]
-bool_check_test: RuntimeError # Issue 29647
-
-[ $compiler == dart2js && !$checked && $enable_asserts && !$fasta ]
-assertion_test: RuntimeError # Issue 12748
-
-[ $compiler == dart2js && !$checked && $fasta ]
-assertion_initializer_const_function_error_test/01: MissingCompileTimeError
-
-[ $compiler == dart2js && !$checked && $fasta && $minified ]
-f_bounded_quantification5_test: RuntimeError
-
-[ $compiler == dart2js && !$checked && !$fasta && $minified ]
-f_bounded_quantification5_test: Fail, OK # Issue 12605
-
-[ $compiler == dart2js && $fast_startup && $fasta ]
-deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
-internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
-stacktrace_demangle_ctors_test: RuntimeError
-super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
-
-[ $compiler == dart2js && $fast_startup && !$fasta ]
-assertion_initializer_const_error2_test/*: Crash
-assertion_initializer_const_error2_test/cc10: CompileTimeError # Issue #31321
-assertion_initializer_const_error2_test/cc11: CompileTimeError # Issue #31321
-assertion_initializer_const_error2_test/none: Pass
-assertion_initializer_const_function_error_test/01: Crash
-assertion_initializer_const_function_test/01: CompileTimeError
-const_evaluation_test/*: Fail # mirrors not supported
-deferred_constraints_constants_test: Pass # mirrors not supported, passes for the wrong reason
-deferred_constraints_constants_test/none: Fail # mirrors not supported
-deferred_constraints_constants_test/reference_after_load: Fail # mirrors not supported
-enum_mirror_test: Fail # mirrors not supported
-field_increment_bailout_test: Fail # mirrors not supported
-instance_creation_in_function_annotation_test: Fail # mirrors not supported
-invocation_mirror2_test: Fail # mirrors not supported
-invocation_mirror_invoke_on2_test: Fail # mirrors not supported
-invocation_mirror_invoke_on_test: Fail # mirrors not supported
-issue21079_test: Fail # mirrors not supported
-library_env_test/has_mirror_support: Fail # mirrors not supported
-library_env_test/has_no_mirror_support: Pass # fails for the wrong reason.
-many_overridden_no_such_method_test: Fail # mirrors not supported
-no_such_method_test: Fail # mirrors not supported
-null_test/0*: Pass # mirrors not supported, fails for the wrong reason
-null_test/none: Fail # mirrors not supported
-overridden_no_such_method_test: Fail # mirrors not supported
-redirecting_factory_reflection_test: Fail # mirrors not supported
-regress_13462_0_test: Fail # mirrors not supported
-regress_13462_1_test: Fail # mirrors not supported
-regress_18535_test: Fail # mirrors not supported
-regress_28255_test: Fail # mirrors not supported
-super_call4_test: Fail # mirrors not supported
-super_getter_setter_test: Fail # mirrors not supported
-vm/reflect_core_vm_test: Fail # mirrors not supported
-
-[ $compiler == dart2js && $fasta ]
-arithmetic_test: CompileTimeError # Int larger than 64 bits
-async_star_cancel_while_paused_test: RuntimeError
 bad_override_test/03: MissingCompileTimeError
 bad_override_test/04: MissingCompileTimeError
 bad_override_test/05: MissingCompileTimeError
@@ -353,6 +82,9 @@
 final_attempt_reinitialization_test/01: MissingCompileTimeError
 final_attempt_reinitialization_test/02: MissingCompileTimeError
 final_field_initialization_order_test: RuntimeError
+full_stacktrace1_test: Pass, RuntimeError # Issue 12698
+full_stacktrace2_test: Pass, RuntimeError # Issue 12698
+full_stacktrace3_test: Pass, RuntimeError # Issue 12698
 generic_methods_type_expression_test/01: RuntimeError
 generic_methods_type_expression_test/03: RuntimeError
 generic_methods_type_expression_test/none: RuntimeError
@@ -375,11 +107,14 @@
 invocation_mirror_invoke_on_test: RuntimeError # mirrors not supported
 invocation_mirror_test: RuntimeError # mirrors not supported
 issue21079_test: RuntimeError
+issue23244_test: RuntimeError # 23244
 left_shift_test: RuntimeError
 library_env_test/has_mirror_support: RuntimeError, OK
+library_env_test/has_no_html_support: RuntimeError, OK
 list_literal4_test: RuntimeError
 list_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 main_not_a_function_test/01: CompileTimeError
+main_test/03: MissingRuntimeError # dart:isolate not supported
 many_overridden_no_such_method_test: RuntimeError
 method_override5_test: RuntimeError
 method_override7_test/00: MissingCompileTimeError
@@ -550,8 +285,189 @@
 truncdiv_test: RuntimeError
 type_literal_prefix_call_test/00: RuntimeError
 type_variable_conflict2_test/02: MissingCompileTimeError
+vm/*: Skip # Issue 12699
 
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $arch == ia32 && $compiler == dart2js && $runtime == d8 ]
+new_expression2_negative_test: Pass, Crash # Flaky, issue 31131
+
+[ $builder_tag == win7 && $compiler == dart2js ]
+deep_nesting2_negative_test: Crash
+illegal_declaration_test/01: Crash
+issue1578_negative_test: Crash
+regress_23051_test/01: Crash
+
+[ $compiler == dart2js && $runtime == chrome && $system == macos ]
+await_future_test: Pass, Timeout # Issue 26735
+
+[ $compiler == dart2js && $runtime == chromeOnAndroid ]
+override_field_test/02: Pass, Slow # TODO(kasperl): Please triage.
+
+[ $compiler == dart2js && $runtime == d8 ]
+int_round_to_double_test: RuntimeError # Large integer literal. Not valid in dart2.
+regress_23408_test: RuntimeError
+
+[ $compiler == dart2js && $runtime == ff ]
+round_test: Pass, Fail, OK # Fixed in ff 35. Common JavaScript engine Math.round bug.
+
+[ $compiler == dart2js && $runtime != ff ]
+stacktrace_test: RuntimeError # Issue 12698
+
+[ $compiler == dart2js && $runtime == none ]
+*: Fail, Pass # TODO(ahe): Triage these tests.
+
+[ $compiler == dart2js && $runtime == safari ]
+call_nonexistent_constructor_test/02: RuntimeError
+named_parameters2_test: RuntimeError
+named_parameters3_test: RuntimeError
+named_parameters4_test: RuntimeError
+round_test: Fail, OK # Common JavaScript engine Math.round bug.
+
+[ $compiler == dart2js && $system == windows ]
+deep_nesting2_negative_test: Pass, Crash
+illegal_declaration_test/01: Pass, Crash
+issue1578_negative_test: Pass, Crash
+regress_23051_test/01: Pass, Crash
+
+[ $compiler == dart2js && $browser ]
+config_import_test: RuntimeError # Test flag is not passed to the compiler.
+library_env_test/has_io_support: RuntimeError, OK # dart2js doesn't support io when using '--categories=Client'.
+
+[ $compiler == dart2js && !$browser ]
+config_import_corelib_test: RuntimeError, OK # all dart:* are supported when using '--categories=all'.
+library_env_test/has_no_io_support: RuntimeError, OK # dart2js supports io when using '--categories=all'.
+
+[ $compiler == dart2js && $checked ]
+arithmetic_test: CompileTimeError
+assertion_initializer_const_function_test/01: RuntimeError
+assertion_initializer_test: RuntimeError
+assign_static_type_test/01: Fail
+assign_static_type_test/02: MissingCompileTimeError
+async_return_types_test/nestedFuture: Fail # Issue 26429
+async_return_types_test/wrongTypeParameter: Fail # Issue 26429
+closure_type_test/01: RuntimeError # Issue 12745
+closure_type_test/none: RuntimeError # Issue 12745
+compile_time_constant_checked2_test/01: MissingCompileTimeError
+compile_time_constant_checked2_test/02: MissingCompileTimeError
+compile_time_constant_checked2_test/03: MissingCompileTimeError
+compile_time_constant_checked2_test/04: MissingCompileTimeError
+compile_time_constant_checked2_test/05: MissingCompileTimeError
+compile_time_constant_checked2_test/06: MissingCompileTimeError
+compile_time_constant_checked3_test/01: MissingCompileTimeError
+compile_time_constant_checked3_test/02: MissingCompileTimeError
+compile_time_constant_checked3_test/03: MissingCompileTimeError
+compile_time_constant_checked3_test/04: MissingCompileTimeError
+compile_time_constant_checked3_test/05: MissingCompileTimeError
+compile_time_constant_checked3_test/06: MissingCompileTimeError
+compile_time_constant_checked4_test/01: MissingCompileTimeError
+compile_time_constant_checked4_test/02: MissingCompileTimeError
+compile_time_constant_checked4_test/03: MissingCompileTimeError
+compile_time_constant_checked5_test/03: MissingCompileTimeError
+compile_time_constant_checked5_test/04: MissingCompileTimeError
+compile_time_constant_checked5_test/08: MissingCompileTimeError
+compile_time_constant_checked5_test/09: MissingCompileTimeError
+compile_time_constant_checked5_test/13: MissingCompileTimeError
+compile_time_constant_checked5_test/14: MissingCompileTimeError
+compile_time_constant_checked5_test/18: MissingCompileTimeError
+compile_time_constant_checked5_test/19: MissingCompileTimeError
+compile_time_constant_checked_test/01: Fail
+compile_time_constant_checked_test/02: MissingCompileTimeError
+compile_time_constant_checked_test/03: Fail
+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/20: MissingCompileTimeError
+const_constructor2_test/22: MissingCompileTimeError
+const_constructor2_test/24: MissingCompileTimeError
+const_constructor3_test/02: MissingCompileTimeError
+const_constructor3_test/04: MissingCompileTimeError
+const_init2_test/02: MissingCompileTimeError
+deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred_constraints_type_annotation_test/type_annotation1: Fail # Missing dynamic type error
+deferred_constraints_type_annotation_test/type_annotation_generic1: Fail # Missing dynamic type error
+deferred_constraints_type_annotation_test/type_annotation_generic4: Fail # Missing dynamic type error
+deopt_inlined_function_lazy_test: CompileTimeError
+factory_redirection_test/08: Fail
+factory_redirection_test/09: Fail
+factory_redirection_test/10: Fail
+factory_redirection_test/12: Fail
+factory_redirection_test/13: Fail
+factory_redirection_test/14: Fail
+generalized_void_syntax_test: RuntimeError
+generic_functions_test: RuntimeError
+generic_methods_test: RuntimeError
+guess_cid_test: CompileTimeError
+int2_test: CompileTimeError
+internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
+list_literal1_test/01: MissingCompileTimeError
+malbounded_instantiation_test/01: RuntimeError # Issue 12702
+malbounded_redirecting_factory2_test/02: Fail
+malbounded_redirecting_factory2_test/03: Fail
+malbounded_redirecting_factory2_test/04: Fail
+malbounded_type_cast2_test: RuntimeError # Issue 14121
+malbounded_type_cast_test: RuntimeError # Issue 14121
+malbounded_type_test2_test: RuntimeError # Issue 14121
+malbounded_type_test_test/03: Fail # Issue 14121
+malbounded_type_test_test/04: Fail # Issue 14121
+malformed2_test/00: RuntimeError
+malformed2_test/01: MissingCompileTimeError
+map_literal1_test/01: MissingCompileTimeError
+mint_compares_test: CompileTimeError
+number_identity_test: CompileTimeError
+redirecting_factory_infinite_steps_test/01: Fail
+redirecting_factory_malbounded_test/01: Fail
+regress_26133_test: RuntimeError # Issue 26429
+regress_29405_test: RuntimeError # Issue 29422
+stacktrace_demangle_ctors_test: RuntimeError
+stacktrace_test: RuntimeError
+super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
+type_check_const_function_typedef2_test/00: MissingCompileTimeError
+type_parameter_test/01: Crash # Internal Error: Unexpected type variable in static context.
+type_parameter_test/02: Crash # Internal Error: Unexpected type variable in static context.
+type_parameter_test/03: Crash # Internal Error: Unexpected type variable in static context.
+type_parameter_test/04: Crash # Internal Error: Unexpected type variable in static context.
+type_parameter_test/05: Crash # Internal Error: Unexpected type variable in static context.
+type_parameter_test/06: Crash # Internal Error: Unexpected type variable in static context.
+type_parameter_test/none: Crash # Internal Error: Unexpected type variable in static context.
+type_variable_bounds2_test/01: RuntimeError # Issue 12702
+type_variable_bounds2_test/04: RuntimeError # Issue 12702
+type_variable_bounds3_test/00: Fail # Issue 12702
+type_variable_bounds_test/02: Fail # Issue 12702
+type_variable_scope_test/03: Crash # Internal Error: Unexpected type variable in static context.
+
+[ $compiler == dart2js && $checked && $host_checked ]
+generic_functions_test: Crash
+generic_methods_test: Crash
+
+[ $compiler == dart2js && !$checked ]
+assertion_initializer_const_function_error_test/01: MissingCompileTimeError
+assertion_test: RuntimeError
+generic_test: RuntimeError, OK
+issue13474_test: RuntimeError, OK
+map_literal4_test: RuntimeError, OK # Checked mode required.
+named_parameters_type_test/01: MissingRuntimeError, OK
+named_parameters_type_test/02: MissingRuntimeError, OK
+named_parameters_type_test/03: MissingRuntimeError, OK
+positional_parameters_type_test/01: MissingRuntimeError, OK
+positional_parameters_type_test/02: MissingRuntimeError, OK
+type_checks_in_factory_method_test: RuntimeError # Issue 12746
+
+[ $compiler == dart2js && !$checked && $enable_asserts ]
+bool_check_test: RuntimeError # Issue 29647
+
+[ $compiler == dart2js && !$checked && $minified ]
+f_bounded_quantification5_test: RuntimeError
+
+[ $compiler == dart2js && $fast_startup ]
+deferred_constraints_constants_test/none: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+deferred_constraints_constants_test/reference_after_load: Crash # Unsupported operation: KernelDeferredLoadTask.addMirrorElementsForLibrary
+internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
+stacktrace_demangle_ctors_test: RuntimeError
+super_call4_test: Crash # NoSuchMethodError: The getter 'thisLocal' was called on null.
+
+[ $compiler == dart2js && $host_checked ]
 arithmetic_test: CompileTimeError
 async_test/setter1: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 closure_self_reference_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/nodes.dart': Failed assertion: line 641 pos 12: 'isClosed()': is not true.
@@ -567,169 +483,19 @@
 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.
 
-[ $compiler == dart2js && $fasta && $minified ]
+[ $compiler == dart2js && $minified ]
 arithmetic_test: CompileTimeError
+cyclic_type2_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
+cyclic_type_test/0*: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 deferred_load_library_wrong_args_test/01: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
 deferred_redirecting_factory_test: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
 deopt_inlined_function_lazy_test: CompileTimeError
+f_bounded_quantification4_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
+generic_closure_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 guess_cid_test: CompileTimeError
 int2_test: CompileTimeError
 internal_library_test/02: Crash # NoSuchMethodError: Class 'DillLibraryBuilder' has no instance getter 'mixinApplicationClasses'.
 mint_compares_test: CompileTimeError
-number_identity_test: CompileTimeError
-stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
-stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
-stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
-symbol_conflict_test: RuntimeError
-
-[ $compiler == dart2js && !$fasta ]
-accessor_conflict_export2_test: Crash # Issue 25626
-accessor_conflict_export_test: Crash # Issue 25626
-accessor_conflict_import2_test: RuntimeError # Issue 25626
-accessor_conflict_import_prefixed2_test: RuntimeError # Issue 25626
-accessor_conflict_import_prefixed_test: RuntimeError # Issue 25626
-accessor_conflict_import_test: RuntimeError # Issue 25626
-assertion_initializer_const_error2_test/*: Crash
-assertion_initializer_const_error2_test/none: Pass
-assertion_initializer_const_function_error_test/01: Crash
-assertion_initializer_const_function_test/01: CompileTimeError
-assertion_initializer_test: Crash
-async_star_cancel_while_paused_test: RuntimeError # Issue 22853
-bad_constructor_test/05: CompileTimeError # Issue 13639
-bad_typedef_test/00: Crash # Issue 28214
-bit_operations_test: RuntimeError, OK # Issue 1533
-branch_canonicalization_test: RuntimeError # Issue 638.
-call_function_apply_test: RuntimeError # Issue 23873
-canonical_const2_test: RuntimeError, OK # Issue 1533
-closure_in_field_test/01: RuntimeError # Issue 30467
-closure_in_field_test/02: RuntimeError # Issue 30467
-const_dynamic_type_literal_test/02: CompileTimeError # Issue 23009
-const_dynamic_type_literal_test/03: CompileTimeError # Issue 23009
-const_switch_test/02: RuntimeError # Issue 17960
-const_switch_test/04: RuntimeError # Issue 17960
-constructor_duplicate_final_test/01: Fail # Issue 13363
-constructor_duplicate_final_test/02: Fail # Issue 13363
-constructor_named_arguments_test/01: CompileTimeError # Issue 25225
-deferred_not_loaded_check_test: Fail # Issue 27577
-double_int_to_string_test: RuntimeError # Issue 1533
-duplicate_part_test/01: MissingCompileTimeError # Issue 27517
-enum_test: Fail # Issue 28340
-expect_test: RuntimeError, OK # Issue 13080
-external_test/10: CompileTimeError # Issue 12887
-external_test/13: CompileTimeError # Issue 12887
-external_test/20: CompileTimeError # Issue 12887
-final_attempt_reinitialization_test.dart: Skip # Issue 29659
-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
-generic_function_typedef2_test/01: Crash # Issue 28214
-generic_function_typedef2_test/02: Crash # Issue 28214
-generic_function_typedef2_test/03: Crash # Issue 28214
-generic_function_typedef2_test/05: Crash # Issue 28214
-generic_function_typedef2_test/06: Crash # Issue 28214
-getter_setter_in_lib_test: Fail # Issue 23288
-identical_closure2_test: RuntimeError # Issue 1533, Issue 12596
-if_null_assignment_behavior_test/13: Crash # Issue 23491
-if_null_assignment_behavior_test/14: Crash # Issue 23491
-infinity_test: RuntimeError # Issue 4984
-integer_division_by_zero_test: RuntimeError # Issue 8301
-invocation_mirror2_test: RuntimeError # Issue 6490 (wrong retval).
-invocation_mirror_empty_arguments_test: Fail # Issue 24331
-left_shift_test: RuntimeError # Issue 1533
-library_env_test/has_no_mirror_support: RuntimeError, OK
-list_literal4_test: RuntimeError # Issue 12890
-malformed_test/none: Fail # Expect failure in lib/_internal/js_runtime/lib/preambles/d8.js
-method_override5_test: RuntimeError # Issue 12809
-mint_arithmetic_test: RuntimeError # Issue 1533
-mixin_forwarding_constructor4_test/01: MissingCompileTimeError # Issue 15101
-mixin_forwarding_constructor4_test/02: MissingCompileTimeError # Issue 15101
-mixin_forwarding_constructor4_test/03: MissingCompileTimeError # Issue 15101
-mixin_of_mixin_test: CompileTimeError # Issue 23773
-mixin_super_2_test: CompileTimeError # Issue 23773
-mixin_super_bound2_test: CompileTimeError # Issue 23773
-mixin_super_constructor_named_test/01: Fail # Issue 15101
-mixin_super_constructor_positionals_test/01: Fail # Issue 15101
-mixin_super_test: CompileTimeError # Issue 23773
-mixin_super_use_test: CompileTimeError # Issue 23773
-mixin_superclass_test: CompileTimeError # Issue 23773
-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: CompileTimeError # Issue 23773
-modulo_test: RuntimeError # Issue 15246
-multiline_newline_test/01: CompileTimeError # Issue 23888
-multiline_newline_test/01r: CompileTimeError # Issue 23888
-multiline_newline_test/02: CompileTimeError # Issue 23888
-multiline_newline_test/02r: CompileTimeError # Issue 23888
-multiline_newline_test/03: CompileTimeError # Issue 23888
-multiline_newline_test/03r: CompileTimeError # Issue 23888
-multiline_newline_test/none: RuntimeError # Issue 23888
-nan_identical_test: Fail # Issue 11551
-not_enough_positional_arguments_test/01: CompileTimeError # Issue 12838
-not_enough_positional_arguments_test/02: CompileTimeError # Issue 12838
-not_enough_positional_arguments_test/05: CompileTimeError # Issue 12838
-number_identity2_test: RuntimeError # Issue 12596
-numbers_test: RuntimeError, OK # Issue 1533
-override_inheritance_mixed_test/08: Fail # Issue 18124
-override_inheritance_mixed_test/09: Fail # Issue 18124
-ref_before_declaration_test/00: MissingCompileTimeError
-ref_before_declaration_test/01: MissingCompileTimeError
-ref_before_declaration_test/02: MissingCompileTimeError
-ref_before_declaration_test/03: MissingCompileTimeError
-ref_before_declaration_test/04: MissingCompileTimeError
-ref_before_declaration_test/05: MissingCompileTimeError
-ref_before_declaration_test/06: MissingCompileTimeError
-regress_22976_test: CompileTimeError # Issue 23132
-regress_24283_test: RuntimeError # Issue 1533
-regress_28341_test: Fail # Issue 28340
-regress_29481_test: Crash # Issue 29754
-scope_variable_test/01: MissingCompileTimeError # Issue 13016
-setter4_test: CompileTimeError # issue 13639
-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
-symbol_literal_test/*: Fail # Issue 21825
-syntax_test/none: CompileTimeError # Issue #30176.
-truncdiv_test: RuntimeError # Issue 15246
-try_catch_on_syntax_test/10: Fail # Issue 19823
-try_catch_on_syntax_test/11: Fail # Issue 19823
-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
-
-[ $compiler == dart2js && !$fasta && $host_checked ]
-assertion_initializer_const_error2_test/cc01: Crash
-assertion_initializer_const_error2_test/cc02: Crash
-assertion_initializer_const_error2_test/cc03: Crash
-assertion_initializer_const_error2_test/cc04: Crash
-assertion_initializer_const_error2_test/cc05: Crash
-assertion_initializer_const_error2_test/cc06: Crash
-assertion_initializer_const_error2_test/cc07: Crash
-assertion_initializer_const_error2_test/cc08: Crash
-assertion_initializer_const_error2_test/cc09: Crash
-assertion_initializer_const_error2_test/cc10: Crash
-assertion_initializer_const_error2_test/cc11: Crash
-assertion_initializer_const_function_error_test/01: Crash
-assertion_initializer_const_function_test/01: Crash
-assertion_initializer_test: Crash
-regress_26855_test/1: Crash # Issue 26867
-regress_26855_test/2: Crash # Issue 26867
-regress_26855_test/3: Crash # Issue 26867
-regress_26855_test/4: Crash # Issue 26867
-
-[ $compiler == dart2js && !$fasta && $minified ]
-symbol_conflict_test: RuntimeError # Issue 23857
-
-[ $compiler == dart2js && $minified ]
-cyclic_type2_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
-cyclic_type_test/0*: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
-f_bounded_quantification4_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
-generic_closure_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 mixin_generic_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 mixin_mixin2_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 mixin_mixin3_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
@@ -739,5 +505,10 @@
 mixin_mixin_bound2_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 mixin_mixin_bound_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 mixin_mixin_type_arguments_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
+number_identity_test: CompileTimeError
 regress_21795_test: RuntimeError, OK # Issue 31054: runtimeType.toString not preserved in minified code.
 stack_trace_test: RuntimeError, OK # Stack trace not preserved in minified code.
+stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
+stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
+stacktrace_rethrow_nonerror_test: RuntimeError # Issue 12698
+symbol_conflict_test: RuntimeError
diff --git a/tests/language_2/abstract_getter2_test.dart b/tests/language_2/abstract_getter2_test.dart
index 50a6caf..19c97db 100644
--- a/tests/language_2/abstract_getter2_test.dart
+++ b/tests/language_2/abstract_getter2_test.dart
@@ -21,9 +21,46 @@
   int get x => super.x;
 }
 
+class GetterConcrete {
+  var _foo;
+
+  get foo => _foo;
+  set foo(x) => _foo = x;
+
+  var _bar;
+
+  get bar => _bar;
+  set bar(x) => _bar = x;
+}
+
+class AbstractGetterOverride1 extends GetterConcrete {
+  get foo;
+  set bar(x);
+}
+
+class AbstractGetterOverride2 extends Object with GetterConcrete {
+  get foo;
+  set bar(x);
+}
+
 void main() {
   B b = new C();
   b.x = 42;
   Expect.equals(b._x, 42);
   Expect.equals(b.x, 100);
+
+  /// Tests that overriding either the getter or setter with an abstract member
+  /// has no effect.
+  /// Regression test for https://github.com/dart-lang/sdk/issues/29914
+  var c1 = AbstractGetterOverride1()
+    ..foo = 123
+    ..bar = 456;
+  Expect.equals(c1.foo, 123);
+  Expect.equals(c1.bar, 456);
+
+  var c2 = AbstractGetterOverride2()
+    ..foo = 123
+    ..bar = 456;
+  Expect.equals(c2.foo, 123);
+  Expect.equals(c2.bar, 456);
 }
diff --git a/tests/language_2/closure_type_arguments_test.dart b/tests/language_2/closure_type_arguments_test.dart
new file mode 100644
index 0000000..4478ed7
--- /dev/null
+++ b/tests/language_2/closure_type_arguments_test.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.
+
+import "package:expect/expect.dart";
+
+typedef MapFunc<S1, S2> = void Function(Map<S1, S2> arg);
+
+class A<P> {
+  final List barTypeArguments = [];
+
+  void foo<Q, Q1 extends P, Q2 extends Q, Q3 extends P, Q4 extends Q>() {
+    void bar<T1 extends P, T2 extends Q>(Map<T1, T2> arg) {
+      barTypeArguments..add(T1)..add(T2);
+    }
+
+    // Call with explicit type arguments.
+    bar<Q1, Q2>(null);
+
+    // No explicit type arguments - should be instantiated to bounds.
+    bar(null);
+
+    // Partial tear-off instantiation.
+    MapFunc<Q3, Q4> instantiated = bar;
+    instantiated(null);
+  }
+}
+
+abstract class MyIterable implements Iterable {}
+
+main() {
+  final a = new A<num>();
+  a.foo<Iterable, int, List, double, MyIterable>();
+  Expect.listEquals(
+      [int, List, num, Iterable, double, MyIterable], a.barTypeArguments);
+
+  // Test instantiation to bounds in the enclosing method.
+  dynamic b = new A<int>();
+  b.foo();
+  Expect.listEquals(
+      [int, dynamic, int, dynamic, int, dynamic], b.barTypeArguments);
+}
diff --git a/tests/language_2/constructor_reference_test.dart b/tests/language_2/constructor_reference_test.dart
new file mode 100644
index 0000000..1dae4a2
--- /dev/null
+++ b/tests/language_2/constructor_reference_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class Foo<X> {
+  const Foo();
+  const Foo.bar();
+  const Foo.baz();
+}
+
+main() {
+  new Foo(); //# 01: ok
+  new Foo.bar(); //# 02: ok
+  new Foo.bar.baz(); //# 03: compile-time error
+  new Foo<int>(); //# 04: ok
+  new Foo<int>.bar(); //# 05: ok
+  new Foo<int>.bar.baz(); //# 06: compile-time error
+  new Foo.bar<int>(); //# 07: compile-time error
+  new Foo.bar<int>.baz(); //# 08: compile-time error
+  new Foo.bar.baz<int>(); //# 09: compile-time error
+
+  const Foo(); //# 11: ok
+  const Foo.bar(); //# 12: ok
+  const Foo.bar.baz(); //# 13: compile-time error
+  const Foo<int>(); //# 14: ok
+  const Foo<int>.bar(); //# 15: ok
+  const Foo<int>.bar.baz(); //# 16: compile-time error
+  const Foo.bar<int>(); //# 17: compile-time error
+  const Foo.bar<int>.baz(); //# 18: compile-time error
+  const Foo.bar.baz<int>(); //# 19: compile-time error
+
+  Foo(); //# 21: ok
+  Foo.bar(); //# 22: ok
+  Foo.bar.baz(); //# 23: compile-time error
+  Foo<int>(); //# 24: ok
+  Foo<int>.bar(); //# 25: ok
+  Foo<int>.bar.baz(); //# 26: compile-time error
+  Foo.bar<int>(); //# 27: compile-time error
+  Foo.bar<int>.baz(); //# 28: compile-time error
+  Foo.bar.baz<int>(); //# 29: compile-time error
+}
diff --git a/tests/language_2/double_literals/double_literal_coercion_error_test.dart b/tests/language_2/double_literals/double_literal_coercion_error_test.dart
new file mode 100644
index 0000000..89d873f
--- /dev/null
+++ b/tests/language_2/double_literals/double_literal_coercion_error_test.dart
@@ -0,0 +1,295 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Introduces a context with double as type.
+void notDouble([double value]) {
+  if (value != null) throw "unreachable";
+}
+
+main() {
+  notDouble(
+    // Large decimal numbers which are not representable as doubles.
+    9007199254740993, //     2^53+2^0      //# 001: compile-time error
+    18014398509481983, //    2^54-2^0      //# 002: compile-time error
+    18014398509481985, //    2^54+2^0      //# 003: compile-time error
+    18014398509481986, //    2^54+2^1      //# 004: compile-time error
+    4611686018427387903, //  2^62-2^0      //# 005: compile-time error
+    4611686018427387902, //  2^62-2^1      //# 006: compile-time error
+    4611686018427387900, //  2^62-2^2      //# 007: compile-time error
+    4611686018427387896, //  2^62-2^3      //# 008: compile-time error
+    4611686018427387888, //  2^62-2^4      //# 009: compile-time error
+    4611686018427387872, //  2^62-2^5      //# 010: compile-time error
+    4611686018427387840, //  2^62-2^6      //# 011: compile-time error
+    4611686018427387776, //  2^62-2^7      //# 012: compile-time error
+    4611686018427387648, //  2^62-2^8      //# 013: compile-time error
+    4611686018427387905, //  2^62+2^0      //# 014: compile-time error
+    4611686018427387906, //  2^62+2^1      //# 015: compile-time error
+    4611686018427387908, //  2^62+2^2      //# 016: compile-time error
+    4611686018427387912, //  2^62+2^3      //# 017: compile-time error
+    4611686018427387920, //  2^62+2^4      //# 018: compile-time error
+    4611686018427387936, //  2^62+2^5      //# 019: compile-time error
+    4611686018427387968, //  2^62+2^6      //# 020: compile-time error
+    4611686018427388032, //  2^62+2^7      //# 021: compile-time error
+    4611686018427388160, //  2^62+2^8      //# 022: compile-time error
+    4611686018427388416, //  2^62+2^9      //# 023: compile-time error
+    9223372036854775807, //  2^63-2^0      //# 024: compile-time error
+    9223372036854775806, //  2^63-2^1      //# 025: compile-time error
+    9223372036854775804, //  2^63-2^2      //# 026: compile-time error
+    9223372036854775800, //  2^63-2^3      //# 027: compile-time error
+    9223372036854775792, //  2^63-2^4      //# 028: compile-time error
+    9223372036854775776, //  2^63-2^5      //# 029: compile-time error
+    9223372036854775744, //  2^63-2^6      //# 030: compile-time error
+    9223372036854775680, //  2^63-2^7      //# 031: compile-time error
+    9223372036854775552, //  2^63-2^8      //# 032: compile-time error
+    9223372036854775296, //  2^63-2^9      //# 033: compile-time error
+    9223372036854775809, //  2^63+2^0      //# 034: compile-time error
+    9223372036854775810, //  2^63+2^1      //# 035: compile-time error
+    9223372036854775812, //  2^63+2^2      //# 036: compile-time error
+    9223372036854775816, //  2^63+2^3      //# 037: compile-time error
+    9223372036854775824, //  2^63+2^4      //# 038: compile-time error
+    9223372036854775840, //  2^63+2^5      //# 039: compile-time error
+    9223372036854775872, //  2^63+2^6      //# 040: compile-time error
+    9223372036854775936, //  2^63+2^7      //# 041: compile-time error
+    9223372036854776064, //  2^63+2^8      //# 042: compile-time error
+    9223372036854776320, //  2^63+2^9      //# 043: compile-time error
+    9223372036854776832, //  2^63+2^10     //# 044: compile-time error
+    18446744073709551615, // 2^64-2^0      //# 045: compile-time error
+    18446744073709551614, // 2^64-2^1      //# 046: compile-time error
+    18446744073709551612, // 2^64-2^2      //# 047: compile-time error
+    18446744073709551608, // 2^64-2^3      //# 048: compile-time error
+    18446744073709551600, // 2^64-2^4      //# 049: compile-time error
+    18446744073709551584, // 2^64-2^5      //# 050: compile-time error
+    18446744073709551552, // 2^64-2^6      //# 051: compile-time error
+    18446744073709551488, // 2^64-2^7      //# 052: compile-time error
+    18446744073709551360, // 2^64-2^8      //# 053: compile-time error
+    18446744073709551104, // 2^64-2^9      //# 054: compile-time error
+    18446744073709550592, // 2^64-2^10     //# 055: compile-time error
+    18446744073709551617, // 2^64+2^0      //# 056: compile-time error
+    18446744073709551618, // 2^64+2^1      //# 057: compile-time error
+    18446744073709551620, // 2^64+2^2      //# 058: compile-time error
+    18446744073709551624, // 2^64+2^3      //# 059: compile-time error
+    18446744073709551632, // 2^64+2^4      //# 060: compile-time error
+    18446744073709551648, // 2^64+2^5      //# 061: compile-time error
+    18446744073709551680, // 2^64+2^6      //# 062: compile-time error
+    18446744073709551744, // 2^64+2^7      //# 063: compile-time error
+    18446744073709551872, // 2^64+2^8      //# 064: compile-time error
+    18446744073709552128, // 2^64+2^9      //# 065: compile-time error
+    18446744073709552640, // 2^64+2^10     //# 066: compile-time error
+    18446744073709553664, // 2^64+2^11     //# 067: compile-time error
+    179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858367, // maxValue - 1 //# 068 : compile-time error
+    179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858369, // maxValue + 1 //# 069 : compile-time error
+
+    // Negative numbers too.
+    -9007199254740993, //     -(2^53+2^0)  //# 070: compile-time error
+    -18014398509481983, //    -(2^54-2^0)  //# 071: compile-time error
+    -18014398509481985, //    -(2^54+2^0)  //# 072: compile-time error
+    -18014398509481986, //    -(2^54+2^1)  //# 073: compile-time error
+    -4611686018427387903, //  -(2^62-2^0)  //# 074: compile-time error
+    -4611686018427387902, //  -(2^62-2^1)  //# 075: compile-time error
+    -4611686018427387900, //  -(2^62-2^2)  //# 076: compile-time error
+    -4611686018427387896, //  -(2^62-2^3)  //# 077: compile-time error
+    -4611686018427387888, //  -(2^62-2^4)  //# 078: compile-time error
+    -4611686018427387872, //  -(2^62-2^5)  //# 079: compile-time error
+    -4611686018427387840, //  -(2^62-2^6)  //# 080: compile-time error
+    -4611686018427387776, //  -(2^62-2^7)  //# 081: compile-time error
+    -4611686018427387648, //  -(2^62-2^8)  //# 082: compile-time error
+    -4611686018427387905, //  -(2^62+2^0)  //# 083: compile-time error
+    -4611686018427387906, //  -(2^62+2^1)  //# 084: compile-time error
+    -4611686018427387908, //  -(2^62+2^2)  //# 085: compile-time error
+    -4611686018427387912, //  -(2^62+2^3)  //# 086: compile-time error
+    -4611686018427387920, //  -(2^62+2^4)  //# 087: compile-time error
+    -4611686018427387936, //  -(2^62+2^5)  //# 088: compile-time error
+    -4611686018427387968, //  -(2^62+2^6)  //# 089: compile-time error
+    -4611686018427388032, //  -(2^62+2^7)  //# 090: compile-time error
+    -4611686018427388160, //  -(2^62+2^8)  //# 091: compile-time error
+    -4611686018427388416, //  -(2^62+2^9)  //# 092: compile-time error
+    -9223372036854775807, //  -(2^63-2^0)  //# 093: compile-time error
+    -9223372036854775806, //  -(2^63-2^1)  //# 094: compile-time error
+    -9223372036854775804, //  -(2^63-2^2)  //# 095: compile-time error
+    -9223372036854775800, //  -(2^63-2^3)  //# 096: compile-time error
+    -9223372036854775792, //  -(2^63-2^4)  //# 097: compile-time error
+    -9223372036854775776, //  -(2^63-2^5)  //# 098: compile-time error
+    -9223372036854775744, //  -(2^63-2^6)  //# 099: compile-time error
+    -9223372036854775680, //  -(2^63-2^7)  //# 100: compile-time error
+    -9223372036854775552, //  -(2^63-2^8)  //# 101: compile-time error
+    -9223372036854775296, //  -(2^63-2^9)  //# 102: compile-time error
+    -9223372036854775809, //  -(2^63+2^0)  //# 103: compile-time error
+    -9223372036854775810, //  -(2^63+2^1)  //# 104: compile-time error
+    -9223372036854775812, //  -(2^63+2^2)  //# 105: compile-time error
+    -9223372036854775816, //  -(2^63+2^3)  //# 106: compile-time error
+    -9223372036854775824, //  -(2^63+2^4)  //# 107: compile-time error
+    -9223372036854775840, //  -(2^63+2^5)  //# 108: compile-time error
+    -9223372036854775872, //  -(2^63+2^6)  //# 109: compile-time error
+    -9223372036854775936, //  -(2^63+2^7)  //# 110: compile-time error
+    -9223372036854776064, //  -(2^63+2^8)  //# 111: compile-time error
+    -9223372036854776320, //  -(2^63+2^9)  //# 112: compile-time error
+    -9223372036854776832, //  -(2^63+2^10) //# 113: compile-time error
+    -18446744073709551615, // -(2^64-2^0)  //# 114: compile-time error
+    -18446744073709551614, // -(2^64-2^1)  //# 115: compile-time error
+    -18446744073709551612, // -(2^64-2^2)  //# 116: compile-time error
+    -18446744073709551608, // -(2^64-2^3)  //# 117: compile-time error
+    -18446744073709551600, // -(2^64-2^4)  //# 118: compile-time error
+    -18446744073709551584, // -(2^64-2^5)  //# 119: compile-time error
+    -18446744073709551552, // -(2^64-2^6)  //# 120: compile-time error
+    -18446744073709551488, // -(2^64-2^7)  //# 121: compile-time error
+    -18446744073709551360, // -(2^64-2^8)  //# 122: compile-time error
+    -18446744073709551104, // -(2^64-2^9)  //# 123: compile-time error
+    -18446744073709550592, // -(2^64-2^10) //# 124: compile-time error
+    -18446744073709551617, // -(2^64+2^0)  //# 125: compile-time error
+    -18446744073709551618, // -(2^64+2^1)  //# 126: compile-time error
+    -18446744073709551620, // -(2^64+2^2)  //# 127: compile-time error
+    -18446744073709551624, // -(2^64+2^3)  //# 128: compile-time error
+    -18446744073709551632, // -(2^64+2^4)  //# 129: compile-time error
+    -18446744073709551648, // -(2^64+2^5)  //# 130: compile-time error
+    -18446744073709551680, // -(2^64+2^6)  //# 131: compile-time error
+    -18446744073709551744, // -(2^64+2^7)  //# 132: compile-time error
+    -18446744073709551872, // -(2^64+2^8)  //# 133: compile-time error
+    -18446744073709552128, // -(2^64+2^9)  //# 134: compile-time error
+    -18446744073709552640, // -(2^64+2^10) //# 135: compile-time error
+    -18446744073709553664, // -(2^64+2^11) //# 136: compile-time error
+    -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858367, // -(maxValue - 1) //# 137 : compile-time error
+    -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858369, // -(maxValue + 1) //# 138 : compile-time error
+
+    // Same numbers as hexadecimal literals.
+    0x20000000000001, //    2^53+2^0      //# 139: compile-time error
+    0x3fffffffffffff, //    2^54-2^0      //# 140: compile-time error
+    0x40000000000001, //    2^54+2^0      //# 141: compile-time error
+    0x40000000000002, //    2^54+2^1      //# 142: compile-time error
+    0x3fffffffffffffff, //  2^62-2^0      //# 143: compile-time error
+    0x3ffffffffffffffe, //  2^62-2^1      //# 144: compile-time error
+    0x3ffffffffffffffc, //  2^62-2^2      //# 145: compile-time error
+    0x3ffffffffffffff8, //  2^62-2^3      //# 146: compile-time error
+    0x3ffffffffffffff0, //  2^62-2^4      //# 147: compile-time error
+    0x3fffffffffffffe0, //  2^62-2^5      //# 148: compile-time error
+    0x3fffffffffffffc0, //  2^62-2^6      //# 149: compile-time error
+    0x3fffffffffffff80, //  2^62-2^7      //# 150: compile-time error
+    0x3fffffffffffff00, //  2^62-2^8      //# 151: compile-time error
+    0x4000000000000001, //  2^62+2^0      //# 152: compile-time error
+    0x4000000000000002, //  2^62+2^1      //# 153: compile-time error
+    0x4000000000000004, //  2^62+2^2      //# 154: compile-time error
+    0x4000000000000008, //  2^62+2^3      //# 155: compile-time error
+    0x4000000000000010, //  2^62+2^4      //# 156: compile-time error
+    0x4000000000000020, //  2^62+2^5      //# 157: compile-time error
+    0x4000000000000040, //  2^62+2^6      //# 158: compile-time error
+    0x4000000000000080, //  2^62+2^7      //# 159: compile-time error
+    0x4000000000000100, //  2^62+2^8      //# 160: compile-time error
+    0x4000000000000200, //  2^62+2^9      //# 161: compile-time error
+    0x7fffffffffffffff, //  2^63-2^0      //# 162: compile-time error
+    0x7ffffffffffffffe, //  2^63-2^1      //# 163: compile-time error
+    0x7ffffffffffffffc, //  2^63-2^2      //# 164: compile-time error
+    0x7ffffffffffffff8, //  2^63-2^3      //# 165: compile-time error
+    0x7ffffffffffffff0, //  2^63-2^4      //# 166: compile-time error
+    0x7fffffffffffffe0, //  2^63-2^5      //# 167: compile-time error
+    0x7fffffffffffffc0, //  2^63-2^6      //# 168: compile-time error
+    0x7fffffffffffff80, //  2^63-2^7      //# 169: compile-time error
+    0x7fffffffffffff00, //  2^63-2^8      //# 170: compile-time error
+    0x7ffffffffffffe00, //  2^63-2^9      //# 171: compile-time error
+    0x8000000000000001, //  2^63+2^0      //# 172: compile-time error
+    0x8000000000000002, //  2^63+2^1      //# 173: compile-time error
+    0x8000000000000004, //  2^63+2^2      //# 174: compile-time error
+    0x8000000000000008, //  2^63+2^3      //# 175: compile-time error
+    0x8000000000000010, //  2^63+2^4      //# 176: compile-time error
+    0x8000000000000020, //  2^63+2^5      //# 177: compile-time error
+    0x8000000000000040, //  2^63+2^6      //# 178: compile-time error
+    0x8000000000000080, //  2^63+2^7      //# 179: compile-time error
+    0x8000000000000100, //  2^63+2^8      //# 180: compile-time error
+    0x8000000000000200, //  2^63+2^9      //# 181: compile-time error
+    0x8000000000000400, //  2^63+2^10     //# 182: compile-time error
+    0xffffffffffffffff, //  2^64-2^0      //# 183: compile-time error
+    0xfffffffffffffffe, //  2^64-2^1      //# 184: compile-time error
+    0xfffffffffffffffc, //  2^64-2^2      //# 185: compile-time error
+    0xfffffffffffffff8, //  2^64-2^3      //# 186: compile-time error
+    0xfffffffffffffff0, //  2^64-2^4      //# 187: compile-time error
+    0xffffffffffffffe0, //  2^64-2^5      //# 188: compile-time error
+    0xffffffffffffffc0, //  2^64-2^6      //# 189: compile-time error
+    0xffffffffffffff80, //  2^64-2^7      //# 190: compile-time error
+    0xffffffffffffff00, //  2^64-2^8      //# 191: compile-time error
+    0xfffffffffffffe00, //  2^64-2^9      //# 192: compile-time error
+    0xfffffffffffffc00, //  2^64-2^10     //# 193: compile-time error
+    0x10000000000000001, // 2^64+2^0      //# 194: compile-time error
+    0x10000000000000002, // 2^64+2^1      //# 195: compile-time error
+    0x10000000000000004, // 2^64+2^2      //# 196: compile-time error
+    0x10000000000000008, // 2^64+2^3      //# 197: compile-time error
+    0x10000000000000010, // 2^64+2^4      //# 198: compile-time error
+    0x10000000000000020, // 2^64+2^5      //# 199: compile-time error
+    0x10000000000000040, // 2^64+2^6      //# 200: compile-time error
+    0x10000000000000080, // 2^64+2^7      //# 201: compile-time error
+    0x10000000000000100, // 2^64+2^8      //# 202: compile-time error
+    0x10000000000000200, // 2^64+2^9      //# 203: compile-time error
+    0x10000000000000400, // 2^64+2^10     //# 204: compile-time error
+    0x10000000000000800, // 2^64+2^11     //# 205: compile-time error
+    0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, // maxValue - 1 //# 206 : compile-time error
+    0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001, // maxValue + 1 //# 207 : compile-time error
+
+    -0x20000000000001, //    -(2^53+2^0)      //# 208: compile-time error
+    -0x3fffffffffffff, //    -(2^54-2^0)      //# 209: compile-time error
+    -0x40000000000001, //    -(2^54+2^0)      //# 210: compile-time error
+    -0x40000000000002, //    -(2^54+2^1)      //# 211: compile-time error
+    -0x3fffffffffffffff, //  -(2^62-2^0)      //# 212: compile-time error
+    -0x3ffffffffffffffe, //  -(2^62-2^1)      //# 213: compile-time error
+    -0x3ffffffffffffffc, //  -(2^62-2^2)      //# 214: compile-time error
+    -0x3ffffffffffffff8, //  -(2^62-2^3)      //# 215: compile-time error
+    -0x3ffffffffffffff0, //  -(2^62-2^4)      //# 216: compile-time error
+    -0x3fffffffffffffe0, //  -(2^62-2^5)      //# 217: compile-time error
+    -0x3fffffffffffffc0, //  -(2^62-2^6)      //# 218: compile-time error
+    -0x3fffffffffffff80, //  -(2^62-2^7)      //# 219: compile-time error
+    -0x3fffffffffffff00, //  -(2^62-2^8)      //# 220: compile-time error
+    -0x4000000000000001, //  -(2^62+2^0)      //# 221: compile-time error
+    -0x4000000000000002, //  -(2^62+2^1)      //# 222: compile-time error
+    -0x4000000000000004, //  -(2^62+2^2)      //# 223: compile-time error
+    -0x4000000000000008, //  -(2^62+2^3)      //# 224: compile-time error
+    -0x4000000000000010, //  -(2^62+2^4)      //# 225: compile-time error
+    -0x4000000000000020, //  -(2^62+2^5)      //# 226: compile-time error
+    -0x4000000000000040, //  -(2^62+2^6)      //# 227: compile-time error
+    -0x4000000000000080, //  -(2^62+2^7)      //# 228: compile-time error
+    -0x4000000000000100, //  -(2^62+2^8)      //# 229: compile-time error
+    -0x4000000000000200, //  -(2^62+2^9)      //# 230: compile-time error
+    -0x7fffffffffffffff, //  -(2^63-2^0)      //# 231: compile-time error
+    -0x7ffffffffffffffe, //  -(2^63-2^1)      //# 232: compile-time error
+    -0x7ffffffffffffffc, //  -(2^63-2^2)      //# 233: compile-time error
+    -0x7ffffffffffffff8, //  -(2^63-2^3)      //# 234: compile-time error
+    -0x7ffffffffffffff0, //  -(2^63-2^4)      //# 235: compile-time error
+    -0x7fffffffffffffe0, //  -(2^63-2^5)      //# 236: compile-time error
+    -0x7fffffffffffffc0, //  -(2^63-2^6)      //# 237: compile-time error
+    -0x7fffffffffffff80, //  -(2^63-2^7)      //# 238: compile-time error
+    -0x7fffffffffffff00, //  -(2^63-2^8)      //# 239: compile-time error
+    -0x7ffffffffffffe00, //  -(2^63-2^9)      //# 240: compile-time error
+    -0x8000000000000001, //  -(2^63+2^0)      //# 241: compile-time error
+    -0x8000000000000002, //  -(2^63+2^1)      //# 242: compile-time error
+    -0x8000000000000004, //  -(2^63+2^2)      //# 243: compile-time error
+    -0x8000000000000008, //  -(2^63+2^3)      //# 244: compile-time error
+    -0x8000000000000010, //  -(2^63+2^4)      //# 245: compile-time error
+    -0x8000000000000020, //  -(2^63+2^5)      //# 246: compile-time error
+    -0x8000000000000040, //  -(2^63+2^6)      //# 247: compile-time error
+    -0x8000000000000080, //  -(2^63+2^7)      //# 248: compile-time error
+    -0x8000000000000100, //  -(2^63+2^8)      //# 249: compile-time error
+    -0x8000000000000200, //  -(2^63+2^9)      //# 250: compile-time error
+    -0x8000000000000400, //  -(2^63+2^10)     //# 251: compile-time error
+    -0xffffffffffffffff, //  -(2^64-2^0)      //# 252: compile-time error
+    -0xfffffffffffffffe, //  -(2^64-2^1)      //# 253: compile-time error
+    -0xfffffffffffffffc, //  -(2^64-2^2)      //# 254: compile-time error
+    -0xfffffffffffffff8, //  -(2^64-2^3)      //# 255: compile-time error
+    -0xfffffffffffffff0, //  -(2^64-2^4)      //# 256: compile-time error
+    -0xffffffffffffffe0, //  -(2^64-2^5)      //# 257: compile-time error
+    -0xffffffffffffffc0, //  -(2^64-2^6)      //# 258: compile-time error
+    -0xffffffffffffff80, //  -(2^64-2^7)      //# 259: compile-time error
+    -0xffffffffffffff00, //  -(2^64-2^8)      //# 260: compile-time error
+    -0xfffffffffffffe00, //  -(2^64-2^9)      //# 261: compile-time error
+    -0xfffffffffffffc00, //  -(2^64-2^10)     //# 262: compile-time error
+    -0x10000000000000001, // -(2^64+2^0)      //# 263: compile-time error
+    -0x10000000000000002, // -(2^64+2^1)      //# 264: compile-time error
+    -0x10000000000000004, // -(2^64+2^2)      //# 265: compile-time error
+    -0x10000000000000008, // -(2^64+2^3)      //# 266: compile-time error
+    -0x10000000000000010, // -(2^64+2^4)      //# 267: compile-time error
+    -0x10000000000000020, // -(2^64+2^5)      //# 268: compile-time error
+    -0x10000000000000040, // -(2^64+2^6)      //# 269: compile-time error
+    -0x10000000000000080, // -(2^64+2^7)      //# 270: compile-time error
+    -0x10000000000000100, // -(2^64+2^8)      //# 271: compile-time error
+    -0x10000000000000200, // -(2^64+2^9)      //# 272: compile-time error
+    -0x10000000000000400, // -(2^64+2^10)     //# 273: compile-time error
+    -0x10000000000000800, // -(2^64+2^11)     //# 274: compile-time error
+    -0xfffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, // -(maxValue - 1) //# 275 : compile-time error
+    -0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001, // -(maxValue + 1) //# 276 : compile-time error
+  );
+}
diff --git a/tests/language_2/double_literals/double_literal_coercion_test.dart b/tests/language_2/double_literals/double_literal_coercion_test.dart
new file mode 100644
index 0000000..9c2cc91
--- /dev/null
+++ b/tests/language_2/double_literals/double_literal_coercion_test.dart
@@ -0,0 +1,142 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for 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";
+
+// Pass expected value and then decimal literal value in a double context.
+void expectDouble(double expectedValue, double actualValue) {
+  if (expectedValue == null) return;
+  Expect.identical(expectedValue, actualValue);
+}
+
+// Some exact powers of two as double values.
+double p2_8 = 256.0;
+double p2_30 = 1073741824.0;
+double p2_31 = 2147483648.0;
+double p2_32 = 4294967296.0;
+double p2_52 = 4503599627370496.0;
+double p2_53 = 9007199254740992.0;
+double p2_54 = 18014398509481984.0;
+double p2_62 = 4611686018427387904.0;
+double p2_63 = 9223372036854775808.0;
+double p2_64 = 18446744073709551616.0;
+double maxValue = 1.7976931348623157e+308;
+
+main() {
+  expectDouble(0.0, 0);
+  expectDouble(1.0, 1);
+  expectDouble(p2_8 - 1, 255);
+  expectDouble(p2_8, 256);
+  expectDouble(p2_8 + 1, 257);
+  expectDouble(p2_30 - 1, 1073741823);
+  expectDouble(p2_30, 1073741824);
+  expectDouble(p2_30 + 1, 1073741825);
+  expectDouble(p2_31 - 1, 2147483647);
+  expectDouble(p2_31, 2147483648);
+  expectDouble(p2_31 + 1, 2147483649);
+  expectDouble(p2_32 - 1, 4294967295);
+  expectDouble(p2_32, 4294967296);
+  expectDouble(p2_32 + 1, 4294967297);
+  expectDouble(p2_52 - 1, 4503599627370495);
+  expectDouble(p2_52, 4503599627370496);
+  expectDouble(p2_52 + 1, 4503599627370497);
+  expectDouble(p2_53 - 1, 9007199254740991);
+  expectDouble(p2_53, 9007199254740992);
+  expectDouble(p2_53 + 2, 9007199254740994);
+  expectDouble(p2_54 - 2, 18014398509481982);
+  expectDouble(p2_54, 18014398509481984);
+  expectDouble(p2_54 + 4, 18014398509481988);
+  expectDouble(p2_62, 4611686018427387904);
+  expectDouble(p2_63, 9223372036854775808);
+  expectDouble(p2_64, 18446744073709551616);
+  expectDouble(maxValue,
+      179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368);
+
+  expectDouble(-0.0, -0);
+  expectDouble(-1.0, -1);
+  expectDouble(-(p2_8 - 1), -255);
+  expectDouble(-(p2_8), -256);
+  expectDouble(-(p2_8 + 1), -257);
+  expectDouble(-(p2_30 - 1), -1073741823);
+  expectDouble(-(p2_30), -1073741824);
+  expectDouble(-(p2_30 + 1), -1073741825);
+  expectDouble(-(p2_31 - 1), -2147483647);
+  expectDouble(-(p2_31), -2147483648);
+  expectDouble(-(p2_31 + 1), -2147483649);
+  expectDouble(-(p2_32 - 1), -4294967295);
+  expectDouble(-(p2_32), -4294967296);
+  expectDouble(-(p2_32 + 1), -4294967297);
+  expectDouble(-(p2_52 - 1), -4503599627370495);
+  expectDouble(-(p2_52), -4503599627370496);
+  expectDouble(-(p2_52 + 1), -4503599627370497);
+  expectDouble(-(p2_53 - 1), -9007199254740991);
+  expectDouble(-(p2_53), -9007199254740992);
+  expectDouble(-(p2_53 + 2), -9007199254740994);
+  expectDouble(-(p2_54 - 2), -18014398509481982);
+  expectDouble(-(p2_54), -18014398509481984);
+  expectDouble(-(p2_54 + 4), -18014398509481988);
+  expectDouble(-(p2_62), -4611686018427387904);
+  expectDouble(-(p2_63), -9223372036854775808);
+  expectDouble(-(p2_64), -18446744073709551616);
+  expectDouble(-maxValue,
+      -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368);
+
+  expectDouble(0.0, 0x0);
+  expectDouble(1.0, 0x1);
+  expectDouble(p2_8 - 1, 0xff);
+  expectDouble(p2_8, 0x100);
+  expectDouble(p2_8 + 1, 0x101);
+  expectDouble(p2_30 - 1, 0x3fffffff);
+  expectDouble(p2_30, 0x40000000);
+  expectDouble(p2_30 + 1, 0x40000001);
+  expectDouble(p2_31 - 1, 0x7fffffff);
+  expectDouble(p2_31, 0x80000000);
+  expectDouble(p2_31 + 1, 0x80000001);
+  expectDouble(p2_32 - 1, 0xffffffff);
+  expectDouble(p2_32, 0x100000000);
+  expectDouble(p2_32 + 1, 0x100000001);
+  expectDouble(p2_52 - 1, 0xfffffffffffff);
+  expectDouble(p2_52, 0x10000000000000);
+  expectDouble(p2_52 + 1, 0x10000000000001);
+  expectDouble(p2_53 - 1, 0x1fffffffffffff);
+  expectDouble(p2_53, 0x20000000000000);
+  expectDouble(p2_53 + 2, 0x20000000000002);
+  expectDouble(p2_54 - 2, 0x3ffffffffffffe);
+  expectDouble(p2_54, 0x40000000000000);
+  expectDouble(p2_54 + 4, 0x40000000000004);
+  expectDouble(p2_62, 0x4000000000000000);
+  expectDouble(p2_63, 0x8000000000000000);
+  expectDouble(p2_64, 0x10000000000000000);
+  expectDouble(maxValue,
+      0xfffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
+
+  expectDouble(-0.0, -0x0);
+  expectDouble(-1.0, -0x1);
+  expectDouble(-(p2_8 - 1), -0xff);
+  expectDouble(-(p2_8), -0x100);
+  expectDouble(-(p2_8 + 1), -0x101);
+  expectDouble(-(p2_30 - 1), -0x3fffffff);
+  expectDouble(-(p2_30), -0x40000000);
+  expectDouble(-(p2_30 + 1), -0x40000001);
+  expectDouble(-(p2_31 - 1), -0x7fffffff);
+  expectDouble(-(p2_31), -0x80000000);
+  expectDouble(-(p2_31 + 1), -0x80000001);
+  expectDouble(-(p2_32 - 1), -0xffffffff);
+  expectDouble(-(p2_32), -0x100000000);
+  expectDouble(-(p2_32 + 1), -0x100000001);
+  expectDouble(-(p2_52 - 1), -0xfffffffffffff);
+  expectDouble(-(p2_52), -0x10000000000000);
+  expectDouble(-(p2_52 + 1), -0x10000000000001);
+  expectDouble(-(p2_53 - 1), -0x1fffffffffffff);
+  expectDouble(-(p2_53), -0x20000000000000);
+  expectDouble(-(p2_53 + 2), -0x20000000000002);
+  expectDouble(-(p2_54 - 2), -0x3ffffffffffffe);
+  expectDouble(-(p2_54), -0x40000000000000);
+  expectDouble(-(p2_54 + 4), -0x40000000000004);
+  expectDouble(-(p2_62), -0x4000000000000000);
+  expectDouble(-(p2_63), -0x8000000000000000);
+  expectDouble(-(p2_64), -0x10000000000000000);
+  expectDouble(-maxValue,
+      -0xfffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
+}
diff --git a/tests/language_2/invocation_mirror_test.dart b/tests/language_2/invocation_mirror_test.dart
index ef17f7f..dc56efa 100644
--- a/tests/language_2/invocation_mirror_test.dart
+++ b/tests/language_2/invocation_mirror_test.dart
@@ -307,7 +307,6 @@
   Expect.throwsNoSuchMethodError(() => o.toString(42));
   Expect.throwsNoSuchMethodError(() => o.toString(x: 37));
   Expect.throwsNoSuchMethodError(() => o.hashCode = 42);
-  Expect.throwsNoSuchMethodError(() => o.hashCode()); // Thrown by int.noSuchMethod.
   Expect.throwsNoSuchMethodError(() => (n.flif)()); // Extracted method has no noSuchMethod.
 }
 
diff --git a/tests/language_2/language_2.status b/tests/language_2/language_2.status
index 1b1cc15..f4293613 100644
--- a/tests/language_2/language_2.status
+++ b/tests/language_2/language_2.status
@@ -8,28 +8,28 @@
 mixin_constructor_forwarding/optional_named_parameters_test/none: CompileTimeError # Issue 31543
 mixin_constructor_forwarding/optional_positional_parameters_test/none: CompileTimeError # Issue 31543
 
-[ $compiler == dart2analyzer && $fasta ]
-void/*: Skip  # https://github.com/dart-lang/sdk/issues/34011
-invalid_returns/*: Skip  # https://github.com/dart-lang/sdk/issues/34011
-
-[ $compiler == dart2js ]
-void/*: Skip  # https://github.com/dart-lang/sdk/issues/34011
-invalid_returns/*: Skip  # https://github.com/dart-lang/sdk/issues/34011
-
-[ $compiler == app_jit || $compiler == none ]
-void/*: Skip # https://github.com/dart-lang/sdk/issues/34013
-invalid_returns/*: Skip  # https://github.com/dart-lang/sdk/issues/34013
-
-[ $compiler == spec_parser ]
-void/*: Skip # https://github.com/dart-lang/sdk/issues/34015
-invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34015
-
 [ $compiler == app_jit ]
 deferred_inheritance_constraints_test/redirecting_constructor: Crash
 
+[ $compiler == dart2analyzer ]
+double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34360
+
 [ $compiler != dart2analyzer ]
 switch_case_warn_test: Skip # Analyzer only, see language_analyzer2.status
 
+[ $compiler == dart2js ]
+double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34356
+invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34011
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34011
+
+[ $compiler == fasta ]
+double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34357
+
+[ $compiler == spec_parser ]
+double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34355
+invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34015
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34015
+
 [ $mode == debug ]
 large_class_declaration_test: Slow, Pass
 
@@ -47,9 +47,12 @@
 stacktrace_demangle_ctors_test: SkipByDesign # Names are not scrubbed.
 type_checks_in_factory_method_test: SkipByDesign # Requires checked mode.
 
-[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkp && $compiler != dartkb && $mode == debug && $runtime == vm ]
+[ $compiler != app_jitk && $compiler != dartk && $compiler != dartkb && $compiler != dartkp && $mode == debug && $runtime == vm ]
 built_in_identifier_type_annotation_test/set: Crash # Not supported by legacy VM front-end.
 
+[ $compiler != dart2analyzer && $compiler != dart2js && $compiler != dartdevc && !$fasta && $strong ]
+type_promotion_functions_test: CompileTimeError # Issue 30895: This test requires a complete rewrite for 2.0.
+
 # Detection of compile-time errors that are related to constants can't be fully
 # done at the front end, because constants are evaluated at back ends.  So, some
 # errors aren't detected by fasta, but reported by back ends as compile-time
@@ -68,8 +71,8 @@
 implicit_creation/implicit_const_not_default_values_test/e6: MissingCompileTimeError
 implicit_creation/implicit_const_not_default_values_test/e9: MissingCompileTimeError
 
-[ $compiler != dart2js && $compiler != dartdevc && !$fasta && $strong ]
-type_promotion_functions_test: CompileTimeError # Issue 30895: This test requires a complete rewrite for 2.0.
+[ $compiler != dart2js && $compiler != dartdevc && !$checked ]
+function_type/*: Skip # Needs checked mode.
 
 [ $compiler != dart2js && !$fasta && $strong ]
 compile_time_constant_static5_test/11: CompileTimeError # Issue 30546
@@ -84,9 +87,6 @@
 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 && $compiler != dart2js && !$checked ]
-function_type/*: Skip # Needs checked mode.
-
 [ $compiler != spec_parser && $runtime != none && !$checked && !$strong ]
 closure_type_test: RuntimeError
 map_literal1_test/01: MissingCompileTimeError
@@ -215,47 +215,16 @@
 [ $checked && !$strong ]
 type_parameter_test/05: Pass
 
-[ !$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_const_not_default_values_test/o.*: CompileTimeError # 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.
-setter_override2_test/02: MissingCompileTimeError # Issue 14736
-void/return_future_future_or_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_future_or_void_async_error1_test/none: MissingStaticWarning # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_future_or_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_or_future_or_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_or_future_or_void_sync_error2_test/none: MissingStaticWarning # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_or_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_or_void_sync_error3_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_or_void_sync_error4_test/none: MissingStaticWarning # https://github.com/dart-lang/sdk/issues/33218
-void/return_future_void_async_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_async_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_async_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_async_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_async_error3_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_async_error4_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_async_test: StaticWarning # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_sync_error0_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_sync_error1_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
-void/return_void_sync_error2_test: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/33218
+[ $compiler == app_jit || $compiler == app_jitk || $compiler == dartk || $compiler == dartkb || $compiler == dartkp || $compiler == none || $compiler == precompiler ]
+double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34358
 
 [ $compiler == app_jit || $compiler == none ]
+invalid_returns/*: Skip # https://github.com/dart-lang/sdk/issues/34013
 library_env_test/has_no_mirror_support: RuntimeError, OK
+void/*: Skip # https://github.com/dart-lang/sdk/issues/34013
+
+[ $compiler == dartdevc || $compiler == dartdevk ]
+double_literals/*: Skip # https://github.com/dart-lang/sdk/issues/34359
 
 [ $hot_reload || $hot_reload_rollback ]
 cha_deopt1_test: Crash # Requires deferred libraries
diff --git a/tests/language_2/language_2_analyzer.status b/tests/language_2/language_2_analyzer.status
index 83f9f80..01ea12e 100644
--- a/tests/language_2/language_2_analyzer.status
+++ b/tests/language_2/language_2_analyzer.status
@@ -5,395 +5,6 @@
 # Sections in this file should contain "$compiler == dart2analyzer".
 
 [ $compiler == dart2analyzer ]
-mock_writable_final_private_field_test: CompileTimeError # Issue 30848
-vm/reflect_core_vm_test: CompileTimeError # Issue 30848
-
-[ $compiler == dart2analyzer && $analyzer_use_fasta_parser ]
-multiline_newline_test/01: Pass
-multiline_newline_test/01r: Pass
-multiline_newline_test/02: Pass
-multiline_newline_test/02r: Pass
-multiline_newline_test/04: Pass
-multiline_newline_test/04r: Pass
-multiline_newline_test/05: Pass
-multiline_newline_test/05r: Pass
-regress_29349_test: Pass
-void/generalized_void_syntax_test: Pass
-void/void_type_function_types_test/none: Pass
-
-[ $compiler == dart2analyzer && !$analyzer_use_fasta_parser && !$fasta ]
-constructor_type_parameter_test/00: MissingCompileTimeError # Issue 33110
-constructor_with_type_parameters_test/03: MissingCompileTimeError
-
-[ $compiler == dart2analyzer && $fasta ]
-arg_param_trailing_comma_test/100: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/24: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/25: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/26: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/72: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/73: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/74: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/98: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-arg_param_trailing_comma_test/99: Crash # Issue #34043 - Error recovery in outline (extraneous comma before formal parameter)
-black_listed_test/02: Crash # Issue 33686 - No core library found
-black_listed_test/04: Crash # Issue 33686 - No core library found
-black_listed_test/06: Crash # Issue 33686 - No core library found
-black_listed_test/08: Crash # Issue 33686 - No core library found
-black_listed_test/10: Crash # Issue 33686 - No core library found
-black_listed_test/12: Crash # Issue 33686 - No core library found
-black_listed_test/14: Crash # Issue 33686 - No core library found
-built_in_identifier_illegal_test/implements: Crash # Issue #34043 - Error recovery in outline (synthetic token used where type expected)
-built_in_identifier_illegal_test/part: Crash # No resolution for a file
-built_in_identifier_illegal_test/typedef: Crash # Issue 33686 - No core library found
-built_in_identifier_type_annotation_test/mixin: Crash # Issue 34164 - mixin support
-built_in_identifier_type_annotation_test/part: Crash # No resolution for a file
-built_in_identifier_type_annotation_test/set: Crash # Issue #34043 - Error recovery in outline
-built_in_identifier_type_annotation_test/set-funret: Crash # Issue #34043 - Error recovery in outline
-call_nonexistent_static_test/10: Crash # Error recovery in method body (attempt to read from setter)
-class_cycle2_test/01: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-class_cycle2_test/02: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-class_cycle_test/00: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-class_cycle_test/01: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-compile_time_constant_static5_test/11: CompileTimeError # Issue 31537
-compile_time_constant_static5_test/16: CompileTimeError # Issue 31537
-compile_time_constant_static5_test/21: CompileTimeError # Issue 31537
-compile_time_constant_static5_test/23: CompileTimeError # Issue 31402
-config_import_corelib_test: CompileTimeError # Issue 34047
-conflicting_generic_interfaces_hierarchy_loop_infinite_test: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-conflicting_generic_interfaces_hierarchy_loop_test: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-const_counter_test/01: Crash # Error recovery in method body (use of non-const closure in a const context)
-const_native_factory_test: Crash # Issue #34043 - Error recovery in outline (native const factory)
-constructor9_test/01: MissingCompileTimeError
-constructor_name_test/02: Crash # Issue #34043 - Error recovery in outline (illegal constructor name)
-constructor_named_arguments_test/01: Crash # Error recovery in method body (argument mismatch in constructor redirect)
-constructor_redirect2_test/04: Crash # Issue 33686 - No core library found
-constructor_redirect_test/01: Crash # Error recovery in method body (reference to non-static method in constructor initializer)
-covariant_override_test: Crash # Improper handling of correct code - override fails to appear in kernel representation
-covariant_subtyping_test: Crash # Improper handling of correct code - problem with function-typed parameters in a generic class
-crash_6725_test/01: Crash # Error recovery in method body (mishandling of improper for-in variable)
-cyclic_class_member_test/01: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-deep_nesting_statement_test/01: Crash # Error recovery in method body (deep nesting causes method to disappear)
-deferred_load_library_wrong_args_test/01: CompileTimeError # Issue 34047
-duplicate_constructor_test/01: Crash # Issue 33686 - No core library found
-duplicate_field_with_initializer_test/01: Crash # Issue 33686 - No core library found
-dynamic_prefix_core_test/none: CompileTimeError # Issue 34047
-emit_const_fields_test: CompileTimeError # Issue 34047
-enum_syntax_test/02: Crash # Issue #34043 - Error recovery in outline (duplicate enum name)
-enum_syntax_test/03: Crash # Issue #34043 - Error recovery in outline (enum name collision)
-enum_syntax_test/04: Crash # Issue #34043 - Error recovery in outline (enum name collision)
-enum_syntax_test/05: Crash # Issue #34043 - Error recovery in outline (enum name collision)
-enum_syntax_test/06: Crash # Issue #34043 - Error recovery in outline (enum name collision)
-enum_syntax_test/09: Crash # Issue 33686 - No core library found
-enum_syntax_test/10: Crash # Issue 33686 - No core library found
-enum_syntax_test/11: Crash # Issue 33686 - No core library found
-enum_syntax_test/30: Crash # Error recovery in method body (attempt to instantiate an enum)
-export_ambiguous_main_test: MissingCompileTimeError
-external_test/21: CompileTimeError # Issue 34047
-external_test/24: CompileTimeError # Issue 34047
-factory2_test/01: Crash # Issue #34043 - Error recovery in outline (illegal constructor name)
-factory_test/00: Crash # Issue #34043 - Error recovery in outline (illegal constructor name)
-factory_with_type_parameters_test/03: Crash # Issue 33686 - No core library found
-factory_with_type_parameters_test/04: Crash # Issue 33686 - No core library found
-field1_test: Crash # Issue 33686 - No core library found
-field2_test: Crash # Issue 33686 - No core library found
-field3_test/01: MissingCompileTimeError
-field3_test/02: MissingCompileTimeError
-field4_test: Crash # Issue 33686 - No core library found
-field5_test: Crash # Issue 33686 - No core library found
-field6_test/00: Crash # Issue 33686 - No core library found
-field6_test/01: Crash # Issue 33686 - No core library found
-final_syntax_test/01: MissingCompileTimeError
-final_syntax_test/02: MissingCompileTimeError
-final_syntax_test/03: MissingCompileTimeError
-final_syntax_test/04: MissingCompileTimeError
-function_type_parameter2_negative_test: Crash # Error recovery in method body (use of non-const closure in a const context)
-function_type_parameter_negative_test: Crash # Error recovery in method body (use of non-const closure in a const context)
-generic_function_typedef2_test/04: Crash # Issue #34043 - Error recovery in outline (attempt to apply type arguments to a non-generic type)
-generic_local_functions_test: Crash # Problem with generic function-typed parameter
-generic_methods_generic_function_parameter_test: Crash # Problem with generic function-typed parameter
-generic_methods_generic_function_result_test/01: MissingCompileTimeError
-generic_no_such_method_dispatcher_simple_test: CompileTimeError # Issue 34047
-generic_no_such_method_dispatcher_test: CompileTimeError # Issue 34047
-generic_tearoff_test: Crash # Problem with generic function-typed parameter
-generic_test/01: MissingCompileTimeError
-get_set_syntax_test/02: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/03: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/06: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/07: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/10: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/11: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/14: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-get_set_syntax_test/15: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-getters_setters2_test/01: MissingStaticWarning
-getters_setters_type_test/01: MissingStaticWarning
-hidden_import_test/01: MissingStaticWarning
-hidden_import_test/02: MissingStaticWarning
-illegal_initializer_test/02: Crash # Issue #33771 - Error recovery in method body (error in constructor initializer)
-illegal_initializer_test/04: Crash # Issue #33771 - Error recovery in method body (error in constructor initializer)
-implements_futureor_test/01: Crash
-import_nonexisting_dart_uri_test/01: Crash # Issue 33686 - No core library found
-instantiate_tearoff_of_call_test: CompileTimeError # Front end fails to instantiate tear-offs of `call`
-instantiate_type_variable_test/01: Crash # Error recovery in method body (attempt to instantiate type variable)
-interface_cycle_test/01: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-interface_cycle_test/02: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-interface_injection1_test/1: Crash # Issue 33686 - No core library found
-interface_injection2_test/1: Crash # Issue 33686 - No core library found
-internal_library_test/02: Crash # Issue #34043 - Error recovery in outline (illegal part file)
-is_not_class2_test/01: Crash # Error recovery in method body (non-type where type expected)
-issue31596_super_test/01: CompileTimeError # Front end fails to skip forwarding stubs when resolving super calls
-issue31596_super_test/03: CompileTimeError # Front end fails to skip forwarding stubs when resolving super calls
-label5_test/01: Crash # Error recovery in method body (illegal jump target)
-label6_test/03: Crash # Error recovery in method body (illegal jump target)
-library_test/01: Crash # Issue 33686 - No core library found
-list_literal_negative_test: Crash # Error recovery in method body (malformed constructor invocation)
-list_literal_syntax_test/06: Crash
-main_not_a_function_test: Crash # Issue 33686 - No core library found
-metadata_test: Crash # Poor handling of annotation inside typedef
-missing_part_of_tag_test/01: Crash # Issue #34043 - Error recovery in outline (part file missing "part of" declaration - see also #33587)
-mixin_cyclic_test/01: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_cyclic_test/02: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_cycles_test/01: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_cycles_test/02: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_cycles_test/03: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_cycles_test/04: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_cycles_test/05: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_cycles_test/06: Crash # Issue #34043 - Error recovery in outline (class hierarchy cycle - see also #33756)
-mixin_illegal_super_use_test/01: MissingCompileTimeError
-mixin_illegal_super_use_test/04: MissingCompileTimeError
-mixin_illegal_super_use_test/07: MissingCompileTimeError
-mixin_illegal_super_use_test/10: MissingCompileTimeError
-mixin_illegal_super_use_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/01: MissingCompileTimeError
-mixin_illegal_superclass_test/02: MissingCompileTimeError
-mixin_illegal_superclass_test/03: MissingCompileTimeError
-mixin_illegal_superclass_test/04: MissingCompileTimeError
-mixin_illegal_superclass_test/05: MissingCompileTimeError
-mixin_illegal_superclass_test/06: MissingCompileTimeError
-mixin_illegal_superclass_test/07: MissingCompileTimeError
-mixin_illegal_superclass_test/08: MissingCompileTimeError
-mixin_illegal_superclass_test/09: MissingCompileTimeError
-mixin_illegal_superclass_test/10: MissingCompileTimeError
-mixin_illegal_superclass_test/11: MissingCompileTimeError
-mixin_illegal_superclass_test/12: MissingCompileTimeError
-mixin_illegal_superclass_test/13: MissingCompileTimeError
-mixin_illegal_superclass_test/14: MissingCompileTimeError
-mixin_illegal_superclass_test/15: MissingCompileTimeError
-mixin_illegal_superclass_test/16: MissingCompileTimeError
-mixin_illegal_superclass_test/17: MissingCompileTimeError
-mixin_illegal_superclass_test/18: MissingCompileTimeError
-mixin_illegal_superclass_test/19: MissingCompileTimeError
-mixin_illegal_superclass_test/20: MissingCompileTimeError
-mixin_illegal_superclass_test/21: MissingCompileTimeError
-mixin_illegal_superclass_test/22: MissingCompileTimeError
-mixin_illegal_superclass_test/23: MissingCompileTimeError
-mixin_illegal_superclass_test/24: MissingCompileTimeError
-mixin_illegal_superclass_test/25: MissingCompileTimeError
-mixin_illegal_superclass_test/26: MissingCompileTimeError
-mixin_illegal_superclass_test/27: MissingCompileTimeError
-mixin_illegal_superclass_test/28: MissingCompileTimeError
-mixin_illegal_superclass_test/29: MissingCompileTimeError
-mixin_illegal_superclass_test/30: MissingCompileTimeError
-mixin_illegal_syntax_test/01: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/02: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/03: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/04: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/05: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/06: Crash # Issue #34043 - Error recovery in outline (syntax error in class declaration)
-mixin_illegal_syntax_test/07: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/08: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/09: Crash # Issue 33686 - No core library found
-mixin_illegal_syntax_test/10: Crash # Issue #34043 - Error recovery in outline (syntax error in class declaration)
-mixin_illegal_syntax_test/11: Crash # Issue #34043 - Error recovery in outline (syntax error in class declaration)
-mixin_illegal_syntax_test/12: Crash # Issue #34043 - Error recovery in outline (syntax error in class declaration)
-mixin_illegal_syntax_test/14: Crash # Issue #34043 - Error recovery in outline (syntax error in class declaration)
-mixin_supertype_subclass2_test/02: MissingStaticWarning
-mixin_supertype_subclass2_test/05: MissingStaticWarning
-mixin_supertype_subclass3_test/02: MissingStaticWarning
-mixin_supertype_subclass3_test/05: MissingStaticWarning
-mixin_supertype_subclass4_test/01: MissingStaticWarning
-mixin_supertype_subclass4_test/02: MissingStaticWarning
-mixin_supertype_subclass4_test/03: MissingStaticWarning
-mixin_supertype_subclass4_test/04: MissingStaticWarning
-mixin_supertype_subclass4_test/05: MissingStaticWarning
-named_constructor_test/07: Crash # Error recovery in method body (type arguments in non-grammatical location)
-named_constructor_test/10: Crash # Error recovery in method body (type arguments in non-grammatical location)
-named_parameters_aggregated_test/03: Crash # Error recovery in method body (default value in function-typed parameter declaration)
-nested_generic_closure_test: Crash # Problem with generic function-typed parameter
-new_expression_type_args_test/00: Crash # Error recovery in method body (attempt to instantiate type variable)
-new_expression_type_args_test/01: Crash # Error recovery in method body (attempt to instantiate type variable)
-no_main_test/01: MissingStaticWarning
-not_enough_positional_arguments_test/01: Crash # Error recovery in method body (error in super constructor call)
-not_enough_positional_arguments_test/02: Crash # Error recovery in method body (error in super constructor call)
-not_enough_positional_arguments_test/05: Crash # Error recovery in method body (error in super constructor call)
-null_no_such_method_test: CompileTimeError # Issue 34047
-operator2_negative_test: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-parameter_default_test/01: Crash # Issue #34043 - Error recovery in outline (default value in required parameter)
-parameter_default_test/02: Crash # Issue #34043 - Error recovery in outline (default value in required parameter)
-parameter_default_test/03: Crash # Issue #34043 - Error recovery in outline (default value in required parameter)
-parameter_default_test/04: Crash # Issue #34043 - Error recovery in outline (default value in required parameter)
-parameter_default_test/05: Crash # Issue #34043 - Error recovery in outline (default value in required parameter)
-parameter_default_test/06: Crash # Issue #34043 - Error recovery in outline (default value in required parameter)
-parameter_metadata_test/02: Crash # Poor handling of annotation inside function-typed parameter
-parameter_metadata_test/03: Crash # Poor handling of annotation inside function-typed parameter
-parameter_metadata_test/04: Crash # Poor handling of annotation inside function-typed parameter
-parser_quirks_test: CompileTimeError # Issue 34047
-part_of_multiple_libs_test/01: Crash # Poor handling of part file used by multiple libs
-part_refers_to_core_library_test/01: Crash # Issue 33686 - No core library found
-prefix_shadow_test/01: Crash # Error recovery in method body (attempt to use type variable as prefix)
-prefix_variable_collision_test/01: Crash # Issue 33686 - No core library found
-regress_20394_test/01: Crash # Error recovery in method body (error in super constructor call)
-regress_23408_test: CompileTimeError # Issue 34047
-regress_27617_test/1: Crash # The analyzer doesn't report this error.
-regress_28217_test/01: Crash # Error recovery in method body (error in constructor redirect)
-regress_28217_test/none: Crash # Error recovery in method body (error in constructor redirect)
-regress_29025_test: CompileTimeError # Issue 34047
-regress_29405_test: CompileTimeError # Issue 34047
-regress_30339_test: CompileTimeError # Issue 34047
-regress_33235_04_test/01: Crash # Issue 33686 - No core library found
-regress_33235_05_test/01: Crash # Issue 33686 - No core library found
-regress_33235_06_test/01: Crash # Issue 33686 - No core library found
-regress_33235_08_test/01: Crash # Issue 33686 - No core library found
-regress_33235_09_test/01: Crash # Issue 33686 - No core library found
-regress_33235_14_test/01: Crash # Issue 33686 - No core library found
-regress_33235_15_test/01: Crash # Issue 33686 - No core library found
-script1_negative_test: Crash # Error resovery in outline (imported library has incorrect declaration order)
-script2_negative_test: Crash # Error resovery in outline (part file contains a "library" declaration)
-setter3_test/01: MissingStaticWarning
-setter3_test/02: MissingStaticWarning
-setter_declaration2_negative_test: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-setter_declaration_negative_test: Crash # Issue #34043 - Error recovery in outline (setter with wrong number of parameters - see also #33691)
-setter_no_getter_call_test/01: Crash # Error recovery in method body (attempt to read from setter)
-setter_no_getter_test/01: CompileTimeError # Issue 34047
-static_setter_conflicts_test/09: Crash # Issue 33686 - No core library found
-static_setter_conflicts_test/10: Crash # Issue 33686 - No core library found
-static_setter_get_test/01: Crash # Error recovery in method body (attempt to read from setter)
-string_split_test: CompileTimeError # Issue 34047
-string_supertype_checked_test: CompileTimeError # Issue 34047
-super_bound_closure_test/none: CompileTimeError # Issue 34047
-super_conditional_operator_test/01: Crash # Error recovery in method body (error in constructor redirect)
-super_no_such_method1_test: CompileTimeError # Issue 34047
-super_no_such_method2_test: CompileTimeError # Issue 34047
-super_no_such_method3_test: CompileTimeError # Issue 34047
-super_operator_index5_test: CompileTimeError # Issue 34047
-super_operator_index6_test: CompileTimeError # Issue 34047
-super_operator_index7_test: CompileTimeError # Issue 34047
-super_operator_index8_test: CompileTimeError # Issue 34047
-switch3_negative_test: Crash # Error recovery in method body (illegal jump target)
-switch5_negative_test: Crash # Error recovery in method body (illegal jump target)
-switch7_negative_test: Crash # Error recovery in method body (illegal jump target)
-switch_case_warn_test/15: MissingCompileTimeError
-switch_case_warn_test/17: MissingCompileTimeError
-syntax_test/04: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/05: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/06: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/07: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/08: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/09: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/10: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/11: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/13: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/14: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/15: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/16: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/17: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/18: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/19: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/20: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/21: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/23: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/24: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/25: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-syntax_test/26: Crash # Issue #34043 - Error recovery in outline (illegal operator declaration)
-this_conditional_operator_test/01: Crash # Error recovery in method body (error in constructor redirect)
-this_in_initializer_test/06: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/07: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/08: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/10: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/11: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/12: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/13: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/15: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/16: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/17: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/18: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/25: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/26: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/28: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/35: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/36: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/38: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/40: Crash # Error recovery in method body (error in constructor initializer)
-this_in_initializer_test/41: Crash # Error recovery in method body (error in constructor initializer)
-this_test/01: Crash # Error recovery in method body (nonsensical use of this)
-this_test/02: Crash # Error recovery in method body (nonsensical use of this)
-this_test/03: Crash # Error recovery in method body (nonsensical use of this)
-this_test/04: Crash # Error recovery in method body (nonsensical use of this)
-this_test/05: Crash # Error recovery in method body (nonsensical use of this)
-this_test/06: Crash # Error recovery in method body (nonsensical use of this)
-this_test/07: Crash # Error recovery in method body (nonsensical use of this)
-this_test/08: Crash # Error recovery in method body (nonsensical use of this)
-toplevel_collision1_test/00: Crash # Issue 33686 - No core library found
-toplevel_collision1_test/02: Crash # Issue 33686 - No core library found
-toplevel_collision2_test/00: Crash # Issue 33686 - No core library found
-toplevel_collision2_test/01: Crash # Issue 33686 - No core library found
-type_parameter_test/04: Crash # Issue #34043 - Error recovery in outline (attempt to use class type parameter in static signature)
-type_parameter_test/05: Crash # Issue #34043 - Error recovery in outline (attempt to use class type parameter in static signature)
-type_parameter_test/06: Crash # Issue #34043 - Error recovery in outline (attempt to use class type parameter in static signature)
-type_parameter_test/08: Crash # Issue #34043 - Error recovery in outline (attempt to use class type parameter in static signature)
-type_parameter_test/09: Crash # Issue #34043 - Error recovery in outline (attempt to use class type parameter in static signature)
-type_promotion_functions_test/02: CompileTimeError # Issue 34047
-type_promotion_functions_test/03: CompileTimeError # Issue 34047
-type_promotion_functions_test/04: CompileTimeError # Issue 34047
-type_promotion_functions_test/09: CompileTimeError # Issue 34047
-type_promotion_functions_test/11: CompileTimeError # Issue 34047
-type_promotion_functions_test/12: CompileTimeError # Issue 34047
-type_promotion_functions_test/13: CompileTimeError # Issue 34047
-type_promotion_functions_test/14: CompileTimeError # Issue 34047
-type_promotion_functions_test/none: CompileTimeError # Issue 34047
-type_promotion_more_specific_test/04: CompileTimeError # Issue 34047
-type_variable_static_context_test: Crash # Error recovery in method body (attempt to instantiate type variable)
-unbalanced_brace_test/01: Crash # Error recovery due to mismatched braces
-unbalanced_brace_test/02: Crash # Error recovery due to mismatched braces
-unsupported_operators_test/01: Crash # Error recovery in method body (attempt to use unsupported operator)
-unsupported_operators_test/02: Crash # Error recovery in method body (attempt to use unsupported operator)
-unsupported_operators_test/03: Crash # Error recovery in method body (attempt to use unsupported operator)
-unsupported_operators_test/04: Crash # Error recovery in method body (attempt to use unsupported operator)
-variable_declaration_metadata_test/13: Crash # Error recovery in method body (annotation in for statement)
-variable_declaration_metadata_test/14: Crash # Error recovery in method body (annotation in for statement)
-variable_declaration_metadata_test/15: Crash # Error recovery in method body (annotation in for statement)
-variable_declaration_metadata_test/16: Crash # Error recovery in method body (annotation in for statement)
-variable_shadow_class_test/01: Crash # Error recovery in method body (attempt to use local variable as prefix)
-vm/debug_break_vm_test/01: Crash # Error recovery in method body (illegal jump target)
-vm/debug_break_vm_test/02: Crash # Error recovery in method body (illegal jump target)
-vm/regress_27201_test: Crash # Issue 33686 - No core library found
-vm/regress_33469_test/01: Crash # Const evaluator fails to detect invalid shift
-vm/regress_33469_test/02: Crash # Const evaluator fails to detect invalid shift
-vm/regress_33469_test/03: MissingCompileTimeError
-web_int_literals_test/01: MissingCompileTimeError
-web_int_literals_test/02: MissingCompileTimeError
-web_int_literals_test/03: MissingCompileTimeError
-web_int_literals_test/10: MissingCompileTimeError
-web_int_literals_test/11: MissingCompileTimeError
-web_int_literals_test/12: MissingCompileTimeError
-web_int_literals_test/13: MissingCompileTimeError
-web_int_literals_test/20: MissingCompileTimeError
-web_int_literals_test/21: MissingCompileTimeError
-web_int_literals_test/22: MissingCompileTimeError
-web_int_literals_test/23: MissingCompileTimeError
-web_int_literals_test/24: MissingCompileTimeError
-web_int_literals_test/25: MissingCompileTimeError
-web_int_literals_test/26: MissingCompileTimeError
-web_int_literals_test/27: MissingCompileTimeError
-web_int_literals_test/28: MissingCompileTimeError
-web_int_literals_test/29: MissingCompileTimeError
-web_int_literals_test/61: MissingCompileTimeError
-web_int_literals_test/62: MissingCompileTimeError
-web_int_literals_test/63: MissingCompileTimeError
-web_int_literals_test/64: MissingCompileTimeError
-web_int_literals_test/65: MissingCompileTimeError
-web_int_literals_test/70: MissingCompileTimeError
-
-[ $compiler == dart2analyzer && !$fasta ]
 abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue #30568
 abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError # Issue #30568
 abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError # Issue #30568
@@ -406,27 +17,17 @@
 additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
 built_in_identifier_prefix_test: CompileTimeError
 cascaded_forwarding_stubs_test: CompileTimeError
-check_member_static_test/01: CompileTimeError
 config_import_corelib_test: CompileTimeError
 config_import_corelib_test: StaticWarning, OK
 conflicting_generic_interfaces_hierarchy_loop_infinite_test: Skip # Crashes or times out
 const_cast2_test/01: CompileTimeError
 const_cast2_test/none: CompileTimeError
-constructor9_test/01: MissingCompileTimeError # CFE Issue 33022
+constructor_reference_test/27: MissingCompileTimeError # Issue 34270
 default_implementation2_test: CompileTimeError # Issue 30855
 dynamic_prefix_core_test/01: MissingCompileTimeError
 emit_const_fields_test: CompileTimeError
 enum_syntax_test/05: Fail # Issue 21649
 enum_syntax_test/06: Fail # Issue 21649
-error_stacktrace_test/00: MissingCompileTimeError
-error_stacktrace_test/00: Pass
-field3_test/01: MissingCompileTimeError # CFE Issue 33022
-field3_test/02: MissingCompileTimeError # CFE Issue 33022
-field3a_negative_test: StaticWarning # Issue 28823
-final_syntax_test/01: Fail # Issue 11124
-final_syntax_test/02: Fail # Issue 11124
-final_syntax_test/03: Fail # Issue 11124
-final_syntax_test/04: Fail # Issue 11124
 forwarding_stub_tearoff_test: CompileTimeError
 generic_local_functions_test: CompileTimeError # Issue 28515
 generic_methods_generic_function_parameter_test: CompileTimeError # Issue 28515
@@ -435,15 +36,30 @@
 generic_no_such_method_dispatcher_test: CompileTimeError
 generic_tearoff_test: CompileTimeError
 getter_setter_in_lib_test: Fail # Issue 23286
+getters_setters2_test/01: CompileTimeError
+getters_setters_type_test/01: CompileTimeError
+hidden_import_test/01: MissingStaticWarning # Issue #34302
+hidden_import_test/02: MissingStaticWarning # Issue #34302
 implements_futureor_test/01: MissingCompileTimeError
 implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
 implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
 implicit_creation/implicit_const_context_prefix_constructor_generic_named_test: CompileTimeError
 implicit_creation/implicit_const_context_prefix_constructor_generic_test: CompileTimeError
-index_assign_operator_infer_return_type_test: StaticWarning
+index_assign_operator_infer_return_type_test: CompileTimeError
 initializing_formal_final_test: MissingCompileTimeError
 interceptor6_test: CompileTimeError
 interface_test/00: MissingCompileTimeError
+invalid_returns/async_invalid_return_00_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_01_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_02_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_03_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_04_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_00_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_01_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_02_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_03_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_04_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_05_test/none: CompileTimeError # issue #34319
 issue13673_test: StaticWarning # Issue 31925
 issue31596_implement_covariant_test: CompileTimeError
 issue31596_override_test/01: CompileTimeError
@@ -462,6 +78,7 @@
 mixin_forwarding_constructor4_test/01: CompileTimeError # See issue 15101
 mixin_forwarding_constructor4_test/02: CompileTimeError # See issue 15101
 mixin_forwarding_constructor4_test/03: CompileTimeError # See issue 15101
+mixin_method_override_test/01: MissingCompileTimeError
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
 mixin_super_constructor_named_test/01: CompileTimeError # See issue 15101
@@ -479,20 +96,12 @@
 mixin_supertype_subclass_test/02: MissingStaticWarning # Issue 25614
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 mixin_supertype_subclass_test/05: MissingStaticWarning # Issue 25614
-multiline_newline_test/01: CompileTimeError
-multiline_newline_test/01r: CompileTimeError
-multiline_newline_test/02: CompileTimeError
-multiline_newline_test/02r: CompileTimeError
-multiline_newline_test/04: MissingCompileTimeError
-multiline_newline_test/04r: MissingCompileTimeError
-multiline_newline_test/05: MissingCompileTimeError
-multiline_newline_test/05r: MissingCompileTimeError
+mock_writable_final_private_field_test: CompileTimeError # Issue 30848
 multiple_interface_inheritance_test: CompileTimeError # Issue 30552
 nested_generic_closure_test: CompileTimeError
 no_main_test/01: Fail # Issue 20030
 no_main_test/01: MissingStaticWarning # Issue 28823
 no_such_constructor2_test: StaticWarning
-override_field_test/02: CompileTimeError
 override_inheritance_field_test/42: CompileTimeError
 parser_quirks_test: CompileTimeError
 part_of_multiple_libs_test/01: MissingCompileTimeError # Issue 33227
@@ -504,11 +113,12 @@
 regress_23408_test: Skip # don't care about the static warning.
 regress_27617_test/1: MissingCompileTimeError
 regress_29025_test: CompileTimeError # Issue 29081
-regress_29349_test: CompileTimeError # Issue 29744
 regress_29405_test: CompileTimeError # Issue 29421
 regress_29784_test/02: MissingCompileTimeError # Issue 29784
 regress_30121_test: CompileTimeError # Issue 31087
 regress_30339_test: CompileTimeError
+regress_32660_test/01: MissingCompileTimeError # Issue #32660.
+regress_32660_test/04: CompileTimeError
 regress_33235_03_test/01: MissingCompileTimeError
 regress_33235_07_test/03: MissingCompileTimeError
 regress_33235_10_test/01: MissingCompileTimeError
@@ -521,6 +131,8 @@
 regress_33235_16_test/03: MissingCompileTimeError
 regress_33235_19_test: CompileTimeError
 regress_33235_20_test: CompileTimeError
+setter3_test/01: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
+setter3_test/02: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
 static_setter_conflicts_test/02: MissingCompileTimeError
 static_setter_conflicts_test/11: MissingCompileTimeError
@@ -531,30 +143,31 @@
 super_call4_test/01: MissingCompileTimeError
 super_no_such_method4_test/01: MissingCompileTimeError # Issue 33553
 super_no_such_method5_test/01: MissingCompileTimeError # Issue 33553
-super_setter_test: StaticWarning # Issue 28823
+super_setter_test: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 switch_case_test/none: CompileTimeError
 syntax_test/60: MissingCompileTimeError
 syntax_test/61: MissingCompileTimeError
 try_catch_on_syntax_test/10: MissingCompileTimeError
 try_catch_on_syntax_test/11: MissingCompileTimeError
 type_inference_inconsistent_inheritance_test: MissingCompileTimeError
-type_promotion_functions_test/01: Pass
-type_promotion_functions_test/05: Pass
-type_promotion_functions_test/06: Pass
-type_promotion_functions_test/07: Pass
-type_promotion_functions_test/08: Pass
-type_promotion_functions_test/10: Pass
+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_variable_scope_test/none: Fail # Issue 11578
+type_variable_static_context_negative_test: Fail # Issue 12161
 vm/debug_break_enabled_vm_test: Skip
 vm/debug_break_vm_test/*: Skip
-vm/lazy_deopt_with_exception_test: CompileTimeError
-vm/lazy_deopt_with_exception_test: Pass
+vm/reflect_core_vm_test: CompileTimeError # Issue 33994
 vm/regress_27201_test: SkipByDesign # Loads bad library, so will always crash.
-vm/regress_33469_test/01: Crash # http://dartbug.com/33481
-vm/regress_33469_test/02: Crash # http://dartbug.com/33481
-vm/regress_33469_test/03: MissingCompileTimeError # http://dartbug.com/33481
-void/generalized_void_syntax_test: CompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_function_types_test/none: CompileTimeError # Issue 30177
+void/return_future_future_or_void_async_error1_test/none: CompileTimeError # issue #34319
+void/return_future_or_future_or_void_sync_error2_test/none: CompileTimeError # issue #34319
+void/return_future_or_void_sync_error4_test/none: CompileTimeError # issue #34319
 void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index ab0f9c8..25b6963 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -67,6 +67,7 @@
 mixin_type_parameter_inference_test/16: CompileTimeError
 mixin_type_parameter_inference_test/none: CompileTimeError
 number_identity_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+partial_instantiation_eager_bounds_check_test: RuntimeError # Issue #34295
 partial_tearoff_instantiation_test/05: Pass # for the wrong reason.
 partial_tearoff_instantiation_test/06: Pass # for the wrong reason.
 partial_tearoff_instantiation_test/07: Pass # for the wrong reason.
@@ -218,7 +219,6 @@
 const_init2_test/02: MissingCompileTimeError
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
-const_switch2_test/01: MissingCompileTimeError
 const_switch_test/02: RuntimeError, OK # constant identity based on JS constants
 const_switch_test/04: RuntimeError, OK # constant identity based on JS constants
 const_types_test/01: MissingCompileTimeError
@@ -468,8 +468,6 @@
 type_literal_prefix_call_test/00: MissingCompileTimeError
 type_promotion_logical_and_test/01: MissingCompileTimeError
 type_variable_bounds_test/02: Crash # NoSuchMethodError: The method 'accept' was called on null.
-wrong_number_type_arguments_test/01: MissingCompileTimeError
-wrong_number_type_arguments_test/none: Pass
 
 [ $compiler == dart2js && $minified ]
 cyclic_type2_test: RuntimeError # Issue 31054
@@ -529,8 +527,6 @@
 type_literal_prefix_call_test/00: MissingCompileTimeError
 type_promotion_logical_and_test/01: MissingCompileTimeError
 type_variable_bounds_test/02: Crash # NoSuchMethodError: The method 'accept' was called on null.
-wrong_number_type_arguments_test/01: MissingCompileTimeError
-wrong_number_type_arguments_test/none: Pass
 
 [ $compiler == dart2js && $strong ]
 async_await_test/02: RuntimeError
@@ -540,6 +536,7 @@
 bit_operations_test: RuntimeError
 branch_canonicalization_test: RuntimeError
 canonical_const2_test: RuntimeError, OK # non JS number semantics
+closure_type_arguments_test: Crash # Issue 34272
 compile_time_constant_o_test/01: MissingCompileTimeError
 compile_time_constant_o_test/02: MissingCompileTimeError
 compile_time_constant_static5_test/11: CompileTimeError
@@ -555,7 +552,6 @@
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
 const_map4_test: RuntimeError
-const_switch2_test/01: MissingCompileTimeError
 const_switch_test/02: RuntimeError, OK # constant identity based on JS constants
 const_switch_test/04: RuntimeError, OK # constant identity based on JS constants
 constructor12_test: RuntimeError
@@ -655,6 +651,7 @@
 mixin_illegal_superclass_test/28: MissingCompileTimeError
 mixin_illegal_superclass_test/29: MissingCompileTimeError
 mixin_illegal_superclass_test/30: MissingCompileTimeError
+mixin_method_override_test/G5: Skip # Issue 34354
 mixin_of_mixin_test/none: CompileTimeError
 mixin_super_2_test/none: CompileTimeError
 mixin_super_test: CompileTimeError
diff --git a/tests/language_2/language_2_dartdevc.status b/tests/language_2/language_2_dartdevc.status
index 3098bb5..d31e225 100644
--- a/tests/language_2/language_2_dartdevc.status
+++ b/tests/language_2/language_2_dartdevc.status
@@ -29,16 +29,13 @@
 built_in_identifier_type_annotation_test/dynamic-list: RuntimeError # Issue 28816
 cascaded_forwarding_stubs_generic_test: RuntimeError
 cascaded_forwarding_stubs_test: CompileTimeError
-check_member_static_test/01: CompileTimeError
 conflicting_generic_interfaces_hierarchy_loop_infinite_test: Skip # Crashes or times out
 conflicting_generic_interfaces_simple_test: MissingCompileTimeError
 const_cast2_test/01: CompileTimeError
 const_cast2_test/none: CompileTimeError
 const_constructor_mixin3_test/01: MissingCompileTimeError # Issue 33644
 const_constructor_mixin_test/01: MissingCompileTimeError # Issue 33644
-constructor9_test/01: MissingCompileTimeError # CFE Issue 33022
-constructor_type_parameter_test/00: MissingCompileTimeError
-constructor_with_type_parameters_test/03: MissingCompileTimeError
+constructor_reference_test/27: MissingCompileTimeError
 covariance_field_test/03: RuntimeError
 covariant_override/tear_off_type_test: RuntimeError # Issue 28395
 default_implementation2_test: CompileTimeError # Issue 30855
@@ -52,13 +49,7 @@
 expect_test: RuntimeError # Issue 29920
 export_private_test/01: MissingCompileTimeError # Issue 29920
 f_bounded_quantification3_test: RuntimeError # Issue 29920
-field3_test/01: MissingCompileTimeError # CFE Issue 33022
-field3_test/02: MissingCompileTimeError # CFE Issue 33022
 field_wierd_name_test: Crash
-final_syntax_test/01: MissingCompileTimeError
-final_syntax_test/02: MissingCompileTimeError
-final_syntax_test/03: MissingCompileTimeError
-final_syntax_test/04: MissingCompileTimeError
 forwarding_stub_tearoff_generic_test: RuntimeError
 forwarding_stub_tearoff_test: CompileTimeError
 function_propagation_test: RuntimeError
@@ -69,6 +60,8 @@
 generic_no_such_method_dispatcher_test: CompileTimeError
 getter_closure_execution_order_test: RuntimeError # Issue 29920
 getter_setter_in_lib_test: CompileTimeError
+getters_setters2_test/01: CompileTimeError
+getters_setters_type_test/01: CompileTimeError
 implements_futureor_test/01: MissingCompileTimeError
 implicit_creation/implicit_const_context_constructor_generic_named_test: CompileTimeError
 implicit_creation/implicit_const_context_constructor_generic_test: CompileTimeError
@@ -78,11 +71,23 @@
 implicit_downcast_during_indexed_compound_assignment_test: RuntimeError
 implicit_downcast_during_indexed_if_null_assignment_test: RuntimeError
 import_private_test/01: MissingCompileTimeError # Issue 29920
+index_assign_operator_infer_return_type_test: CompileTimeError
 initializing_formal_final_test: MissingCompileTimeError
 instantiate_tearoff_after_contravariance_check_test: RuntimeError
 instantiate_tearoff_of_call_test: RuntimeError
 interface_test/00: MissingCompileTimeError
 internal_library_test/01: MissingCompileTimeError # Issue 29920
+invalid_returns/async_invalid_return_00_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_01_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_02_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_03_test/none: CompileTimeError # issue #34319
+invalid_returns/async_invalid_return_04_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_00_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_01_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_02_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_03_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_04_test/none: CompileTimeError # issue #34319
+invalid_returns/sync_invalid_return_05_test/none: CompileTimeError # issue #34319
 issue31596_implement_covariant_test: CompileTimeError
 issue31596_override_test/01: CompileTimeError
 issue31596_override_test/02: CompileTimeError
@@ -102,6 +107,7 @@
 mixin_forwarding_constructor4_test/01: CompileTimeError # See issue 15101
 mixin_forwarding_constructor4_test/02: CompileTimeError # See issue 15101
 mixin_forwarding_constructor4_test/03: CompileTimeError # See issue 15101
+mixin_method_override_test/01: MissingCompileTimeError # Issue 34235
 mixin_super_2_test/01: MissingCompileTimeError
 mixin_super_2_test/03: MissingCompileTimeError
 mixin_super_constructor_named_test/01: CompileTimeError # See issue 15101
@@ -122,16 +128,8 @@
 mixin_type_parameter_inference_test/08: RuntimeError
 mixin_type_parameter_inference_test/09: RuntimeError
 mock_writable_final_private_field_test: CompileTimeError # Issue 30848
-multiline_newline_test/01: CompileTimeError
-multiline_newline_test/01r: CompileTimeError
-multiline_newline_test/02: CompileTimeError
-multiline_newline_test/02r: CompileTimeError
-multiline_newline_test/03: RuntimeError
-multiline_newline_test/03r: RuntimeError
-multiline_newline_test/none: RuntimeError
 multiple_interface_inheritance_test: CompileTimeError # Issue 30552
 nested_generic_closure_test: CompileTimeError
-override_field_test/02: CompileTimeError
 override_inheritance_field_test/42: CompileTimeError
 part_of_multiple_libs_test/01: MissingCompileTimeError
 part_refers_to_core_library_test/01: Crash
@@ -141,12 +139,13 @@
 regress_24283_test: RuntimeError # Intended to fail, requires 64-bit numbers.
 regress_27617_test/1: MissingCompileTimeError
 regress_29025_test: CompileTimeError # Issue 29081
-regress_29349_test: CompileTimeError # Issue 31093
 regress_29405_test: CompileTimeError # Issue 29421
-regress_29784_test/02: MissingCompileTimeError
 regress_29784_test/02: Crash # assert initializers not implemented
+regress_29784_test/02: MissingCompileTimeError
 regress_30121_test: CompileTimeError # Issue 31087
 regress_30339_test: CompileTimeError # As expected. Should we make this a multi test?
+regress_32660_test/01: MissingCompileTimeError # Issue #32660.
+regress_32660_test/04: CompileTimeError
 regress_33235_03_test/01: MissingCompileTimeError
 regress_33235_07_test/03: MissingCompileTimeError
 regress_33235_10_test/01: MissingCompileTimeError
@@ -159,6 +158,8 @@
 regress_33235_16_test/03: MissingCompileTimeError
 regress_33235_19_test: CompileTimeError
 regress_33235_20_test: CompileTimeError
+setter3_test/01: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
+setter3_test/02: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 setter_override2_test/02: MissingCompileTimeError # Issue 14736
 stacktrace_test: RuntimeError # Issue 29920
 static_setter_conflicts_test/02: MissingCompileTimeError
@@ -173,6 +174,7 @@
 super_operator_index5_test: RuntimeError # 33470
 super_operator_index7_test: RuntimeError # 33470
 super_operator_index8_test: RuntimeError # 33470
+super_setter_test: CompileTimeError # Invalid test, see https://github.com/dart-lang/sdk/issues/33837
 switch_case_test/none: CompileTimeError
 syntax_test/60: MissingCompileTimeError
 syntax_test/61: MissingCompileTimeError
@@ -195,8 +197,9 @@
 type_promotion_functions_test/14: CompileTimeError # Issue 30895
 type_promotion_functions_test/none: CompileTimeError # Issue 30895
 type_variable_scope_test/none: CompileTimeError
-void/generalized_void_syntax_test: CompileTimeError # https://github.com/dart-lang/sdk/issues/30177
-void/void_type_function_types_test/none: CompileTimeError # Issue 30177
+void/return_future_future_or_void_async_error1_test/none: CompileTimeError # issue #34319
+void/return_future_or_future_or_void_sync_error2_test/none: CompileTimeError # issue #34319
+void/return_future_or_void_sync_error4_test/none: CompileTimeError # issue #34319
 void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
 void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError # https://github.com/dart-lang/sdk/issues/30177
@@ -236,8 +239,6 @@
 call_method_implicit_tear_off_implements_function_test/06: RuntimeError # Kernel is missing the implicit `call` tearoff for assignment `Function`
 call_method_must_not_be_field_test/06: RuntimeError # Kernel does not distinguish `d()` from `d.call()`
 call_method_must_not_be_getter_test/06: RuntimeError # Kernel does not distinguish `d()` from `d.call()`
-call_non_method_field_test/01: MissingCompileTimeError
-call_non_method_field_test/02: MissingCompileTimeError
 compile_time_constant_c_test/02: MissingCompileTimeError
 compile_time_constant_k_test/01: MissingCompileTimeError
 compile_time_constant_k_test/02: MissingCompileTimeError
@@ -263,7 +264,6 @@
 const_map2_test/00: MissingCompileTimeError
 const_map3_test/00: MissingCompileTimeError
 const_optional_args_test/01: MissingCompileTimeError
-const_switch2_test/01: MissingCompileTimeError
 const_syntax_test/05: MissingCompileTimeError
 constants_test/05: MissingCompileTimeError
 covariant_subtyping_test: RuntimeError
@@ -347,6 +347,10 @@
 mixin_supertype_subclass_test/02: MissingCompileTimeError
 mixin_supertype_subclass_test/05: MissingCompileTimeError
 mock_writable_final_private_field_test: RuntimeError
+multiline_newline_test/04: MissingCompileTimeError
+multiline_newline_test/04r: MissingCompileTimeError
+multiline_newline_test/05: MissingCompileTimeError
+multiline_newline_test/05r: MissingCompileTimeError
 multiline_newline_test/06: MissingCompileTimeError
 multiline_newline_test/06r: MissingCompileTimeError
 no_such_method_mock_test: RuntimeError # Issue 31426 - Kernel does not introduce nSM for implemented fields.
@@ -386,7 +390,6 @@
 type_promotion_functions_test/none: CompileTimeError # Issue 31537
 type_promotion_logical_and_test/01: MissingCompileTimeError
 type_promotion_more_specific_test/04: CompileTimeError # Issue 31533
-wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $compiler == dartdevk && $checked ]
 assertion_initializer_const_error2_test/*: MissingCompileTimeError
@@ -455,8 +458,8 @@
 generic_is_check_test: RuntimeError # Issue 29920; Expect.isTrue(false) fails.
 generic_tearoff_test: CompileTimeError
 guess_cid_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-identical_closure2_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 identical_closure2_test: RuntimeError # Issue 29920; Expect.isFalse(true) fails.
+identical_closure2_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 infinite_switch_label_test: RuntimeError # Issue 29920; NoSuchMethodError: method not found: '<Unexpected Null Value>'
 infinity_test: RuntimeError # Issue 29920; Expect.isFalse(true) fails.
 instance_creation_in_function_annotation_test: RuntimeError # Issue 29920; UnimplementedError: JsClosureMirror.function unimplemented
@@ -482,10 +485,6 @@
 mint_compares_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 mint_identical_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 modulo_test: RuntimeError # Ints and doubles are unified.; Expect.throws fails: Did not throw
-multiline_newline_test/04: MissingCompileTimeError
-multiline_newline_test/04r: MissingCompileTimeError
-multiline_newline_test/05: MissingCompileTimeError
-multiline_newline_test/05r: MissingCompileTimeError
 named_parameters_default_eq_test/none: RuntimeError # Expect.isTrue(false) fails.
 nan_identical_test: RuntimeError # Issue 29920; Unsupported operation: Uint64 accessor not supported by dart2js.
 nested_switch_label_test: RuntimeError # Issue 29920; UnimplementedError: node <ShadowContinueSwitchStatement> see https://github.com/dart-lang/sdk/issues/29352 `continue #L1;
@@ -494,6 +493,7 @@
 number_identity_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 numbers_test: RuntimeError # Issue 29920; Expect.equals(expected: <false>, actual: <true>) fails.
 parser_quirks_test: CompileTimeError
+partial_instantiation_eager_bounds_check_test: RuntimeError # Issue 34296
 regress_16640_test: RuntimeError # Issue 29920; Uncaught Error: type arguments should not be null: E => {
 regress_22443_test: RuntimeError # Uncaught Expect.isTrue(false) fails.
 stack_overflow_stacktrace_test: RuntimeError # Issue 29920; RangeError: Maximum call stack size exceeded
diff --git a/tests/language_2/language_2_kernel.status b/tests/language_2/language_2_kernel.status
index 76a6c49..818a556 100644
--- a/tests/language_2/language_2_kernel.status
+++ b/tests/language_2/language_2_kernel.status
@@ -155,6 +155,9 @@
 vm/type_cast_vm_test: RuntimeError
 web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
 
+[ $compiler == dartdevk ]
+mixin_method_override_test/G5: Skip # Issue 34354
+
 [ $compiler == dartkp ]
 covariant_subtyping_test: RuntimeError
 generic_methods_generic_function_result_test/01: MissingCompileTimeError
@@ -202,24 +205,14 @@
 web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
 
 [ $fasta ]
-abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue 32014.
-abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError # Issue 32014.
-additional_interface_adds_optional_args_concrete_subclass_test: MissingCompileTimeError # Issue 32014.
-additional_interface_adds_optional_args_concrete_test: MissingCompileTimeError # Issue 32014.
 async_return_types_test/nestedFuture: MissingCompileTimeError # Issue 33068
-call_non_method_field_test/01: MissingCompileTimeError # Issue 32975
-call_non_method_field_test/02: MissingCompileTimeError # Issue 32975
 const_cast2_test/01: CompileTimeError # Issue 32517
 const_cast2_test/none: CompileTimeError # Issue 32517
 const_constructor_mixin3_test: CompileTimeError # Issue 33644.
 const_constructor_mixin_test: CompileTimeError # Issue 33644.
-const_instance_field_test/01: MissingCompileTimeError # Fasta bug: Const instance field. Issue 32326.
 const_types_test/34: MissingCompileTimeError # Issue 31590
 const_types_test/39: MissingCompileTimeError # Issue 31590
-cyclic_type_variable_test/01: MissingCompileTimeError # Issue 32989 (missing cycle check in bounds)
-cyclic_type_variable_test/02: MissingCompileTimeError # Issue 32989 (missing cycle check in bounds)
-cyclic_type_variable_test/03: MissingCompileTimeError # Issue 32989 (missing cycle check in bounds)
-cyclic_type_variable_test/04: MissingCompileTimeError # Issue 32989 (missing cycle check in bounds)
+constructor_reference_test/27: MissingCompileTimeError # Issue 32972 (parsed as method call)
 default_factory2_test/01: MissingCompileTimeError # Issue 31590
 default_factory_test/01: MissingCompileTimeError # Issue 31590
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError # Fasta/KernelVM bug: Deferred loading kernel issue 30273.
@@ -273,18 +266,34 @@
 mixin_invalid_bound_test/08: MissingCompileTimeError # Issue 33308
 mixin_invalid_bound_test/09: MissingCompileTimeError # Issue 33308
 mixin_invalid_bound_test/10: MissingCompileTimeError # Issue 33308
+mixin_method_override_test/C1: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/C2: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/C3: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/C4: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/C7: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/C8: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/G2: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/G3: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/G4: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/G5: Crash # Issue 34354
+mixin_method_override_test/N10: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N11: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N12: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N13: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N14: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N3: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N4: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N5: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N6: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/N9: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/O10: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/O13: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/O14: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/O5: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/O6: MissingCompileTimeError # Issue 34235
+mixin_method_override_test/O9: MissingCompileTimeError # Issue 34235
 mixin_super_bound_test/01: MissingCompileTimeError # Issue 33308
 mixin_super_bound_test/02: MissingCompileTimeError # Issue 33308
-mixin_type_parameters_errors_test/03: MissingCompileTimeError # Issue 32972
-mixin_type_parameters_errors_test/04: MissingCompileTimeError # Issue 32972
-named_constructor_test/01: MissingCompileTimeError # Issue 34159
-named_parameters_default_eq_test/02: MissingCompileTimeError # Issue 34160
-partial_tearoff_instantiation_test/05: MissingCompileTimeError # Issue 32281
-partial_tearoff_instantiation_test/06: MissingCompileTimeError # Issue 32281
-partial_tearoff_instantiation_test/07: MissingCompileTimeError # Issue 32281
-partial_tearoff_instantiation_test/08: MissingCompileTimeError # Issue 32281
-redirecting_factory_default_values_test/01: MissingCompileTimeError # Issue 34160
-redirecting_factory_default_values_test/02: MissingCompileTimeError # Issue 34160
 regress_22976_test/*: CompileTimeError # Issue 31935
 syntax_test/28: MissingCompileTimeError # Issue 29763 - low priority
 syntax_test/29: MissingCompileTimeError # Issue 29763 - low priority
@@ -303,7 +312,6 @@
 type_variable_bounds_test/04: MissingCompileTimeError # Issue 33308
 type_variable_bounds_test/05: MissingCompileTimeError # Issue 33308
 type_variable_bounds_test/06: MissingCompileTimeError # Issue 33308
-type_variable_bounds_test/08: MissingCompileTimeError # Issue 33308
 type_variable_bounds_test/11: MissingCompileTimeError # Issue 33308
 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.
@@ -358,333 +366,11 @@
 [ $compiler != dart2analyzer && $fasta ]
 const_map2_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 const_map3_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-const_switch2_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-invalid_returns/async_invalid_return_05_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_06_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_07_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_08_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_09_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_10_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_11_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_12_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_13_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_14_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_15_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_16_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_17_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_18_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_19_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_20_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_21_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_22_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_23_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_24_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_25_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_26_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_27_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_28_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_29_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_30_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_31_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_32_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_33_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_34_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_35_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_36_test: MissingCompileTimeError
-invalid_returns/async_invalid_return_37_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_06_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_07_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_08_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_09_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_10_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_11_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_12_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_13_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_14_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_15_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_16_test: MissingCompileTimeError
-invalid_returns/sync_invalid_return_17_test: MissingCompileTimeError
 switch_bad_case_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 switch_bad_case_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 switch_case_test/00: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 switch_case_test/01: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 switch_case_test/02: MissingCompileTimeError # KernelVM bug: Constant evaluation.
-void/return_future_future_or_void_async_error0_test: MissingCompileTimeError
-void/return_future_future_or_void_sync_error0_test: MissingCompileTimeError
-void/return_future_or_future_or_void_sync_error1_test: MissingCompileTimeError
-void/return_future_or_void_sync_error3_test: MissingCompileTimeError
-void/return_void_async_error0_test: MissingCompileTimeError
-void/return_void_async_error1_test: MissingCompileTimeError
-void/return_void_async_error2_test: MissingCompileTimeError
-void/return_void_async_error4_test: MissingCompileTimeError
-void/return_void_sync_error0_test: MissingCompileTimeError
-void/return_void_sync_error1_test: MissingCompileTimeError
-void/return_void_sync_error2_test: MissingCompileTimeError
-void/void_block_return_test/00: MissingCompileTimeError
-void/void_type_callbacks_test/00: MissingCompileTimeError
-void/void_type_callbacks_test/01: MissingCompileTimeError
-void/void_type_usage_test/async_use_in_await_for: MissingCompileTimeError
-void/void_type_usage_test/async_use_in_yield: MissingCompileTimeError
-void/void_type_usage_test/async_use_in_yield_star: MissingCompileTimeError
-void/void_type_usage_test/call_addition: MissingCompileTimeError
-void/void_type_usage_test/call_argument: MissingCompileTimeError
-void/void_type_usage_test/call_boolean_and_left: MissingCompileTimeError
-void/void_type_usage_test/call_boolean_and_right: MissingCompileTimeError
-void/void_type_usage_test/call_boolean_negation: MissingCompileTimeError
-void/void_type_usage_test/call_boolean_or_left: MissingCompileTimeError
-void/void_type_usage_test/call_boolean_or_right: MissingCompileTimeError
-void/void_type_usage_test/call_cascade: MissingCompileTimeError
-void/void_type_usage_test/call_conditional_stmt: MissingCompileTimeError
-void/void_type_usage_test/call_do_while: MissingCompileTimeError
-void/void_type_usage_test/call_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/call_equals_left: MissingCompileTimeError
-void/void_type_usage_test/call_equals_right: MissingCompileTimeError
-void/void_type_usage_test/call_for_in: MissingCompileTimeError
-void/void_type_usage_test/call_identical: MissingCompileTimeError
-void/void_type_usage_test/call_is: MissingCompileTimeError
-void/void_type_usage_test/call_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/call_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/call_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/call_multiplication: MissingCompileTimeError
-void/void_type_usage_test/call_null_dot: MissingCompileTimeError
-void/void_type_usage_test/call_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/call_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/call_throw: MissingCompileTimeError
-void/void_type_usage_test/call_toString: MissingCompileTimeError
-void/void_type_usage_test/call_use_in_conditional_assignment_right: MissingCompileTimeError
-void/void_type_usage_test/call_use_in_list_subscript: MissingCompileTimeError
-void/void_type_usage_test/call_use_in_map_lookup: MissingCompileTimeError
-void/void_type_usage_test/call_use_in_string_interpolation: MissingCompileTimeError
-void/void_type_usage_test/call_while: MissingCompileTimeError
-void/void_type_usage_test/conditional2_argument: MissingCompileTimeError
-void/void_type_usage_test/conditional2_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/conditional2_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/conditional2_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/conditional2_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/conditional2_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/conditional2_throw: MissingCompileTimeError
-void/void_type_usage_test/conditional2do_while: MissingCompileTimeError
-void/void_type_usage_test/conditional2for_in: MissingCompileTimeError
-void/void_type_usage_test/conditional2while: MissingCompileTimeError
-void/void_type_usage_test/conditional3_argument: MissingCompileTimeError
-void/void_type_usage_test/conditional3_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/conditional3_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/conditional3_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/conditional3_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/conditional3_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/conditional3_throw: MissingCompileTimeError
-void/void_type_usage_test/conditional_argument: MissingCompileTimeError
-void/void_type_usage_test/conditional_do_while: MissingCompileTimeError
-void/void_type_usage_test/conditional_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/conditional_for_in: MissingCompileTimeError
-void/void_type_usage_test/conditional_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/conditional_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/conditional_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/conditional_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/conditional_throw: MissingCompileTimeError
-void/void_type_usage_test/conditional_while: MissingCompileTimeError
-void/void_type_usage_test/final_local_addition: MissingCompileTimeError
-void/void_type_usage_test/final_local_argument: MissingCompileTimeError
-void/void_type_usage_test/final_local_boolean_and_left: MissingCompileTimeError
-void/void_type_usage_test/final_local_boolean_and_right: MissingCompileTimeError
-void/void_type_usage_test/final_local_boolean_negation: MissingCompileTimeError
-void/void_type_usage_test/final_local_boolean_or_left: MissingCompileTimeError
-void/void_type_usage_test/final_local_boolean_or_right: MissingCompileTimeError
-void/void_type_usage_test/final_local_cascade: MissingCompileTimeError
-void/void_type_usage_test/final_local_conditional_stmt: MissingCompileTimeError
-void/void_type_usage_test/final_local_do_while: MissingCompileTimeError
-void/void_type_usage_test/final_local_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/final_local_equals_left: MissingCompileTimeError
-void/void_type_usage_test/final_local_equals_right: MissingCompileTimeError
-void/void_type_usage_test/final_local_for_in: MissingCompileTimeError
-void/void_type_usage_test/final_local_identical: MissingCompileTimeError
-void/void_type_usage_test/final_local_is: MissingCompileTimeError
-void/void_type_usage_test/final_local_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/final_local_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/final_local_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/final_local_multiplication: MissingCompileTimeError
-void/void_type_usage_test/final_local_null_dot: MissingCompileTimeError
-void/void_type_usage_test/final_local_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/final_local_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/final_local_throw: MissingCompileTimeError
-void/void_type_usage_test/final_local_toString: MissingCompileTimeError
-void/void_type_usage_test/final_local_use_in_conditional_assignment_right: MissingCompileTimeError
-void/void_type_usage_test/final_local_use_in_list_subscript: MissingCompileTimeError
-void/void_type_usage_test/final_local_use_in_map_lookup: MissingCompileTimeError
-void/void_type_usage_test/final_local_use_in_string_interpolation: MissingCompileTimeError
-void/void_type_usage_test/final_local_while: MissingCompileTimeError
-void/void_type_usage_test/global_addition: MissingCompileTimeError
-void/void_type_usage_test/global_argument: MissingCompileTimeError
-void/void_type_usage_test/global_boolean_and_left: MissingCompileTimeError
-void/void_type_usage_test/global_boolean_and_right: MissingCompileTimeError
-void/void_type_usage_test/global_boolean_negation: MissingCompileTimeError
-void/void_type_usage_test/global_boolean_or_left: MissingCompileTimeError
-void/void_type_usage_test/global_boolean_or_right: MissingCompileTimeError
-void/void_type_usage_test/global_cascade: MissingCompileTimeError
-void/void_type_usage_test/global_conditional_stmt: MissingCompileTimeError
-void/void_type_usage_test/global_do_while: MissingCompileTimeError
-void/void_type_usage_test/global_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/global_equals_left: MissingCompileTimeError
-void/void_type_usage_test/global_equals_right: MissingCompileTimeError
-void/void_type_usage_test/global_for_in: MissingCompileTimeError
-void/void_type_usage_test/global_identical: MissingCompileTimeError
-void/void_type_usage_test/global_is: MissingCompileTimeError
-void/void_type_usage_test/global_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/global_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/global_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/global_multiplication: MissingCompileTimeError
-void/void_type_usage_test/global_null_dot: MissingCompileTimeError
-void/void_type_usage_test/global_null_equals2: MissingCompileTimeError
-void/void_type_usage_test/global_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/global_throw: MissingCompileTimeError
-void/void_type_usage_test/global_toString: MissingCompileTimeError
-void/void_type_usage_test/global_use_in_conditional_assignment_left: MissingCompileTimeError
-void/void_type_usage_test/global_use_in_conditional_assignment_right: MissingCompileTimeError
-void/void_type_usage_test/global_use_in_list_subscript: MissingCompileTimeError
-void/void_type_usage_test/global_use_in_map_lookup: MissingCompileTimeError
-void/void_type_usage_test/global_use_in_string_interpolation: MissingCompileTimeError
-void/void_type_usage_test/global_while: MissingCompileTimeError
-void/void_type_usage_test/instance2_argument: MissingCompileTimeError
-void/void_type_usage_test/instance2_cascade: MissingCompileTimeError
-void/void_type_usage_test/instance2_do_while: MissingCompileTimeError
-void/void_type_usage_test/instance2_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/instance2_for_in: MissingCompileTimeError
-void/void_type_usage_test/instance2_is: MissingCompileTimeError
-void/void_type_usage_test/instance2_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/instance2_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/instance2_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/instance2_null_dot: MissingCompileTimeError
-void/void_type_usage_test/instance2_null_equals2: MissingCompileTimeError
-void/void_type_usage_test/instance2_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/instance2_throw: MissingCompileTimeError
-void/void_type_usage_test/instance2_toString: MissingCompileTimeError
-void/void_type_usage_test/instance2_while: MissingCompileTimeError
-void/void_type_usage_test/instance3_argument: MissingCompileTimeError
-void/void_type_usage_test/instance3_cascade: MissingCompileTimeError
-void/void_type_usage_test/instance3_do_while: MissingCompileTimeError
-void/void_type_usage_test/instance3_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/instance3_for_in: MissingCompileTimeError
-void/void_type_usage_test/instance3_is: MissingCompileTimeError
-void/void_type_usage_test/instance3_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/instance3_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/instance3_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/instance3_null_dot: MissingCompileTimeError
-void/void_type_usage_test/instance3_null_equals2: MissingCompileTimeError
-void/void_type_usage_test/instance3_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/instance3_throw: MissingCompileTimeError
-void/void_type_usage_test/instance3_toString: MissingCompileTimeError
-void/void_type_usage_test/instance3_while: MissingCompileTimeError
-void/void_type_usage_test/instance_argument: MissingCompileTimeError
-void/void_type_usage_test/instance_cascade: MissingCompileTimeError
-void/void_type_usage_test/instance_do_while: MissingCompileTimeError
-void/void_type_usage_test/instance_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/instance_for_in: MissingCompileTimeError
-void/void_type_usage_test/instance_is: MissingCompileTimeError
-void/void_type_usage_test/instance_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/instance_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/instance_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/instance_null_dot: MissingCompileTimeError
-void/void_type_usage_test/instance_null_equals2: MissingCompileTimeError
-void/void_type_usage_test/instance_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/instance_throw: MissingCompileTimeError
-void/void_type_usage_test/instance_toString: MissingCompileTimeError
-void/void_type_usage_test/instance_while: MissingCompileTimeError
-void/void_type_usage_test/local_addition: MissingCompileTimeError
-void/void_type_usage_test/local_argument: MissingCompileTimeError
-void/void_type_usage_test/local_boolean_and_left: MissingCompileTimeError
-void/void_type_usage_test/local_boolean_and_right: MissingCompileTimeError
-void/void_type_usage_test/local_boolean_negation: MissingCompileTimeError
-void/void_type_usage_test/local_boolean_or_left: MissingCompileTimeError
-void/void_type_usage_test/local_boolean_or_right: MissingCompileTimeError
-void/void_type_usage_test/local_cascade: MissingCompileTimeError
-void/void_type_usage_test/local_conditional_stmt: MissingCompileTimeError
-void/void_type_usage_test/local_do_while: MissingCompileTimeError
-void/void_type_usage_test/local_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/local_equals_left: MissingCompileTimeError
-void/void_type_usage_test/local_equals_right: MissingCompileTimeError
-void/void_type_usage_test/local_for_in: MissingCompileTimeError
-void/void_type_usage_test/local_identical: MissingCompileTimeError
-void/void_type_usage_test/local_is: MissingCompileTimeError
-void/void_type_usage_test/local_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/local_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/local_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/local_multiplication: MissingCompileTimeError
-void/void_type_usage_test/local_null_dot: MissingCompileTimeError
-void/void_type_usage_test/local_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/local_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/local_throw: MissingCompileTimeError
-void/void_type_usage_test/local_toString: MissingCompileTimeError
-void/void_type_usage_test/local_use_in_conditional_assignment_left: MissingCompileTimeError
-void/void_type_usage_test/local_use_in_conditional_assignment_right: MissingCompileTimeError
-void/void_type_usage_test/local_use_in_list_subscript: MissingCompileTimeError
-void/void_type_usage_test/local_use_in_map_lookup: MissingCompileTimeError
-void/void_type_usage_test/local_use_in_string_interpolation: MissingCompileTimeError
-void/void_type_usage_test/local_while: MissingCompileTimeError
-void/void_type_usage_test/param_addition: MissingCompileTimeError
-void/void_type_usage_test/param_argument: MissingCompileTimeError
-void/void_type_usage_test/param_boolean_and_left: MissingCompileTimeError
-void/void_type_usage_test/param_boolean_and_right: MissingCompileTimeError
-void/void_type_usage_test/param_boolean_negation: MissingCompileTimeError
-void/void_type_usage_test/param_boolean_or_left: MissingCompileTimeError
-void/void_type_usage_test/param_boolean_or_right: MissingCompileTimeError
-void/void_type_usage_test/param_cascade: MissingCompileTimeError
-void/void_type_usage_test/param_conditional_stmt: MissingCompileTimeError
-void/void_type_usage_test/param_do_while: MissingCompileTimeError
-void/void_type_usage_test/param_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/param_equals_left: MissingCompileTimeError
-void/void_type_usage_test/param_equals_right: MissingCompileTimeError
-void/void_type_usage_test/param_for_in: MissingCompileTimeError
-void/void_type_usage_test/param_identical: MissingCompileTimeError
-void/void_type_usage_test/param_is: MissingCompileTimeError
-void/void_type_usage_test/param_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/param_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/param_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/param_multiplication: MissingCompileTimeError
-void/void_type_usage_test/param_null_dot: MissingCompileTimeError
-void/void_type_usage_test/param_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/param_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/param_throw: MissingCompileTimeError
-void/void_type_usage_test/param_toString: MissingCompileTimeError
-void/void_type_usage_test/param_use_in_conditional_assignment_left: MissingCompileTimeError
-void/void_type_usage_test/param_use_in_conditional_assignment_right: MissingCompileTimeError
-void/void_type_usage_test/param_use_in_list_subscript: MissingCompileTimeError
-void/void_type_usage_test/param_use_in_map_lookup: MissingCompileTimeError
-void/void_type_usage_test/param_use_in_string_interpolation: MissingCompileTimeError
-void/void_type_usage_test/param_while: MissingCompileTimeError
-void/void_type_usage_test/paren_addition: MissingCompileTimeError
-void/void_type_usage_test/paren_argument: MissingCompileTimeError
-void/void_type_usage_test/paren_boolean_and_left: MissingCompileTimeError
-void/void_type_usage_test/paren_boolean_and_right: MissingCompileTimeError
-void/void_type_usage_test/paren_boolean_negation: MissingCompileTimeError
-void/void_type_usage_test/paren_boolean_or_left: MissingCompileTimeError
-void/void_type_usage_test/paren_boolean_or_right: MissingCompileTimeError
-void/void_type_usage_test/paren_cascade: MissingCompileTimeError
-void/void_type_usage_test/paren_conditional_stmt: MissingCompileTimeError
-void/void_type_usage_test/paren_do_while: MissingCompileTimeError
-void/void_type_usage_test/paren_dynamic_init: MissingCompileTimeError
-void/void_type_usage_test/paren_equals_left: MissingCompileTimeError
-void/void_type_usage_test/paren_equals_right: MissingCompileTimeError
-void/void_type_usage_test/paren_for_in: MissingCompileTimeError
-void/void_type_usage_test/paren_identical: MissingCompileTimeError
-void/void_type_usage_test/paren_is: MissingCompileTimeError
-void/void_type_usage_test/paren_literal_list_init: MissingCompileTimeError
-void/void_type_usage_test/paren_literal_map_key_init2: MissingCompileTimeError
-void/void_type_usage_test/paren_literal_map_value_init2: MissingCompileTimeError
-void/void_type_usage_test/paren_multiplication: MissingCompileTimeError
-void/void_type_usage_test/paren_null_dot: MissingCompileTimeError
-void/void_type_usage_test/paren_null_equals1: MissingCompileTimeError
-void/void_type_usage_test/paren_return: MissingCompileTimeError # Issue 32804
-void/void_type_usage_test/paren_throw: MissingCompileTimeError
-void/void_type_usage_test/paren_toString: MissingCompileTimeError
-void/void_type_usage_test/paren_use_in_conditional_assignment_right: MissingCompileTimeError
-void/void_type_usage_test/paren_use_in_list_subscript: MissingCompileTimeError
-void/void_type_usage_test/paren_use_in_map_lookup: MissingCompileTimeError
-void/void_type_usage_test/paren_use_in_string_interpolation: MissingCompileTimeError
-void/void_type_usage_test/paren_while: MissingCompileTimeError
-void/void_type_usage_test/sync_use_in_yield: MissingCompileTimeError
-void/void_type_usage_test/sync_use_in_yield_star: MissingCompileTimeError
-void/void_type_usage_test/void_default_parameter_closure: MissingCompileTimeError
-void/void_type_usage_test/void_default_parameter_global: MissingCompileTimeError
 
 [ $compiler != dart2analyzer && $fasta && $strong ]
 map_literal3_test/03: MissingCompileTimeError
@@ -724,7 +410,6 @@
 vm/regress_28325_test: RuntimeError # No support for line numbers in stacktraces
 
 [ $compiler == dartkp && $mode == debug && $runtime == dart_precompiled && $strong ]
-const_instance_field_test/01: Crash # Issue 32326.
 external_test/13: Crash
 type_promotion_functions_test/05: Pass
 type_promotion_functions_test/06: Pass
@@ -1041,7 +726,6 @@
 vm/type_vm_test/30: MissingRuntimeError
 vm/type_vm_test/31: MissingRuntimeError
 vm/type_vm_test/32: MissingRuntimeError
-wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $compiler == dartkp && $minified ]
 no_such_method_native_test: RuntimeError # Compares symbol #foobar with string "foobar" in noSuchMethod
@@ -1377,7 +1061,6 @@
 variable_shadow_class_test/01: MissingCompileTimeError
 
 [ $mode == debug && $runtime == vm && $strong && ($compiler == app_jitk || $compiler == dartk || $compiler == dartkb) ]
-const_instance_field_test/01: Crash # Issue 32326.
 deopt_inlined_function_lazy_test: Skip
 
 [ $mode == debug && $hot_reload && ($compiler == dartk || $compiler == dartkb) ]
@@ -1407,10 +1090,6 @@
 vm/type_vm_test/35: MissingRuntimeError
 vm/type_vm_test/36: MissingRuntimeError
 
-[ $runtime != dart_precompiled && $runtime != vm && $fasta ]
-generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 30931
-generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 30931
-
 [ $runtime == vm && $checked && $strong && ($compiler == dartk || $compiler == dartkb) ]
 assert_initializer_test/31: MissingCompileTimeError # KernelVM bug: Constant evaluation.
 assert_initializer_test/32: MissingCompileTimeError # KernelVM bug: Constant evaluation.
@@ -1540,7 +1219,6 @@
 method_override6_test/03: MissingCompileTimeError
 mixin_illegal_super_use_test: Skip # Issues 24478 and 23773
 mixin_illegal_superclass_test: Skip # Issues 24478 and 23773
-named_constructor_test/01: MissingRuntimeError # Fasta bug: Bad compilation of constructor reference.
 named_parameters_default_eq_test/none: RuntimeError
 nested_generic_closure_test: RuntimeError
 no_main_test/01: Skip
@@ -1578,8 +1256,6 @@
 vm/regress_29145_test: Skip # Issue 29145
 vm/type_cast_vm_test: RuntimeError
 web_int_literals_test/*: SkipByDesign # Test applies only to JavaScript targets
-wrong_number_type_arguments_test/01: MissingCompileTimeError
-wrong_number_type_arguments_test/none: Pass
 
 [ $system == windows && $strong && ($compiler == dartk || $compiler == dartkb) ]
 ct_const2_test: Fail
@@ -1601,7 +1277,6 @@
 redirecting_factory_infinite_steps_test/01: MissingCompileTimeError
 redirecting_factory_malbounded_test/01: MissingCompileTimeError
 type_promotion_logical_and_test/01: MissingCompileTimeError
-wrong_number_type_arguments_test/01: MissingCompileTimeError
 
 [ $fasta && !$strong ]
 abstract_beats_arguments_test: MissingCompileTimeError
@@ -2393,6 +2068,10 @@
 unresolved_top_level_method_test: MissingCompileTimeError
 unresolved_top_level_var_test: MissingCompileTimeError
 
+[ $fasta && ($compiler == dartkb || $runtime != dart_precompiled && $runtime != vm) ]
+generic_function_type_as_type_argument_test/01: MissingCompileTimeError # Issue 30931
+generic_function_type_as_type_argument_test/02: MissingCompileTimeError # Issue 30931
+
 [ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
 symbol_conflict_test: Pass, Slow
 
diff --git a/tests/language_2/mixin_method_override_test.dart b/tests/language_2/mixin_method_override_test.dart
new file mode 100644
index 0000000..2ea1905
--- /dev/null
+++ b/tests/language_2/mixin_method_override_test.dart
@@ -0,0 +1,159 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Signature conformance test.
+abstract class CII {
+  int id(int x);
+}
+
+class CSI {
+  String id(int x) => "$x";
+}
+
+class CIS {
+  int id(String x) => 0;
+}
+
+class CTT<T> {
+  T id(T x) => x;
+}
+
+// Wrong return type.
+abstract class C1 = CII with CIS; //# C1: compile-time error
+abstract class C2 extends CII with CIS {} //# C2: compile-time error
+// Wrong argument type.
+abstract class C3 = CII with CSI; //# C3: compile-time error
+abstract class C4 extends CII with CSI {} //# C4: compile-time error
+
+// Similar as the above but using an instantiated class instead.
+abstract class C5 = CII with CTT<int>;
+abstract class C6 extends CII with CTT<int> {}
+abstract class C7  = CII with CTT<String>; //# C7: compile-time error
+abstract class C8 extends CII with CTT<String> {} //# C8: compile-time error
+
+// Named parameters
+abstract class NIIx {
+  int id({int x}) => x;
+}
+
+class NIIxy {
+  int id({int x, int y}) => y;
+}
+
+class NIIy {
+  int id({int y}) => y;
+}
+
+class NII {
+  int id(int x) => x;
+}
+
+// It's OK to introduce more named parameters.
+abstract class N1 = NIIx with NIIxy;
+abstract class N2 extends NIIx with NIIxy {}
+// It's NOT OK to rename named parameters.
+abstract class N3 = NIIx with NIIy; //# N3: compile-time error
+abstract class N4 extends NIIx with NIIy {} //# N4: compile-time error
+// It's NOT OK to drop named parameters.
+abstract class N5 = NIIx with NII; //# N5: compile-time error
+abstract class N6 extends NIIx with NII {} //# N6: compile-time error
+
+class NBABxy<A, B> {
+  B id ({A x, B y}) => y;
+}
+
+class NTTy<T> {
+  T id({T y}) => y;
+}
+
+class NTTx<T> {
+  T id(T x) => x;
+}
+
+// Same as above but with generic classes.
+abstract class N7 = NIIx with NBABxy<int, int>;
+abstract class N8 extends NIIx with NBABxy<int, int> {}
+abstract class N9 = NIIx with NBABxy<String, int>; //# N9: compile-time error
+abstract class N10 extends NIIx with NBABxy<String, int> {} //# N10: compile-time error
+abstract class N11 = NIIx with NTTy<int>; //# N11: compile-time error
+abstract class N12 extends NIIx with NTTy<int> {} //# N12: compile-time error
+abstract class N13 = NIIx with NTTx<int>; //# N13: compile-time error
+abstract class N14 extends NIIx with NTTx<int> {} //# N14: compile-time error
+
+// Optional positional parameters
+abstract class OII {
+  int id([int x]) => x;
+}
+
+class OIII {
+  int id([int x, int y]) => y;
+}
+
+class OIIy {
+  int id([int y]) => y;
+}
+
+class PII {
+  int id(int x) => x;
+}
+
+// It's OK to introduce more optional parameters.
+abstract class O1 = OII with OIII;
+abstract class O2 extends OII with OIII {}
+// It's OK to rename optional parameters.
+abstract class O3 = OII with OIIy;
+abstract class O4 extends OII with OIIy {}
+// It's NOT OK to drop optional parameters.
+abstract class O5 = OII with PII; //# O5: compile-time error
+abstract class O6 extends OII with PII {} //# O6: compile-time error
+
+class OBAB<A, B> {
+  B id ([A x, B y]) => y;
+}
+
+class OTTy<T> {
+  T id([T y]) => y;
+}
+
+class PTT<T> {
+  T id(T x) => x;
+}
+
+// Same as above but with generic classes.
+abstract class O7 = OII with OBAB<int, int>;
+abstract class O8 extends OII with OBAB<int, int> {}
+abstract class O9 = OII with OBAB<String, int>; //# O9: compile-time error
+abstract class O10 extends OII with OBAB<String, int> {} //# O10: compile-time error
+abstract class O11 = OII with OTTy<int>;
+abstract class O12 extends OII with OTTy<int> {}
+abstract class O13 = OII with PTT<int>; //# O13: compile-time error
+abstract class O14 extends OII with PTT<int> {} //# O14: compile-time error
+
+// More tests with generic classes.
+abstract class GTTnum {
+  T id<T extends num>(x);
+}
+
+class MTTnum {
+  T id<T extends num>(x) => x;
+}
+
+class MTTint {
+  T id<T extends int>(x) => x;
+}
+
+class MTT {
+  T id<T>(x) => x;
+}
+
+class MTTnumR {
+  T id<T extends num, R>(x) => x;
+}
+class G1 = GTTnum with MTTnum;
+class G2 = GTTnum with MTTint; //# G2: compile-time error
+class G3 = GTTnum with MTT; //# G3: compile-time error
+class G4 = GTTnum with MTTnumR; //# G4: compile-time error
+class G5 = GTTnum with CII; //# G5: compile-time error
+
+void main() {}
diff --git a/tests/language_2/partial_instantiation_eager_bounds_check_test.dart b/tests/language_2/partial_instantiation_eager_bounds_check_test.dart
new file mode 100644
index 0000000..d20a83e
--- /dev/null
+++ b/tests/language_2/partial_instantiation_eager_bounds_check_test.dart
@@ -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 test checks that necessary type argument bounds checks are performed
+// eagerly during partial instantiation, rather than being delayed until the
+// partially instantiated closure is invoked.
+
+import "package:expect/expect.dart";
+
+class C<T> {
+  void foo<S extends T>(S x) {}
+}
+
+void main() {
+  C<Object> c = C<int>();
+  void Function(String) fn;
+  Expect.throwsTypeError(() {
+    fn = c.foo;
+  });
+}
diff --git a/tests/language_2/redirecting_factory_upcast_test.dart b/tests/language_2/redirecting_factory_upcast_test.dart
new file mode 100644
index 0000000..ff3ad11
--- /dev/null
+++ b/tests/language_2/redirecting_factory_upcast_test.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.
+
+class A implements B {
+  var x;
+  A(Object this.x);
+}
+
+class B {
+  factory B(String s) = A;
+}
+
+main() {
+  B(42 as dynamic); //# 01: runtime error
+}
diff --git a/tests/language_2/regress_32660_test.dart b/tests/language_2/regress_32660_test.dart
new file mode 100644
index 0000000..eab8d80
--- /dev/null
+++ b/tests/language_2/regress_32660_test.dart
@@ -0,0 +1,78 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// noSuchMethod does not overwrite actual implementations, so if an
+// implemetation of a member exists that doesn't fulfill the interface it's
+// an error.
+// On the other hand, if no implementation exists,
+// noSuchMethod will take its place and everything is okay.
+
+class B {
+  foo(int x, // force formatter to not combine these lines.
+          {int y} //# 02: compile-time error
+          ) =>
+      x;
+}
+
+class C extends B {
+  foo(int x, // force formatter to not combine these lines.
+      {int y} //# 01: compile-time error
+      );
+  bar();
+
+  noSuchMethod(i) {
+    print("No such method!");
+    return 42;
+  }
+}
+
+abstract class D {
+  foo(int x, // force formatter to not combine these lines.
+      {int y} //# 03: ok
+      );
+}
+
+abstract class E {
+  foo(int x, // force formatter to not combine these lines.
+      {int y} //# 04: ok
+      );
+}
+
+class F extends D implements E {
+  noSuchMethod(i) {
+    print("No such method!");
+    return 42;
+  }
+}
+
+class G {
+  foo(int x, // force formatter to not combine these lines.
+          {int y} //# 05: ok
+          ) =>
+      x;
+}
+
+class H {
+  foo(int x, // force formatter to not combine these lines.
+          {int y} //# 06: compile-time error
+          ) =>
+      x;
+}
+
+class I extends G implements H {
+  noSuchMethod(i) {
+    print("No such method: $i!");
+    return 42;
+  }
+}
+
+main() {
+  var c = new C();
+  c.foo(123);
+  c.bar();
+  var f = new F();
+  f.foo(42);
+  var i = new I();
+  i.foo(42);
+}
diff --git a/tests/language_2/regress_34225_test.dart b/tests/language_2/regress_34225_test.dart
new file mode 100644
index 0000000..0117672
--- /dev/null
+++ b/tests/language_2/regress_34225_test.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 C {
+  static set C(v) {} //# 01: compile-time error
+  set C(v) {} //# 02: compile-time error
+}
+
+main() {
+  new C();
+}
diff --git a/tests/language_2/tearoff_bounds_instantiation_test.dart b/tests/language_2/tearoff_bounds_instantiation_test.dart
new file mode 100644
index 0000000..b823c64
--- /dev/null
+++ b/tests/language_2/tearoff_bounds_instantiation_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.
+//
+// This test checks that the type parameter bounds on tearoffs from generic
+// classes are properly instantiated in the signature of the tearoff.
+
+import "package:expect/expect.dart";
+
+class C<T> {
+  void foo<S extends T>(S x) {}
+}
+
+void foo<S extends int>(S x) {}
+
+void main() {
+  dynamic c = C<int>();
+  dynamic fn = c.foo;
+  Expect.equals("${fn.runtimeType}", "${foo.runtimeType}");
+}
diff --git a/tests/language_2/this_as_covariant_call_checks_test.dart b/tests/language_2/this_as_covariant_call_checks_test.dart
new file mode 100644
index 0000000..28c79cc
--- /dev/null
+++ b/tests/language_2/this_as_covariant_call_checks_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.
+//
+// VMOptions=--no-background-compilation --enable-inlining-annotations --optimization-counter-threshold=10
+
+import "package:expect/expect.dart";
+
+const NeverInline = "NeverInline";
+
+class A<T> {
+  T field;
+
+  @NeverInline
+  set property(T v) {}
+
+  @NeverInline
+  void method(T x) {}
+
+  @NeverInline
+  void testMethod(bool violateType) {
+    A<dynamic> x = this;
+    x.method(violateType ? 10 : "10");
+  }
+
+  @NeverInline
+  void testSetter(bool violateType) {
+    A<dynamic> x = this;
+    x.property = violateType ? 10 : "10";
+  }
+
+  @NeverInline
+  void testField(bool violateType) {
+    A<dynamic> x = this;
+    x.field = violateType ? 10 : "10";
+  }
+}
+
+@NeverInline
+void loop(A<String> obj, bool violateType) {
+  for (var i = 0; i < 100; i++) {
+    obj.testMethod(violateType);
+    obj.testSetter(violateType);
+    obj.testField(violateType);
+  }
+}
+
+void main() {
+  A<num>().field = 10;
+  final obj = A<String>();
+  loop(obj, false);
+  loop(obj, false);
+  Expect.throwsTypeError(() => obj.testMethod(true));
+  Expect.throwsTypeError(() => obj.testSetter(true));
+  Expect.throwsTypeError(() => obj.testField(true));
+}
diff --git a/tests/language_2/this_as_dynamic_call_checks_test.dart b/tests/language_2/this_as_dynamic_call_checks_test.dart
new file mode 100644
index 0000000..dd215eb
--- /dev/null
+++ b/tests/language_2/this_as_dynamic_call_checks_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.
+//
+// VMOptions=--no-background-compilation --enable-inlining-annotations --optimization-counter-threshold=10
+
+import "package:expect/expect.dart";
+
+const NeverInline = "NeverInline";
+
+class A<T> {
+  T field;
+
+  @NeverInline
+  set property(T v) {}
+
+  @NeverInline
+  void method(T x) {}
+
+  @NeverInline
+  void testMethod({bool violateType: false}) {
+    dynamic x = this;
+    x.method(violateType ? 10 : "10");
+  }
+
+  @NeverInline
+  void testSetter({bool violateType: false}) {
+    dynamic x = this;
+    x.property = violateType ? 10 : "10";
+  }
+
+  @NeverInline
+  void testField({bool violateType: false}) {
+    dynamic x = this;
+    x.field = violateType ? 10 : "10";
+  }
+}
+
+@NeverInline
+void loop(A<String> obj, {bool violateType: false}) {
+  for (var i = 0; i < 100; i++) {
+    obj.testMethod(violateType: violateType);
+    obj.testSetter(violateType: violateType);
+    obj.testField(violateType: violateType);
+  }
+}
+
+void main() {
+  final obj = A<String>();
+  loop(obj, violateType: false);
+  loop(obj, violateType: false);
+  Expect.throwsTypeError(() => obj.testMethod(violateType: true));
+  Expect.throwsTypeError(() => obj.testSetter(violateType: true));
+  Expect.throwsTypeError(() => obj.testField(violateType: true));
+}
diff --git a/tests/language_2/vm/regress_34288_test.dart b/tests/language_2/vm/regress_34288_test.dart
new file mode 100644
index 0000000..a5f8272
--- /dev/null
+++ b/tests/language_2/vm/regress_34288_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.
+
+// Test canonicalization of integer shift operations.
+// This is a regression test for dartbug.com/34288.
+
+// VMOptions=--no_background_compilation --optimization_counter_threshold=10
+
+import "package:expect/expect.dart";
+
+int _shl_63(int x) => x << 63;
+int _shl_64(int x) => x << 64;
+int _shl_65(int x) => x << 65;
+int _shl_m1(int x) => x << -1;
+
+int _shr_63(int x) => x >> 63;
+int _shr_64(int x) => x >> 64;
+int _shr_65(int x) => x >> 65;
+int _shr_m1(int x) => x >> -1;
+
+// Non-constant values.
+int one = 1;
+int minusOne = -1;
+
+doTests() {
+  Expect.equals(0x8000000000000000, _shl_63(one));
+  Expect.equals(0x8000000000000000, _shl_63(minusOne));
+  Expect.equals(0, _shl_64(one));
+  Expect.equals(0, _shl_64(minusOne));
+  Expect.equals(0, _shl_65(one));
+  Expect.equals(0, _shl_65(minusOne));
+
+  Expect.throws<ArgumentError>(() {
+    _shl_m1(one);
+  });
+
+  Expect.equals(0, _shr_63(one));
+  Expect.equals(-1, _shr_63(minusOne));
+  Expect.equals(0, _shr_64(one));
+  Expect.equals(-1, _shr_64(minusOne));
+  Expect.equals(0, _shr_65(one));
+  Expect.equals(-1, _shr_65(minusOne));
+
+  Expect.throws<ArgumentError>(() {
+    _shr_m1(one);
+  });
+}
+
+void main() {
+  for (int i = 0; i < 20; ++i) {
+    doTests();
+  }
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 335211e..2af6884 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -24,6 +24,7 @@
 developer/timeline_test: Skip # Not supported
 math/double_pow_test: RuntimeError
 math/low_test: RuntimeError
+mirrors/*: SkipByDesign # mirrors not supported
 mirrors/class_declarations_test/none: RuntimeError # Issue 13440
 mirrors/class_mirror_location_test: RuntimeError # Issue 6490
 mirrors/closurization_equivalence_test: RuntimeError # Issue 6490
@@ -114,6 +115,7 @@
 mirrors/variable_is_const_test/none: RuntimeError # Issue 14671
 profiler/metrics_num_test: Skip # Because of a int / double type test.
 typed_data/int32x4_bigint_test: Pass
+typed_data/int64_list_load_store_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
 
@@ -322,10 +324,10 @@
 [ $compiler == dart2js && $checked ]
 convert/utf85_test: Pass, Slow # Issue 12029.
 
-[ $compiler == dart2js && $checked && $fast_startup && $fasta && $minified ]
+[ $compiler == dart2js && $checked && $fast_startup && $minified ]
 async/stream_listen_zone_test: RuntimeError
 
-[ $compiler == dart2js && $checked && $fasta && $host_checked ]
+[ $compiler == dart2js && $checked && $host_checked ]
 async/stream_listen_zone_test: RuntimeError
 
 [ $compiler == dart2js && $fast_startup ]
@@ -346,14 +348,8 @@
 mirrors/syntax_error_test/01: Pass # expects failure, but it fails for the wrong reason
 mirrors/variable_is_const_test/01: Pass # expects failure, but it fails for the wrong reason
 
-[ $compiler == dart2js && $fasta ]
-mirrors/*: SkipByDesign # mirrors not supported
-typed_data/int64_list_load_store_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-
-[ $compiler == dart2js && $fasta && $host_checked ]
-async/stream_controller_async_test: Crash
-
 [ $compiler == dart2js && $host_checked ]
+async/stream_controller_async_test: Crash
 mirrors/metadata_allowed_values_test/28: Crash # Issue 25911
 mirrors/metadata_allowed_values_test/29: Crash # Issue 25911
 mirrors/metadata_allowed_values_test/30: Crash # Issue 25911
diff --git a/tests/lib_2/html/deferred_multi_app.dart b/tests/lib_2/html/deferred_multi_app.dart
deleted file mode 100644
index b1fd7c5..0000000
--- a/tests/lib_2/html/deferred_multi_app.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for 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 "deferred_multi_app_lib.dart" deferred as lib;
-import "dart:async";
-import "dart:html";
-import "package:expect/expect.dart";
-
-main() {
-  Element state = querySelector("#state");
-  if (state.text == "1") {
-    lib.loadLibrary().then((_) {
-      var a = lib.one();
-      Expect.equals("one", a);
-      window.postMessage(a, '*');
-    });
-    state.text = "2";
-  } else {
-    new Timer(new Duration(milliseconds: 100), () {
-      lib.loadLibrary().then((_) {
-        var a = lib.two();
-        Expect.equals("two", a);
-        window.postMessage(a, '*');
-      });
-    });
-  }
-}
diff --git a/tests/lib_2/html/deferred_multi_app_htmltest.html b/tests/lib_2/html/deferred_multi_app_htmltest.html
deleted file mode 100644
index e352e13..0000000
--- a/tests/lib_2/html/deferred_multi_app_htmltest.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-for 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 two instances of a script does not interfere when loading the same
-deferred library.
-
-START_HTML_DART_TEST
-{
-  "scripts": ["deferred_multi_app.dart", "dispatch_parent_event.js"],
-  "expectedMessages": ["one", "two"]
-}
-END_HTML_DART_TEST
--->
-<html>
-  <body>
-    <div id="state">1</div>
-    <script src="dispatch_parent_event.js"></script>
-    <script src="deferred_multi_app.dart" type="application/dart"></script>
-    <script src="deferred_multi_app.dart" type="application/dart"></script>
-  </body>
-</html>
diff --git a/tests/lib_2/html/deferred_multi_app_lib.dart b/tests/lib_2/html/deferred_multi_app_lib.dart
deleted file mode 100644
index de4e651..0000000
--- a/tests/lib_2/html/deferred_multi_app_lib.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-one() {
-  return "one";
-}
-
-two() {
-  return "two";
-}
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 89f5df8..429e135 100644
--- a/tests/lib_2/html/js_typed_interop_lazy_test.dart
+++ b/tests/lib_2/html/js_typed_interop_lazy_test.dart
@@ -23,6 +23,12 @@
   external get a;
 }
 
+@JS('baz.foo.NestedLazyClass')
+class NestedLazyClass {
+  external factory NestedLazyClass(a);
+  external get a;
+}
+
 @anonymous
 @JS('some.bogus.ignored.js.path')
 class AnonClass {
@@ -49,15 +55,27 @@
   get a => 42;
 }
 
+class Mock1NestedLazyClass implements NestedLazyClass {
+  noSuchMethod(Invocation i) => i.memberName == #a ? 42 : null;
+}
+
+class Mock2NestedLazyClass implements NestedLazyClass {
+  get a => 42;
+}
+
 class Other {
   noSuchMethod(Invocation i) {}
 }
 
-// This class would cause compile time issues if JS classes are not properly lazy.
+// Test that the lazy JS classes can be used as a generic type argument.
 class FooImpl extends Foo<LazyClass> {
   LazyClass get obj => new LazyClass(100);
 }
 
+class NestedFooImpl extends Foo<NestedLazyClass> {
+  NestedLazyClass get obj => new NestedLazyClass(100);
+}
+
 class ExampleGenericClass<T> {
   String add(T foo) {
     return foo.toString();
@@ -159,16 +177,109 @@
     test('mocks', () {
       var mock1 = new Mock1LazyClass();
       expect(mock1 is LazyClass, isTrue);
-      expect(mock1 as LazyClass, equals(mock1));
+      expect((mock1 as dynamic) 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 as dynamic) as LazyClass, equals(mock2));
       expect(mock2.a, equals(42));
 
       Object other = new Other();
       expect(other is LazyClass, isFalse);
     });
   });
+
+  group('nested lazy class', () {
+    test('type literal', () {
+      // Fine because we can determine the class literals are equal without
+      // having to determine what (non-existant) JS type they correspond to.
+      var x = NestedLazyClass;
+      var y = NestedLazyClass;
+      expect(x == y, isTrue);
+    });
+
+    test('reference in type parameter', () {
+      var o = new NestedFooImpl();
+      expect(o is Foo<NestedLazyClass>, isTrue);
+    });
+
+    test('create instance', () {
+      var anon = new AnonClass(a: 42);
+      // Until NestedLazyClass is defined, fall back to Anon behavior.
+      expect(anon is NestedLazyClass, isTrue); //# 01: ok
+      expect(new Object() is! NestedLazyClass, isTrue);
+
+      document.body.append(new ScriptElement()
+        ..type = 'text/javascript'
+        ..innerHtml = r"""
+window.baz = window.baz || {};
+window.baz.foo = {};
+
+baz.foo.NestedLazyClass = function NestedLazyClass(a) {
+  this.a = a;
+};
+""");
+      var l = new NestedLazyClass(42);
+      expect(l.a, equals(42));
+      expect(l is NestedLazyClass, isTrue);
+      expect(l is AnonClass, isTrue);
+      expect((l as AnonClass) == l, isTrue);
+      expect((l as AnonClass2) == l, isTrue);
+      expect(anon is! NestedLazyClass, isTrue); //# 01: ok
+      expect(anon is AnonClass, isTrue);
+      expect(anon is AnonClass2, isTrue);
+
+      // Sanity check that is and as are not broken.
+      expect(new Object() is! NestedLazyClass, isTrue);
+      expect(new Object() is! AnonClass, isTrue);
+      expect(new Object() is! AnonClass2, isTrue);
+
+      expect(<AnonClass>[] is List<AnonClass>, isTrue);
+      // TODO(jacobr): why doesn't this test pass?
+      // expect(<AnonClass>[] is List<AnonClass2>, isTrue);
+      expect(<int>[] is! List<AnonClass>, isTrue);
+      expect(<AnonClass>[] is! List<NestedLazyClass>, isTrue); //# 01: ok
+      expect(<int>[] is! List<NestedLazyClass>, isTrue);
+      expect(<NestedLazyClass>[] is List<NestedLazyClass>, isTrue);
+
+      var listLazyClass = <NestedLazyClass>[];
+      Object instanceLazyObject = l;
+      expect(() => listLazyClass.add(42 as dynamic), throws); //# 01: ok
+      // Regression test for bug where this call failed.
+      listLazyClass.add(instanceLazyObject);
+      listLazyClass.add(null);
+
+      dynamic listLazyClassDynamic = listLazyClass;
+      expect(() => listLazyClassDynamic.add(42), throws); //# 01: ok
+      // Regression test for bug where this call failed.
+      listLazyClassDynamic.add(instanceLazyObject);
+      listLazyClassDynamic.add(null);
+
+      var genericClass = new ExampleGenericClass<NestedLazyClass>();
+      genericClass.add(instanceLazyObject);
+      expect(() => genericClass.add(42 as dynamic), throws); //# 01: ok
+      genericClass.add(null);
+
+      dynamic genericClassDynamic = genericClass;
+      genericClassDynamic.add(instanceLazyObject);
+      expect(() => genericClassDynamic.add(42), throws); //# 01: ok
+      genericClassDynamic.add(null);
+    });
+
+    test('mocks', () {
+      var mock1 = new Mock1NestedLazyClass();
+      expect(mock1 is NestedLazyClass, isTrue);
+      expect((mock1 as dynamic) as NestedLazyClass, equals(mock1));
+      expect(mock1.a, equals(42));
+
+      var mock2 = new Mock2NestedLazyClass();
+      expect(mock2 is NestedLazyClass, isTrue);
+      expect((mock2 as dynamic) as NestedLazyClass, equals(mock2));
+      expect(mock2.a, equals(42));
+
+      Object other = new Other();
+      expect(other is NestedLazyClass, isFalse);
+    });
+  });
 }
diff --git a/tests/lib_2/html/no_linked_scripts_htmltest.html b/tests/lib_2/html/no_linked_scripts_htmltest.html
deleted file mode 100644
index 3a7add2..0000000
--- a/tests/lib_2/html/no_linked_scripts_htmltest.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<!--
-START_HTML_DART_TEST
-{
-  "scripts": [ "dispatch_parent_event.js" ],
-  "expectedMessages": ["hest", "fisk"]
-}
-END_HTML_DART_TEST
--->
-<html>
-<head>
-  <script src="dispatch_parent_event.js"></script>
-  <title>No Linked Scripts HTML test</title>
-</head><body>
-  <h1>No Linked Scripts HTML test</h1>
-  <script>
-    window.postMessage('fisk', '*');
-    window.postMessage('ged', '*');
-    window.postMessage('fisk', '*');
-
-    function delayed() {
-      parent.postMessage('ko', '*');
-      window.postMessage('hest', '*');
-    }
-    setTimeout(delayed, 500);
-  </script>
-</body>
-</html>
diff --git a/tests/lib_2/html/scripts_htmltest.html b/tests/lib_2/html/scripts_htmltest.html
deleted file mode 100644
index 63aab06..0000000
--- a/tests/lib_2/html/scripts_htmltest.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<!--
-START_HTML_DART_TEST
-{
-  "scripts": ["scripts_test_dart.dart", "scripts_test_js.js", "dispatch_parent_event.js"],
-  "expectedMessages": ["crab", "fish", "squid", "sea urchin"]
-}
-END_HTML_DART_TEST
--->
-<html>
-<head>
-  <script src="dispatch_parent_event.js"></script>
-  <title>Scripts HTML test</title>
-</head><body>
-  <h1>Scripts HTML test</h1>
-  <script src="scripts_test_dart.dart" type="application/dart"></script>
-  <script src="scripts_test_js.js"></script>
-</body>
-</html>
diff --git a/tests/lib_2/html/scripts_test_dart.dart b/tests/lib_2/html/scripts_test_dart.dart
deleted file mode 100644
index cd7bc5a..0000000
--- a/tests/lib_2/html/scripts_test_dart.dart
+++ /dev/null
@@ -1,17 +0,0 @@
-// 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.
-
-library ScriptsTestDart;
-
-import 'dart:html';
-import 'dart:async';
-
-main() {
-  window.postMessage('squid', '*');
-  window.postMessage('tiger', '*'); // Unexpected message OK.
-  new Timer(new Duration(seconds: 1), () {
-    window.postMessage('squid', '*'); // Duplicate message OK.
-    window.postMessage('sea urchin', '*');
-  });
-}
diff --git a/tests/lib_2/html/scripts_test_js.js b/tests/lib_2/html/scripts_test_js.js
deleted file mode 100644
index 552d418..0000000
--- a/tests/lib_2/html/scripts_test_js.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// 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.
-
-window.postMessage('fish', '*');
-
-function delayed() {
-  window.postMessage('cow', '*');  // Unexpected message OK.
-  parent.postMessage('weasel', '*');  // Message to parent OK.
-  window.postMessage('crab', '*');
-}
-setTimeout(delayed, 500);
diff --git a/tests/lib_2/html/two_scripts_htmltest.html b/tests/lib_2/html/two_scripts_htmltest.html
deleted file mode 100644
index 69c39e4..0000000
--- a/tests/lib_2/html/two_scripts_htmltest.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<!--
-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.
--->
-<!--
-START_HTML_DART_TEST
-{
-  "scripts": ["two_scripts_test_first.dart", "two_scripts_test_second.dart", "dispatch_parent_event.js"],
-  "expectedMessages":
-      ["first_local", "first_global", "second_local", "second_global"]
-}
-END_HTML_DART_TEST
--->
-<html>
-<head>
-  <script src="dispatch_parent_event.js"></script>
-  <title>Two Scripts HTML test</title>
-</head><body>
-  <h1>Two Scripts HTML test</h1>
-  <script src="two_scripts_test_first.dart" type="application/dart"></script>
-  <script src="two_scripts_test_second.dart" type="application/dart"></script>
-</body>
-</html>
diff --git a/tests/lib_2/html/two_scripts_test_first.dart b/tests/lib_2/html/two_scripts_test_first.dart
deleted file mode 100644
index 6a1f1d1..0000000
--- a/tests/lib_2/html/two_scripts_test_first.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-library TwoScriptsTestFirst;
-
-import 'dart:html';
-
-aGlobalFunction() {
-  window.postMessage('first_global', '*');
-}
-
-main() {
-  window.postMessage('first_local', '*');
-  aGlobalFunction();
-}
diff --git a/tests/lib_2/html/two_scripts_test_second.dart b/tests/lib_2/html/two_scripts_test_second.dart
deleted file mode 100644
index b959396..0000000
--- a/tests/lib_2/html/two_scripts_test_second.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// 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.
-
-library TwoScriptsTestSecond;
-
-import 'dart:html';
-
-aGlobalFunction() {
-  window.postMessage('second_global', '*');
-}
-
-main() {
-  window.postMessage('second_local', '*');
-  aGlobalFunction();
-}
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index f7529d1..ac45d22 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -29,7 +29,6 @@
 html/crypto_test/supported: Fail
 html/css_test/supportsPointConversions: Fail
 html/custom/document_register_type_extensions_test/single-parameter: Fail # Issue 13193.
-html/deferred_multi_app_htmltest: Skip # Times out on IE.  Issue 21537
 html/element_animate_test: Fail # Element.animate not supported on these browsers.
 html/element_test/click: Fail # IE does not support firing this event.
 html/event_test: RuntimeError # Issue 23437. Only three failures, but hard to break them out.
@@ -47,12 +46,10 @@
 html/localstorage_test: Pass, RuntimeError # Issue 22166
 html/media_stream_test: Pass, Fail
 html/mediasource_test: Pass, Fail # Windows 8: Supported: yes, functional: no
-html/no_linked_scripts_htmltest: Skip # Times out on IE.  Issue 21537
 html/notification_test: Fail # Notification not supported on IE
 html/postmessage_structured_test: Fail # Does not support the MessageEvent constructor.
 html/request_animation_frame_test: Skip # Times out. Issue 22167
 html/rtc_test: Fail
-html/scripts_htmltest: Skip # Times out on IE.  Issue 21537
 html/serialized_script_value_test: Fail
 html/shadow_dom_test: Fail
 html/speechrecognition_test: Fail
@@ -62,7 +59,6 @@
 html/touchevent_test: Fail # IE does not support TouchEvents
 html/transferables_test: Pass, Fail # Issues 20659.
 html/transition_event_test: Skip # Times out. Issue 22167
-html/two_scripts_htmltest: Skip # Times out on IE.  Issue 21537
 html/webgl_1_test: Fail
 html/websocket_test: Fail # Issue 7875. Closed with "working as intended".
 html/websql_test: Fail
diff --git a/tests/lib_2/lib_2_analyzer.status b/tests/lib_2/lib_2_analyzer.status
index 72c133b..a521c69 100644
--- a/tests/lib_2/lib_2_analyzer.status
+++ b/tests/lib_2/lib_2_analyzer.status
@@ -7,19 +7,11 @@
 html/element_types_keygen_test: CompileTimeError # Chrome 57 keygen removed
 html/js_function_getter_trust_types_test: Skip # dart2js specific flags.
 html/js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
-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/mirrors_nsm_mismatch_test: StaticWarning, OK
-mirrors/mirrors_nsm_test: StaticWarning, OK
-mirrors/mirrors_nsm_test/dart2js: StaticWarning, OK
-mirrors/redirecting_factory_test/01: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>'
-mirrors/redirecting_factory_test/none: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>
-mirrors/repeated_private_anon_mixin_app_test: StaticWarning, OK # Intentional library name conflict.
-
-[ $compiler == dart2analyzer && $strong ]
 mirrors/deferred_type_test: CompileTimeError, OK # Deliberately refers to a deferred type in a declaration.
 mirrors/generic_f_bounded_mixin_application_test: CompileTimeError
 mirrors/mirrors_nsm_mismatch_test: CompileTimeError, OK
 mirrors/mirrors_nsm_test: CompileTimeError, OK
 mirrors/mirrors_nsm_test/dart2js: CompileTimeError, OK
+mirrors/redirecting_factory_test/01: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>'
+mirrors/redirecting_factory_test/none: StaticWarning # test issue X, The return type 'Class<T2, T1>' of the redirected constructor is not assignable to 'Class<T1, T2>
 mirrors/repeated_private_anon_mixin_app_test: CompileTimeError, OK # Intentional library name conflict.
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 13713db..e2eb9a6 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -13,22 +13,30 @@
 html/custom/document_register_type_extensions_test/construction: Pass, Timeout # Roll 50 failure
 html/custom/document_register_type_extensions_test/registration: Pass, Timeout # Roll 50 failure
 html/custom/entered_left_view_test/shadow_dom: Pass, Timeout # Roll 50 failure
+html/custom/mirrors_2_test: RuntimeError
+html/custom/mirrors_test: RuntimeError
 html/custom_elements_test: Pass, Timeout # Issue 26789
 html/debugger_test: CompileTimeError # Issue 30900
 html/indexeddb_1_test/functional: Pass, Timeout # Roll 50 failure
+html/indexeddb_1_test/functional: RuntimeError
 html/indexeddb_2_test: Pass, Timeout # Roll 50 failure
 html/indexeddb_3_test: Pass, Timeout # Roll 50 failure
+html/indexeddb_3_test: RuntimeError
 html/indexeddb_4_test: Pass, Timeout # Roll 50 failure
 html/indexeddb_5_test: Pass, Timeout # Roll 50 failure
+html/indexeddb_5_test: RuntimeError
 html/isolates_test: SkipByDesign
 html/js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
+html/js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 html/js_typed_interop_side_cast_exp_test: Pass, RuntimeError # Roll 50 failure
+html/js_typed_interop_test: RuntimeError
 html/mirrors_js_typed_interop_test: Pass, Slow
 html/svgelement_test/PathElement: Pass, RuntimeError # Roll 50 failure
 html/worker_api_test: SkipByDesign
 html/wrapping_collections_test: SkipByDesign # Testing an issue that is only relevant to Dartium
 html/xhr_test: Pass, Slow
 isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
+math/double_pow_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 math/double_pow_test: RuntimeError
 math/low_test: RuntimeError
 math/random_big_test: RuntimeError # Using bigint seeds for random.
@@ -48,7 +56,10 @@
 mirrors/reflected_type_typedefs_test: RuntimeError # Issue 12607
 mirrors/reflected_type_typevars_test: RuntimeError # Issue 12607
 profiler/metrics_num_test: Skip # Because of an int / double type test.
+typed_data/int32x4_arithmetic_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 typed_data/int32x4_arithmetic_test/int64: RuntimeError # Issue 1533
+typed_data/int32x4_arithmetic_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
+typed_data/int64_list_load_store_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
 typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
 typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275
 typed_data/unmodifiable_typed_data_test: RuntimeError # Issue 10275
@@ -83,7 +94,6 @@
 html/js_transferrables_test: RuntimeError
 html/js_typed_interop_lazy_test/none: RuntimeError
 html/js_typed_interop_rename_static_test: RuntimeError
-html/no_linked_scripts_htmltest: Timeout, Pass # Issue 32262
 html/worker_test/functional: RuntimeError # Issue 32261
 
 [ $compiler == dart2js && $runtime == chrome && $strong ]
@@ -106,7 +116,7 @@
 typed_data/setRange_2_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
 typed_data/setRange_3_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
 
-[ $compiler == dart2js && $runtime == d8 && $fasta ]
+[ $compiler == dart2js && $runtime == d8 ]
 async/dart2js_uncaught_error_test: RuntimeError
 html/async_spawnuri_test: RuntimeError
 html/async_test: RuntimeError
@@ -338,7 +348,7 @@
 js/null_test: RuntimeError
 js/prototype_access_test: RuntimeError
 
-[ $compiler == dart2js && $runtime == d8 && $fasta && $minified ]
+[ $compiler == dart2js && $runtime == d8 && $minified ]
 collection/list_test: RuntimeError
 
 [ $compiler == dart2js && $runtime != d8 ]
@@ -514,13 +524,11 @@
 html/typed_arrays_range_checks_test: RuntimeError
 
 [ $compiler == dart2js && $checked ]
+async/stream_listen_zone_test: RuntimeError
 convert/utf85_test: Pass, Slow # Issue 12029.
 html/js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
 
-[ $compiler == dart2js && $checked && $fasta ]
-async/stream_listen_zone_test: RuntimeError
-
-[ $compiler == dart2js && $csp && $fasta && $minified ]
+[ $compiler == dart2js && $csp && $minified ]
 collection/list_test: RuntimeError
 
 [ $compiler == dart2js && $csp && ($runtime == chrome || $runtime == chromeOnAndroid || $runtime == ff || $runtime == safari) ]
@@ -542,7 +550,7 @@
 html/mirrors_js_typed_interop_test: SkipByDesign
 html/postmessage_structured_test: SkipByDesign
 
-[ $compiler == dart2js && !$csp && $fasta && $minified ]
+[ $compiler == dart2js && !$csp && $minified ]
 html/async_spawnuri_test: RuntimeError
 html/async_test: RuntimeError
 html/audiobuffersourcenode_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
@@ -694,29 +702,11 @@
 html/custom/mirrors_2_test: Fail # mirrors not supported
 html/custom/mirrors_test: Fail # mirrors not supported
 html/mirrors_js_typed_interop_test: Fail # mirrors not supported
-mirrors/regress_16321_test/01: Pass # expects failure, but if fails for the wrong reason
-
-[ $compiler == dart2js && $fast_startup && $fasta ]
 html/notification_permission_test: RuntimeError
 html/xhr_test: RuntimeError
+mirrors/regress_16321_test/01: Pass # expects failure, but if fails for the wrong reason
 
-[ $compiler == dart2js && $fast_startup && !$fasta ]
-html/custom/constructor_calls_created_synchronously_test: Fail
-
-[ $compiler == dart2js && $fasta ]
-html/custom/mirrors_2_test: RuntimeError
-html/custom/mirrors_test: RuntimeError
-html/indexeddb_1_test/functional: RuntimeError
-html/indexeddb_3_test: RuntimeError
-html/indexeddb_5_test: RuntimeError
-html/js_typed_interop_default_arg_test/explicit_argument: RuntimeError
-html/js_typed_interop_test: RuntimeError
-math/double_pow_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-typed_data/int32x4_arithmetic_test/int64: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-typed_data/int32x4_arithmetic_test/none: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-typed_data/int64_list_load_store_test: CompileTimeError, OK # Error if web int literal cannot be represented exactly, see http://dartbug.com/33351
-
-[ $compiler == dart2js && $fasta && $host_checked ]
+[ $compiler == dart2js && $host_checked ]
 html/custom/mirrors_2_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 html/custom/mirrors_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 html/indexeddb_3_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
@@ -729,7 +719,14 @@
 html/js_typed_interop_side_cast_exp_test: Crash # 'file:*/pkg/compiler/lib/src/common_elements.dart': Failed assertion: line 405 pos 12: 'element.name == '=='': is not true.
 html/js_typed_interop_test: CompileTimeError
 
-[ $compiler == dart2js && $fasta && $minified ]
+[ $compiler == dart2js && $ie ]
+html/fontface_loaded_test: RuntimeError # FontFace polyfill?
+html/fontface_test: Fail # Fontface not supported on ie
+
+[ $compiler == dart2js && $ie && $strong ]
+html/interactive_media_test: RuntimeError
+
+[ $compiler == dart2js && $minified ]
 html/audiobuffersourcenode_test/functional: RuntimeError
 html/audiobuffersourcenode_test/supported: RuntimeError
 html/audiocontext_test/supported: RuntimeError
@@ -740,6 +737,7 @@
 html/canvas_pixel_array_type_alias_test/typed_data: RuntimeError
 html/canvas_pixel_array_type_alias_test/types1: RuntimeError
 html/canvas_pixel_array_type_alias_test/types2: RuntimeError
+html/canvas_pixel_array_type_alias_test/types2_runtimeTypeName: Fail, OK # Issue 12605
 html/custom/mirrors_2_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/custom/mirrors_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/custom_elements_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
@@ -805,19 +803,6 @@
 html/typed_arrays_1_test/supported: RuntimeError
 html/webgl_1_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 
-[ $compiler == dart2js && !$fasta ]
-async/future_or_bad_type_test: MissingCompileTimeError
-
-[ $compiler == dart2js && $ie ]
-html/fontface_loaded_test: RuntimeError # FontFace polyfill?
-html/fontface_test: Fail # Fontface not supported on ie
-
-[ $compiler == dart2js && $ie && $strong ]
-html/interactive_media_test: RuntimeError
-
-[ $compiler == dart2js && $minified ]
-html/canvas_pixel_array_type_alias_test/types2_runtimeTypeName: Fail, OK # Issue 12605
-
 [ $compiler == dart2js && $strong ]
 async/future_or_type_test: RuntimeError
 async/slow_consumer2_test: RuntimeError
diff --git a/tests/lib_2/lib_2_dartdevc.status b/tests/lib_2/lib_2_dartdevc.status
index 8ad1f08..610f4b9 100644
--- a/tests/lib_2/lib_2_dartdevc.status
+++ b/tests/lib_2/lib_2_dartdevc.status
@@ -72,7 +72,6 @@
 html/custom_element_name_clash_test: Skip # Issue 29922
 html/custom_elements_23127_test: Skip # Issue 29922
 html/custom_elements_test: Skip # Issue 29922
-html/deferred_multi_app_htmltest: Skip # Issue 29919
 html/element_classes_test: RuntimeError # Issue 29922
 html/isolates_test: RuntimeError # Issue 29922
 html/js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue 29922
@@ -81,11 +80,8 @@
 html/js_typed_interop_type_test: RuntimeError # Issue 30947
 html/js_util_test: RuntimeError # Issue 29922
 html/media_stream_test: RuntimeError # Issue 29922
-html/no_linked_scripts_htmltest: Skip # Issue 29919
 html/notification_permission_test: Skip # Issue 32002
-html/scripts_htmltest: Skip # Issue 29919
 html/transition_event_test: Pass, RuntimeError, Timeout # Issue 29922, this test seems flaky
-html/two_scripts_htmltest: Skip # Issue 29919
 html/webgl_extensions_test: RuntimeError # Issue 31017
 html/worker_api_test: RuntimeError # Issue 29922
 isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
diff --git a/tests/lib_2/lib_2_kernel.status b/tests/lib_2/lib_2_kernel.status
index 44bc1dd..2c1250c 100644
--- a/tests/lib_2/lib_2_kernel.status
+++ b/tests/lib_2/lib_2_kernel.status
@@ -35,11 +35,6 @@
 mirrors/generic_interface_test/01: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/13: MissingCompileTimeError
 mirrors/metadata_allowed_values_test/14: MissingCompileTimeError
-mirrors/reflected_type_classes_test/02: MissingCompileTimeError
-mirrors/reflected_type_classes_test/03: MissingCompileTimeError
-mirrors/reflected_type_test/02: MissingCompileTimeError
-mirrors/reflected_type_test/03: MissingCompileTimeError
-mirrors/variable_is_const_test/01: MissingCompileTimeError
 
 [ $arch == simarm64 && $strong && ($compiler == dartk || $compiler == dartkb) ]
 isolate/mint_maker_test: Timeout # Please triage.
@@ -112,9 +107,6 @@
 [ $mode == debug && $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
 isolate/message3_test/constList_identical: Skip # Timeout
 
-[ $mode == debug && $strong && ($compiler == dartk || $compiler == dartkb) ]
-mirrors/variable_is_const_test/01: Crash # Issue 32326
-
 [ $runtime == vm && $checked && $strong && ($compiler == dartk || $compiler == dartkb) ]
 mirrors/redirecting_factory_different_type_test/01: MissingCompileTimeError # Issue 28424
 mirrors/redirecting_factory_different_type_test/none: RuntimeError # Issue 28424
@@ -225,9 +217,6 @@
 [ $system == windows && ($compiler == dartk || $compiler == dartkb) ]
 isolate/ping_pause_test: Skip # Issues 32137 and 32138
 
-[ $fasta && $strong ]
-mirrors/top_level_accessors_test/01: MissingCompileTimeError
-
 [ $fasta && !$strong ]
 isolate/isolate_import_test/01: MissingCompileTimeError
 isolate/isolate_stress_test: CompileTimeError
@@ -301,7 +290,6 @@
 mirrors/redirecting_factory_different_type_test/02: MissingCompileTimeError
 mirrors/redirecting_factory_different_type_test/none: RuntimeError
 mirrors/redirecting_factory_reflection_test: RuntimeError
-mirrors/top_level_accessors_test/01: MissingCompileTimeError
 
 # ===== Skip dartk and darkp in !$strong mode ====
 [ !$strong && ($compiler == dartk || $compiler == dartkb) ]
diff --git a/tests/standalone_2/standalone_2_analyzer.status b/tests/standalone_2/standalone_2_analyzer.status
index 8bdeaea..6de6cbf 100644
--- a/tests/standalone_2/standalone_2_analyzer.status
+++ b/tests/standalone_2/standalone_2_analyzer.status
@@ -4,36 +4,25 @@
 
 [ $compiler == dart2analyzer ]
 deferred_transitive_import_error_test: Skip # Contains intentional errors.
+io/directory_invalid_arguments_test: CompileTimeError
 io/http_cookie_date_test: Pass, StaticWarning, CompileTimeError # Issue 28843
 io/http_headers_test: Pass, StaticWarning, CompileTimeError # Issue 28843
 io/http_parser_test: Pass, StaticWarning, CompileTimeError # Issue 28843
 io/process_exit_negative_test: Skip
+io/process_invalid_arguments_test: CompileTimeError
+io/raw_secure_server_socket_argument_test: CompileTimeError
+io/secure_socket_argument_test: CompileTimeError
+io/stdout_bad_argument_test: CompileTimeError
 io/web_socket_protocol_processor_test: Pass, StaticWarning, CompileTimeError # Issue 28843
-package/package1_test: StaticWarning
-package/package1_test: CompileTimeError
-package/package_test: StaticWarning
-package/package_test: CompileTimeError
-package/scenarios/both_dir_and_file/prefers_packages_file_test: StaticWarning
+package/package_isolate_test: CompileTimeError
 package/scenarios/both_dir_and_file/prefers_packages_file_test: CompileTimeError
 package/scenarios/invalid/invalid_package_name_test: Crash, OK # Analyzer exits on invalid package config
 package/scenarios/invalid/invalid_utf8_test: Crash, OK # Analyzer exits on invalid package config
 package/scenarios/invalid/non_existent_packages_file_test: Crash, OK # Analyzer exits on invalid package config
 package/scenarios/invalid/same_package_twice_test: Crash, OK # Analyzer exits on invalid package config
-package/scenarios/packages_dir_only/packages_dir_only_test: StaticWarning
-package/scenarios/packages_dir_only/packages_dir_only_test: CompileTimeError
-package/scenarios/packages_file_in_parent/sub/packages_file_in_parent_test: StaticWarning
 package/scenarios/packages_file_in_parent/sub/packages_file_in_parent_test: CompileTimeError
-package/scenarios/packages_file_only/packages_file_only_test: StaticWarning
 package/scenarios/packages_file_only/packages_file_only_test: CompileTimeError
 
 [ $compiler == dart2analyzer && $system == windows ]
 package/scenarios/empty_packages_file/empty_packages_file_option_test: Crash, Pass # Issue 28645
 package/scenarios/packages_file_strange_formatting/empty_package_dir_test: Crash # Issue 28645
-
-[ $compiler == dart2analyzer && $strong ]
-io/directory_invalid_arguments_test: CompileTimeError
-io/process_invalid_arguments_test: CompileTimeError
-io/raw_secure_server_socket_argument_test: CompileTimeError
-io/secure_socket_argument_test: CompileTimeError
-io/stdout_bad_argument_test: CompileTimeError
-package/package_isolate_test: CompileTimeError
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 4af09aa..347a812 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -34,6 +34,9 @@
 oom_error_stacktrace_test: RuntimeError
 out_of_memory_test: RuntimeError
 
+[ $compiler == dartkb ]
+no_lazy_dispatchers_test: SkipByDesign # KBC interpreter doesn't support --no_lazy_dispatchers
+
 [ $compiler == fasta ]
 io/arguments_test: CompileTimeError
 
@@ -43,7 +46,7 @@
 package/package_test: CompileTimeError
 package/scenarios/invalid/same_package_twice_test: CompileTimeError
 
-[ $arch != simarm && $arch != simarm64 && $arch != simdbc64 && $fasta ]
+[ $arch != simarm && $arch != simarm64 && $arch != simdbc64 && $compiler != dartkb && $fasta ]
 package/scenarios/invalid/invalid_utf8_test: CompileTimeError # Issue 32085
 package/scenarios/invalid/non_existent_packages_file_test: CompileTimeError # Issue 32085
 
diff --git a/third_party/.gitignore b/third_party/.gitignore
index 5cb79f5..315ad35 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -6,7 +6,6 @@
 !pkg
 !pkg_tested
 !/tcmalloc
-!drt_resources
 !d8
 !7zip.tar.gz.sha1
 !firefox_jsshell
diff --git a/third_party/drt_resources/.gitignore b/third_party/drt_resources/.gitignore
deleted file mode 100644
index 7912236..0000000
--- a/third_party/drt_resources/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-AHEM____.TTF
diff --git a/third_party/drt_resources/AHEM____.TTF.sha1 b/third_party/drt_resources/AHEM____.TTF.sha1
deleted file mode 100644
index bba0dbc..0000000
--- a/third_party/drt_resources/AHEM____.TTF.sha1
+++ /dev/null
@@ -1 +0,0 @@
-8cdc9e68594fbb6db8c7b4bff643ab2432b51db6
\ No newline at end of file
diff --git a/third_party/drt_resources/README.md b/third_party/drt_resources/README.md
deleted file mode 100644
index c981e5b..0000000
--- a/third_party/drt_resources/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Content-shell resources
-
-The layout tests of content_shell (formerly called DumpRenderTree, drt)
-require a font called AHEM____.TTF on Windows. This resource is downloaded
-from cloud storage, using the hash in AHEM____.TTF.sha1, by a hook
-in the DEPS file, that is run by gclient sync or gclient runhooks.
diff --git a/tools/VERSION b/tools/VERSION
index dedc53a..69aa10a 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 1
 PATCH 0
-PRERELEASE 3
-PRERELEASE_PATCH 1
+PRERELEASE 4
+PRERELEASE_PATCH 0
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index a82fba1..08fc477 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -23,7 +23,7 @@
       "samples/",
       "sdk/",
       "tests/angular/",
-      "tests/co19/",
+      "tests/co19_2/",
       "tests/compiler/",
       "tests/corelib/",
       "tests/corelib_2/",
@@ -61,7 +61,7 @@
       "samples/",
       "sdk/",
       "tests/angular/",
-      "tests/co19/",
+      "tests/co19_2/",
       "tests/compiler/",
       "tests/corelib/",
       "tests/corelib_2/",
@@ -364,11 +364,20 @@
         "use-blobs": true
     }},
     "dartkp-linux-(product|release)-x64": { },
+    "dartkp-obsufcate-linux-release-x64": {
+      "options": {
+        "builder-tag": "obfuscated",
+        "vm-options": ["--obfuscate"]
+    }},
     "dartkp-linux-debug-x64": {
       "options": {
         "vm-options": ["--no-enable-malloc-hooks"]
     }},
     "dartk-(linux|mac)-(debug|release)-x64": { },
+    "dartk-checked-linux-release-x64": {
+      "options": {
+        "checked": true
+    }},
     "dartk-win-release-x64": { },
     "dartk-linux-(debug|release)-simdbc64": { },
     "dartk-linux-release-(simarm|simarm64)": { },
@@ -669,6 +678,32 @@
     },
     {
       "builders": [
+        "vm-kernel-precomp-obfuscate-linux-release-x64"
+      ],
+      "meta": {
+        "description": "This configuration is used by the obfuscated vm kernel precomp builders."
+      },
+      "steps": [
+        {
+          "name": "build dart",
+          "script": "tools/build.py",
+          "arguments": [
+            "runtime_kernel",
+            "dart_precompiled_runtime"
+          ]
+        },
+        {
+          "name": "vm tests",
+          "arguments": [
+            "-ndartkp-obfuscate-${system}-${mode}-${arch}"
+          ],
+          "fileset": "vm-kernel",
+          "shards": 10
+        }
+      ]
+    },
+    {
+      "builders": [
         "vm-asan-linux-release-x64"
       ],
       "meta": {
@@ -737,6 +772,28 @@
     },
     {
       "builders": [
+        "vm-kernel-checked-linux-release-x64"
+      ],
+      "meta": {
+        "description": "This configuration is for the kernel builder group in checked mode."
+      },
+      "steps": [
+        {
+          "name": "build dart",
+          "script": "tools/build.py",
+          "arguments": ["runtime_kernel"]
+        },
+        {
+          "name": "vm tests",
+          "arguments": [
+            "-ndartk-checked-linux-release-x64"],
+          "fileset": "vm-kernel",
+          "shards": 10
+        }
+      ]
+    },
+    {
+      "builders": [
         "app-linux-debug-x64",
         "app-linux-product-x64",
         "app-linux-release-x64"
@@ -1154,6 +1211,16 @@
           "fileset": "dart2js_hostasserts"
         },
         {
+          "name": "dart2js co19_2 tests",
+          "arguments": [
+            "-ndart2js-hostasserts-linux-ia32-d8",
+            "--dart2js-batch",
+            "co19_2"
+          ],
+          "shards": 6,
+          "fileset": "dart2js_hostasserts"
+        },
+        {
           "name": "dart2js package tests",
           "arguments": [
             "-ndart2js-hostasserts-linux-ia32-d8",
@@ -1211,6 +1278,17 @@
           "fileset": "dart2js"
         },
         {
+          "name": "dart2js co19_2 tests",
+          "arguments": [
+            "-ndart2js-${system}-${runtime}",
+            "--dart2js-batch",
+            "--reset-browser-configuration",
+            "co19_2"
+          ],
+          "shards": 6,
+          "fileset": "dart2js"
+        },
+        {
           "name": "dart2js package tests",
           "arguments": [
             "-ndart2js-${system}-${runtime}",
@@ -1271,6 +1349,17 @@
           "fileset": "dart2js"
         },
         {
+          "name": "dart2js fast-startup co19_2 tests",
+          "arguments": [
+            "-ndart2js-faststartup-${system}-${runtime}",
+            "--dart2js-batch",
+            "--reset-browser-configuration",
+            "co19_2"
+          ],
+          "shards": 6,
+          "fileset": "dart2js"
+        },
+        {
           "name": "dart2js fast-startup package tests",
           "arguments": [
             "-ndart2js-faststartup-${system}-${runtime}",
@@ -1596,81 +1685,6 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": ["create_sdk"]
-        },
-        {
-          "name": "analyze pkg/analysis_server --use-cfe",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": [
-            "pkg/analyzer_cli/bin/analyzer.dart",
-            "--fatal-warnings",
-            "--use-cfe",
-            "pkg/analysis_server"
-          ]
-        },
-        {
-          "name": "analyze pkg/analyzer --use-cfe",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": [
-            "pkg/analyzer_cli/bin/analyzer.dart",
-            "--fatal-warnings",
-            "--use-cfe",
-            "pkg/analyzer"
-          ]
-        },
-        {
-          "name": "analyze pkg/analyzer_cli --use-cfe",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": [
-            "pkg/analyzer_cli/bin/analyzer.dart",
-            "--fatal-warnings",
-            "--use-cfe",
-            "pkg/analyzer_cli"
-          ]
-        },
-        {
-          "name": "analyze pkg/front_end --use-cfe",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": [
-            "pkg/analyzer_cli/bin/analyzer.dart",
-            "--fatal-warnings",
-            "--use-cfe",
-            "pkg/front_end"
-          ]
-        },
-        {
-          "name": "analyze pkg/kernel --use-cfe",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": [
-            "pkg/analyzer_cli/bin/analyzer.dart",
-            "--fatal-warnings",
-            "--use-cfe",
-            "pkg/kernel"
-          ]
-        },
-        {
-          "name": "dartanalyzer --batch --use-cfe pkg tests",
-          "arguments": [
-            "-nanalyzer-cfe-${system}",
-            "pkg"
-          ]
-        },
-        {
-          "name": "run language2 tests",
-          "arguments": [
-            "-nanalyzer-cfe-${system}",
-            "language_2"
-          ]
-        },
-        {
-          "name": "benchmarks analysis-server-cold --use-cfe",
-          "script": "out/ReleaseX64/dart-sdk/bin/dart",
-          "arguments": [
-            "pkg/analysis_server/benchmark/benchmarks.dart",
-            "run",
-            "--use-cfe",
-            "--repeat=1",
-            "analysis-server-cold"
-          ]
         }
       ]
     },
@@ -1857,15 +1871,7 @@
           "arguments": ["create_sdk"]
         },
         {
-          "name": "analyze pkg/analysis_server",
-          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
-          "arguments": [
-            "--use-fasta-parser",
-            "pkg/analysis_server"
-          ]
-        },
-        {
-          "name": "analyze pkg/analyzer",
+          "name": "analyze pkg/analyzer --use-fasta-parser",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": [
             "--use-fasta-parser",
@@ -1873,7 +1879,15 @@
           ]
         },
         {
-          "name": "analyze pkg/analyzer_cli",
+          "name": "analyze pkg/analyzer --no-use-fasta-parser",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
+          "arguments": [
+            "--no-use-fasta-parser",
+            "pkg/analyzer"
+          ]
+        },
+        {
+          "name": "analyze pkg/analyzer_cli --use-fasta-parser",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": [
             "--use-fasta-parser",
@@ -1888,23 +1902,26 @@
           ]
         },
         {
-          "name": "run analyzer unit tests",
+          "name": "analyze pkg/analyzer_cli --no-use-fasta-parser",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": [
-            "-nunittest-analyzer_use_fasta-linux",
-            "pkg/analyzer"
+            "--no-use-fasta-parser",
+            "pkg/analyzer_cli"
           ]
         },
         {
-          "name": "run analysis server plugin tests",
+          "name": "analyze pkg/analysis_server --use-fasta-parser",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": [
-            "-nunittest-analyzer_use_fasta-linux",
-            "pkg/analyzer_plugin"
+            "--use-fasta-parser",
+            "pkg/analysis_server"
           ]
         },
         {
-          "name": "run analysis server unit tests",
+          "name": "analyze pkg/analysis_server --no-use-fasta-parser",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": [
-            "-nunittest-analyzer_use_fasta-linux",
+            "--no-use-fasta-parser",
             "pkg/analysis_server"
           ]
         }
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 9e5670f..4dba863 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -219,11 +219,7 @@
     out/ReleaseIA32/dart pkg/front_end/tool/perf.dart scan hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart --legacy kernel_gen_e2e hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
-    out/ReleaseIA32/dart pkg/front_end/tool/perf.dart linked_summarize hello.dart
-    out/ReleaseIA32/dart pkg/front_end/tool/perf.dart prelinked_summarize hello.dart
     out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart
-    out/ReleaseIA32/dart pkg/front_end/tool/perf.dart unlinked_summarize hello.dart
-    out/ReleaseIA32/dart pkg/front_end/tool/perf.dart unlinked_summarize_from_sources hello.dart
     out/ReleaseIA32/dart --print_metrics pkg/analyzer_cli/bin/analyzer.dart --dart-sdk=sdk hello.dart
     cd ..
     rm -rf tmp
@@ -399,11 +395,7 @@
     out/ReleaseX64/dart pkg/front_end/tool/perf.dart scan hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart --legacy kernel_gen_e2e hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
-    out/ReleaseX64/dart pkg/front_end/tool/perf.dart linked_summarize hello.dart
-    out/ReleaseX64/dart pkg/front_end/tool/perf.dart prelinked_summarize hello.dart
     out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart
-    out/ReleaseX64/dart pkg/front_end/tool/perf.dart unlinked_summarize hello.dart
-    out/ReleaseX64/dart pkg/front_end/tool/perf.dart unlinked_summarize_from_sources hello.dart
     out/ReleaseX64/dart pkg/analysis_server/benchmark/benchmarks.dart run --quick --repeat 1 analysis-server-cold
     out/ReleaseX64/dart --print_metrics pkg/analyzer_cli/bin/analyzer.dart --dart-sdk=sdk hello.dart
     echo '[{"name":"foo","edits":[["pkg/compiler/lib/src/dart2js.dart","2016","2017"],["pkg/compiler/lib/src/options.dart","2016","2017"]]}]' > appjit_train_edits.json
diff --git a/tools/get_archive.py b/tools/get_archive.py
deleted file mode 100755
index fe1ac51..0000000
--- a/tools/get_archive.py
+++ /dev/null
@@ -1,342 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-
-# Gets or updates a content shell (a nearly headless build of chrome). This is
-# used for running browser tests of client applications.
-
-import json
-import optparse
-import os
-import platform
-import shutil
-import subprocess
-import sys
-import tempfile
-import zipfile
-
-import utils
-
-def NormJoin(path1, path2):
-  return os.path.normpath(os.path.join(path1, path2))
-
-# Change into the dart directory as we want the project to be rooted here.
-dart_src = NormJoin(os.path.dirname(sys.argv[0]), os.pardir)
-os.chdir(dart_src)
-
-GSUTIL_DIR = os.path.join('third_party', 'gsutil')
-GSUTIL = GSUTIL_DIR + '/gsutil'
-
-DRT_DIR = os.path.join('client', 'tests', 'drt')
-DRT_VERSION = os.path.join(DRT_DIR, 'LAST_VERSION')
-DRT_LATEST_PATTERN = (
-    'gs://dartium-archive/latest/drt-%(osname)s-%(bot)s-*.zip')
-DRT_PERMANENT_PATTERN = ('gs://dartium-archive/drt-%(osname)s-%(bot)s/drt-'
-                         '%(osname)s-%(bot)s-%(num1)s.%(num2)s.zip')
-
-DARTIUM_DIR = os.path.join('client', 'tests', 'dartium')
-DARTIUM_VERSION = os.path.join(DARTIUM_DIR, 'LAST_VERSION')
-DARTIUM_LATEST_PATTERN = (
-    'gs://dartium-archive/latest/dartium-%(osname)s-%(bot)s-*.zip')
-DARTIUM_PERMANENT_PATTERN = ('gs://dartium-archive/dartium-%(osname)s-%(bot)s/'
-                             'dartium-%(osname)s-%(bot)s-%(num1)s.%(num2)s.zip')
-
-SDK_DIR = os.path.join(utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32'),
-    'dart-sdk')
-SDK_VERSION = os.path.join(SDK_DIR, 'LAST_VERSION')
-SDK_LATEST_PATTERN = 'gs://dart-archive/channels/dev/raw/latest/VERSION'
-# TODO(efortuna): Once the x64 VM also is optimized, select the version
-# based on whether we are running on a 32-bit or 64-bit system.
-SDK_PERMANENT = ('gs://dart-archive/channels/dev/raw/%(version_num)s/sdk/' +
-    'dartsdk-%(osname)s-ia32-release.zip')
-
-# Dictionary storing the earliest revision of each download we have stored.
-LAST_VALID = {'dartium': 4285, 'chromedriver': 7823, 'sdk': 9761, 'drt': 5342}
-
-sys.path.append(os.path.join(GSUTIL_DIR, 'third_party', 'boto'))
-import boto
-
-
-def ExecuteCommand(*cmd):
-  """Execute a command in a subprocess."""
-  pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-  output, error = pipe.communicate()
-  return pipe.returncode, output
-
-
-def ExecuteCommandVisible(*cmd):
-  """Execute a command in a subprocess, but show stdout/stderr."""
-  result = subprocess.call(cmd, stdout=sys.stdout, stderr=sys.stderr,
-                           stdin=sys.stdin)
-  if result != 0:
-    raise Exception('Execution of "%s" failed' % ' '.join(cmd))
-
-
-def Gsutil(*cmd):
-  return ExecuteCommand('python', GSUTIL, *cmd)
-
-
-def GsutilVisible(*cmd):
-  ExecuteCommandVisible('python', GSUTIL, *cmd)
-
-
-def HasBotoConfig():
-  """Returns true if boto config exists."""
-
-  config_paths = boto.pyami.config.BotoConfigLocations
-  if 'AWS_CREDENTIAL_FILE' in os.environ:
-    config_paths.append(os.environ['AWS_CREDENTIAL_FILE'])
-  for config_path in config_paths:
-    if os.path.exists(config_path):
-      return True
-
-  return False
-
-
-def InRunhooks():
-  """True if this script was called by "gclient runhooks" or "gclient sync\""""
-  return 'runhooks' in sys.argv
-
-
-def GetDartiumRevision(name, bot, directory, version_file, latest_pattern,
-    permanent_prefix, revision_num=None):
-  """Get the latest binary that is stored in the dartium archive.
-
-  Args:
-    name: the name of the desired download.
-    directory: target directory (recreated) to install binary
-    version_file: name of file with the current version stamp
-    latest_pattern: the google store url pattern pointing to the latest binary
-    permanent_prefix: stable google store folder used to download versions
-    revision_num: The desired revision number to retrieve. If revision_num is
-        None, we return the latest revision. If the revision number is specified
-        but unavailable, find the nearest older revision and use that instead.
-  """
-  osdict = {'Darwin':'mac-x64', 'Linux':'linux-x64', 'Windows':'win-ia32'}
-
-  def FindPermanentUrl(out, osname, the_revision_num):
-    output_lines = out.split()
-    latest = output_lines[-1]
-    if not the_revision_num:
-      latest = (permanent_prefix[:permanent_prefix.rindex('/')] % { 'osname' :
-          osname, 'bot' : bot } + latest[latest.rindex('/'):])
-    else:
-      latest = (permanent_prefix % { 'osname' : osname, 'num1' : the_revision_num,
-          'num2' : the_revision_num, 'bot' : bot })
-      foundURL = False
-      while not foundURL:
-        # Test to ensure this URL exists because the dartium-archive builds can
-        # have unusual numbering (a range of CL numbers) sometimes.
-        result, out = Gsutil('ls', permanent_prefix % {'osname' : osname,
-            'num1': the_revision_num, 'num2': '*', 'bot': bot })
-        if result == 0:
-          # First try to find one with the second number the same as the
-          # requested number.
-          latest = out.split()[0]
-          # Now test that the permissions are correct so you can actually
-          # download it.
-          temp_dir = tempfile.mkdtemp()
-          temp_zip = os.path.join(temp_dir, 'foo.zip')
-          returncode, out = Gsutil('cp', latest, 'file://' + temp_zip)
-          if returncode == 0:
-            foundURL = True
-          else:
-            # Unable to download this item (most likely because something went
-            # wrong on the upload and the permissions are bad). Keep looking for
-            # a different URL.
-            the_revision_num = int(the_revision_num) - 1
-          shutil.rmtree(temp_dir)
-        else:
-          # Now try to find one with a nearby CL num.
-          the_revision_num = int(the_revision_num) - 1
-          if the_revision_num <= 0:
-            TooEarlyError()
-    return latest
-
-  GetFromGsutil(name, directory, version_file, latest_pattern, osdict,
-                  FindPermanentUrl, revision_num, bot)
-
-
-def GetSdkRevision(name, directory, version_file, latest_pattern,
-    permanent_prefix, revision_num):
-  """Get a revision of the SDK from the editor build archive.
-
-  Args:
-    name: the name of the desired download
-    directory: target directory (recreated) to install binary
-    version_file: name of file with the current version stamp
-    latest_pattern: the google store url pattern pointing to the latest binary
-    permanent_prefix: stable google store folder used to download versions
-    revision_num: the desired revision number, or None for the most recent
-  """
-  osdict = {'Darwin':'macos', 'Linux':'linux', 'Windows':'win32'}
-  def FindPermanentUrl(out, osname, not_used):
-    rev_num = revision_num
-    if not rev_num:
-      temp_file = tempfile.NamedTemporaryFile(delete=False)
-      temp_file.close()
-      temp_file_url = 'file://' + temp_file.name
-      Gsutil('cp', latest_pattern % {'osname' : osname }, temp_file_url)
-      temp_file = open(temp_file.name)
-      temp_file.seek(0)
-      version_info = temp_file.read()
-      temp_file.close()
-      os.unlink(temp_file.name)
-      if version_info != '':
-        rev_num = json.loads(version_info)['revision']
-      else:
-        print 'Unable to get latest version information.'
-        return ''
-    latest = (permanent_prefix % { 'osname' : osname, 'version_num': rev_num})
-    return latest
-
-  GetFromGsutil(name, directory, version_file, latest_pattern, osdict,
-                  FindPermanentUrl, revision_num)
-
-
-def GetFromGsutil(name, directory, version_file, latest_pattern,
-    os_name_dict, get_permanent_url, revision_num = '', bot = None):
-  """Download and unzip the desired file from Google Storage.
-    Args:
-    name: the name of the desired download
-    directory: target directory (recreated) to install binary
-    version_file: name of file with the current version stamp
-    latest_pattern: the google store url pattern pointing to the latest binary
-    os_name_dict: a dictionary of operating system names and their corresponding
-        strings on the google storage site.
-    get_permanent_url: a function that accepts a listing of available files
-        and the os name, and returns a permanent URL for downloading.
-    revision_num: the desired revision number to get (if not supplied, we get
-        the latest revision)
-  """
-  system = platform.system()
-  try:
-    osname = os_name_dict[system]
-  except KeyError:
-    print >>sys.stderr, ('WARNING: platform "%s" does not support'
-        '%s.') % (system, name)
-    return 0
-
-  # Query for the latest version
-  pattern = latest_pattern  % { 'osname' : osname, 'bot' : bot }
-  result, out = Gsutil('ls', pattern)
-  if result == 0:
-    # use permanent link instead, just in case the latest zip entry gets deleted
-    # while we are downloading it.
-    latest = get_permanent_url(out, osname, revision_num)
-  else: # e.g. no access
-    print "Couldn't download %s: %s\n%s" % (name, pattern, out)
-    if not os.path.exists(version_file):
-      print "Using %s will not work. Please try again later." % name
-    return 0
-
-  # Check if we need to update the file
-  if os.path.exists(version_file):
-    v = open(version_file, 'r').read()
-    if v == latest:
-      if not InRunhooks():
-        print name + ' is up to date.\nVersion: ' + latest
-      return 0 # up to date
-
-  # download the zip file to a temporary path, and unzip to the target location
-  temp_dir = tempfile.mkdtemp()
-  try:
-    temp_zip = os.path.join(temp_dir, 'drt.zip')
-    temp_zip_url = 'file://' + temp_zip
-    # It's nice to show download progress
-    GsutilVisible('cp', latest, temp_zip_url)
-
-    if platform.system() != 'Windows':
-      # The Python zip utility does not preserve executable permissions, but
-      # this does not seem to be a problem for Windows, which does not have a
-      # built in zip utility. :-/
-      result, out = ExecuteCommand('unzip', temp_zip, '-d', temp_dir)
-      if result != 0:
-        raise Exception('Execution of "unzip %s -d %s" failed: %s' %
-                        (temp_zip, temp_dir, str(out)))
-      unzipped_dir = temp_dir + '/' + os.path.basename(latest)[:-len('.zip')]
-    else:
-      z = zipfile.ZipFile(temp_zip)
-      z.extractall(temp_dir)
-      unzipped_dir = os.path.join(temp_dir,
-                                  os.path.basename(latest)[:-len('.zip')])
-      z.close()
-    if directory == SDK_DIR:
-      unzipped_dir = os.path.join(temp_dir, 'dart-sdk')
-    if os.path.exists(directory):
-      print 'Removing old %s tree %s' % (name, directory)
-      shutil.rmtree(directory)
-      if os.path.exists(directory):
-        raise Exception(
-          'Removal of directory %s failed. Is the executable running?' %
-          directory)
-    shutil.move(unzipped_dir, directory)
-  finally:
-    shutil.rmtree(temp_dir)
-
-  # create the version stamp
-  v = open(version_file, 'w')
-  v.write(latest)
-  v.close()
-
-  print 'Successfully downloaded to %s' % directory
-  return 0
-
-
-def TooEarlyError():
-  """Quick shortcutting function, to return early if someone requests a revision
-  that is smaller than the earliest stored. This saves us from doing repeated
-  requests until we get down to 0."""
-  print ('Unable to download requested revision because it is earlier than the '
-      'earliest revision stored.')
-  sys.exit(1)
-
-
-def CopyDrtFont(drt_dir):
-  if platform.system() != 'Windows':
-    return
-  shutil.copy('third_party/drt_resources/AHEM____.TTF', drt_dir)
-
-
-def main():
-  parser = optparse.OptionParser(usage='usage: %prog [options] download_name')
-  parser.add_option('-r', '--revision', dest='revision',
-                    help='Desired revision number to retrieve for the SDK. If '
-                    'unspecified, retrieve the latest SDK build.',
-                    action='store', default=None)
-  parser.add_option('-d', '--debug', dest='debug',
-                    help='Download a debug archive instead of a release.',
-                    action='store_true', default=False)
-  args, positional = parser.parse_args()
-
-  if args.revision and int(args.revision) < LAST_VALID[positional[0]]:
-    return TooEarlyError()
-
-  # Use the incremental release bot ('dartium-*-inc-be') by default.
-  # Issue 13399 Quick fix, update with channel support.
-  bot = 'inc-be'
-  if args.debug:
-    print >>sys.stderr, (
-      'Debug versions of Dartium and content_shell not available')
-    return 1
-
-  if positional[0] == 'dartium':
-    GetDartiumRevision('Dartium', bot, DARTIUM_DIR, DARTIUM_VERSION,
-                         DARTIUM_LATEST_PATTERN, DARTIUM_PERMANENT_PATTERN,
-                         args.revision)
-  elif positional[0] == 'sdk':
-    GetSdkRevision('sdk', SDK_DIR, SDK_VERSION, SDK_LATEST_PATTERN,
-        SDK_PERMANENT, args.revision)
-  elif positional[0] == 'drt':
-    GetDartiumRevision('content_shell', bot, DRT_DIR, DRT_VERSION,
-                         DRT_LATEST_PATTERN, DRT_PERMANENT_PATTERN,
-                         args.revision)
-    CopyDrtFont(DRT_DIR)
-  else:
-    print ('Please specify the target you wish to download from Google Storage '
-        '("drt", "dartium", "chromedriver", or "sdk")')
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/tools/infra/config/cq.cfg b/tools/infra/config/cq.cfg
index 07f7029..758bbb7 100644
--- a/tools/infra/config/cq.cfg
+++ b/tools/infra/config/cq.cfg
@@ -19,7 +19,6 @@
       name: "luci.dart.try"
       builders { name: "analyzer-analysis-server-linux-try" }
       builders { name: "analyzer-linux-release-try" }
-      builders { name: "analyzer-use-cfe-linux-try" }
       builders { name: "benchmark-linux-try" }
       builders { name: "dart-sdk-windows-try" }
       builders { name: "dart2js-strong-linux-x64-chrome-try" }
@@ -32,7 +31,7 @@
       builders { name: "vm-canary-linux-debug-try" }
       builders { name: "vm-kernel-linux-release-simdbc64-try" }
       builders { name: "vm-kernel-linux-release-x64-try" }
-      builders { name: "vm-kernel-mac-release-x64-try" experiment_percentage: 100 }
+      builders { name: "vm-kernel-mac-release-x64-try" experiment_percentage: 5 }
       builders { name: "vm-linux-product-x64-try" }
       builders { name: "vm-linux-release-x64-try" }
       builders { name: "vm-mac-release-x64-try" }
diff --git a/tools/task_kill.py b/tools/task_kill.py
index c620c5d..0f91b73 100755
--- a/tools/task_kill.py
+++ b/tools/task_kill.py
@@ -25,7 +25,6 @@
 EXECUTABLE_NAMES = {
   'win32': {
     'chrome': 'chrome.exe',
-    'content_shell': 'content_shell.exe',
     'dart_bootstrap': 'dart_bootstrap.exe',
     'dart': 'dart.exe',
     'dart_precompiled_runtime': 'dart_precompiled_runtime.exe',
@@ -38,7 +37,6 @@
   },
   'linux': {
     'chrome': 'chrome',
-    'content_shell': 'content_shell',
     'dart_bootstrap': 'dart_bootstrap',
     'dart': 'dart',
     'dart_precompiled_runtime': 'dart_precompiled_runtime',
@@ -49,7 +47,6 @@
   'macos': {
     'chrome': 'Chrome',
     'chrome_helper': 'Chrome Helper',
-    'content_shell': 'Content Shell',
     'dart_bootstrap': 'dart_bootstrap',
     'dart': 'dart',
     'dart_precompiled_runtime': 'dart_precompiled_runtime',
@@ -221,12 +218,6 @@
   status += Kill('chrome_helper')
   status += Kill('iexplore')
   status += Kill('safari')
-  if os_name == "win32":
-    # TODO(29599): Let content_shell affect exit code on windows,
-    # once issue with zombie renderers is fixed.
-    Kill('content_shell')
-  else:
-    status += Kill('content_shell')
   return status
 
 def KillVCSystems():
diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
index 03ee0a9..faa77d7 100644
--- a/tools/testing/dart/browser_controller.dart
+++ b/tools/testing/dart/browser_controller.dart
@@ -565,71 +565,6 @@
   String toString() => "IE";
 }
 
-class AndroidBrowserConfig {
-  final String name;
-  final String package;
-  final String activity;
-  final String action;
-  AndroidBrowserConfig(this.name, this.package, this.activity, this.action);
-}
-
-final contentShellOnAndroidConfig = new AndroidBrowserConfig(
-    'ContentShellOnAndroid',
-    'org.chromium.content_shell_apk',
-    '.ContentShellActivity',
-    'android.intent.action.VIEW');
-
-class AndroidBrowser extends Browser {
-  final bool checkedMode;
-  AdbDevice _adbDevice;
-  AndroidBrowserConfig _config;
-
-  AndroidBrowser(
-      this._adbDevice, this._config, this.checkedMode, String apkPath) {
-    _binary = apkPath;
-  }
-
-  Future<bool> start(String url) {
-    var intent =
-        new Intent(_config.action, _config.package, _config.activity, url);
-    return _adbDevice.waitForBootCompleted().then((_) {
-      return _adbDevice.forceStop(_config.package);
-    }).then((_) {
-      return _adbDevice.killAll();
-    }).then((_) {
-      return _adbDevice.adbRoot();
-    }).then((_) {
-      return _adbDevice.setProp("DART_FORWARDING_PRINT", "1");
-    }).then((_) {
-      if (checkedMode) {
-        return _adbDevice.setProp("DART_FLAGS", "--checked");
-      } else {
-        return _adbDevice.setProp("DART_FLAGS", "");
-      }
-    }).then((_) {
-      return _adbDevice.installApk(new Path(_binary));
-    }).then((_) {
-      return _adbDevice.startActivity(intent).then((_) => true);
-    });
-  }
-
-  Future<bool> close() {
-    if (_adbDevice != null) {
-      return _adbDevice.forceStop(_config.package).then((_) {
-        return _adbDevice.killAll().then((_) => true);
-      });
-    }
-    return new Future.value(true);
-  }
-
-  void logBrowserInfoToTestBrowserOutput() {
-    _testBrowserOutput.stdout
-        .write('Android device id: ${_adbDevice.deviceId}\n');
-  }
-
-  String toString() => _config.name;
-}
-
 class AndroidChrome extends Browser {
   static const String viewAction = 'android.intent.action.VIEW';
   static const String mainAction = 'android.intent.action.MAIN';
@@ -801,25 +736,7 @@
     id = _idCounter++;
   }
 
-  String toJSON() => jsonEncode({'url': url, 'id': id, 'isHtmlTest': false});
-}
-
-/**
- * Describes a test with a custom HTML page to be run in the browser.
- */
-class HtmlTest extends BrowserTest {
-  List<String> expectedMessages;
-
-  HtmlTest(String url, BrowserDoneCallback doneCallback, int timeout,
-      this.expectedMessages)
-      : super(url, doneCallback, timeout) {}
-
-  String toJSON() => jsonEncode({
-        'url': url,
-        'id': id,
-        'isHtmlTest': true,
-        'expectedMessages': expectedMessages
-      });
+  String toJSON() => jsonEncode({'url': url, 'id': id});
 }
 
 /* Describes the output of running the test in a browser */
@@ -1489,9 +1406,6 @@
       var use_iframe = ${configuration.runtime.requiresIFrame};
       var start = new Date();
 
-      // Object that holds the state of an HTML test
-      var html_test;
-
       function newTaskHandler() {
         if (this.readyState == this.DONE) {
           if (this.status == 200) {
@@ -1504,20 +1418,6 @@
               var nextTask = JSON.parse(this.responseText);
               var url = nextTask.url;
               next_id = nextTask.id;
-              if (nextTask.isHtmlTest) {
-                html_test = {
-                  expected_messages: nextTask.expectedMessages,
-                  found_message_count: 0,
-                  double_received_messages: [],
-                  unexpected_messages: [],
-                  found_messages: {}
-                };
-                for (var i = 0; i < html_test.expected_messages.length; ++i) {
-                  html_test.found_messages[html_test.expected_messages[i]] = 0;
-                }
-              } else {
-                html_test = null;
-              }
               run(url);
             }
           } else {
@@ -1562,37 +1462,12 @@
         return true;
       }
 
-      function setChildHandlers(e) {
-        embedded_iframe.contentWindow.addEventListener('message',
-                                                       childMessageHandler,
-                                                       false);
-        embedded_iframe.contentWindow.onerror = childError;
-        reportMessage("First message from html test", true, false);
-        html_test.handlers_installed = true;
-        sendRepeatingStatusUpdate();
-      }
-
-      function checkChildHandlersInstalled() {
-        if (!html_test.handlers_installed) {
-          reportMessage("First message from html test", true, false);
-          reportMessage(
-              'FAIL: Html test did not call ' +
-              'window.parent.dispatchEvent(new Event("detect_errors")) ' +
-              'as its first action', false, false);
-        }
-      }
-
       function run(url) {
         number_of_tests++;
         number_div.innerHTML = number_of_tests;
         executing_div.innerHTML = url;
         if (use_iframe) {
-          if (html_test) {
-            window.addEventListener('detect_errors', setChildHandlers, false);
-            embedded_iframe.onload = checkChildHandlersInstalled;
-          } else {
-            embedded_iframe.onload = null;
-          }
+          embedded_iframe.onload = null;
           embedded_iframe_div.removeChild(embedded_iframe);
           embedded_iframe = document.createElement('iframe');
           embedded_iframe.id = "embedded_iframe";
@@ -1724,13 +1599,6 @@
         var dom =
             embedded_iframe.contentWindow.document.documentElement.innerHTML;
         var message = 'Status:\\n';
-        if (html_test != null) {
-          message +=
-            '  Messages received multiple times:\\n' +
-            '    ' + html_test.double_received_messages + '\\n' +
-            '  Unexpected messages:\\n' +
-            '    ' + html_test.unexpected_messages + '\\n';
-        }
         message += '  DOM:\\n' +
                    '    ' + dom;
         reportMessage(message, false, true);
@@ -1741,35 +1609,8 @@
         setTimeout(sendRepeatingStatusUpdate, STATUS_UPDATE_INTERVAL);
       }
 
-      // HTML tests post messages to their own window, handled by this handler.
-      // This handler is installed on the child window when it sends the
-      // 'detect_errors' event.  Every HTML test must send 'detect_errors' to
-      // its parent window as its first action, so all errors will be caught.
-      function childMessageHandler(e) {
-        var msg = e.data;
-        if (typeof msg != 'string') return;
-        if (msg in html_test.found_messages) {
-          html_test.found_messages[msg]++;
-          if (html_test.found_messages[msg] == 1) {
-            html_test.found_message_count++;
-          } else {
-            html_test.double_received_messages.push(msg);
-            sendStatusUpdate();
-          }
-        } else {
-          html_test.unexpected_messages.push(msg);
-          sendStatusUpdate();
-        }
-        if (html_test.found_message_count ==
-            html_test.expected_messages.length) {
-          reportMessage('Test done: PASS', false, false);
-        }
-      }
-
-      if (!html_test) {
-        window.addEventListener('message', messageHandler, false);
-        waitForDone = false;
-      }
+      window.addEventListener('message', messageHandler, false);
+      waitForDone = false;
       getNextTask();
     }
   </script>
diff --git a/tools/testing/dart/command.dart b/tools/testing/dart/command.dart
index 5b13728..7bb1ae4 100644
--- a/tools/testing/dart/command.dart
+++ b/tools/testing/dart/command.dart
@@ -16,28 +16,11 @@
 
 /// A command executed as a step in a test case.
 class Command {
-  static Command contentShell(
-      String executable,
-      String htmlFile,
-      List<String> options,
-      List<String> dartFlags,
-      Map<String, String> environment) {
-    return new ContentShellCommand._(
-        executable, htmlFile, options, dartFlags, environment);
-  }
-
   static Command browserTest(String url, TestConfiguration configuration,
       {bool retry}) {
     return new BrowserTestCommand._(url, configuration, retry);
   }
 
-  static Command browserHtmlTest(String url, TestConfiguration configuration,
-      List<String> expectedMessages,
-      {bool retry}) {
-    return new BrowserHtmlTestCommand._(
-        url, configuration, expectedMessages, retry);
-  }
-
   static Command compilation(
       String displayName,
       String outputFile,
@@ -403,46 +386,6 @@
   int get hashCode => flags.hashCode ^ env.hashCode;
 }
 
-class ContentShellCommand extends ProcessCommand {
-  ContentShellCommand._(
-      String executable,
-      String htmlFile,
-      List<String> options,
-      List<String> dartFlags,
-      Map<String, String> environmentOverrides)
-      : super._("content_shell", executable, _getArguments(options, htmlFile),
-            _getEnvironment(environmentOverrides, dartFlags));
-
-  // Cache the modified environments in a map from the old environment and
-  // the string of Dart flags to the new environment.  Avoid creating new
-  // environment object for each command object.
-  static Map<AddFlagsKey, Map<String, String>> environments = {};
-
-  static Map<String, String> _getEnvironment(
-      Map<String, String> env, List<String> dartFlags) {
-    var needDartFlags = dartFlags != null && dartFlags.isNotEmpty;
-    if (needDartFlags) {
-      if (env == null) {
-        env = const <String, String>{};
-      }
-      var flags = dartFlags.join(' ');
-      return environments.putIfAbsent(
-          new AddFlagsKey(flags, env),
-          () => new Map<String, String>.from(env)
-            ..addAll({'DART_FLAGS': flags, 'DART_FORWARDING_PRINT': '1'}));
-    }
-    return env;
-  }
-
-  static List<String> _getArguments(List<String> options, String htmlFile) {
-    var arguments = options.toList();
-    arguments.add(htmlFile);
-    return arguments;
-  }
-
-  int get maxNumRetries => 3;
-}
-
 class BrowserTestCommand extends Command {
   Runtime get browser => configuration.runtime;
   final String url;
@@ -480,22 +423,6 @@
   int get maxNumRetries => 4;
 }
 
-class BrowserHtmlTestCommand extends BrowserTestCommand {
-  List<String> expectedMessages;
-  BrowserHtmlTestCommand._(String url, TestConfiguration configuration,
-      this.expectedMessages, bool retry)
-      : super._(url, configuration, retry);
-
-  void _buildHashCode(HashCodeBuilder builder) {
-    super._buildHashCode(builder);
-    builder.addJson(expectedMessages);
-  }
-
-  bool _equal(BrowserHtmlTestCommand other) =>
-      super._equal(other) &&
-      identical(expectedMessages, other.expectedMessages);
-}
-
 class AnalysisCommand extends ProcessCommand {
   AnalysisCommand._(String executable, List<String> arguments,
       Map<String, String> environmentOverrides)
diff --git a/tools/testing/dart/command_output.dart b/tools/testing/dart/command_output.dart
index 53e3d40..4f7521c 100644
--- a/tools/testing/dart/command_output.dart
+++ b/tools/testing/dart/command_output.dart
@@ -51,6 +51,17 @@
     return Expectation.pass;
   }
 
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  Expectation realResult(TestCase testCase) {
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (_didFail(testCase)) return Expectation.fail;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+
+    return Expectation.pass;
+  }
+
   bool get hasCrashed {
     // dart2js exits with code 253 in case of unhandled exceptions.
     // The dart binary exits with code 253 in case of an API error such
@@ -76,8 +87,6 @@
     return exitCode < 0;
   }
 
-  bool get hasSyntaxError => exitCode == parseFailExitCode;
-
   bool _didFail(TestCase testCase) => exitCode != 0 && !hasCrashed;
 
   bool get canRunDependendCommands {
@@ -129,180 +138,6 @@
   }
 }
 
-class ContentShellCommandOutput extends CommandOutput {
-  // Although tests are reported as passing, content shell sometimes exits with
-  // a nonzero exitcode which makes our builders extremely flaky.
-  // See: http://dartbug.com/15139.
-  // TODO(rnystrom): Is this still needed? The underlying bug is closed.
-  static const _whitelistedContentShellExitCode = -1073740022;
-
-  static bool _failedBecauseOfFlakyInfrastructure(
-      Command command, bool timedOut, List<int> stderrBytes) {
-    // If the browser test failed, it may have been because content shell
-    // and the virtual framebuffer X server didn't hook up, or it crashed with
-    // a core dump. Sometimes content shell crashes after it has set the stdout
-    // to PASS, so we have to do this check first.
-    // Content shell also fails with a broken pipe message: Issue 26739
-    var zygoteCrash =
-        new RegExp(r"ERROR:zygote_linux\.cc\(\d+\)] write: Broken pipe");
-    var stderr = decodeUtf8(stderrBytes);
-    // TODO(7564): See http://dartbug.com/7564
-    // This may not be happening anymore.  Test by removing this suppression.
-    if (stderr.contains(cannotOpenDisplayMessage) ||
-        stderr.contains(failedToRunCommandMessage)) {
-      DebugLogger.warning(
-          "Warning: Failure because of missing XDisplay. Test ignored");
-      return true;
-    }
-    // TODO(26739): See http://dartbug.com/26739
-    if (zygoteCrash.hasMatch(stderr)) {
-      DebugLogger.warning("Warning: Failure because of content_shell "
-          "zygote crash. Test ignored");
-      return true;
-    }
-    return false;
-  }
-
-  final bool _infraFailure;
-
-  ContentShellCommandOutput(
-      Command command,
-      int exitCode,
-      bool timedOut,
-      List<int> stdout,
-      List<int> stderr,
-      Duration time,
-      bool compilationSkipped)
-      : _infraFailure =
-            _failedBecauseOfFlakyInfrastructure(command, timedOut, stderr),
-        super(command, exitCode, timedOut, stdout, stderr, time,
-            compilationSkipped, 0);
-
-  Expectation result(TestCase testCase) {
-    if (_infraFailure) {
-      return Expectation.ignore;
-    }
-
-    // Handle crashes and timeouts first
-    if (hasCrashed) return Expectation.crash;
-    if (hasTimedOut) return Expectation.timeout;
-    if (hasNonUtf8) return Expectation.nonUtf8Error;
-
-    var outcome = _getOutcome();
-
-    if (testCase.hasRuntimeError) {
-      if (!outcome.canBeOutcomeOf(Expectation.runtimeError)) {
-        return Expectation.missingRuntimeError;
-      }
-    }
-    if (testCase.isNegative) {
-      if (outcome.canBeOutcomeOf(Expectation.fail)) return Expectation.pass;
-      return Expectation.fail;
-    }
-    return outcome;
-  }
-
-  bool get successful => canRunDependendCommands;
-
-  bool get canRunDependendCommands {
-    // We cannot rely on the exit code of content_shell as a method to
-    // determine if we were successful or not.
-    return super.canRunDependendCommands && !_didFail(null);
-  }
-
-  bool get hasCrashed => super.hasCrashed || _rendererCrashed;
-
-  Expectation _getOutcome() {
-    if (_browserTestFailure) {
-      return Expectation.runtimeError;
-    }
-    return Expectation.pass;
-  }
-
-  bool get _rendererCrashed =>
-      decodeUtf8(super.stdout).contains("#CRASHED - rendere");
-
-  bool get _browserTestFailure {
-    // Browser tests fail unless stdout contains
-    // 'Content-Type: text/plain' followed by 'PASS'.
-    var hasContentType = false;
-    var stdoutLines = decodeUtf8(super.stdout).split("\n");
-    var containsFail = false;
-    var containsPass = false;
-    for (String line in stdoutLines) {
-      switch (line) {
-        case 'Content-Type: text/plain':
-          hasContentType = true;
-          break;
-        case 'FAIL':
-          if (hasContentType) {
-            containsFail = true;
-          }
-          break;
-        case 'PASS':
-          if (hasContentType) {
-            containsPass = true;
-          }
-          break;
-      }
-    }
-    if (hasContentType) {
-      if (containsFail && containsPass) {
-        DebugLogger.warning("Test had 'FAIL' and 'PASS' in stdout. ($command)");
-      }
-      if (!containsFail && !containsPass) {
-        DebugLogger.warning("Test had neither 'FAIL' nor 'PASS' in stdout. "
-            "($command)");
-        return true;
-      }
-      if (containsFail) {
-        return true;
-      }
-      assert(containsPass);
-      if (exitCode != 0) {
-        var message = "All tests passed, but exitCode != 0. "
-            "Actual exitcode: $exitCode. "
-            "($command)";
-        DebugLogger.warning(message);
-        diagnostics.add(message);
-      }
-
-      var isWindows = io.Platform.operatingSystem == 'windows';
-      return (!hasCrashed &&
-          exitCode != 0 &&
-          (!isWindows || exitCode != _whitelistedContentShellExitCode));
-    }
-
-    DebugLogger.warning("Couldn't find 'Content-Type: text/plain' in output. "
-        "($command).");
-    return true;
-  }
-}
-
-class HtmlBrowserCommandOutput extends ContentShellCommandOutput {
-  HtmlBrowserCommandOutput(
-      Command command,
-      int exitCode,
-      bool timedOut,
-      List<int> stdout,
-      List<int> stderr,
-      Duration time,
-      bool compilationSkipped)
-      : super(command, exitCode, timedOut, stdout, stderr, time,
-            compilationSkipped);
-
-  bool _didFail(TestCase testCase) {
-    return _getOutcome() != Expectation.pass;
-  }
-
-  bool get _browserTestFailure {
-    // We should not need to convert back and forward.
-    var output = decodeUtf8(super.stdout);
-    if (output.contains("FAIL")) return true;
-    return !output.contains("PASS");
-  }
-}
-
 class BrowserTestJsonResult {
   static const _allowedTypes = const [
     'sync_exception',
@@ -380,7 +215,7 @@
   }
 
   static Expectation _getOutcome(Map<String, List<String>> messagesByType) {
-    occured(String type) => messagesByType[type].isNotEmpty;
+    occurred(String type) => messagesByType[type].isNotEmpty;
 
     searchForMsg(List<String> types, String message) {
       return types.any((type) => messagesByType[type].contains(message));
@@ -389,13 +224,13 @@
     // FIXME(kustermann,ricow): I think this functionality doesn't work in
     // test_controller.js: So far I haven't seen anything being reported on
     // "window.compilationerror"
-    if (occured('window_compilationerror')) {
+    if (occurred('window_compilationerror')) {
       return Expectation.compileTimeError;
     }
 
-    if (occured('sync_exception') ||
-        occured('window_onerror') ||
-        occured('script_onerror')) {
+    if (occurred('sync_exception') ||
+        occurred('window_onerror') ||
+        occurred('script_onerror')) {
       return Expectation.runtimeError;
     }
 
@@ -462,7 +297,7 @@
         stderr = "This test timed out. The delay until the test actually "
             "started was: ${result.delayUntilTestStarted}.";
       } else {
-        stderr = "This test has not notified test.py that it started running.";
+        stderr = "This test did not notify test.py that it started running.";
       }
     }
 
@@ -498,6 +333,23 @@
     return _negateOutcomeIfNegativeTest(_rawOutcome, testCase.isNegative);
   }
 
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  Expectation realResult(TestCase testCase) {
+    // Handle timeouts first.
+    if (_result.didTimeout) {
+      if (testCase.configuration.runtime == Runtime.ie11) {
+        // TODO(28955): See http://dartbug.com/28955
+        DebugLogger.warning("Timeout of ie11 on test ${testCase.displayName}");
+        return Expectation.ignore;
+      }
+      return Expectation.timeout;
+    }
+
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+    return _rawOutcome;
+  }
+
   void describe(Progress progress, OutputWriter output) {
     if (_jsonResult != null) {
       _describeEvents(progress, output);
@@ -646,6 +498,32 @@
     return Expectation.pass;
   }
 
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  Expectation realResult(TestCase testCase) {
+    // TODO(kustermann): If we run the analyzer not in batch mode, make sure
+    // that command.exitCodes matches 2 (errors), 1 (warnings), 0 (no warnings,
+    // no errors)
+
+    // Handle crashes and timeouts first
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+
+    // Get the errors/warnings from the analyzer
+    var errors = <String>[];
+    var warnings = <String>[];
+    parseAnalyzerOutput(errors, warnings);
+
+    if (errors.isNotEmpty) {
+      return Expectation.compileTimeError;
+    }
+    if (warnings.isNotEmpty) {
+      return Expectation.staticWarning;
+    }
+    return Expectation.pass;
+  }
+
   void parseAnalyzerOutput(List<String> outErrors, List<String> outWarnings) {
     // Parse a line delimited by the | character using \ as an escape character
     // like:  FOO|BAR|FOO\|BAR|FOO\\BAZ as 4 fields: FOO BAR FOO|BAR FOO\BAZ
@@ -700,6 +578,8 @@
       : super(command, exitCode, timedOut, stdout, stderr, time,
             compilationSkipped, 0);
 
+  bool get hasSyntaxError => exitCode == parseFailExitCode;
+
   Expectation result(TestCase testCase) {
     // Handle crashes and timeouts first.
     if (hasCrashed) return Expectation.crash;
@@ -723,6 +603,17 @@
     // No compile-time errors expected (including: no syntax errors).
     return exitCode == 0 ? Expectation.pass : Expectation.syntaxError;
   }
+
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  Expectation realResult(TestCase testCase) {
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+    if (hasSyntaxError) return Expectation.syntaxError;
+    if (exitCode != 0) return Expectation.syntaxError;
+    return Expectation.pass;
+  }
 }
 
 class VMCommandOutput extends CommandOutput with UnittestSuiteMessagesMixin {
@@ -772,6 +663,29 @@
     outcome = _negateOutcomeIfIncompleteAsyncTest(outcome, decodeUtf8(stdout));
     return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative);
   }
+
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  Expectation realResult(TestCase testCase) {
+    // Handle crashes and timeouts first.
+    if (exitCode == _dfeErrorExitCode) return Expectation.dartkCrash;
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+
+    // The actual outcome depends on the exitCode.
+    if (exitCode == _compileErrorExitCode) return Expectation.compileTimeError;
+    if (exitCode == _uncaughtExceptionExitCode) return Expectation.runtimeError;
+    if (exitCode != 0) {
+      // This is a general fail, in case we get an unknown nonzero exitcode.
+      return Expectation.fail;
+    }
+    var testOutput = decodeUtf8(stdout);
+    if (_isAsyncTest(testOutput) && !_isAsyncTestSuccessful(testOutput)) {
+      return Expectation.fail;
+    }
+    return Expectation.pass;
+  }
 }
 
 class CompilationCommandOutput extends CommandOutput {
@@ -788,6 +702,33 @@
       : super(command, exitCode, timedOut, stdout, stderr, time,
             compilationSkipped, 0);
 
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  /// This code can return Expectation.ignore - we may want to fix that.
+  Expectation realResult(TestCase testCase) {
+    // Handle general crash/timeout detection.
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) {
+      var isWindows = io.Platform.operatingSystem == 'windows';
+      var isBrowserTestCase =
+          testCase.commands.any((command) => command is BrowserTestCommand);
+      // TODO(26060) Dart2js batch mode hangs on Windows under heavy load.
+      return (isWindows && isBrowserTestCase)
+          ? Expectation.ignore
+          : Expectation.timeout;
+    }
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+
+    // Handle dart2js specific crash detection
+    if (exitCode == _crashExitCode ||
+        exitCode == VMCommandOutput._compileErrorExitCode ||
+        exitCode == VMCommandOutput._uncaughtExceptionExitCode) {
+      return Expectation.crash;
+    }
+    if (exitCode != 0) return Expectation.compileTimeError;
+    return Expectation.pass;
+  }
+
   Expectation result(TestCase testCase) {
     // Handle general crash/timeout detection.
     if (hasCrashed) return Expectation.crash;
@@ -862,6 +803,17 @@
         exitCode == 0 ? Expectation.pass : Expectation.compileTimeError;
     return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative);
   }
+
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  /// This code can return Expectation.ignore - we may want to fix that.
+  Expectation realResult(TestCase testCase) {
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+    if (exitCode != 0) return Expectation.compileTimeError;
+    return Expectation.pass;
+  }
 }
 
 class VMKernelCompilationCommandOutput extends CompilationCommandOutput {
@@ -924,6 +876,41 @@
     return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative);
   }
 
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  /// This code can return Expectation.ignore - we may want to fix that.
+  Expectation realResult(TestCase testCase) {
+    // TODO(kustermann): Currently the batch mode runner (which can be found
+    // in `test_runner.dart:BatchRunnerProcess`) does not really distinguish
+    // between different kinds of failures and will mark a failed
+    // compilation to just an exit code of "1".  So we treat all `exitCode ==
+    // 1`s as compile-time errors as well.
+    const int kBatchModeCompileTimeErrorExit = 1;
+
+    // Handle crashes and timeouts first.
+    if (hasCrashed) return Expectation.dartkCrash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+
+    // If the frontend had an uncaught exception, then we'll consider this a
+    // crash.
+    if (exitCode == VMCommandOutput._uncaughtExceptionExitCode) {
+      return Expectation.dartkCrash;
+    }
+
+    // Multitests are handled specially.
+
+    if (exitCode == VMCommandOutput._compileErrorExitCode ||
+        exitCode == kBatchModeCompileTimeErrorExit) {
+      return Expectation.compileTimeError;
+    }
+    if (exitCode != 0) {
+      // This is a general fail, in case we get an unknown nonzero exitcode.
+      return Expectation.fail;
+    }
+    return Expectation.pass;
+  }
+
   /// If the compiler was able to produce a Kernel IR file we want to run the
   /// result on the Dart VM. We therefore mark the [VMKernelCompilationCommand]
   /// as successful.
@@ -954,6 +941,23 @@
     outcome = _negateOutcomeIfIncompleteAsyncTest(outcome, decodeUtf8(stdout));
     return _negateOutcomeIfNegativeTest(outcome, testCase.isNegative);
   }
+
+  /// Cloned code from member result(), with changes.
+  /// Delete existing result() function and rename, when status files are gone.
+  /// This code can return Expectation.ignore - we may want to fix that.
+  Expectation realResult(TestCase testCase) {
+    // Handle crashes and timeouts first.
+    if (hasCrashed) return Expectation.crash;
+    if (hasTimedOut) return Expectation.timeout;
+    if (hasNonUtf8) return Expectation.nonUtf8Error;
+
+    if (exitCode != 0) return Expectation.runtimeError;
+    var output = decodeUtf8(stdout);
+    if (_isAsyncTest(output) && !_isAsyncTestSuccessful(output)) {
+      return Expectation.fail;
+    }
+    return Expectation.pass;
+  }
 }
 
 class ScriptCommandOutput extends CommandOutput {
@@ -967,6 +971,7 @@
   }
 
   Expectation result(TestCase testCase) => _result;
+  Expectation realResult(TestCase testCase) => _result;
 
   bool get canRunDependendCommands => _result == Expectation.pass;
 
@@ -976,13 +981,7 @@
 CommandOutput createCommandOutput(Command command, int exitCode, bool timedOut,
     List<int> stdout, List<int> stderr, Duration time, bool compilationSkipped,
     [int pid = 0]) {
-  if (command is ContentShellCommand) {
-    return new ContentShellCommandOutput(
-        command, exitCode, timedOut, stdout, stderr, time, compilationSkipped);
-  } else if (command is BrowserTestCommand) {
-    return new HtmlBrowserCommandOutput(
-        command, exitCode, timedOut, stdout, stderr, time, compilationSkipped);
-  } else if (command is AnalysisCommand) {
+  if (command is AnalysisCommand) {
     return new AnalysisCommandOutput(
         command, exitCode, timedOut, stdout, stderr, time, compilationSkipped);
   } else if (command is SpecParseCommand) {
diff --git a/tools/testing/dart/configuration.dart b/tools/testing/dart/configuration.dart
index 07f4bf5..bc2996a 100644
--- a/tools/testing/dart/configuration.dart
+++ b/tools/testing/dart/configuration.dart
@@ -180,9 +180,7 @@
       Compiler.fasta,
     ];
     return fastaCompilers.contains(compiler) ||
-        (compiler == Compiler.dart2js && !useDart2JSOldFrontend) ||
-        (compiler == Compiler.dart2analyzer &&
-            (builderTag == 'analyzer_use_fasta' || useAnalyzerCfe));
+        (compiler == Compiler.dart2js && !useDart2JSOldFrontend);
   }
 
   /// The base directory named for this configuration, like:
diff --git a/tools/testing/dart/html_test.dart b/tools/testing/dart/html_test.dart
deleted file mode 100644
index 5c80b01..0000000
--- a/tools/testing/dart/html_test.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// 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.
-
-/**
- * Classes and methods for running HTML tests.
- *
- * HTML tests are valid HTML files whose names end in _htmltest.html, and that
- * contain annotations specifying the scripts in the test and the
- * messages the test should post to its window, in order to pass.
- */
-library html_test;
-
-import "dart:convert";
-import "dart:io";
-
-import "path.dart";
-import "test_suite.dart";
-import "utils.dart";
-
-RegExp htmlAnnotation =
-    new RegExp("START_HTML_DART_TEST([\\s\\S]*?)END_HTML_DART_TEST");
-
-HtmlTestInformation getInformation(String filename) {
-  if (!filename.endsWith("_htmltest.html")) {
-    DebugLogger.warning("File $filename is not an HTML test."
-        " Should end in _htmltest.html.");
-    return null;
-  }
-
-  var contents = new File(filename).readAsStringSync();
-  var match = htmlAnnotation.firstMatch(contents);
-  if (match == null) return null;
-
-  var annotation = jsonDecode(match[1]);
-  if (annotation is! Map ||
-      annotation['expectedMessages'] is! List ||
-      annotation['scripts'] is! List) {
-    DebugLogger.warning("File $filename does not have expected annotation."
-        " Should have {'scripts':[...], 'expectedMessages':[...]}");
-    return null;
-  }
-
-  return new HtmlTestInformation(
-      new Path(filename),
-      new List<String>.from(annotation['expectedMessages'] as List),
-      new List<String>.from(annotation['scripts'] as List));
-}
-
-String getContents(HtmlTestInformation info, bool compileToJS) {
-  String contents = new File(info.filePath.toNativePath()).readAsStringSync();
-  contents = contents.replaceFirst(htmlAnnotation, '');
-  if (compileToJS) {
-    for (String script in info.scripts) {
-      if (dartExtension.hasMatch(script)) {
-        String jsScript = script.replaceFirst(dartExtension, '.js');
-        String tag = '<script src="$script" type="application/dart">';
-        String jsTag = '<script src="$jsScript">';
-        contents = contents.replaceAll(tag, jsTag);
-      }
-    }
-  }
-  return contents;
-}
-
-String makeFailingHtmlFile(String message) {
-  return '''
-<!DOCTYPE html>
-<html>
-<head>
-  <script>window.parent.dispatchEvent(new Event('detect_errors'));</script>
-  <title>Failing HTML test</title>
-</head><body>
-  <h1>Failing HTML test</h1>
-  $message
-  <script>
-    throw "HTML test failed: $message";
-  </script>
-</body>
-</html>
-''';
-}
diff --git a/tools/testing/dart/http_server.dart b/tools/testing/dart/http_server.dart
index 34032e7..ea8f3c3 100644
--- a/tools/testing/dart/http_server.dart
+++ b/tools/testing/dart/http_server.dart
@@ -10,8 +10,8 @@
 
 import 'configuration.dart';
 import 'repository.dart';
-import 'vendored_pkg/args/args.dart';
 import 'utils.dart';
+import 'vendored_pkg/args/args.dart';
 
 class DispatchingServer {
   HttpServer server;
@@ -156,8 +156,11 @@
   }
 
   String get network => _serverList[0].address.address;
+
   int get port => _serverList[0].port;
+
   int get crossOriginPort => _serverList[1].port;
+
   DispatchingServer get server => _server;
 
   /**
@@ -246,29 +249,33 @@
     var response = request.response;
     response.headers
         .set("Cache-Control", "max-age=$_CACHE_EXPIRATION_IN_SECONDS");
-    var path = _getFileUriFromRequestUri(request.uri);
-    if (path != null) {
-      var file = new File.fromUri(path);
-      var directory = new Directory.fromUri(path);
-      if (await file.exists()) {
-        _sendFileContent(request, response, allowedPort, file);
-      } else if (await directory.exists()) {
-        _sendDirectoryListing(
-            await _listDirectory(directory), request, response);
+    try {
+      var path = _getFileUriFromRequestUri(request.uri);
+      if (path != null) {
+        var file = new File.fromUri(path);
+        var directory = new Directory.fromUri(path);
+        if (await file.exists()) {
+          _sendFileContent(request, response, allowedPort, file);
+        } else if (await directory.exists()) {
+          _sendDirectoryListing(
+              await _listDirectory(directory), request, response);
+        } else {
+          _sendNotFound(request);
+        }
       } else {
-        _sendNotFound(request);
+        if (request.uri.path == '/') {
+          var entries = [
+            new _Entry('root_dart', 'root_dart/'),
+            new _Entry('root_build', 'root_build/'),
+            new _Entry('echo', 'echo')
+          ];
+          _sendDirectoryListing(entries, request, response);
+        } else {
+          _sendNotFound(request);
+        }
       }
-    } else {
-      if (request.uri.path == '/') {
-        var entries = [
-          new _Entry('root_dart', 'root_dart/'),
-          new _Entry('root_build', 'root_build/'),
-          new _Entry('echo', 'echo')
-        ];
-        _sendDirectoryListing(entries, request, response);
-      } else {
-        _sendNotFound(request);
-      }
+    } catch (e) {
+      _sendNotFound(request);
     }
   }
 
diff --git a/tools/testing/dart/options.dart b/tools/testing/dart/options.dart
index dca625a..ca6272d 100644
--- a/tools/testing/dart/options.dart
+++ b/tools/testing/dart/options.dart
@@ -113,18 +113,13 @@
 dart_precompiled: Run a precompiled snapshot on the VM without a JIT.
 d8:               Run JavaScript from the command line using v8.
 jsshell:          Run JavaScript from the command line using Firefox js-shell.
-drt:              Run Dart or JavaScript in the headless version of Chrome,
-                  Content shell.
 
-ContentShellOnAndroid: Run Dart or JavaScript in content shell on Android.
-
-ff:
+firefox:
 chrome:
 safari:
 ie9:
 ie10:
 ie11:
-opera:
 chromeOnAndroid:  Run JavaScript in the specified browser.
 
 self_check:       Pass each test or its compiled output to every file under
@@ -238,7 +233,6 @@
     new _Option.bool('time', 'Print timing information after running tests.'),
     new _Option('dart', 'Path to dart executable.', hide: true),
     new _Option('flutter', 'Path to flutter executable.', hide: true),
-    new _Option('drt', 'Path to content shell executable.', hide: true),
     new _Option('firefox', 'Path to firefox browser executable.', hide: true),
     new _Option('chrome', 'Path to chrome browser executable.', hide: true),
     new _Option('safari', 'Path to safari browser executable.', hide: true),
diff --git a/tools/testing/dart/runtime_configuration.dart b/tools/testing/dart/runtime_configuration.dart
index 5046ef3..c8c922785 100644
--- a/tools/testing/dart/runtime_configuration.dart
+++ b/tools/testing/dart/runtime_configuration.dart
@@ -200,25 +200,7 @@
   }
 }
 
-/// Runtime configuration for Content Shell.  We previously used a similar
-/// program named Dump Render Tree, hence the name.
-class DrtRuntimeConfiguration extends DartVmRuntimeConfiguration {
-  int timeoutMultiplier(
-      {Mode mode,
-      bool isChecked: false,
-      bool isReload: false,
-      Architecture arch}) {
-    return 4 // Allow additional time for browser testing to run.
-        // TODO(ahe): We might need to distinguish between DRT for running
-        // JavaScript and Dart code.  I'm not convinced the inherited timeout
-        // multiplier is relevant for JavaScript.
-        *
-        super.timeoutMultiplier(
-            mode: mode, isChecked: isChecked, isReload: isReload);
-  }
-}
-
-/// The standalone Dart VM binary, "dart" or "dart.exe".
+//// The standalone Dart VM binary, "dart" or "dart.exe".
 class StandaloneDartRuntimeConfiguration extends DartVmRuntimeConfiguration {
   List<Command> computeRuntimeCommands(
       TestSuite suite,
diff --git a/tools/testing/dart/test_runner.dart b/tools/testing/dart/test_runner.dart
index bde6205..0573c17 100644
--- a/tools/testing/dart/test_runner.dart
+++ b/tools/testing/dart/test_runner.dart
@@ -153,6 +153,24 @@
   }
 
   Expectation get result => lastCommandOutput.result(this);
+  Expectation get realResult => lastCommandOutput.realResult(this);
+  Expectation get realExpected {
+    if (isNegative || (isNegativeIfChecked && configuration.isChecked)) {
+      return Expectation.fail;
+    }
+    if (configuration.compiler == Compiler.specParser) {
+      if (hasSyntaxError) {
+        return Expectation.syntaxError;
+      }
+    } else if ((hasCompileError) ||
+        (hasCompileErrorIfChecked && configuration.isChecked)) {
+      return Expectation.compileTimeError;
+    }
+    if (configuration.runtime != Runtime.none && hasRuntimeError) {
+      return Expectation.runtimeError;
+    }
+    return Expectation.pass;
+  }
 
   CommandOutput get lastCommandOutput {
     if (commandOutputs.length == 0) {
@@ -1302,13 +1320,7 @@
       completer.complete(new BrowserCommandOutput(browserCommand, output));
     };
 
-    BrowserTest browserTest;
-    if (browserCommand is BrowserHtmlTestCommand) {
-      browserTest = new HtmlTest(browserCommand.url, callback, timeout,
-          browserCommand.expectedMessages);
-    } else {
-      browserTest = new BrowserTest(browserCommand.url, callback, timeout);
-    }
+    var browserTest = new BrowserTest(browserCommand.url, callback, timeout);
     _getBrowserTestRunner(browserCommand.configuration).then((testRunner) {
       testRunner.enqueueTest(browserTest);
     });
@@ -1360,14 +1372,6 @@
       }
     }
 
-    // As long as we use a legacy version of our custom content_shell (which
-    // became quite flaky after chrome-50 roll) we'll re-run tests on it.
-    // The plan is to use chrome's content_shell instead of our own.
-    // See http://dartbug.com/29655 .
-    if (command is ContentShellCommand) {
-      return true;
-    }
-
     if (io.Platform.operatingSystem == 'linux') {
       decodeOutput();
       // No matter which command we ran: If we get failures due to the
diff --git a/tools/testing/dart/test_suite.dart b/tools/testing/dart/test_suite.dart
index 81964b2..0d0cfa6 100644
--- a/tools/testing/dart/test_suite.dart
+++ b/tools/testing/dart/test_suite.dart
@@ -22,7 +22,6 @@
 import 'compiler_configuration.dart';
 import 'configuration.dart';
 import 'expectation_set.dart';
-import 'html_test.dart' as html_test;
 import 'http_server.dart';
 import 'multitest.dart';
 import 'path.dart';
@@ -33,7 +32,7 @@
 import 'utils.dart';
 
 RegExp multiHtmlTestGroupRegExp = new RegExp(r"\s*[^/]\s*group\('[^,']*");
-RegExp multiHtmlTestRegExp = new RegExp(r"useHtmlIndividualConfiguration()");
+RegExp multiHtmlTestRegExp = new RegExp(r"useHtmlIndividualConfiguration\(\)");
 // Require at least one non-space character before '//[/#]'
 RegExp multiTestRegExp = new RegExp(r"\S *"
     r"//[#/] \w+:(.*)");
@@ -533,23 +532,6 @@
   }
 }
 
-class HtmlTestInformation extends TestInformation {
-  List<String> expectedMessages;
-  List<String> scripts;
-
-  HtmlTestInformation(Path filePath, this.expectedMessages, this.scripts)
-      : super(
-            filePath,
-            filePath,
-            {'isMultitest': false, 'isMultiHtmlTest': false},
-            false,
-            false,
-            false,
-            false,
-            false,
-            false) {}
-}
-
 /**
  * A standard [TestSuite] implementation that searches for tests in a
  * directory, and creates [TestCase]s that compile and/or run them.
@@ -648,8 +630,6 @@
     return filename.endsWith("Test.dart");
   }
 
-  bool isHtmlTestFile(String filename) => filename.endsWith('_htmltest.html');
-
   List<String> additionalOptions(Path filePath) => [];
 
   Future forEachTest(
@@ -730,17 +710,6 @@
     }
     if (!match) return;
 
-    if (isHtmlTestFile(filename)) {
-      var info = html_test.getInformation(filename);
-      if (info == null) {
-        DebugLogger.error(
-            "HtmlTest $filename does not contain required annotations");
-        return;
-      }
-      cachedTests.add(info);
-      enqueueTestCaseFromTestInformation(info);
-      return;
-    }
     if (!isTestFile(filename)) return;
     Path filePath = new Path(filename);
 
@@ -764,11 +733,6 @@
         multitestName: info.optionsFromFile['isMultitest'] as bool
             ? info.multitestKey
             : "");
-    if (info is HtmlTestInformation) {
-      _enqueueHtmlTest(info, testName);
-      return;
-    }
-
     var optionsFromFile = info.optionsFromFile;
 
     // If this test is inside a package, we will check if there is a
@@ -1062,7 +1026,7 @@
     }
 
     // Construct the command(s) that compile all the inputs needed by the
-    // browser test. For running Dart in DRT, this will be noop commands.
+    // browser test.
     var commands = <Command>[];
 
     void addCompileCommand(String fileName, String toPath) {
@@ -1130,84 +1094,6 @@
     enqueueNewTestCase(fullName, commands, expectations, info);
   }
 
-  void _enqueueHtmlTest(HtmlTestInformation info, String testName) {
-    var compiler = configuration.compiler;
-    var runtime = configuration.runtime;
-
-    if (compiler == Compiler.dartdevc || compiler == Compiler.dartdevk) {
-      // TODO(rnystrom): Support this for dartdevc (#29919).
-      print("Ignoring $testName on ${compiler.name} since HTML tests are not "
-          "implemented for that compiler yet.");
-      return;
-    }
-
-    // HTML tests work only with the browser controller.
-    if (!runtime.isBrowser) return;
-
-    var compileToJS = compiler == Compiler.dart2js;
-
-    var filePath = info.filePath;
-    var tempDir = createOutputDirectory(filePath);
-    var tempUri = new Uri.file('$tempDir/');
-    var contents = html_test.getContents(info, compileToJS);
-    var commands = <Command>[];
-
-    void fail(String message) {
-      var msg = "$message: ${info.filePath}";
-      DebugLogger.warning(msg);
-      contents = html_test.makeFailingHtmlFile(msg);
-    }
-
-    if (info.scripts.length > 0) {
-      var testUri = new Uri.file(filePath.toNativePath());
-      for (var scriptPath in info.scripts) {
-        if (!scriptPath.endsWith('.dart') && !scriptPath.endsWith('.js')) {
-          fail('HTML test scripts must be dart or javascript: $scriptPath');
-          break;
-        }
-
-        var uri = Uri.parse(scriptPath);
-        if (uri.isAbsolute) {
-          fail('HTML test scripts must have relative paths: $scriptPath');
-          break;
-        }
-
-        if (uri.pathSegments.length > 1) {
-          fail('HTML test scripts must be in test directory: $scriptPath');
-          break;
-        }
-
-        var script = testUri.resolveUri(uri);
-        var copiedScript = tempUri.resolveUri(uri);
-        if (compiler == Compiler.none || scriptPath.endsWith('.js')) {
-          new File.fromUri(copiedScript)
-              .writeAsStringSync(new File.fromUri(script).readAsStringSync());
-        } else {
-          var destination = copiedScript.toFilePath();
-          if (compileToJS) {
-            destination = destination.replaceFirst(dartExtension, '.js');
-          }
-
-          assert(compiler == Compiler.dart2js);
-
-          commands.add(_dart2jsCompileCommand(
-              script.toFilePath(), destination, tempDir, info.optionsFromFile));
-        }
-      }
-    }
-
-    var htmlFile = tempUri.resolve(filePath.filename);
-    new File.fromUri(htmlFile).writeAsStringSync(contents);
-
-    var htmlPath = _createUrlPathFromFile(new Path(htmlFile.toFilePath()));
-    var fullHtmlPath = _uriForBrowserTest(htmlPath);
-    commands.add(Command.browserHtmlTest(
-        fullHtmlPath, configuration, info.expectedMessages,
-        retry: !isNegative(info)));
-    enqueueNewTestCase(
-        testName, commands, testExpectations.expectations(testName), info);
-  }
-
   /// Creates a [Command] to compile a single .dart file using dart2js.
   Command _dart2jsCompileCommand(String inputFile, String outputFile,
       String dir, Map<String, dynamic> optionsFromFile) {
@@ -1245,17 +1131,6 @@
         alwaysCompile: !useSdk);
   }
 
-  String get contentShellFilename {
-    if (configuration.drtPath != null) return configuration.drtPath;
-
-    if (Platform.operatingSystem == 'macos') {
-      final path = dartDir.append(
-          '/client/tests/drt/Content Shell.app/Contents/MacOS/Content Shell');
-      return path.toNativePath();
-    }
-    return dartDir.append('client/tests/drt/content_shell').toNativePath();
-  }
-
   List<String> commonArgumentsFromFile(
       Path filePath, Map<String, dynamic> optionsFromFile) {
     var args = configuration.standardOptions.toList();
@@ -1345,41 +1220,17 @@
    *
    *     // OtherScripts=file1.dart file2.dart
    *
-   *   - You can indicate whether a test is treated as a web-only test by
-   *   using an explicit import to a part of the dart:html library:
+   *   - Most tests are not web tests, but can (and will be) wrapped within
+   *   an HTML file and another script file to test them also on browser
+   *   environments (e.g. language and corelib tests are run this way).
+   *   We deduce that if a file with the same name as the test, but ending in
+   *   .html instead of .dart exists, the test was intended to be a web test
+   *   and no wrapping is necessary.
    *
-   *     import 'dart:html';
-   *     import 'dart:web_audio';
-   *     import 'dart:indexed_db';
-   *     import 'dart:svg';
-   *     import 'dart:web_sql';
-   *
-   *   Most tests are not web tests, but can (and will be) wrapped within
-   *   another script file to test them also on browser environments (e.g.
-   *   language and corelib tests are run this way). We deduce that if this
-   *   import is specified, the test was intended to be a web test and no
-   *   wrapping is necessary.
-   *
-   *   - You can convert DRT web-tests into layout-web-tests by specifying a
-   *   test expectation file. An expectation file is located in the same
-   *   location as the test, it has the same file name, except for the extension
-   *   (which can be either .txt or .png).
-   *
-   *   When there are no expectation files, 'test.dart' assumes tests fail if
-   *   the process return a non-zero exit code (in the case of web tests, we
+   *   - 'test.dart' assumes tests fail if
+   *   the process returns a non-zero exit code (in the case of web tests, we
    *   check for PASS/FAIL indications in the test output).
    *
-   *   When there is an expectation file, tests are run differently: the test
-   *   code is run to the end of the event loop and 'test.dart' takes a snapshot
-   *   of what is rendered in the page at that moment. This snapshot is
-   *   represented either in text form, if the expectation ends in .txt, or as
-   *   an image, if the expectation ends in .png. 'test.dart' will compare the
-   *   snapshot to the expectation file. When tests fail, 'test.dart' saves the
-   *   new snapshot into a file so it can be visualized or copied over.
-   *   Expectations can be recorded for the first time by creating an empty file
-   *   with the right name (touch test_name_test.png), running the test, and
-   *   executing the copy command printed by the test script.
-   *
    * This method is static as the map is cached and shared amongst
    * configurations, so it may not use [configuration].
    */
@@ -1643,7 +1494,7 @@
   }
 }
 
-/// Used for testing packages in on off settings, i.e., we pass in the actual
+/// Used for testing packages in one-off settings, i.e., we pass in the actual
 /// directory that we want to test.
 class PKGTestSuite extends StandardTestSuite {
   PKGTestSuite(TestConfiguration configuration, Path directoryPath)
diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn
index e41c7f6..fe73122 100644
--- a/utils/dartanalyzer/BUILD.gn
+++ b/utils/dartanalyzer/BUILD.gn
@@ -8,7 +8,6 @@
 group("dartanalyzer") {
   deps = [
     ":generate_dartanalyzer_snapshot",
-    ":generate_summary_spec",
     ":generate_summary_strong",
   ]
 }
@@ -54,31 +53,17 @@
                             ],
                             "list lines")
 
-template("generate_summary") {
-  assert(defined(invoker.type), "Must specify the summary type")
-  type = invoker.type
-  assert(type == "spec" || type == "strong")
-
-  prebuilt_dart_action(target_name) {
-    script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
-    packages = "../../.packages"
-    inputs = sdk_lib_files + analyzer_files
-    output = "$root_gen_dir/$type.sum"
-    outputs = [
-      output,
-    ]
-    args = [
-      "build-$type",
-      rebase_path(output),
-      rebase_path("../../sdk"),
-    ]
-  }
-}
-
-generate_summary("generate_summary_spec") {
-  type = "spec"
-}
-
-generate_summary("generate_summary_strong") {
-  type = "strong"
+prebuilt_dart_action("generate_summary_strong") {
+  script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
+  packages = "../../.packages"
+  inputs = sdk_lib_files + analyzer_files
+  output = "$root_gen_dir/strong.sum"
+  outputs = [
+    output,
+  ]
+  args = [
+    "build-strong",
+    rebase_path(output),
+    rebase_path("../../sdk"),
+  ]
 }
